Fork me on GitHub
#shadow-cljs
<
2017-10-16
>
mhuebert12:10:23

Getting some errors when with doing multiple :release builds at the same time. Does not happen if I release builds individually: https://gist.github.com/mhuebert/66fe536fa2f6c96b5e09d33deb6b8617

mhuebert14:10:17

attempting to use google’s material-components-web, getting errors like:

Oct 16, 2017 4:51:23 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: node_modules/@material/animation/index.js:143: ERROR - Parse error. '}' expected
export {transformStyleProperties, getCorrectEventName, getCorrectPropertyName};
^

Oct 16, 2017 4:51:23 PM com.google.javascript.jscomp.LoggerErrorManager println
SEVERE: node_modules/@material/base/component.js:19: ERROR - Parse error. '}' expected
import MDCFoundation from './foundation';
^

thheller14:10:57

@mhuebert the release errors: is it possible you are building the same build twice? shadow-cljs release browser browser?

thheller14:10:24

I only saw this error before when 2 compiles where trying to use the same cache

thheller15:10:01

(:require ["@material/animation"]) works fine for me?

thheller15:10:53

oh no wait, got the same error

mhuebert15:10:50

@thheller there are some overlapping namespaces, but different builds. it’s the :live, :bootstrap and :trusted builds here: https://github.com/mhuebert/maria/blob/master/editor/shadow-cljs.edn#L36

thheller15:10:57

ah doh, yeah @material is ES6. I haven’t finished that work yet

thheller15:10:56

I still need all the checkouts to compile Maria?

mhuebert15:10:44

shouldn’t need the checkouts, they are just there to facilitate reloading during dev

mhuebert15:10:16

however i was working on updating deps earlier today and it is possible there are omissions. i think i do indeed have too many independent projects

thheller15:10:57

Could not find artifact cljs-live:cljs-live:jar:0.2.9-SNAPSHOT in clojars ()

thheller15:10:13

can I drop down to a non-SNAPSHOT version?

mhuebert15:10:49

deploying that now

thheller15:10:45

hmm can’t be found

mhuebert15:10:50

or do you mean having a snapshot version is an issue

mhuebert15:10:05

oh to be able to have git branch dependencies

thheller15:10:36

I can just add the checkouts

mhuebert15:10:38

i’ll try a 0.2.9 release

mhuebert15:10:46

just released 0.2.9

thheller15:10:57

there is a bunch more -SNAPSHOT versions in there

mhuebert15:10:06

do those in general cause problems?

thheller15:10:22

weird, ok those work it seems

thheller15:10:38

The required namespace "pack.prosemirror-markdown" is not available, it was required by "re_view_prosemirror/markdown.cljs".

thheller15:10:56

shadow-cljs release live bootstrap trusted

thheller15:10:45

ok I think I identified the issue

thheller15:10:58

it works if you run shadow-cljs server first

thheller15:10:24

but that should not be a requirement, just an unhappy race condition. threads again. 😉

mhuebert15:10:57

is there not an error if you run shadow-cljs server separately, and then shadow-cljs watch?

thheller15:10:55

the server is in a bit of a weird state at the moment. there are several command that act as the server themselves if none is running

thheller15:10:02

otherwise they all connect to the server

thheller15:10:31

generally I have one server or clj-repl instance running

thheller15:10:55

and all other commands run through it (automatically)

mhuebert15:10:40

ok, now that seems to work

mhuebert15:10:21

is doc/shadow-repl.md intended to explain how to set up a repl? it seems to go in a lot of paths

mhuebert15:10:34

i wasn’t sure the most straightforward way to connect a repl with cursive

mhuebert15:10:54

just configuring a remote nrepl server didn’t seem to work

thheller15:10:59

