thheller / shadow-cljs

ClojureScript compilation made easy
https://github.com/thheller/shadow-cljs
Eclipse Public License 1.0
2.25k stars 178 forks source link

incoherent escaping of namespace containing the name "static" in its name. #1140

Closed awb99 closed 1 year ago

awb99 commented 1 year ago

I am working on a notebook app that can be hosted on github pages. For this reason I need to initialize the shadow loader with a prefix. My original namespace had the name "goldly.static.app" and this code would fail in line 3 "goldly.static.app" where "static" is not escaped as "static$".

I then was looking into other js modules, and thought that I give a try in renaming the namespace to "goldly.offline.app". And then the error went away.

non working generated js code for goldly.static.app

goog.provide('goldly.static$.app');
goog.scope(function(){
  goldly.static.app.goog$module$shadow$loader = goog.module.get('shadow.loader');
});
goldly.static$.app.mount_app = (function goldly$static$app$mount_app(page_fn){
return reagent.dom.render.cljs$core$IFn$_invoke$arity$2(new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [page_fn], null),document.getElementById("app"));
});
goldly.static$.app.patch_path = (function goldly$static$app$patch_path(){
goldly.sci.loader.cljs_source_http.set_github_load_mode();

return goldly.static$.app.goog$module$shadow$loader.init(goldly.sci.loader.static$.dynamic_base());
});
goldly.static$.app.start = (function goldly$static$app$start(symbol_page_as_string){
cljs.core.enable_console_print_BANG_();

goldly.static$.app.patch_path();

working generated js code for goldly.offline.app

goog.provide('goldly.offline.app');
goog.scope(function(){
  goldly.offline.app.goog$module$shadow$loader = goog.module.get('shadow.loader');
});
goldly.offline.app.mount_app = (function goldly$offline$app$mount_app(page_fn){
return reagent.dom.render.cljs$core$IFn$_invoke$arity$2(new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [page_fn], null),document.getElementById("app"));
});
goldly.offline.app.patch_path = (function goldly$offline$app$patch_path(){
goldly.sci.loader.cljs_source_http.set_github_load_mode();

return goldly.offline.app.goog$module$shadow$loader.init(goldly.sci.loader.static$.dynamic_base());
});
goldly.offline.app.start = (function goldly$offline$app$start(symbol_page_as_string){
cljs.core.enable_console_print_BANG_();

goldly.offline.app.patch_path();

cljs code

(ns goldly.offline.app
  (:require
   [reagent.dom]
   [taoensso.timbre :refer-macros [info warn]]
   [shadow.loader :as l]
   [goldly.sci.loader.static :refer [dynamic-base]]
   [goldly.sci.loader.cljs-source-http :as cljs-source]
   [goldly.sci.loader.shadow-module :as shadow-module]
   [goldly.sci.kernel-cljs :refer [require-async resolve-symbol]]))

; required in goldly.app.build

(defn mount-app [page-fn]
  (reagent.dom/render
   [page-fn]
   (.getElementById js/document "app")))

(defn patch-path []
  (cljs-source/set-github-load-mode)
  (l/init (dynamic-base)) ; prefix to the path loader
  ;(shadow-module/set-github-load-mode)
  )

(defn ^:export start [symbol-page-as-string]
  (enable-console-print!)

  (patch-path)