The update did not break goog.object
, it only broke "global" access to it. This means that any namespace using goog.object/get
directly without a proper (:require [goog.object :as ...])
in its ns
form will now break. You can no longer rely on goog
namespaces being globally available. Technically this was never valid but could sort of be relied on since cljs.core
requires goog.object
and such ensured that it is always loaded.
So to fix this properly all you need is to add a goog.object
require.
However there is a more subtle issue that is related to macros. Some libraries may have macros that emit forms directly accessing goog.object/get
or so. This will now also break even if the namespace using that macro is doing everything properly. This is happening because the namespace using the macro likely doesn't have a goog.object
require of its own (and shouldn't need to have it).
Unfortunately due to that changes the macros need to be rewritten to either use their own helper functions which then can use goog.object
properly or switching to using unchecked-get
and unchecked-set
which are basically equivalent to goog.object/get
and goo.object/set
.
As per the announcement a compiler option was added to make the transition a little more smooth.
So if the problem is in your own code you just need to add the ns require. If its in a library it needs to be fixed there. Or you may use the compiler option :global-goog-object&array
until it is fixed.