in cursive just connect to “Remote NREPL` at localhost:7888

thheller15:10:11

or whichever port you have entered in shadow-cljs.edn

thheller15:10:26

:nrepl {:port 7888}

thheller15:10:33

no need for further setup

thheller15:10:13

assuming that one server instance is running, which can either be server or watch

thheller15:10:26

doc/shadow-repl.md is not about setup no.

thheller15:10:26

you maybe didn’t try this before you you can drive all of shadow-cljs via the REPL

thheller15:10:24

shadow-cljs clj-repl
[1:0]~shadow.user=> (shadow/release :live)
[:live] Compiling ...

thheller15:10:31

its the same as shadow-cljs release live

thheller15:10:41

see (help) at the repl

thheller15:10:58

geez thats outdated .. but still

thheller15:10:26

shadow-cljs clj-repl is basically the same as lein repl

thheller15:10:44

you get a REPL prompt but can connect to it remotely as well

thheller15:10:28

to get a CLJS repl for your build

thheller15:10:37

shadow-cljs cljs-repl live (while watch is running)

thheller15:10:13

in cursive (shadow/repl :live)

thheller15:10:43

looks like you are connected? try to eval something

thheller15:10:47

(help) or so

thheller15:10:02

I think its just missing the prompt, connect worked

mhuebert15:10:57

CompilerException java.lang.RuntimeException: Unable to resolve symbol: help in this context, compiling:(null:1:1)

thheller15:10:19

(shadow.cljs.devtools.api/help)?

thheller15:10:28

I don’t use nrepl much these days

mhuebert15:10:30

ah, the wiki.

mhuebert15:10:26

ok, now i understand. ’tis working.

mhuebert15:10:35

(shadow.cljs.devtools.api/repl :live)

thheller15:10:20

this switches the current REPL to CLJS, so every eval after that should happen in CLJS

thheller15:10:40

the UI does not properly detect this so you might need to switch manually in Cursive clj/cljs

mhuebert15:10:05

the dev command looks handy

mhuebert15:10:59

so for es6 - i should keep doing rollup/webpack for now?

thheller15:10:38

I did not expect people to put ES6 on npm

thheller15:10:57

I thought they all re-packaged it first

thheller15:10:22

I have a few ideas how to handle that but didn’t implement them yet

mhuebert15:10:36

maybe this particular package is better handled directly with Google Closure as it is a google thing

mhuebert15:10:10

IIRC in shadow there is an option for that, it would then process all deps through closure?

thheller15:10:13

the issue with that is that the closure thing is all or nothing kind of deal

thheller15:10:29

but not all npm deps survive closure

thheller15:10:42

:js-options {:js-provider :closure} but that basically never works 😛

thheller15:10:14

I think material was one I tested which worked though

mhuebert15:10:04

i think anything made by google is fully annotated

mhuebert15:10:10

firebase probably is too

thheller15:10:49

yeah material-components-web works

mhuebert15:10:06

could closure be a :resolve option?

thheller15:10:27

not really as it rewrites the code quite heavily

thheller15:10:42

it might work for a few cases

thheller15:10:16

really depends on if you rewrite the dependencies as well or not

thheller15:10:33

eg. if material-components-web doesn’t depend on anything you’ll be fine

thheller15:10:41

but if it depends on something and rewrites that

thheller15:10:50

but something else is not rewritten but also attempts to use that dep

thheller15:10:33

the plan currently is to use babel to transform ES6 code

thheller15:10:40

since that is what most other libs on npm use

thheller15:10:01

ie. if you use material-ui you get ES3 which was transformed by babel and includes some of the babel-runtime

thheller15:10:59

if I use closure to rewrite that you have the babel runtime from some package and the closure runtime for others

thheller15:10:03

thats not so great

thheller15:10:21

babel seems to be the most common ground and is actually fairly good

thheller15:10:34

since I also get jsx support for free

thheller15:10:08

I already did a few basic tests just didn’t get to implement it yet

mhuebert15:10:18

in the short term, is there a way for me to expose my rollup’d pack of material-components-web in a way that would let me require things like how cljsjs/global-exports work?

thheller15:10:55

:js-options {:resolve {"material-components-web" {:target :global :global "MDC"}}}

thheller15:10:07

should work?

thheller15:10:31

:file might also work if they still ship a bundle?

thheller15:10:38

{"material-components-web" {:target :npm :require "material-components-web/dist/material-components-web.js"}}

thheller15:10:46

there is also a file for :require-min

mhuebert15:10:06

:js-options do not flow through upstream though, do they? so then whatever consumes re-view-material also has to.. i’m not sure, copy over a JS file somewhere?

mhuebert15:10:15

i would rather not include their whole bundle

mhuebert15:10:19

as i don’t use a lot of it

thheller15:10:45

hmm yeah its tricky

thheller15:10:28

I really don’t want to support cljsjs style packages because the chance of conflicts is so damn high

thheller15:10:37

well its only an issue until I sort out the ES6 issue … I will do that tomorrow 😉

mhuebert16:10:25

also - minor thing - getting the server to emit the URL would avoid some confusion others had trying to get maria running for dev

thheller16:10:19

the http url? yes I forgot about that

thheller16:10:37

HTTP server for build :browser available at: 
HTTP server for build :bootstrap-host available at: 

thheller16:10:50

suggestions? or good enough?

mhuebert17:10:04

I think that’s great

thheller17:10:45

sometimes you really have to wonder what google is doing

thheller17:10:49

const el = windowObj['document']['createElement']('div');

thheller17:10:55

don’t they know how to use externs? 😛

thheller17:10:31

finished the ES6 support 😉

thheller17:10:33

it might not work at all [email protected]

thheller17:10:06

its only 50% of the implementation I had planned initially but this should work, tested with "@material/animation" and it compiles

thheller17:10:37

oh doh, require('@material/checkbox/dist/mdc.checkbox'); they do ship commonjs as well

thheller17:10:43

well .. screw that 😉

thheller17:10:31

how do you use this stuff from JS anyways?

thheller17:10:19

haha doh, stay away from 19

thheller17:10:24

running everything through babel was not the intent

mhuebert17:10:51

material-components-web is designed primarily as a low-level framework which requires ‘adapters’ to actually use, so i have a lot of ugly code which requires these namespaces and then maps them to react components appropriately

thheller17:10:50

why not use material-ui instead then?

thheller17:10:13

or there was another react version for material I think

thheller17:10:33

hmm yeah as expected the babel transform is gonna be dog slow the way I did it now

mhuebert17:10:43

last i checked, which was not recently, material-ui did not use the latest version of material-components-web and was also very very heavy

mhuebert17:10:06

looking now, yes, material-ui is also not made by google

mhuebert17:10:25

whereas material-components-web is actually maintained/developed by google and intended to be a production quality reference implementation

thheller17:10:09

as expected shelling out to babel per file is way too slow

thheller17:10:19

gonna get that fixed next

thheller17:10:29

but it should works as a test

mhuebert17:10:46

material-ui also did this inline-styles thing which was simultaneously slow and difficult to integrate with a project. however again i haven’t looked at it in months 🙂.

thheller17:10:47

I haven’t used either myself. just thought it was weird to use a web-components lib with react

thheller17:10:53

but if it works why not

thheller17:10:51

I added a test and it seems to work, just missing the styles

thheller17:10:37

(if (contains? #{"es3 es5"} js-language) spot the bug 😉

thheller17:10:10

it actually seems to work way better than expected, the babel transform that is

thheller17:10:18

just need to fix the performance problem

thheller17:10:51

let me know if it works … afk for a bit

mhuebert18:10:54

oh it’s not web-components per se

mhuebert18:10:24

they did a bunch of the hard css/js stuff, and then you have to write an ‘adapter’ that maps it to whatever, can be web components or can be react

mhuebert18:10:29

when i wrote re-view-material, material-components-web was at version 0.14 vs today 0.22, i don’t think they did the cjs dist back then

mhuebert18:10:28

2.0.20 worked 🙂

mhuebert18:10:34

slow but worked

mhuebert18:10:55

1st build 57s, quite and built again, 38s

mhuebert18:10:28

advanced compilation 68sec

mhuebert18:10:12

got to do some externs debugging

thheller18:10:33

really? damn shouldn’t need externs

thheller18:10:57

38sec? what are you building?

thheller18:10:15

68sec advanced is pretty darn slow

thheller18:10:39

where do you need externs?

thheller18:10:59

I think I found one thing I need to add to the externs generator

thheller18:10:49

yeah … dammit …

thheller18:10:10

_createClass(MDCCheckboxFoundation, [{
    key: 'init',
    value: function init() {
      this.adapter_.addClass(_constants.cssClasses.UPGRADED);
      this.adapter_.registerChangeHandler(this.changeHandler_);
      this.installPropertyChangeHooks_();
    }
  }, {
    key: 'destroy',
    value: function destroy() {
      this.adapter_.deregisterChangeHandler(this.changeHandler_);
      this.uninstallPropertyChangeHooks_();
    }

    /** @return {boolean} */

  }

thheller18:10:21

babel rewrites class MDCCheckboxFoundation this way

thheller18:10:47

it doesn’t detect that key: 'init' is the property we need

thheller18:10:56

need to think about how to fix that

thheller19:10:52

I really did underestimate how much dynamic stuff might generate properties

thheller19:10:50

maybe I should also extern all calls done in the js? not just the assigns

mhuebert19:10:25

may have spoken too soon. this is really a tangle of stuff that has JS deps and I have to sort some out before i know if there are any real externs issues

mhuebert19:10:54

i don’t think 100% should be the goal, we can’t get around the dynamic stuff

mhuebert19:10:21

i’ve thought about that before, if one could detect any access of globals that aren’t part of your build

mhuebert19:10:29

make that stuff string requires

mhuebert19:10:31

don’t know

thheller19:10:42

yeah starting to believe its better to properly use :infer-externs and rely on that instead

thheller19:10:51

the dynamic generation is ok but just doesn’t work in many cases

thheller19:10:28

what kind of errors do you see?

thheller19:10:00

all externs issues should be pretty easy to track down using shadow-cljs release build --pseudo-names

mhuebert19:10:55

so i am building the http://re-view.io website, which contains examples of all the re-view-material components as well as re-view-prosemirror. i had forgotten that re-view-prosemirror also has a deps.clj foreign-lib that i have to include separately as a script tag

thheller19:10:29

foreign-lib because its not on npm or custom build?

mhuebert19:10:04

custom. but this is just another lib that was written in the old style (webpack of a .js file) before we could require stuff from node_modules

mhuebert19:10:33

so my goal now is rewriting all of this stuff to not require these old bundles.

mhuebert19:10:59

yeah, there is that and also one pmMarkdown

mhuebert19:10:03

which depends on it

mhuebert19:10:09

going to get rid of those now

thheller19:10:28

yeah thats the reason why foreign-libs is such a bad idea

thheller19:10:22

well not super bad since prosemirror doesn’t have many dependencies but still

mhuebert19:10:31

is support for checkouts something that will be hard to add?

thheller19:10:53

just add the :source-paths, should be enough

ivanpierre19:10:34

Is it possible to have different dependencies in different build. In fact I create two application : node + js. And some sources are common to both.

thheller19:10:48

I see you already did externs annotations

ivanpierre19:10:05

Electron, in fact...

thheller19:10:33

@ivanpierre put it all in one source-path, the build config will determine what goes into a build

thheller19:10:34

I put together an example for electron a while ago

ivanpierre19:10:38

Yes, That's what I do. But I had some conflicts with reagent and node.

thheller19:10:09

you might need to use the latest alpha release of reagent

thheller19:10:49

what problems did you see?

ivanpierre19:10:37

Well, perhaps a bug from mine... Il grab a little more... If it doesn't work I'll give you precise behaviour.... 😉

thheller19:10:42

you might run into trouble if you include react-dom on the node side of things

thheller19:10:23

would need to split that into a separate namespace that is only included for the web stuff

mhuebert19:10:00

@thheller yeah I did a lot of those actually. but they were all based on the idea that my module wrote all of this stuff to a couple global objects, pm and pmMarkdown

thheller19:10:57

in my version of :infer-externs you currently only need to do ^js thing

mhuebert19:10:03

@thheller i just got

failed to start service
{:id :dev-http}
ExceptionInfo: failed to start service
	clojure.core/ex-info (core.clj:4725)
	clojure.core/ex-info (core.clj:4725)
	shadow.runtime.services/start-many/fn--194 (services.clj:135)
...
Caused by:
BindException: Address already in use
from trying to run watch after an independent server

mhuebert19:10:33

@thheller that sounds much simpler. so just ^js some-symbol-from-javascript-land

thheller19:10:45

yes, skip the “typing”

mhuebert19:10:55

if it works, i like this much better

thheller19:10:53

well it would still be better to use the fully qualified thing but who wants to type annotate other people’s code

thheller19:10:17

doh … will fix http

thheller19:10:20

no that should not be an issue

thheller19:10:33

what did shadow-cljs watch thing say? connected to server?

thheller19:10:42

or did it start a new one?

thheller19:10:03

second line should say connect

thheller19:10:12

shadow-cljs compile browser
shadow-cljs - config: /Users/zilence/code/shadow-cljs/shadow-cljs.edn version: 2.0.18
shadow-cljs - connected to server

thheller19:10:01

if it didn’t connect the target/shadow-cljs files may been deleted after starting the server

thheller19:10:07

lein tends to do that

mhuebert19:10:05

earlier today, it worked in another project. i have :lein true in this one

mhuebert19:10:23

somehow now it is connecting

mhuebert19:10:29

am not sure what changed.

thheller19:10:51

regardless, starting the http server should not be a critical error

thheller19:10:55

I’ll just print a warning

mhuebert19:10:36

if website requires prosemirror, which has {:npm-deps {...}} in deps.cljs, should shadow-cljs npm-deps inside the website project have the effect of installing those npm modules?

thheller19:10:45

hehe … maybe? it should yes

thheller19:10:58

can do a quick test

thheller19:10:29

I didn’t find any package that had deps.cljs when testing so its basically untested

thheller19:10:39

I can test with re-view-prosemirror now that I know one

mhuebert19:10:06

well, re-view-prosemirror may not be the best example at the moment as it is in transition

thheller19:10:44

tested and it worked yes

ivanpierre19:10:46

Ok : /Users/ivan/.m2/repository/cljsjs/create-react-class/15.6.0-1/create-react-class-15.6.0-1.jar deps.cljs refers to file not in jar: cljsjs/create-react-class/production/create-react-class.min.inc.js {:tag :shadow.build.classpath/deps-cljs, :source-path #object[java.io.File 0x5da7cee2 "/Users/ivan/.m2/repository/cljsjs/create-react-class/15.6.0-1/create-react-class-15.6.0-1.jar"], :name "cljsjs/create-react-class/production/create-react-class.min.inc.js"} ExceptionInfo: /Users/ivan/.m2/repository/cljsjs/create-react-class/15.6.0-1/create-react-class-15.6.0-1.jar deps.cljs refers to file not in jar: cljsjs/create-react-class/production/create-react-class.min.inc.js problem with create-react-class. it search the jar in production and in .m2 there is only common and developement... But it's the last release. I'll go and see.

thheller19:10:26

ah damn thats still not fixed

thheller19:10:38

[reagent "0.8.0-alpha1" :exclusions [cljsjs/create-react-class]]

thheller20:10:11

I now realize that I’m far too strict in validating the deps.cljs files … 🙂

thheller20:10:35

a warning should be enough

thheller20:10:45

@mhuebert one thing missing for the npm-deps things is support for yarn, its currently just calling npm install --save thing@version

mhuebert20:10:14

is there a way to add an annotation for a function call? eg. (.serialize this) where serialize shouldn’t be rewritten

mhuebert20:10:38

or… does (.serialize ^js this) have that effect

thheller20:10:58

yes, well it should. did not test.

thheller20:10:40

confirmed, works

thheller20:10:34

@mhuebert btw I cannot guarantee that CLJS will accept the plain ^js tag, so that might not actually work with anything but shadow-cljs

thheller20:10:58

plain ^js has always been allowed, just not in combination with :infer-externs I think

mhuebert20:10:03

weird Closure error only in :advanced -

-> Closure - Optimizing ...
IllegalStateException:  [GETPROP 14 [length: 31] [source_file: re_view_prosemirror.core.js], EXPR_RESULT 14 [length: 66] [source_file: re_view_prosemirror.core.js]]
	com.google.common.base.Preconditions.checkState (Preconditions.java:721)
	com.google.javascript.rhino.Node.replaceChild (Node.java:852)
	com.google.javascript.jscomp.AggressiveInlineAliases.inlineGlobalAliasIfPossible (AggressiveInlineAliases.java:309)
	com.google.javascript.jscomp.AggressiveInlineAliases.inlineAliases (AggressiveInlineAliases.java:162)
	com.google.javascript.jscomp.AggressiveInlineAliases.process (AggressiveInlineAliases.java:111)
	com.google.javascript.jscomp.PhaseOptimizer$NamedPass.process (PhaseOptimizer.java:304)
	com.google.javascript.jscomp.PhaseOptimizer.process (PhaseOptimizer.java:230)
	com.google.javascript.jscomp.Compiler.performOptimizations (Compiler.java:2457)
	com.google.javascript.jscomp.Compiler$3.call (Compiler.java:834)
	com.google.javascript.jscomp.Compiler$3.call (Compiler.java:830)
	com.google.javascript.jscomp.CompilerExecutor.runInCompilerThread (CompilerExecutor.java:128)
	com.google.javascript.jscomp.Compiler.runInCompilerThread (Compiler.java:862)
	com.google.javascript.jscomp.Compiler.stage2Passes (Compiler.java:829)
	com.google.javascript.jscomp.Compiler.compileModules (Compiler.java:778)
	sun.reflect.NativeMethodAccessorImpl.invoke0 (NativeMethodAccessorImpl.java:-2)
	sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62)
	sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:43)
	java.lang.reflect.Method.invoke (Method.java:497)
	clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:93)
	clojure.lang.Reflector.invokeInstanceMethod (Reflector.java:28)
	shadow.build.closure/compile-js-modules (closure.clj:874)
	shadow.build.closure/compile-js-modules (closure.clj:865)
	shadow.build.closure/optimize/fn--24464 (closure.clj:1138)
	shadow.build.closure/optimize (closure.clj:1124)
	shadow.build.closure/optimize (closure.clj:1115)
	shadow.build/optimize (build.clj:288)
	shadow.build/optimize (build.clj:280)
	shadow.cljs.devtools.api/release* (api.clj:197)
	shadow.cljs.devtools.api/release* (api.clj:183)
	shadow.cljs.devtools.cli/do-build-command (cli.clj:29)
	shadow.cljs.devtools.cli/do-build-command (cli.clj:25)
	shadow.cljs.devtools.cli/do-build-commands/fn--30494/fn--30495 (cli.clj:66)
	clojure.core/binding-conveyor-fn/fn--5297 (core.clj:2027)
	java.util.concurrent.FutureTask.run (FutureTask.java:266)
	java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142)
	java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:617)
	java.lang.Thread.run (Thread.java:745)

mhuebert20:10:13

(oops i thought that would collapse into a snippet)

thheller20:10:46

what the heck

thheller20:10:05

AggressiveInlineAliases good name

thheller20:10:22

nothing immediately obvious, checking

thheller20:10:19

uhm there is no shadow-cljs.edn?

mhuebert20:10:36

i’m only using it from re-view/website

mhuebert20:10:41

can add one

thheller20:10:40

thats empty?

thheller20:10:25

how come you def everything? (def EditorState prosemirror-state/EditorState)?

thheller20:10:34

could also do :refer in ns instead

mhuebert20:10:47

just to not break other libs that were referencing things the old way

mhuebert20:10:10

previously I did all the messy JS object reading here, so that my other code wouldn’t have to do all kinds of (.-someProp js/pmMarkdown) junk

thheller20:10:13

ah ok, shouldn’t be an issue. just checking

mhuebert20:10:57

i will be able to rewrite a lot of stuff in a nicer now that i can require directly from node_modules

thheller20:10:06

yeah some of the interop code before was really messy

mhuebert20:10:33

be back in a bit

mhuebert20:10:42

i can clean this up into an independently compiling thing if you want first

mhuebert20:10:47

hard to debug as it is now

thheller21:10:10

just need something I can call to reproduce

thheller21:10:26

the config in website should be enough but its empty

thheller21:10:34

re_view_prosemirror.core.keymap = re_view_prosemirror.core.keymap;
re_view_prosemirror.core.commands = re_view_prosemirror.core.commands;
re_view_prosemirror.core.model = re_view_prosemirror.core.model;
re_view_prosemirror.core.history = re_view_prosemirror.core.history;

thheller21:10:36

this is odd

thheller21:10:55

(def keymap keymap)
(def commands commands)
(def model model)
(def history history)

thheller21:10:22

yeah, those are causing the issue

thheller21:10:36

resolves to itself

thheller21:10:43

probably need to rename the :as in the ns if you want to keep those def

mhuebert21:10:40

seems strange that that would cause an error

mhuebert21:10:49

(let [x x])

mhuebert21:10:47

anyway i can get rid of those and change the references to use the node_modules stuff directly.

mhuebert22:10:20

weird. somehow it is not picking up componentDidUpdate

mhuebert22:10:22

$map__37705__$1_p__37704$$.$componentDidUpdate$ is not a function

mhuebert22:10:36

despite having react externs in one of the dependencies (re-view-hiccup)

mhuebert22:10:50

and thought that componentDidUpdate would have been in the generated externs, but didn’t see it there either

thheller23:10:01

weird indeed, ShadowJS.prototype.componentDidUpdate it is in my test file for sure