Moved web root into root of project; this makes deployment easier.

Also deleted 'docs', which is now redundant.
This commit is contained in:
Simon Brooke 2020-02-27 14:18:29 +00:00
parent a5204c66b9
commit 743d8a1740
No known key found for this signature in database
GPG key ID: A7A4F18D1D4DF987
1592 changed files with 53626 additions and 139250 deletions

View file

@ -0,0 +1,56 @@
(ns devtools.async
(:require-macros [devtools.oops :refer [oset ocall]])
(:require [goog.async.nextTick :as next-tick]
[goog.labs.userAgent.browser :as ua]
[devtools.context :as context]))
(defn ^:dynamic available? []
(exists? js/Promise))
(def ^:dynamic fixed-chrome-version-for-async "65.0.3321")
(defn ^:dynamic needed? []
(not (and (ua/isChrome) (ua/isVersionOrHigher fixed-chrome-version-for-async))))
(defn ^:dynamic get-not-needed-message []
(str "cljs-devtools: the :async feature is no longer needed since Chrome " fixed-chrome-version-for-async ", "
"see https://github.com/binaryage/cljs-devtools/issues/20"))
(def ^:dynamic *installed* false)
(def ^:dynamic *original-set-immediate* nil)
; see http://stackoverflow.com/a/30741722/84283
(defn rethrow-outside-promise [e]
(js/setTimeout #(throw e) 0))
(defn promise-based-set-immediate [callback]
(-> (ocall js/Promise "resolve")
(ocall "then" callback)
(ocall "catch" rethrow-outside-promise))
nil)
(defn install-async-set-immediate! []
(set! *original-set-immediate* next-tick/setImmediate_)
(set! next-tick/setImmediate_ promise-based-set-immediate))
(defn uninstall-async-set-immediate! []
(set! next-tick/setImmediate_ *original-set-immediate*))
; -- installation -----------------------------------------------------------------------------------------------------------
(defn installed? []
*installed*)
(defn install! []
(when-not *installed*
(set! *installed* true)
(oset js/Error ["stackTraceLimit"] js/Infinity)
(install-async-set-immediate!)
(when-not (needed?)
(.info (context/get-console) (get-not-needed-message)))
true))
(defn uninstall! []
(when *installed*
(set! *installed* false)
(uninstall-async-set-immediate!)))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,87 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.async');
goog.require('cljs.core');
goog.require('goog.async.nextTick');
goog.require('goog.labs.userAgent.browser');
goog.require('devtools.context');
devtools.async.available_QMARK_ = (function devtools$async$available_QMARK_(){
return (typeof Promise !== 'undefined');
});
devtools.async.fixed_chrome_version_for_async = "65.0.3321";
devtools.async.needed_QMARK_ = (function devtools$async$needed_QMARK_(){
return cljs.core.not.call(null,(function (){var and__4120__auto__ = goog.labs.userAgent.browser.isChrome();
if(cljs.core.truth_(and__4120__auto__)){
return goog.labs.userAgent.browser.isVersionOrHigher(devtools.async.fixed_chrome_version_for_async);
} else {
return and__4120__auto__;
}
})());
});
devtools.async.get_not_needed_message = (function devtools$async$get_not_needed_message(){
return ["cljs-devtools: the :async feature is no longer needed since Chrome ",devtools.async.fixed_chrome_version_for_async,", ","see https://github.com/binaryage/cljs-devtools/issues/20"].join('');
});
devtools.async._STAR_installed_STAR_ = false;
devtools.async._STAR_original_set_immediate_STAR_ = null;
devtools.async.rethrow_outside_promise = (function devtools$async$rethrow_outside_promise(e){
return setTimeout((function (){
throw e;
}),(0));
});
devtools.async.promise_based_set_immediate = (function devtools$async$promise_based_set_immediate(callback){
var o__25266__auto___28355 = (function (){var o__25266__auto__ = (function (){var o__25266__auto__ = Promise;
return (o__25266__auto__["resolve"]).call(o__25266__auto__);
})();
return (o__25266__auto__["then"]).call(o__25266__auto__,callback);
})();
(o__25266__auto___28355["catch"]).call(o__25266__auto___28355,devtools.async.rethrow_outside_promise);
return null;
});
devtools.async.install_async_set_immediate_BANG_ = (function devtools$async$install_async_set_immediate_BANG_(){
devtools.async._STAR_original_set_immediate_STAR_ = goog.async.nextTick.setImmediate_;
return goog.async.nextTick.setImmediate_ = devtools.async.promise_based_set_immediate;
});
devtools.async.uninstall_async_set_immediate_BANG_ = (function devtools$async$uninstall_async_set_immediate_BANG_(){
return goog.async.nextTick.setImmediate_ = devtools.async._STAR_original_set_immediate_STAR_;
});
devtools.async.installed_QMARK_ = (function devtools$async$installed_QMARK_(){
return devtools.async._STAR_installed_STAR_;
});
devtools.async.install_BANG_ = (function devtools$async$install_BANG_(){
if(devtools.async._STAR_installed_STAR_){
return null;
} else {
devtools.async._STAR_installed_STAR_ = true;
var G__28356_28357 = Error;
var target__25271__auto___28358 = G__28356_28357;
if(cljs.core.truth_(target__25271__auto___28358)){
} else {
throw (new Error(["Assert failed: ",["unable to locate object path ",null," in ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(G__28356_28357)].join(''),"\n","target__25271__auto__"].join('')));
}
(target__25271__auto___28358["stackTraceLimit"] = Infinity);
devtools.async.install_async_set_immediate_BANG_.call(null);
if(devtools.async.needed_QMARK_.call(null)){
} else {
devtools.context.get_console.call(null).info(devtools.async.get_not_needed_message.call(null));
}
return true;
}
});
devtools.async.uninstall_BANG_ = (function devtools$async$uninstall_BANG_(){
if(devtools.async._STAR_installed_STAR_){
devtools.async._STAR_installed_STAR_ = false;
return devtools.async.uninstall_async_set_immediate_BANG_.call(null);
} else {
return null;
}
});
//# sourceMappingURL=async.js.map?rel=1582812680915

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/async.js","sources":["async.cljs?rel=1582812680915"],"lineCount":87,"mappings":";AAAA;;;;;AAMA,kCAAA,lCAAgBA;AAAhB,AACE,eAAAC;;AAEF,gDAAA,hDAAeC;AAEf,+BAAA,\/BAAgBC;AAAhB,AACE,OAACC,wBAAI,iBAAAC,oBAAK,AAACC;AAAN,AAAA,oBAAAD;AAAmB,OAACE,8CAAqBL;;AAAzCG;;;;AAEP,wCAAA,xCAAgBG;AAAhB,AACE,QAAA,oHAAA,KAAA,nDAA2EN;;AAG7E,uCAAA,vCAAeO;AACf,oDAAA,pDAAeC;AAGf,yCAAA,zCAAMC,0FAAyBC;AAA\/B,AACE,kBAAA,XAACC;AAAD,AAAgB,MAAOD;GAAvB;;AAEF,6CAAA,7CAAME,kGAA6BC;AAAnC,iEACM,iBAAAC,mBAAOf,xEACP,iBAAAe,9CACA,IAAAA;AAFA,AAAA,OAAA,CAAAA,iBAAA,iBAAAA;;AACA,AAAA,OAAA,CAAAA,iBAAA,cAAAA,iBAAcD;;AACd,AAAA,AAAA,CAAAC,uBAAA,eAAAA,uBAAeL;;AAHrB;;AAMA,mDAAA,nDAAMM;AAAN,AACE,AAAMP,oDAAyBQ;;AAC\/B,OAAMA,oCAAwBJ;;AAEhC,qDAAA,rDAAMK;AAAN,AACE,OAAMD,oCAAwBR;;AAIhC,kCAAA,lCAAMU;AAAN,AACEX;;AAEF,+BAAA,\/BAAMY;AAAN,AACE,GAAUZ;AAAV;;AAAA,AACE,uCAAA,vCAAMA;;AACN,IAAAa,iBAAME;IAAND,8BAAAD;AAAA,AAAA,oBAAAC;AAAA;AAAA,AAAA,MAAA,KAAAC,MAAA,CAAA,kBAAA,CAAA,gCAAA,KAAA,mDAAAF,0BAAA,KAAA;;;AAAA,CAAAC,4BAAA,qBAAmCE;;AAAnCH;AACA,AAACL;;AACD,GAAU,AAACd;AAAX;AAAA,AACE,AAAO,AAACuB,6CAAqB,AAAClB;;;AALlC;;;AAQF,iCAAA,jCAAMmB;AAAN,AACE,GAAMlB;AAAN,AACE,uCAAA,vCAAMA;;AACN,OAACU;;AAFH","names":["devtools.async\/available?","js\/Promise","devtools.async\/fixed-chrome-version-for-async","devtools.async\/needed?","cljs.core\/not","and__4120__auto__","goog.labs.userAgent.browser\/isChrome","goog.labs.userAgent.browser\/isVersionOrHigher","devtools.async\/get-not-needed-message","devtools.async\/*installed*","devtools.async\/*original-set-immediate*","devtools.async\/rethrow-outside-promise","e","js\/setTimeout","devtools.async\/promise-based-set-immediate","callback","o__25266__auto__","devtools.async\/install-async-set-immediate!","goog.async.nextTick\/setImmediate_","devtools.async\/uninstall-async-set-immediate!","devtools.async\/installed?","devtools.async\/install!","G__28356","target__25271__auto__","js\/Error","js\/Infinity","devtools.context\/get-console","devtools.async\/uninstall!"]}

View file

@ -0,0 +1,8 @@
(ns devtools.context)
; default root javascript context, typically js/window in browser, or the root javascript object in node.js
(defn ^:dynamic get-root []
goog/global)
(defn ^:dynamic get-console []
(.-console (get-root)))

View file

@ -0,0 +1 @@
["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:use-macros",["^ "],"~:excludes",["~#set",[]],"~:name","~$devtools.context","~:imports",null,"~:requires",null,"~:cljs.spec/speced-vars",[],"~:uses",null,"~:defs",["^ ","~$get-root",["^ ","~:protocol-inline",null,"~:meta",["^ ","~:file","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/context.cljs","~:line",4,"~:column",17,"~:end-line",4,"~:end-column",25,"~:dynamic",true,"~:arglists",["~#list",["~$quote",["^F",[[]]]]]],"^5","~$devtools.context/get-root","^?","js/compiled/out/devtools/context.cljs","^C",25,"~:method-params",["^F",[[]]],"~:protocol-impl",null,"~:arglists-meta",["^F",[null,null]],"^A",1,"~:variadic?",false,"^D",true,"^@",4,"^B",4,"~:max-fixed-arity",0,"~:fn-var",true,"^E",["^F",["^G",["^F",[[]]]]]],"~$get-console",["^ ","^=",null,"^>",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/context.cljs","^@",7,"^A",17,"^B",7,"^C",28,"^D",true,"^E",["^F",["^G",["^F",[[]]]]]],"^5","~$devtools.context/get-console","^?","js/compiled/out/devtools/context.cljs","^C",28,"^I",["^F",[[]]],"^J",null,"^K",["^F",[null,null]],"^A",1,"^L",false,"^D",true,"^@",7,"~:ret-tag","~$any","^B",7,"^M",0,"^N",true,"^E",["^F",["^G",["^F",[[]]]]]]],"~:cljs.spec/registry-ref",[],"~:require-macros",null,"~:doc",null]

View file

@ -0,0 +1,11 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.context');
goog.require('cljs.core');
devtools.context.get_root = (function devtools$context$get_root(){
return goog.global;
});
devtools.context.get_console = (function devtools$context$get_console(){
return devtools.context.get_root.call(null).console;
});
//# sourceMappingURL=context.js.map?rel=1582812679007

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/context.js","sources":["context.cljs?rel=1582812679007"],"lineCount":11,"mappings":";AAAA;;AAGA,4BAAA,5BAAgBA;AAAhB,AACEC;;AAEF,+BAAA,\/BAAgBC;AAAhB,AACE,OAAW,AAACF","names":["devtools.context\/get-root","goog\/global","devtools.context\/get-console"]}

View file

@ -0,0 +1,114 @@
(ns devtools.core
(:require [devtools.prefs :as prefs]
[devtools.hints :as hints]
[devtools.defaults :refer [feature-groups]]
[devtools.formatters :as formatters]
[devtools.async :as async]
[devtools.toolbox] ; this auto-requires the toolbox namespace, used by cljs-oops
[devtools.context :as context]
[devtools.util :refer [display-banner-if-needed! install-feature! resolve-features! make-lib-info
print-config-overrides-if-requested!
under-advanced-build? display-advanced-build-warning-if-needed!]]))
; -- public API -------------------------------------------------------------------------------------------------------------
(defn is-feature-available? [feature]
(case feature
:formatters (formatters/available?)
:hints (hints/available?)
:async (async/available?)))
(defn available?
([] (available? (prefs/pref :features-to-install)))
([features-desc]
(let [features (resolve-features! features-desc @feature-groups)]
(if (empty? features)
false
(every? is-feature-available? features)))))
(defn is-feature-installed? [feature]
(case feature
:formatters (formatters/installed?)
:hints (hints/installed?)
:async (async/installed?)))
(defn installed?
([] (installed? (prefs/pref :features-to-install)))
([features-desc]
(let [features (resolve-features! features-desc @feature-groups)]
(if (empty? features)
false
(every? is-feature-installed? features)))))
(defn install!
([] (install! (prefs/pref :features-to-install)))
([features-desc]
(if (under-advanced-build?)
(display-advanced-build-warning-if-needed!)
(let [features (resolve-features! features-desc @feature-groups)]
(display-banner-if-needed! features @feature-groups)
(print-config-overrides-if-requested! "config overrides prior install:\n")
(install-feature! :formatters features is-feature-available? formatters/install!)
(install-feature! :hints features is-feature-available? hints/install!)
(install-feature! :async features is-feature-available? async/install!)))))
(defn uninstall! []
(formatters/uninstall!)
(hints/uninstall!)
(async/uninstall!))
(defn set-prefs! [new-prefs]
(prefs/set-prefs! new-prefs))
(defn get-prefs []
(prefs/get-prefs))
(defn set-pref! [pref val]
(prefs/set-pref! pref val))
; -- deprecated API ---------------------------------------------------------------------------------------------------------
(defn enable! []
(.warn (context/get-console) (str "devtools.core/enable! was removed "
"and has no effect in " (make-lib-info) " "
"=> remove the call")))
(defn disable! []
(.warn (context/get-console) (str "devtools.core/disable! was removed "
"and has no effect in " (make-lib-info) " "
"=> remove the call")))
(defn set-single-feature! [_feature _val]
(.warn (context/get-console) (str "devtools.core/set-single-feature! was removed "
"and has no effect in " (make-lib-info) " "
"=> use (devtools.core/install! features) to install custom features")))
(defn enable-single-feature! [_feature]
(.warn (context/get-console) (str "devtools.core/enable-single-feature! was removed "
"and has no effect in " (make-lib-info) " "
"=> use (devtools.core/install! features) to install custom features")))
(defn disable-single-feature! [_feature]
(.warn (context/get-console) (str "devtools.core/disable-single-feature! was removed "
"and has no effect in " (make-lib-info) " "
"=> use (devtools.core/install! features) to install custom features")))
(defn enable-feature! [& _features]
(.warn (context/get-console) (str "devtools.core/enable-feature! was removed "
"and has no effect in " (make-lib-info) " "
"=> use (devtools.core/install! features) to install custom features")))
(defn disable-feature! [& _features]
(.warn (context/get-console) (str "devtools.core/disable-feature! was removed "
"and has no effect in " (make-lib-info) " "
"=> use (devtools.core/install! features) to install custom features")))
(defn single-feature-available? [_feature]
(.warn (context/get-console) (str "devtools.core/single-feature-available? was removed "
"and has no effect in " (make-lib-info) " "
"=> use devtools.core/is-feature-available? instead")))
(defn feature-available? [& _features]
(.warn (context/get-console) (str "devtools.core/feature-available? was removed "
"and has no effect in " (make-lib-info) " "
"=> use devtools.core/is-feature-available? instead")))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,289 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.core');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.hints');
goog.require('devtools.defaults');
goog.require('devtools.formatters');
goog.require('devtools.async');
goog.require('devtools.toolbox');
goog.require('devtools.context');
goog.require('devtools.util');
devtools.core.is_feature_available_QMARK_ = (function devtools$core$is_feature_available_QMARK_(feature){
var G__28384 = feature;
var G__28384__$1 = (((G__28384 instanceof cljs.core.Keyword))?G__28384.fqn:null);
switch (G__28384__$1) {
case "formatters":
return devtools.formatters.available_QMARK_.call(null);
break;
case "hints":
return devtools.hints.available_QMARK_.call(null);
break;
case "async":
return devtools.async.available_QMARK_.call(null);
break;
default:
throw (new Error(["No matching clause: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(G__28384__$1)].join('')));
}
});
devtools.core.available_QMARK_ = (function devtools$core$available_QMARK_(var_args){
var G__28387 = arguments.length;
switch (G__28387) {
case 0:
return devtools.core.available_QMARK_.cljs$core$IFn$_invoke$arity$0();
break;
case 1:
return devtools.core.available_QMARK_.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
break;
default:
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
}
});
devtools.core.available_QMARK_.cljs$core$IFn$_invoke$arity$0 = (function (){
return devtools.core.available_QMARK_.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"features-to-install","features-to-install",102899261)));
});
devtools.core.available_QMARK_.cljs$core$IFn$_invoke$arity$1 = (function (features_desc){
var features = devtools.util.resolve_features_BANG_.call(null,features_desc,cljs.core.deref.call(null,devtools.defaults.feature_groups));
if(cljs.core.empty_QMARK_.call(null,features)){
return false;
} else {
return cljs.core.every_QMARK_.call(null,devtools.core.is_feature_available_QMARK_,features);
}
});
devtools.core.available_QMARK_.cljs$lang$maxFixedArity = 1;
devtools.core.is_feature_installed_QMARK_ = (function devtools$core$is_feature_installed_QMARK_(feature){
var G__28389 = feature;
var G__28389__$1 = (((G__28389 instanceof cljs.core.Keyword))?G__28389.fqn:null);
switch (G__28389__$1) {
case "formatters":
return devtools.formatters.installed_QMARK_.call(null);
break;
case "hints":
return devtools.hints.installed_QMARK_.call(null);
break;
case "async":
return devtools.async.installed_QMARK_.call(null);
break;
default:
throw (new Error(["No matching clause: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(G__28389__$1)].join('')));
}
});
devtools.core.installed_QMARK_ = (function devtools$core$installed_QMARK_(var_args){
var G__28392 = arguments.length;
switch (G__28392) {
case 0:
return devtools.core.installed_QMARK_.cljs$core$IFn$_invoke$arity$0();
break;
case 1:
return devtools.core.installed_QMARK_.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
break;
default:
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
}
});
devtools.core.installed_QMARK_.cljs$core$IFn$_invoke$arity$0 = (function (){
return devtools.core.installed_QMARK_.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"features-to-install","features-to-install",102899261)));
});
devtools.core.installed_QMARK_.cljs$core$IFn$_invoke$arity$1 = (function (features_desc){
var features = devtools.util.resolve_features_BANG_.call(null,features_desc,cljs.core.deref.call(null,devtools.defaults.feature_groups));
if(cljs.core.empty_QMARK_.call(null,features)){
return false;
} else {
return cljs.core.every_QMARK_.call(null,devtools.core.is_feature_installed_QMARK_,features);
}
});
devtools.core.installed_QMARK_.cljs$lang$maxFixedArity = 1;
devtools.core.install_BANG_ = (function devtools$core$install_BANG_(var_args){
var G__28395 = arguments.length;
switch (G__28395) {
case 0:
return devtools.core.install_BANG_.cljs$core$IFn$_invoke$arity$0();
break;
case 1:
return devtools.core.install_BANG_.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
break;
default:
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
}
});
devtools.core.install_BANG_.cljs$core$IFn$_invoke$arity$0 = (function (){
return devtools.core.install_BANG_.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"features-to-install","features-to-install",102899261)));
});
devtools.core.install_BANG_.cljs$core$IFn$_invoke$arity$1 = (function (features_desc){
if(cljs.core.truth_(devtools.util.under_advanced_build_QMARK_.call(null))){
return devtools.util.display_advanced_build_warning_if_needed_BANG_.call(null);
} else {
var features = devtools.util.resolve_features_BANG_.call(null,features_desc,cljs.core.deref.call(null,devtools.defaults.feature_groups));
devtools.util.display_banner_if_needed_BANG_.call(null,features,cljs.core.deref.call(null,devtools.defaults.feature_groups));
devtools.util.print_config_overrides_if_requested_BANG_.call(null,"config overrides prior install:\n");
devtools.util.install_feature_BANG_.call(null,new cljs.core.Keyword(null,"formatters","formatters",-1875637118),features,devtools.core.is_feature_available_QMARK_,devtools.formatters.install_BANG_);
devtools.util.install_feature_BANG_.call(null,new cljs.core.Keyword(null,"hints","hints",-991113151),features,devtools.core.is_feature_available_QMARK_,devtools.hints.install_BANG_);
return devtools.util.install_feature_BANG_.call(null,new cljs.core.Keyword(null,"async","async",1050769601),features,devtools.core.is_feature_available_QMARK_,devtools.async.install_BANG_);
}
});
devtools.core.install_BANG_.cljs$lang$maxFixedArity = 1;
devtools.core.uninstall_BANG_ = (function devtools$core$uninstall_BANG_(){
devtools.formatters.uninstall_BANG_.call(null);
devtools.hints.uninstall_BANG_.call(null);
return devtools.async.uninstall_BANG_.call(null);
});
devtools.core.set_prefs_BANG_ = (function devtools$core$set_prefs_BANG_(new_prefs){
return devtools.prefs.set_prefs_BANG_.call(null,new_prefs);
});
devtools.core.get_prefs = (function devtools$core$get_prefs(){
return devtools.prefs.get_prefs.call(null);
});
devtools.core.set_pref_BANG_ = (function devtools$core$set_pref_BANG_(pref,val){
return devtools.prefs.set_pref_BANG_.call(null,pref,val);
});
devtools.core.enable_BANG_ = (function devtools$core$enable_BANG_(){
return devtools.context.get_console.call(null).warn(["devtools.core/enable! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> remove the call"].join(''));
});
devtools.core.disable_BANG_ = (function devtools$core$disable_BANG_(){
return devtools.context.get_console.call(null).warn(["devtools.core/disable! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> remove the call"].join(''));
});
devtools.core.set_single_feature_BANG_ = (function devtools$core$set_single_feature_BANG_(_feature,_val){
return devtools.context.get_console.call(null).warn(["devtools.core/set-single-feature! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use (devtools.core/install! features) to install custom features"].join(''));
});
devtools.core.enable_single_feature_BANG_ = (function devtools$core$enable_single_feature_BANG_(_feature){
return devtools.context.get_console.call(null).warn(["devtools.core/enable-single-feature! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use (devtools.core/install! features) to install custom features"].join(''));
});
devtools.core.disable_single_feature_BANG_ = (function devtools$core$disable_single_feature_BANG_(_feature){
return devtools.context.get_console.call(null).warn(["devtools.core/disable-single-feature! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use (devtools.core/install! features) to install custom features"].join(''));
});
devtools.core.enable_feature_BANG_ = (function devtools$core$enable_feature_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___28398 = arguments.length;
var i__4731__auto___28399 = (0);
while(true){
if((i__4731__auto___28399 < len__4730__auto___28398)){
args__4736__auto__.push((arguments[i__4731__auto___28399]));
var G__28400 = (i__4731__auto___28399 + (1));
i__4731__auto___28399 = G__28400;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.core.enable_feature_BANG_.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.core.enable_feature_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (_features){
return devtools.context.get_console.call(null).warn(["devtools.core/enable-feature! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use (devtools.core/install! features) to install custom features"].join(''));
});
devtools.core.enable_feature_BANG_.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.core.enable_feature_BANG_.cljs$lang$applyTo = (function (seq28397){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq28397));
});
devtools.core.disable_feature_BANG_ = (function devtools$core$disable_feature_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___28402 = arguments.length;
var i__4731__auto___28403 = (0);
while(true){
if((i__4731__auto___28403 < len__4730__auto___28402)){
args__4736__auto__.push((arguments[i__4731__auto___28403]));
var G__28404 = (i__4731__auto___28403 + (1));
i__4731__auto___28403 = G__28404;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.core.disable_feature_BANG_.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.core.disable_feature_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (_features){
return devtools.context.get_console.call(null).warn(["devtools.core/disable-feature! was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use (devtools.core/install! features) to install custom features"].join(''));
});
devtools.core.disable_feature_BANG_.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.core.disable_feature_BANG_.cljs$lang$applyTo = (function (seq28401){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq28401));
});
devtools.core.single_feature_available_QMARK_ = (function devtools$core$single_feature_available_QMARK_(_feature){
return devtools.context.get_console.call(null).warn(["devtools.core/single-feature-available? was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use devtools.core/is-feature-available? instead"].join(''));
});
devtools.core.feature_available_QMARK_ = (function devtools$core$feature_available_QMARK_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___28406 = arguments.length;
var i__4731__auto___28407 = (0);
while(true){
if((i__4731__auto___28407 < len__4730__auto___28406)){
args__4736__auto__.push((arguments[i__4731__auto___28407]));
var G__28408 = (i__4731__auto___28407 + (1));
i__4731__auto___28407 = G__28408;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.core.feature_available_QMARK_.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.core.feature_available_QMARK_.cljs$core$IFn$_invoke$arity$variadic = (function (_features){
return devtools.context.get_console.call(null).warn(["devtools.core/feature-available? was removed ","and has no effect in ",devtools.util.make_lib_info.call(null)," ","=> use devtools.core/is-feature-available? instead"].join(''));
});
devtools.core.feature_available_QMARK_.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.core.feature_available_QMARK_.cljs$lang$applyTo = (function (seq28405){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq28405));
});
//# sourceMappingURL=core.js.map?rel=1582812680985

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,397 @@
(ns devtools.defaults
; warning: when touching this ns form, update also eval-css-arg in defaults.clj
(:require-macros [devtools.defaults :as d :refer [css span named-color]]))
(def known-features (delay [:formatters :hints :async]))
(def default-features (delay [:formatters]))
(def feature-groups (delay {:all @known-features
:default @default-features}))
(def config
(delay ; see https://github.com/binaryage/cljs-devtools/issues/37
{; -- installation ------------------------------------------------------------------------------------------------------
; you can specify a list/vector of features from known-features or a keyword from feature-groups
:features-to-install :default
:print-config-overrides false
:suppress-preload-install false
:bypass-availability-checks false
:disable-advanced-mode-check false
:file-reader nil
; -- feature tweaks ----------------------------------------------------------------------------------------------------
:render-metas true
:render-nils true
:render-bools true
:render-strings true
:render-numbers true
:render-keywords true
:render-symbols true
:render-instances true
:render-types true
:render-functions true
:disable-cljs-fn-formatting false ; deprecated, use :render-functions instead
; -- verbosity controls ------------------------------------------------------------------------------------------------
:max-print-level 2
:body-line-max-print-level 3
:max-header-elements 5
:min-expandable-sequable-count 0 ; false/nil means "never expandable", 0 means "always expandable" (unless empty)
:min-expandable-sequable-count-for-well-known-types 4 ; false/nil means "never expandable", 0 means "always expandable" (unless empty)
:max-number-body-items 100
:string-prefix-limit 20
:string-postfix-limit 20
:sanity-hint-min-length 128
:max-instance-header-fields 3
:max-instance-custom-printing-level 2
:max-list-protocols 5
:max-protocol-method-arities-list 3
:initial-hierarchy-depth-budget (dec 20) ; set to false to disable, issue #22
; by default, well known types will render only via cljs printer, we won't wrap them in the blue-ish type info
:well-known-types #{"cljs.core/Keyword"
"cljs.core/Symbol"
"cljs.core/TaggedLiteral"
"cljs.core/LazySeq"
"cljs.core/LazyTransformer"
"cljs.core/IndexedSeq"
"cljs.core/RSeq"
"cljs.core/PersistentQueueSeq"
"cljs.core/PersistentTreeMapSeq"
"cljs.core/NodeSeq"
"cljs.core/ArrayNodeSeq"
"cljs.core/List"
"cljs.core/Cons"
"cljs.core/EmptyList"
"cljs.core/PersistentVector"
"cljs.core/ChunkedCons"
"cljs.core/ChunkedSeq"
"cljs.core/Subvec"
"cljs.core/BlackNode"
"cljs.core/RedNode"
"cljs.core/ObjMap"
"cljs.core/KeySeq"
"cljs.core/ValSeq"
"cljs.core/PersistentArrayMapSeq"
"cljs.core/PersistentArrayMap"
"cljs.core/PersistentHashMap"
"cljs.core/PersistentTreeMap"
"cljs.core/PersistentHashSet"
"cljs.core/PersistentTreeSet"
"cljs.core/MapEntry"
"cljs.core/Range"
"cljs.core/ES6IteratorSeq"
"cljs.core/Eduction"
"cljs.core/UUID"
"cljs.core/ExceptionInfo"}
; -- pluggable markup --------------------------------------------------------------------------------------------------
:more-marker "…"
:body-items-more-label "more…"
:string-abbreviation-marker " … "
:multi-arity-symbol "…"
:more-symbol "…"
:plus-symbol "+"
:header-field-value-spacer (span (css (str "color:" (named-color :field-spacer) ";")) "=")
:body-field-value-spacer (span (css (str "color:" (named-color :field-spacer) ";")) "=")
:header-field-separator " "
:more-fields-symbol "…"
:instance-value-separator ""
:fields-header-open-symbol ""
:fields-header-close-symbol ""
:fields-header-no-fields-symbol (span :header-field-name-style "∅")
:rest-symbol " & "
:args-open-symbol "["
:args-close-symbol "]"
:new-line-string-replacer "↵"
:line-index-separator ""
:dq "\""
:protocol-method-arities-more-symbol "…"
:protocol-method-arities-list-header-separator " "
:spacer " "
:nil-label "nil"
:default-envelope-header "\uD83D\uDCE8" ; U+1F4E8: INCOMING ENVELOPE, http://www.charbase.com/1f4e8-unicode-incoming-envelope
:list-separator " "
:list-open-symbol ""
:list-close-symbol ""
:empty-basis-symbol (span (css) :basis-icon (span :type-basis-item-style "∅"))
:expandable-symbol ""
:header-expander-symbol (span (css) "~")
; -- backgrounds -------------------------------------------------------------------------------------------------------
:instance-custom-printing-background (d/get-custom-printing-background-markup)
:type-header-background (d/get-instance-type-header-background-markup)
:native-reference-background (d/get-native-reference-background-markup)
:protocol-background (d/get-protocol-background-markup)
:instance-header-background nil
; -- icons -------------------------------------------------------------------------------------------------------------
:basis-icon (d/icon "β" (named-color :basis))
:protocols-icon (d/icon "⊢" (named-color :protocol))
:fields-icon (d/icon "∋" (named-color :field))
:method-icon (d/icon "m" (named-color :method))
:ns-icon (d/icon "in" (named-color :ns))
:native-icon (d/icon "js" (named-color :native))
:lambda-icon (d/icon "λ" (named-color :lambda))
:fn-icon (d/icon "fn" (named-color :fn))
:circular-ref-icon (d/icon "∞" (named-color :circular-ref) :slim)
; -- tags --------------------------------------------------------------------------------------------------------------
:cljs-land-tag [:span :cljs-land-style]
:header-tag [:span :header-style]
:item-tag [:span :item-style]
:nil-tag [:span :nil-style]
:bool-tag [:span :bool-style]
:keyword-tag [:span :keyword-style]
:symbol-tag [:span :symbol-style]
:integer-tag [:span :integer-style]
:float-tag [:span :float-style]
:string-tag [:span :string-style]
:expanded-string-tag [:span :expanded-string-style]
:circular-reference-tag [:span :circular-reference-wrapper-style]
:circular-reference-body-tag [:span :circular-reference-body-style]
:native-reference-tag [:span :native-reference-style]
:native-reference-wrapper-tag [:span :native-reference-wrapper-style]
:meta-wrapper-tag [:span :meta-wrapper-style]
:meta-header-tag [:span :meta-style]
:meta-body-tag [:span :meta-body-style]
:meta-reference-tag [:span :meta-reference-style]
:body-tag [:span :body-style]
:index-tag [:span :index-style]
:standard-ol-tag [:ol :standard-ol-style]
:standard-ol-no-margin-tag [:ol :standard-ol-no-margin-style]
:standard-li-tag [:li :standard-li-style]
:standard-li-no-margin-tag [:li :standard-li-no-margin-style]
:aligned-li-tag [:li :aligned-li-style]
:body-items-more-tag [:span :body-items-more-style]
:fn-args-tag [:span :fn-args-style]
:fn-name-tag [:span :fn-name-style]
:fn-prefix-tag [:span :fn-prefix-style]
:fn-header-tag [:span :fn-header-style]
:fn-multi-arity-args-indent-tag [:span :fn-multi-arity-args-indent-style]
:fn-ns-name-tag [:span :fn-ns-name-style]
:type-wrapper-tag [:span :type-wrapper-style]
:type-header-tag [:span :type-header-style]
:type-name-tag [:span :type-name-style]
:type-ref-tag [:span :type-ref-style]
:type-basis-tag [:span :type-basis-style]
:type-basis-item-tag [:span :type-basis-item-style]
:standalone-type-tag [:span :standalone-type-style]
:header-field-tag [:span :header-field-style]
:header-field-name-tag [:span :header-field-name-style]
:header-field-value-tag [:span :header-field-value-style]
:instance-body-fields-table-tag [:table :instance-body-fields-table-style]
:body-field-tr-tag [:tr :body-field-tr-style]
:body-field-td1-tag [:td :body-field-td1-style]
:body-field-td2-tag [:td :body-field-td2-style]
:body-field-td3-tag [:td :body-field-td3-style]
:body-field-name-tag [:span :body-field-name-style]
:body-field-value-tag [:span :body-field-value-style]
:fields-header-tag [:span :fields-header-style]
:protocol-method-arities-header-tag [:span :protocol-method-arities-header-style]
:protocol-name-tag [:span :protocol-name-style]
:protocol-method-tag [:span :protocol-method-style]
:protocol-method-name-tag [:span :protocol-method-name-style]
:protocol-ns-name-tag [:span :protocol-ns-name-style]
:protocols-header-tag [:span :protocols-header-style]
:protocol-more-tag [:span :protocol-more-style]
:fast-protocol-tag [:span :fast-protocol-style]
:slow-protocol-tag [:span :slow-protocol-style]
:instance-value-tag [:span :instance-value-style]
:instance-custom-printing-wrapper-tag [:span :instance-custom-printing-wrapper-style]
:instance-header-tag [:span :instance-header-style]
:instance-type-header-tag [:span :instance-type-header-style]
:list-tag [:span :list-style]
:expandable-tag [:span :expandable-style]
:expandable-inner-tag [:span :expandable-inner-style]
:instance-custom-printing-tag [:span :instance-custom-printing-style]
:default-envelope-tag [:span :default-envelope-style]
; -- DOM tags mapping ----------------------------------------------------------------------------------------------------
:span "span"
:div "div"
:ol "ol"
:li "li"
:table "table"
:td "td"
:tr "tr"
; -- styles ------------------------------------------------------------------------------------------------------------
:cljs-land-style (css (str "background-color: " (named-color :signature-background) ";")
(str "color: " (named-color :base-text-color) ";") ; prevent leaking in text colors from "outside"
"border-radius: 2px;")
:header-style (css "white-space: nowrap;") ; this prevents jumping of content when expanding sections due to content wrapping
:expandable-style (css "white-space: nowrap;"
"padding-left: 3px;")
:expandable-inner-style (css "margin-left: -3px;")
:item-style (css "display: inline-block;"
"white-space: nowrap;"
"border-left: 2px solid rgba(100, 100, 100, 0.2);"
"padding: 0px 4px 0px 4px;"
"margin: 1px 0px 0px 0px;")
:fn-header-style (css)
:fn-prefix-style (css)
:nil-style (css (str "color: " (named-color :nil) ";"))
:keyword-style (css (str "color: " (named-color :keyword) ";"))
:integer-style (css (str "color: " (named-color :integer) ";"))
:float-style (css (str "color: " (named-color :float) ";"))
:string-style (css (str "color: " (named-color :string) ";"))
:symbol-style (css (str "color: " (named-color :symbol) ";"))
:bool-style (css (str "color: " (named-color :bool) ";"))
; native reference wrapper is here to counter some "evil" internal DevTools styles in treeoutline.css
; namely :host padding[1] and li min-height[2]
; [1] https://github.com/binaryage/dirac/blob/acdf79e782510f6cdac609def3f561d5d04c86c8/front_end/ui/treeoutline.css#L9
; [2] https://github.com/binaryage/dirac/blob/acdf79e782510f6cdac609def3f561d5d04c86c8/front_end/ui/treeoutline.css#L80
:native-reference-wrapper-style (css "position: relative;"
"display: inline-flex;")
:native-reference-style (css "padding: 0px 3px;"
"margin: -4px 0px -2px;"
"position: relative;"
"top: 1px;")
:type-wrapper-style (css "position: relative;"
"padding-left: 1px;"
"border-radius: 2px;")
:type-ref-style (css "position: relative;")
:type-header-style (css (d/get-common-type-header-style)
"border-radius: 2px;")
:type-name-style (css "padding-right: 4px;")
:type-basis-style (css "margin-right: 3px;")
:type-basis-item-style (css (str "color: " (named-color :basis) ";")
"margin-right: 6px;")
:protocol-name-style (css "position: relative;")
:fast-protocol-style (css (d/get-common-protocol-style)
(str "color: " (named-color :fast-protocol) ";"))
:slow-protocol-style (css (d/get-common-protocol-style)
(str "color: " (named-color :slow-protocol) ";"))
:protocol-more-style (css "font-size: 8px;"
"position: relative;")
:protocol-ns-name-style (css (str "color: " (named-color :ns) ";"))
:list-style (css)
:body-field-name-style (css (str "color: " (named-color :field) ";"))
:body-field-value-style (css "margin-left: 6px;")
:header-field-name-style (css (str "color: " (named-color :field) ";"))
:body-field-td1-style (css "vertical-align: top;"
"padding: 0;"
"padding-right: 4px;")
:body-field-td2-style (css "vertical-align: top;"
"padding: 0;")
:body-field-td3-style (css "vertical-align: top;"
"padding: 0;")
:instance-header-style (css (d/type-outline-style)
"position:relative;")
:expandable-wrapper-style (css)
:standalone-type-style (css (d/type-outline-style))
:instance-custom-printing-style (css "position: relative;"
"padding: 0 2px 0 4px;")
:instance-custom-printing-wrapper-style (css "position: relative;"
"border-radius: 2px;")
:instance-type-header-style (css (d/get-common-type-header-style)
"border-radius: 2px 0 0 2px;")
:instance-body-fields-table-style (css "border-spacing: 0;"
"border-collapse: collapse;"
"margin-bottom: -2px;" ; weird spacing workaround
"display: inline-block;")
:fields-header-style (css "padding: 0px 3px;")
:protocol-method-name-style (css "margin-right: 6px;"
(str "color: " (named-color :protocol) " ;"))
:meta-wrapper-style (css (str "box-shadow: 0px 0px 0px 1px " (named-color :meta) " inset;")
"margin-top: 1px;"
"border-radius: 2px;")
:meta-reference-style (css (str "background-color:" (named-color :meta) ";")
"border-radius: 0 2px 2px 0;")
:meta-style (css (str "color: " (named-color :meta-text) ";")
"padding: 0px 3px;"
"-webkit-user-select: none;")
:meta-body-style (css (str "background-color: " (named-color :meta 0.1) ";")
(str "box-shadow: 0px 0px 0px 1px " (named-color :meta) " inset;")
"position: relative;"
"top: -1px;"
"padding: 3px 12px;"
"border-bottom-right-radius: 2px;")
:fn-ns-name-style (css (str "color: " (named-color :ns) ";"))
:fn-name-style (css (str "color: " (named-color :fn) ";")
"margin-right: 2px;")
:fn-args-style (css (str "color: " (named-color :fn-args) ";"))
:fn-multi-arity-args-indent-style (css "visibility: hidden;")
:standard-ol-style (css "list-style-type: none;"
"padding-left: 0px;"
"margin-top: 0px;"
"margin-bottom: 0px;"
"margin-left: 0px;")
:standard-ol-no-margin-style (css "list-style-type: none;"
"padding-left: 0px;"
"margin-top: 0px;"
"margin-bottom: 0px;"
"margin-left: 0px;")
:standard-li-style (css "margin-left: 0px;"
(d/get-body-line-common-style))
:standard-li-no-margin-style (css "margin-left: 0px;"
(d/get-body-line-common-style))
:aligned-li-style (css "margin-left: 0px;"
(d/get-body-line-common-style))
:body-items-more-style (css (str "background-color:" (named-color :more-background) ";")
"min-width: 50px;"
"display: inline-block;"
(str "color: " (named-color :more) ";")
"cursor: pointer;"
"line-height: 14px;"
"font-size: 10px;"
"border-radius: 2px;"
"padding: 0px 4px 0px 4px;"
"margin: 1px 0px 0px 0px;"
"-webkit-user-select: none;")
:body-style (css "display: inline-block;"
"padding: 3px 12px;"
(str "border-top: 2px solid " (named-color :body-border) ";")
"margin: 1px;"
"margin-top: 0px;"
(str "background-color: " (named-color :signature-background) ";"))
:index-style (css "min-width: 50px;"
"display: inline-block;"
"text-align: right;"
"vertical-align: top;"
(str "background-color: " (named-color :index-background) ";")
(str "color: " (named-color :index) ";")
"opacity: 0.5;"
"margin-right: 3px;"
"padding: 0px 4px 0px 4px;"
"margin: 1px 0px 0px 0px;"
"-webkit-user-select: none;")
:expanded-string-style (css "padding: 0px 12px 0px 12px;"
(str "color: " (named-color :string) ";")
"white-space: pre;"
(str "border-top: 1px solid " (named-color :expanded-string-border) ";")
"border-radius: 1px;"
"margin: 0px 0px 2px 0px;"
(str "background-color: " (named-color :expanded-string-background) ";"))
:default-envelope-style (css)
; -- pluggable api handlers --------------------------------------------------------------------------------------------
:header-pre-handler nil
:header-post-handelr nil
:has-body-pre-handler nil
:has-body-post-handler nil
:body-pre-handler nil
:body-post-handler nil
; ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
}))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/defaults.js","sources":["defaults.cljs?rel=1582812679192"],"lineCount":17,"mappings":";AAAA;;AAIA,AAAKA,mCAAe,KAAAC,gBAAA;AAAA,AAAA,0FAAA,kEAAA,uDAAA;GAAA;AACpB,AAAKC,qCAAiB,KAAAD,gBAAA;AAAA,AAAA,0FAAA;GAAA;AACtB,AAAKE,mCAAe,KAAAF,gBAAA;AAAA,AAAA,kDAAA,kDAAA,AAAAG,4DAAA,4DAAA,AAAAA,9FAAkBJ,wHACAE;GADlB;AAGpB,AAAKG,2BACH,KAAAJ,gBAAA;AAAA,AAAA,+CAAA,sFAAA,iGAAA,sFAAA,qEAAA,gFAAA,gEAAA,oGAAA,yFAAA,4FAAA,6EAAA,yGAAA,kFAAA,sFAAA,6FAAA,6FAAA,mFAAA,gFAAA,2FAAA,sFAAA,mFAAA,yEAAA,8FAAA,iEAAA,2EAAA,wEAAA,mEAAA,sEAAA,qEAAA,+EAAA,wEAAA,iHAAA,0FAAA,uDAAA,0EAAA,wFAAA,uEAAA,4DAAA,uFAAA,+DAAA,qFAAA,oFAAA,mHAAA,qFAAA,8DAAA,mEAAA,+EAAA,iGAAA,4DAAA,qEAAA,iFAAA,iGAAA,kFAAA,mEAAA,yGAAA,yEAAA,iGAAA,wEAAA,wEAAA,iDAAA,gGAAA,gDAAA,+EAAA,0EAAA,oFAAA,yFAAA,2EAAA,0EAAA,kEAAA,iEAAA,wFAAA,6EAAA,8FAAA,wFAAA,kFAAA,kDAAA,uFAAA,oEAAA,0EAAA,8EAAA,uFAAA,kEAAA,0FAAA,8EAAA,mEAAA,iEAAA,8EAAA,2EAAA,iFAAA,qEAAA,kDAAA,0GAAA,+DAAA,8EAAA,qFAAA,+EAAA,yFAAA,iFAAA,oGAAA,wHAAA,oEAAA,iEAAA,6EAAA,oEAAA,4GAAA,kJAAA,iEAAA,kEAAA,+EAAA,mEAAA,4DAAA,qFAAA,uEAAA,kEAAA,iFAAA,wFAAA,mDAAA,yEAAA,gFAAA,kEAAA,iEAAA,kFAAA,oFAAA,kEAAA,0FAAA,+EAAA,oEAAA,uFAAA,uEAAA,mHAAA,uEAAA,mGAAA,2FAAA,0FAAA,iGAAA,gDAAA,yGAAA,qGAAA,kFAAA,8FAAA,yDAAA,oFAAA,6EAAA,qFAAA,0EAAA,+FAAA,6DAAA,8GAAA,gFAAA,mGAAA,iGAAA,mFAAA,qEAAA,8EAAA,sFAAA,iGAAA,iEAAA,uIAAA,mFAAA,iEAAA,gFAAA,0EAAA,oFAAA,kFAAA,4DAAA,kEAAA,qFAAA,8FAAA,6DAAA,kFAAA,6FAAA,6EAAA,2EAAA,8GAAA,0EAAA,gFAAA,8EAAA,2EAAA,4EAAA,oGAAA,uFAAA,sFAAA,yEAAA,wGAAA,8EAAA,+EAAA,0GAAA,wEAAA,gHAAA,iGAAA,qEAAA,2EAAA,kFAAA,iFAAA,mEAAA,4EAAA,yFAAA,+EAAA,8EAAA,mFAAA,4EAAA,qGAAA,iGAAA,mFAAA,0FAAA,qHAAA,+EAAA,0EAAA,kFAAA,2EAAA,qFAAA,mFAAA,kFAAA,0DAAA,oFAAA,8FAAA,wFAAA,uEAAA,wFAAA,qDAAA,4JAAA,MAAA,6BAAA,mFAAA,qDAAA,2HAAA,mFAAA,qDAAA,8cAAA,GAAA,kBAAA,mFAAA,qDAAA,+FAAA,GAAA,MAAA,yCAAA,4pCAAA,mFAAA,gDAAA,4GAAA,mFAAA,qDAAA,6EAAA,KAAA,mFAAA,qDAAA,kFAAA,mFAAA,qDAAA,qGAAA,KAAA,mFAAA,qDAAA,sHAAA,wBAAA,aAAA,yDAAA,mFAAA,qDAAA,mLAAA,mFAAA,qDAAA,0EAAA,mFAAA,qDAAA,2MAAA,SAAA,KAAA,mFAAA,qDAAA,yEAAA,MAAA,mFAAA,qDAAA,4FAAA,KAAA,mFAAA,qDAAA,yEAAA,mFAAA,qDAAA,kFAAA,IAAA,WAAA,0eAAA,mFAAA,uDAAA,sHAAA,kDAAA,mFAAA,qDAAA,kFAAA,IAAA,iRAAA,KAAA,mFAAA,qDAAA,4FAAA,KAAA,mFAAA,qDAAA,2HAAA,mFAAA,qDAAA,upBAAA,MAAA,KAAA,sBAAA,KAAA,oPAAA,SAAA,qMAAA,mFAAA,qDAAA,+EAAA,mFAAA,qDAAA,qwBAAA,mFAAA,qDAAA,yFAAA,mFAAA,gDAAA,8IAAA,KAAA,oVAAA,MAAA,mIAAA,IAAA,mFAAA,iDAAA,4NAAA,SAAA,mFAAA,qDAAA,4EAAA,mFAAA,qDAAA,+jBAAA,IAAA,8eAAA,mFAAA,qDAAA,0KAAA,KAAA,mFAAA,qDAAA,0EAAA,mFAAA,qDAAA,kGAAA,mFAAA,qDAAA,8GAAA,mFAAA,qDAAA,4IAAA,MAAA,mFAAA,qDAAA,oFAAA,KAAA,SAAA,mFAAA,qDAAA,8EAAA,mFAAA,qDAAA,+FAAA,mFAAA,qDAAA,+HAAA,mFAAA,qDAAA,iJAAA,mFAAA,qDAAA,61BAAA,uHAAA,8CAAA,uBAAA,mFAAA,qDAAA,yGAAA,sDAAA,mFAAA,kDAAA,2FAAA,mFAAA,qDAAA,wHAAA,mFAAA,gDAAA,yGAAA,mFAAA,qDAAA,8JAAA,mFAAA,iDAAA,4FAAA,mJAAA,KAAA,IAAA,KAAA,4IAAA,IAAA,mFAAA,qDAAA,yUAAA,GAAA,KAAA,mFAAA,qDAAA,msCAAA,mFAAA,qDAAA,+EAAA,mFAAA,qDAAA,+FAAA,mFAAA,qDAAA,yGAAA,mFAAA,qDAAA,yEAAA,mFAAA,qDAAA,yIAAA,kFAAA,wBAAA,8BAAA,sBAAA,gCAAA,sBAAA,uCAAA,wBAAA,mCAAA,wBAAA,2BAAA,2BAAA,oCAAA,iCAAA,sCAAA,0BAAA,oCAAA,yBAAA,uBAAA,sBAAA,4BAAA,wBAAA,sBAAA,wBAAA,kCAAA,mCAAA,0BAAA,yBAAA,yBAAA,+BAAA,mCAAA,mCAAA,yBAAA,4BAAA,6BAAA,olBAAA,mFAAA,gDAAA,oHAAA,mFAAA,qDAAA,8GAAA,KAAA,mFAAA,qDAAA,kGAAA,mFAAA,gDAAA,4HAAA,KAAA,GAAA,mFAAA,qDAAA,sHAAA,mFAAA,qDAAA,qFAAA,mFAAA,qDAAA,8HAAA,IAAA,mFAAA,qDAAA,kFAAA,2FAAA,SAAA,KAAA,mFAAA,qDAAA,yEAAA,MAAA,mFAAA,qDAAA,2FAAA,mFAAA,qDAAA,0FAAA,2KAAA,mFAAA,qDAAA,gHAAA,GAAA,uEAAA,mFAAA,qDAAA,gIAAA,mFAAA,iDAAA,6FAAA,mFAAA,qDAAA,sFAAA,+FAAA,mFAAA,qDAAA,qIAAA,mFAAA,qDAAA,4lBAAA,IAAA,mFAAA,qDAAA,qYAAA,vk1BAyCuD,CAAA,OAAA,k5KA+CA,mFAAA,mFAAA,0FAAA,rCAAM,t0KACN,mFAAA,mFAAA,0FAAA,rCAAM,o\/QAMN,mFAAA,mFAAA,qDAAA,mGAAA,0+PAeA,mFAAA,mFAAA,kEAAA,bAAM,8EAAkB,mFAAA,mFAAA,qDAAA,gGAAA,y8QAExB,mFAAA,mFAAA,kEAAA,bAAM,xrZAIN,mFAAA,mFAAA,qDAAA,t7cACA,mFAAA,mFAAA,qDAAA,i5cACA,mFAAA,mFAAA,qDAAA,v2bACA,mFAAA,mFAAA,qDAAA,g5TAKA,mFAAA,mFAAA,qDAAA,8PAAA,vuUACA,mFAAA,mFAAA,qDAAA,8PAAA,o9MACA,mFAAA,mFAAA,qDAAA,8PAAA,25DACA,mFAAA,mFAAA,qDAAA,8PAAA,u2dACA,mFAAA,mFAAA,qDAAA,gQAAA,rnrBACA,mFAAA,mFAAA,qDAAA,8PAAA,+kDACA,mFAAA,mFAAA,qDAAA,8PAAA,mgWACA,mFAAA,mFAAA,qDAAA,8PAAA,mxEACA,mFAAA,mFAAA,qDAAA,4PAAA,hvdAsFA,1jIAIA,uriBACA,15hBAEA,k4bACA,t2bAMA,+lJACA,\/0PACA,k71BACA,1kYACA,hlEACA,u8CACA,59cACA,ytcACA,4tRAMA,gqEAEA,jyeAKA,8rXAGA,pwWACA,urMAEA,0kLACA,ttRACA,gobAEA,xntBACA,o7ZAEA,k9RAEA,rrmBAEA,uzBACA,8sNAEA,3rNACA,gqPACA,4cACA,1tLAGA,hlSAEA,6nFAEA,2mhBAEA,38oBACA,wtfACA,x+JAEA,23JAEA,i3CAEA,vtCAIA,9pTAEA,u6jBAGA,t\/sBAGA,mh0BAEA,vxFAGA,l9EAOA,9tlBACA,9EAEA,4ikBACA,7rSACA,\/uDAKA,v1DAKA,w9QAEA,wuRAEA,jkkBAGA,84CAWA,89QAMA,hnTAWA,+pMAOA;GAtXvD","names":["devtools.defaults\/known-features","cljs.core\/Delay","devtools.defaults\/default-features","devtools.defaults\/feature-groups","cljs.core\/deref","devtools.defaults\/config"]}

View file

@ -0,0 +1,87 @@
(ns devtools.format
(:require-macros [devtools.oops :refer [oget]])
(:require [devtools.context :as context]))
; WARNING this namespace is here for legacy reasons, it will be removed in future!
; ---------------------------------------------------------------------------------------------------------------------------
; PROTOCOL SUPPORT
(defprotocol ^:deprecated IDevtoolsFormat ; use IFormat instead
(-header [value])
(-has-body [value])
(-body [value]))
; -- helpers ----------------------------------------------------------------------------------------------------------------
(def ^:dynamic *setup-done*)
(defn setup! []
(when-not *setup-done*
(set! *setup-done* true)
; note: we cannote require devtools.formatters.templating or .markup because that would lead to circular requires
(def make-template-fn (oget (context/get-root) "devtools" "formatters" "templating" "make_template"))
(def make-group-fn (oget (context/get-root) "devtools" "formatters" "templating" "make_group"))
(def make-reference-fn (oget (context/get-root) "devtools" "formatters" "templating" "make_reference"))
(def make-surrogate-fn (oget (context/get-root) "devtools" "formatters" "templating" "make_surrogate"))
(def render-markup-fn (oget (context/get-root) "devtools" "formatters" "templating" "render_markup"))
(def <header>-fn (oget (context/get-root) "devtools" "formatters" "markup" "_LT_header_GT_"))
(def <standard-body>-fn (oget (context/get-root) "devtools" "formatters" "markup" "_LT_standard_body_GT_"))
(assert make-template-fn)
(assert make-group-fn)
(assert make-reference-fn)
(assert make-surrogate-fn)
(assert render-markup-fn)
(assert <header>-fn)
(assert <standard-body>-fn)))
(defn- render-markup [& args]
(setup!)
(apply render-markup-fn args))
; ---------------------------------------------------------------------------------------------------------------------------
; deprecated functionality, implemented for easier transition from v0.7.x to v0.8
(defn ^:deprecated make-template [& args]
(setup!)
(apply make-template-fn args))
(defn ^:deprecated make-group [& args]
(setup!)
(apply make-group-fn args))
(defn ^:deprecated make-surrogate [& args]
(setup!)
(apply make-surrogate-fn args))
(defn ^:deprecated template [& args]
(setup!)
(apply make-template-fn args))
(defn ^:deprecated group [& args]
(setup!)
(apply make-group-fn args))
(defn ^:deprecated surrogate [& args]
(setup!)
(apply make-surrogate-fn args))
(defn ^:deprecated reference [object & [state-override]]
(setup!)
(apply make-reference-fn [object #(merge % state-override)]))
(defn ^:deprecated standard-reference [target]
(setup!)
(make-template-fn :ol :standard-ol-style (make-template-fn :li :standard-li-style (make-reference-fn target))))
(defn ^:deprecated build-header [& args]
(setup!)
(render-markup (apply <header>-fn args)))
(defn ^:deprecated standard-body-template [lines & rest]
(setup!)
(let [args (concat [(map (fn [x] [x]) lines)] rest)]
(render-markup (apply <standard-body>-fn args))))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,617 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.format');
goog.require('cljs.core');
goog.require('devtools.context');
/**
* @interface
*/
devtools.format.IDevtoolsFormat = function(){};
devtools.format._header = (function devtools$format$_header(value){
if((((!((value == null)))) && ((!((value.devtools$format$IDevtoolsFormat$_header$arity$1 == null)))))){
return value.devtools$format$IDevtoolsFormat$_header$arity$1(value);
} else {
var x__4433__auto__ = (((value == null))?null:value);
var m__4434__auto__ = (devtools.format._header[goog.typeOf(x__4433__auto__)]);
if((!((m__4434__auto__ == null)))){
return m__4434__auto__.call(null,value);
} else {
var m__4431__auto__ = (devtools.format._header["_"]);
if((!((m__4431__auto__ == null)))){
return m__4431__auto__.call(null,value);
} else {
throw cljs.core.missing_protocol.call(null,"IDevtoolsFormat.-header",value);
}
}
}
});
devtools.format._has_body = (function devtools$format$_has_body(value){
if((((!((value == null)))) && ((!((value.devtools$format$IDevtoolsFormat$_has_body$arity$1 == null)))))){
return value.devtools$format$IDevtoolsFormat$_has_body$arity$1(value);
} else {
var x__4433__auto__ = (((value == null))?null:value);
var m__4434__auto__ = (devtools.format._has_body[goog.typeOf(x__4433__auto__)]);
if((!((m__4434__auto__ == null)))){
return m__4434__auto__.call(null,value);
} else {
var m__4431__auto__ = (devtools.format._has_body["_"]);
if((!((m__4431__auto__ == null)))){
return m__4431__auto__.call(null,value);
} else {
throw cljs.core.missing_protocol.call(null,"IDevtoolsFormat.-has-body",value);
}
}
}
});
devtools.format._body = (function devtools$format$_body(value){
if((((!((value == null)))) && ((!((value.devtools$format$IDevtoolsFormat$_body$arity$1 == null)))))){
return value.devtools$format$IDevtoolsFormat$_body$arity$1(value);
} else {
var x__4433__auto__ = (((value == null))?null:value);
var m__4434__auto__ = (devtools.format._body[goog.typeOf(x__4433__auto__)]);
if((!((m__4434__auto__ == null)))){
return m__4434__auto__.call(null,value);
} else {
var m__4431__auto__ = (devtools.format._body["_"]);
if((!((m__4431__auto__ == null)))){
return m__4431__auto__.call(null,value);
} else {
throw cljs.core.missing_protocol.call(null,"IDevtoolsFormat.-body",value);
}
}
}
});
devtools.format.setup_BANG_ = (function devtools$format$setup_BANG_(){
if(cljs.core.truth_(devtools.format._STAR_setup_done_STAR_)){
return null;
} else {
devtools.format._STAR_setup_done_STAR_ = true;
devtools.format.make_template_fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25302 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25302["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25303 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25303["templating"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25304 = temp__5718__auto____$2;
return (o25304["make_template"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
devtools.format.make_group_fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25305 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25305["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25306 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25306["templating"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25307 = temp__5718__auto____$2;
return (o25307["make_group"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
devtools.format.make_reference_fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25308 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25308["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25309 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25309["templating"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25310 = temp__5718__auto____$2;
return (o25310["make_reference"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
devtools.format.make_surrogate_fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25311 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25311["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25312 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25312["templating"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25313 = temp__5718__auto____$2;
return (o25313["make_surrogate"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
devtools.format.render_markup_fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25314 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25314["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25315 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25315["templating"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25316 = temp__5718__auto____$2;
return (o25316["render_markup"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
devtools.format._LT_header_GT__fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25317 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25317["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25318 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25318["markup"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25319 = temp__5718__auto____$2;
return (o25319["_LT_header_GT_"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
devtools.format._LT_standard_body_GT__fn = (function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o25320 = temp__5718__auto__;
var temp__5718__auto____$1 = (o25320["formatters"]);
if(cljs.core.truth_(temp__5718__auto____$1)){
var o25321 = temp__5718__auto____$1;
var temp__5718__auto____$2 = (o25321["markup"]);
if(cljs.core.truth_(temp__5718__auto____$2)){
var o25322 = temp__5718__auto____$2;
return (o25322["_LT_standard_body_GT_"]);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
})();
if(cljs.core.truth_(devtools.format.make_template_fn)){
} else {
throw (new Error("Assert failed: make-template-fn"));
}
if(cljs.core.truth_(devtools.format.make_group_fn)){
} else {
throw (new Error("Assert failed: make-group-fn"));
}
if(cljs.core.truth_(devtools.format.make_reference_fn)){
} else {
throw (new Error("Assert failed: make-reference-fn"));
}
if(cljs.core.truth_(devtools.format.make_surrogate_fn)){
} else {
throw (new Error("Assert failed: make-surrogate-fn"));
}
if(cljs.core.truth_(devtools.format.render_markup_fn)){
} else {
throw (new Error("Assert failed: render-markup-fn"));
}
if(cljs.core.truth_(devtools.format._LT_header_GT__fn)){
} else {
throw (new Error("Assert failed: <header>-fn"));
}
if(cljs.core.truth_(devtools.format._LT_standard_body_GT__fn)){
return null;
} else {
throw (new Error("Assert failed: <standard-body>-fn"));
}
}
});
devtools.format.render_markup = (function devtools$format$render_markup(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25324 = arguments.length;
var i__4731__auto___25325 = (0);
while(true){
if((i__4731__auto___25325 < len__4730__auto___25324)){
args__4736__auto__.push((arguments[i__4731__auto___25325]));
var G__25326 = (i__4731__auto___25325 + (1));
i__4731__auto___25325 = G__25326;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.render_markup.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.render_markup.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.render_markup_fn,args);
});
devtools.format.render_markup.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.render_markup.cljs$lang$applyTo = (function (seq25323){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25323));
});
devtools.format.make_template = (function devtools$format$make_template(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25328 = arguments.length;
var i__4731__auto___25329 = (0);
while(true){
if((i__4731__auto___25329 < len__4730__auto___25328)){
args__4736__auto__.push((arguments[i__4731__auto___25329]));
var G__25330 = (i__4731__auto___25329 + (1));
i__4731__auto___25329 = G__25330;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.make_template.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.make_template.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_template_fn,args);
});
devtools.format.make_template.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.make_template.cljs$lang$applyTo = (function (seq25327){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25327));
});
devtools.format.make_group = (function devtools$format$make_group(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25332 = arguments.length;
var i__4731__auto___25333 = (0);
while(true){
if((i__4731__auto___25333 < len__4730__auto___25332)){
args__4736__auto__.push((arguments[i__4731__auto___25333]));
var G__25334 = (i__4731__auto___25333 + (1));
i__4731__auto___25333 = G__25334;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.make_group.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.make_group.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_group_fn,args);
});
devtools.format.make_group.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.make_group.cljs$lang$applyTo = (function (seq25331){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25331));
});
devtools.format.make_surrogate = (function devtools$format$make_surrogate(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25336 = arguments.length;
var i__4731__auto___25337 = (0);
while(true){
if((i__4731__auto___25337 < len__4730__auto___25336)){
args__4736__auto__.push((arguments[i__4731__auto___25337]));
var G__25338 = (i__4731__auto___25337 + (1));
i__4731__auto___25337 = G__25338;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.make_surrogate.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.make_surrogate.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_surrogate_fn,args);
});
devtools.format.make_surrogate.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.make_surrogate.cljs$lang$applyTo = (function (seq25335){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25335));
});
devtools.format.template = (function devtools$format$template(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25340 = arguments.length;
var i__4731__auto___25341 = (0);
while(true){
if((i__4731__auto___25341 < len__4730__auto___25340)){
args__4736__auto__.push((arguments[i__4731__auto___25341]));
var G__25342 = (i__4731__auto___25341 + (1));
i__4731__auto___25341 = G__25342;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.template.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.template.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_template_fn,args);
});
devtools.format.template.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.template.cljs$lang$applyTo = (function (seq25339){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25339));
});
devtools.format.group = (function devtools$format$group(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25344 = arguments.length;
var i__4731__auto___25345 = (0);
while(true){
if((i__4731__auto___25345 < len__4730__auto___25344)){
args__4736__auto__.push((arguments[i__4731__auto___25345]));
var G__25346 = (i__4731__auto___25345 + (1));
i__4731__auto___25345 = G__25346;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.group.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.group.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_group_fn,args);
});
devtools.format.group.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.group.cljs$lang$applyTo = (function (seq25343){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25343));
});
devtools.format.surrogate = (function devtools$format$surrogate(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25348 = arguments.length;
var i__4731__auto___25349 = (0);
while(true){
if((i__4731__auto___25349 < len__4730__auto___25348)){
args__4736__auto__.push((arguments[i__4731__auto___25349]));
var G__25350 = (i__4731__auto___25349 + (1));
i__4731__auto___25349 = G__25350;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.surrogate.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.surrogate.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_surrogate_fn,args);
});
devtools.format.surrogate.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.surrogate.cljs$lang$applyTo = (function (seq25347){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25347));
});
devtools.format.reference = (function devtools$format$reference(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25358 = arguments.length;
var i__4731__auto___25359 = (0);
while(true){
if((i__4731__auto___25359 < len__4730__auto___25358)){
args__4736__auto__.push((arguments[i__4731__auto___25359]));
var G__25360 = (i__4731__auto___25359 + (1));
i__4731__auto___25359 = G__25360;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.format.reference.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.format.reference.cljs$core$IFn$_invoke$arity$variadic = (function (object,p__25354){
var vec__25355 = p__25354;
var state_override = cljs.core.nth.call(null,vec__25355,(0),null);
devtools.format.setup_BANG_.call(null);
return cljs.core.apply.call(null,devtools.format.make_reference_fn,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [object,((function (vec__25355,state_override){
return (function (p1__25351_SHARP_){
return cljs.core.merge.call(null,p1__25351_SHARP_,state_override);
});})(vec__25355,state_override))
], null));
});
devtools.format.reference.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.format.reference.cljs$lang$applyTo = (function (seq25352){
var G__25353 = cljs.core.first.call(null,seq25352);
var seq25352__$1 = cljs.core.next.call(null,seq25352);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__25353,seq25352__$1);
});
devtools.format.standard_reference = (function devtools$format$standard_reference(target){
devtools.format.setup_BANG_.call(null);
return devtools.format.make_template_fn.call(null,new cljs.core.Keyword(null,"ol","ol",932524051),new cljs.core.Keyword(null,"standard-ol-style","standard-ol-style",2143825615),devtools.format.make_template_fn.call(null,new cljs.core.Keyword(null,"li","li",723558921),new cljs.core.Keyword(null,"standard-li-style","standard-li-style",413442955),devtools.format.make_reference_fn.call(null,target)));
});
devtools.format.build_header = (function devtools$format$build_header(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25362 = arguments.length;
var i__4731__auto___25363 = (0);
while(true){
if((i__4731__auto___25363 < len__4730__auto___25362)){
args__4736__auto__.push((arguments[i__4731__auto___25363]));
var G__25364 = (i__4731__auto___25363 + (1));
i__4731__auto___25363 = G__25364;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.format.build_header.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.format.build_header.cljs$core$IFn$_invoke$arity$variadic = (function (args){
devtools.format.setup_BANG_.call(null);
return devtools.format.render_markup.call(null,cljs.core.apply.call(null,devtools.format._LT_header_GT__fn,args));
});
devtools.format.build_header.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.format.build_header.cljs$lang$applyTo = (function (seq25361){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq25361));
});
devtools.format.standard_body_template = (function devtools$format$standard_body_template(var_args){
var args__4736__auto__ = [];
var len__4730__auto___25367 = arguments.length;
var i__4731__auto___25368 = (0);
while(true){
if((i__4731__auto___25368 < len__4730__auto___25367)){
args__4736__auto__.push((arguments[i__4731__auto___25368]));
var G__25369 = (i__4731__auto___25368 + (1));
i__4731__auto___25368 = G__25369;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.format.standard_body_template.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.format.standard_body_template.cljs$core$IFn$_invoke$arity$variadic = (function (lines,rest){
devtools.format.setup_BANG_.call(null);
var args = cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.map.call(null,(function (x){
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [x], null);
}),lines)], null),rest);
return devtools.format.render_markup.call(null,cljs.core.apply.call(null,devtools.format._LT_standard_body_GT__fn,args));
});
devtools.format.standard_body_template.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.format.standard_body_template.cljs$lang$applyTo = (function (seq25365){
var G__25366 = cljs.core.first.call(null,seq25365);
var seq25365__$1 = cljs.core.next.call(null,seq25365);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__25366,seq25365__$1);
});
//# sourceMappingURL=format.js.map?rel=1582812679060

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,102 @@
(ns devtools.formatters
(:require-macros [devtools.oops :refer [unchecked-aget unchecked-aset]])
(:require [goog.labs.userAgent.browser :as ua]
[devtools.prefs :as prefs]
[devtools.util :refer [get-formatters-safe set-formatters-safe! in-node-context?]]
[devtools.context :as context]
[devtools.formatters.core :refer [header-api-call has-body-api-call body-api-call]]))
(def ^:dynamic *installed* false)
(def ^:dynamic *sanitizer-enabled* true)
(def ^:dynamic *monitor-enabled* false)
(def obsolete-formatter-key "devtoolsFormatter")
(defn ^:dynamic available? []
(or (in-node-context?) ; node.js or Chrome 47+
(and (ua/isChrome) (ua/isVersionOrHigher 47))))
(deftype CLJSDevtoolsFormatter [])
; devtools.debug namespace may not be present => no debugging
(defn- find-fn-in-debug-ns [fn-name]
(try
(unchecked-aget (context/get-root) "devtools" "debug" fn-name)
(catch :default _
nil)))
(defn- monitor-api-call-if-avail [name api-call args]
(if-let [monitor-api-call (find-fn-in-debug-ns "monitor_api_call")]
(monitor-api-call name api-call args)
(apply api-call args)))
(defn- log-exception-if-avail [& args]
(if-let [log-exception (find-fn-in-debug-ns "log_exception")]
(apply log-exception args)))
; monitors api calls in a separate debug console if debug namespace is available
(defn- monitor-api-calls [name api-call]
(fn [& args]
(if-not *monitor-enabled*
(apply api-call args)
(monitor-api-call-if-avail name api-call args))))
; wraps our api calls in a try-catch block to prevent leaking of exceptions in case something went wrong
(defn- sanitize [name api-call]
(fn [& args]
(if-not *sanitizer-enabled*
(apply api-call args) ; raw API call
(try
(apply api-call args) ; wrapped API call
(catch :default e
(log-exception-if-avail (str name ": " e))
nil)))))
(defn- build-cljs-formatter []
(let [wrap (fn [name api-call]
(let [monitor (partial monitor-api-calls name)
sanitizer (partial sanitize name)]
((comp monitor sanitizer) api-call)
api-call))
formatter (CLJSDevtoolsFormatter.)
define! (fn [name fn]
(unchecked-aset formatter name (wrap name fn)))]
(define! "header" header-api-call)
(define! "hasBody" has-body-api-call)
(define! "body" body-api-call)
formatter))
(defn- is-ours? [o]
(instance? CLJSDevtoolsFormatter o))
(defn- present? []
(let [formatters (get-formatters-safe)]
(boolean (some is-ours? formatters))))
(defn- install-our-formatter! [formatter]
(let [formatters (.slice (get-formatters-safe))] ; slice effectively duplicates the array
(.push formatters formatter) ; acting on duplicated array
(set-formatters-safe! formatters)
(if (prefs/pref :legacy-formatter)
(unchecked-aset (context/get-root) obsolete-formatter-key formatter))))
(defn- uninstall-our-formatters! []
(let [new-formatters (remove is-ours? (vec (get-formatters-safe)))
new-formatters-js (if (empty? new-formatters) nil (into-array new-formatters))]
(set-formatters-safe! new-formatters-js)))
; -- installation -----------------------------------------------------------------------------------------------------------
(defn installed? []
*installed*)
(defn install! []
(when-not *installed*
(set! *installed* true)
(install-our-formatter! (build-cljs-formatter))
true))
(defn uninstall! []
(when *installed*
(set! *installed* false)
(uninstall-our-formatters!)))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,232 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters');
goog.require('cljs.core');
goog.require('goog.labs.userAgent.browser');
goog.require('devtools.prefs');
goog.require('devtools.util');
goog.require('devtools.context');
goog.require('devtools.formatters.core');
devtools.formatters._STAR_installed_STAR_ = false;
devtools.formatters._STAR_sanitizer_enabled_STAR_ = true;
devtools.formatters._STAR_monitor_enabled_STAR_ = false;
devtools.formatters.obsolete_formatter_key = "devtoolsFormatter";
devtools.formatters.available_QMARK_ = (function devtools$formatters$available_QMARK_(){
var or__4131__auto__ = devtools.util.in_node_context_QMARK_.call(null);
if(or__4131__auto__){
return or__4131__auto__;
} else {
var and__4120__auto__ = goog.labs.userAgent.browser.isChrome();
if(cljs.core.truth_(and__4120__auto__)){
return goog.labs.userAgent.browser.isVersionOrHigher((47));
} else {
return and__4120__auto__;
}
}
});
/**
* @constructor
*/
devtools.formatters.CLJSDevtoolsFormatter = (function (){
});
devtools.formatters.CLJSDevtoolsFormatter.getBasis = (function (){
return cljs.core.PersistentVector.EMPTY;
});
devtools.formatters.CLJSDevtoolsFormatter.cljs$lang$type = true;
devtools.formatters.CLJSDevtoolsFormatter.cljs$lang$ctorStr = "devtools.formatters/CLJSDevtoolsFormatter";
devtools.formatters.CLJSDevtoolsFormatter.cljs$lang$ctorPrWriter = (function (this__4374__auto__,writer__4375__auto__,opt__4376__auto__){
return cljs.core._write.call(null,writer__4375__auto__,"devtools.formatters/CLJSDevtoolsFormatter");
});
/**
* Positional factory function for devtools.formatters/CLJSDevtoolsFormatter.
*/
devtools.formatters.__GT_CLJSDevtoolsFormatter = (function devtools$formatters$__GT_CLJSDevtoolsFormatter(){
return (new devtools.formatters.CLJSDevtoolsFormatter());
});
devtools.formatters.find_fn_in_debug_ns = (function devtools$formatters$find_fn_in_debug_ns(fn_name){
try{return (devtools.context.get_root.call(null)["devtools"]["debug"][fn_name]);
}catch (e28361){var _ = e28361;
return null;
}});
devtools.formatters.monitor_api_call_if_avail = (function devtools$formatters$monitor_api_call_if_avail(name,api_call,args){
var temp__5718__auto__ = devtools.formatters.find_fn_in_debug_ns.call(null,"monitor_api_call");
if(cljs.core.truth_(temp__5718__auto__)){
var monitor_api_call = temp__5718__auto__;
return monitor_api_call.call(null,name,api_call,args);
} else {
return cljs.core.apply.call(null,api_call,args);
}
});
devtools.formatters.log_exception_if_avail = (function devtools$formatters$log_exception_if_avail(var_args){
var args__4736__auto__ = [];
var len__4730__auto___28363 = arguments.length;
var i__4731__auto___28364 = (0);
while(true){
if((i__4731__auto___28364 < len__4730__auto___28363)){
args__4736__auto__.push((arguments[i__4731__auto___28364]));
var G__28365 = (i__4731__auto___28364 + (1));
i__4731__auto___28364 = G__28365;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.formatters.log_exception_if_avail.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.formatters.log_exception_if_avail.cljs$core$IFn$_invoke$arity$variadic = (function (args){
var temp__5718__auto__ = devtools.formatters.find_fn_in_debug_ns.call(null,"log_exception");
if(cljs.core.truth_(temp__5718__auto__)){
var log_exception = temp__5718__auto__;
return cljs.core.apply.call(null,log_exception,args);
} else {
return null;
}
});
devtools.formatters.log_exception_if_avail.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.formatters.log_exception_if_avail.cljs$lang$applyTo = (function (seq28362){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq28362));
});
devtools.formatters.monitor_api_calls = (function devtools$formatters$monitor_api_calls(name,api_call){
return (function() {
var G__28366__delegate = function (args){
if((!(devtools.formatters._STAR_monitor_enabled_STAR_))){
return cljs.core.apply.call(null,api_call,args);
} else {
return devtools.formatters.monitor_api_call_if_avail.call(null,name,api_call,args);
}
};
var G__28366 = function (var_args){
var args = null;
if (arguments.length > 0) {
var G__28367__i = 0, G__28367__a = new Array(arguments.length - 0);
while (G__28367__i < G__28367__a.length) {G__28367__a[G__28367__i] = arguments[G__28367__i + 0]; ++G__28367__i;}
args = new cljs.core.IndexedSeq(G__28367__a,0,null);
}
return G__28366__delegate.call(this,args);};
G__28366.cljs$lang$maxFixedArity = 0;
G__28366.cljs$lang$applyTo = (function (arglist__28368){
var args = cljs.core.seq(arglist__28368);
return G__28366__delegate(args);
});
G__28366.cljs$core$IFn$_invoke$arity$variadic = G__28366__delegate;
return G__28366;
})()
;
});
devtools.formatters.sanitize = (function devtools$formatters$sanitize(name,api_call){
return (function() {
var G__28370__delegate = function (args){
if((!(devtools.formatters._STAR_sanitizer_enabled_STAR_))){
return cljs.core.apply.call(null,api_call,args);
} else {
try{return cljs.core.apply.call(null,api_call,args);
}catch (e28369){var e = e28369;
devtools.formatters.log_exception_if_avail.call(null,[cljs.core.str.cljs$core$IFn$_invoke$arity$1(name),": ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(e)].join(''));
return null;
}}
};
var G__28370 = function (var_args){
var args = null;
if (arguments.length > 0) {
var G__28371__i = 0, G__28371__a = new Array(arguments.length - 0);
while (G__28371__i < G__28371__a.length) {G__28371__a[G__28371__i] = arguments[G__28371__i + 0]; ++G__28371__i;}
args = new cljs.core.IndexedSeq(G__28371__a,0,null);
}
return G__28370__delegate.call(this,args);};
G__28370.cljs$lang$maxFixedArity = 0;
G__28370.cljs$lang$applyTo = (function (arglist__28372){
var args = cljs.core.seq(arglist__28372);
return G__28370__delegate(args);
});
G__28370.cljs$core$IFn$_invoke$arity$variadic = G__28370__delegate;
return G__28370;
})()
;
});
devtools.formatters.build_cljs_formatter = (function devtools$formatters$build_cljs_formatter(){
var wrap = (function (name,api_call){
var monitor = cljs.core.partial.call(null,devtools.formatters.monitor_api_calls,name);
var sanitizer = cljs.core.partial.call(null,devtools.formatters.sanitize,name);
cljs.core.comp.call(null,monitor,sanitizer).call(null,api_call);
return api_call;
});
var formatter = (new devtools.formatters.CLJSDevtoolsFormatter());
var define_BANG_ = ((function (wrap,formatter){
return (function (name,fn){
return (formatter[name] = wrap.call(null,name,fn));
});})(wrap,formatter))
;
define_BANG_.call(null,"header",devtools.formatters.core.header_api_call);
define_BANG_.call(null,"hasBody",devtools.formatters.core.has_body_api_call);
define_BANG_.call(null,"body",devtools.formatters.core.body_api_call);
return formatter;
});
devtools.formatters.is_ours_QMARK_ = (function devtools$formatters$is_ours_QMARK_(o){
return (o instanceof devtools.formatters.CLJSDevtoolsFormatter);
});
devtools.formatters.present_QMARK_ = (function devtools$formatters$present_QMARK_(){
var formatters = devtools.util.get_formatters_safe.call(null);
return cljs.core.boolean$.call(null,cljs.core.some.call(null,devtools.formatters.is_ours_QMARK_,formatters));
});
devtools.formatters.install_our_formatter_BANG_ = (function devtools$formatters$install_our_formatter_BANG_(formatter){
var formatters = devtools.util.get_formatters_safe.call(null).slice();
formatters.push(formatter);
devtools.util.set_formatters_safe_BANG_.call(null,formatters);
if(cljs.core.truth_(devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"legacy-formatter","legacy-formatter",-1954119499)))){
return (devtools.context.get_root.call(null)[devtools.formatters.obsolete_formatter_key] = formatter);
} else {
return null;
}
});
devtools.formatters.uninstall_our_formatters_BANG_ = (function devtools$formatters$uninstall_our_formatters_BANG_(){
var new_formatters = cljs.core.remove.call(null,devtools.formatters.is_ours_QMARK_,cljs.core.vec.call(null,devtools.util.get_formatters_safe.call(null)));
var new_formatters_js = ((cljs.core.empty_QMARK_.call(null,new_formatters))?null:cljs.core.into_array.call(null,new_formatters));
return devtools.util.set_formatters_safe_BANG_.call(null,new_formatters_js);
});
devtools.formatters.installed_QMARK_ = (function devtools$formatters$installed_QMARK_(){
return devtools.formatters._STAR_installed_STAR_;
});
devtools.formatters.install_BANG_ = (function devtools$formatters$install_BANG_(){
if(devtools.formatters._STAR_installed_STAR_){
return null;
} else {
devtools.formatters._STAR_installed_STAR_ = true;
devtools.formatters.install_our_formatter_BANG_.call(null,devtools.formatters.build_cljs_formatter.call(null));
return true;
}
});
devtools.formatters.uninstall_BANG_ = (function devtools$formatters$uninstall_BANG_(){
if(devtools.formatters._STAR_installed_STAR_){
devtools.formatters._STAR_installed_STAR_ = false;
return devtools.formatters.uninstall_our_formatters_BANG_.call(null);
} else {
return null;
}
});
//# sourceMappingURL=formatters.js.map?rel=1582812680934

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/formatters.js","sources":["formatters.cljs?rel=1582812680934"],"lineCount":232,"mappings":";AAAA;;;;;;;AAQA,4CAAA,5CAAeA;AACf,oDAAA,pDAAeC;AACf,kDAAA,lDAAeC;AAEf,6CAAA,7CAAKC;AAEL,uCAAA,vCAAgBC;AAAhB,AACE,IAAAC,mBAAI,AAACC;AAAL,AAAA,GAAAD;AAAAA;;AACI,IAAAE,oBAAK,AAACC;AAAN,AAAA,oBAAAD;AAAmB,qDAAA,9CAACE;;AAApBF;;;;AAEN,AAAA;;;;;;AAAA;AAAA,AAAA,qDAAA,rDAASO;AAAT,AAAA,AAAA;;;AAAA,AAAA,2DAAA,3DAASA;;AAAT,AAAA,8DAAA,9DAASA;;AAAT,AAAA,mEAAA,WAAAJ,mBAAAC,qBAAAC,tHAASE;AAAT,AAAA,OAAAD,2BAAAF,qBAAA;;;AAAA;;;iDAAA,jDAASI;AAAT,AAAA,YAAAD;;;AAASA,AAGT,0CAAA,1CAAOE,4FAAqBC;AAA5B,AACE,IAAA,AACE,6CAAA,YAAA,jDAAgB,AAACE,0DAAqCF;gBADxD,QAAAC,JAEkBE;AAFlB,AAAA;;AAKF,gDAAA,hDAAOC,wGAA2BC,KAAKC,SAASC;AAAhD,AACE,IAAAC,qBAA0B,kDAAA,lDAACT;AAA3B,AAAA,oBAAAS;AAAA,uBAAAA,nBAASC;AAAT,AACE,OAACA,2BAAiBJ,KAAKC,SAASC;;AAChC,OAACG,0BAAMJ,SAASC;;;AAEpB,AAAA,6CAAA,qDAAAI,lGAAOM;AAAP,AAAA,IAAAL,qBAAA;AAAA,AAAA,IAAAC,0BAAA,AAAA;AAAA,AAAA,IAAAC,wBAAA;;AAAA,AAAA,GAAA,CAAAA,wBAAAD;AAAA,AAAA,AAAAD,wBAAA,CAAA,UAAAE;;AAAA,eAAA,CAAAA,wBAAA;;;;AAAA;;;;AAAA,IAAAC,uBAAA,EAAA,CAAA,MAAA,AAAAH,4BAAA,AAAA,KAAAI,qBAAA,AAAAJ,yBAAA,KAAA,IAAA,OAAA;AAAA,AAAA,OAAAK,gFAAAF;;;AAAA,AAAA,AAAA,kFAAA,lFAAOE,6FAA0BV;AAAjC,AACE,IAAAC,qBAAuB,kDAAA,lDAACT;AAAxB,AAAA,oBAAAS;AAAA,oBAAAA,hBAASa;AAAT,AACE,OAACX,0BAAMW,cAAcd;;AADvB;;;;AADF,AAAA,qEAAA,rEAAOU;;AAAP;AAAA,AAAA,+DAAA,WAAAC,1EAAOD;AAAP,AAAA,IAAAE,qBAAA;AAAA,AAAA,OAAAA,wDAAA,AAAAC,wBAAAF;;;AAAA,AAKA,wCAAA,xCAAOI,wFAAmBjB,KAAKC;AAA\/B,AACE;mCAAOC;AAAP,AACE,GAAA,GAAQtB;AACN,OAACyB,0BAAMJ,SAASC;;AAChB,OAACH,wDAA0BC,KAAKC,SAASC;;;;IAHtCA;;;;EAAAA;;oCAAAA;;;IAAAA;0BAAAA;;;;;;;AAMT,+BAAA,\/BAAOgB,sEAAUlB,KAAKC;AAAtB,AACE;mCAAOC;AAAP,AACE,GAAA,GAAQvB;AACN,OAAC0B,0BAAMJ,SAASC;;AAChB,IAAA,AACE,OAACG,0BAAMJ,SAASC;gBADlB,QAAAiB,JAEkBC;AAFlB,AAGI,AAACR,qDAAuB,mDAAA,NAAKZ,uDAAUoB;;AAH3C;;;;IAHGlB;;;;EAAAA;;oCAAAA;;;IAAAA;0BAAAA;;;;;;;AAST,2CAAA,3CAAOmB;AAAP,AACE,IAAMC,OAAK,WAAKtB,KAAKC;AAAV,AACE,IAAMsB,UAAQ,AAACC,4BAAQP,sCAAkBjB;IACnCyB,YAAU,AAACD,4BAAQN,6BAASlB;AADlC,AAEE,AAAC,AAAC0B,yBAAKH,QAAQE,qBAAWxB;;AAC1BA;;IACT0B,YAAU,KAAAnC;IACVoC,eAAQ;kBAAK5B,KAAK6B;AAAV,AACE,QAAgBF,UAAU3B,QAAK,AAACsB,eAAKtB,KAAK6B;;;AAP1D,AAQE,uBAAA,vBAACD,gCAAiBE;;AAClB,uBAAA,vBAACF,iCAAkBG;;AACnB,uBAAA,vBAACH,8BAAeI;;AAChBL;;AAEJ,qCAAA,rCAAOM,kFAAUC;AAAjB,AACE,qBAAW1C,bAAsB0C;;AAEnC,qCAAA,rCAAOC;AAAP,AACE,IAAMC,aAAW,AAACC;AAAlB,AACE,OAACC,6BAAQ,AAACC,yBAAKN,mCAASG;;AAE5B,kDAAA,lDAAOI,4GAAwBb;AAA\/B,AACE,IAAMS,aAAW,AAAQ,AAACC;AAA1B,AACE,AAAOD,gBAAWT;;AAClB,AAACc,kDAAqBL;;AACtB,oBAAI,8BAAA,9BAACM;AACH,QAAgB,AAAC7C,qCAAkBhB,8CAAuB8C;;AAD5D;;;AAGJ,qDAAA,rDAAOgB;AAAP,AACE,IAAMC,iBAAe,AAACC,2BAAOZ,mCAAS,AAACa,wBAAI,AAACT;IACtCU,oBAAkB,oDAAA,lDAAI,AAACC,iCAAOJ,sBAAoB,AAACK,+BAAWL;AADpE,AAEE,OAACH,kDAAqBM;;AAI1B,uCAAA,vCAAMG;AAAN,AACExE;;AAEF,oCAAA,pCAAMyE;AAAN,AACE,GAAUzE;AAAV;;AAAA,AACE,4CAAA,5CAAMA;;AACN,AAAC8D,0DAAuB,AAACnB;;AAF3B;;;AAKF,sCAAA,tCAAM+B;AAAN,AACE,GAAM1E;AAAN,AACE,4CAAA,5CAAMA;;AACN,OAACiE;;AAFH","names":["devtools.formatters\/*installed*","devtools.formatters\/*sanitizer-enabled*","devtools.formatters\/*monitor-enabled*","devtools.formatters\/obsolete-formatter-key","devtools.formatters\/available?","or__4131__auto__","devtools.util\/in-node-context?","and__4120__auto__","goog.labs.userAgent.browser\/isChrome","goog.labs.userAgent.browser\/isVersionOrHigher","this__4374__auto__","writer__4375__auto__","opt__4376__auto__","cljs.core\/-write","devtools.formatters\/CLJSDevtoolsFormatter","devtools.formatters\/->CLJSDevtoolsFormatter","devtools.formatters\/find-fn-in-debug-ns","fn-name","e28361","devtools.context\/get-root","_","devtools.formatters\/monitor-api-call-if-avail","name","api-call","args","temp__5718__auto__","monitor-api-call","cljs.core\/apply","var_args","args__4736__auto__","len__4730__auto__","i__4731__auto__","argseq__4737__auto__","cljs.core\/IndexedSeq","devtools.formatters\/log-exception-if-avail","seq28362","self__4718__auto__","cljs.core\/seq","log-exception","devtools.formatters\/monitor-api-calls","devtools.formatters\/sanitize","e28369","e","devtools.formatters\/build-cljs-formatter","wrap","monitor","cljs.core\/partial","sanitizer","cljs.core\/comp","formatter","define!","fn","devtools.formatters.core\/header-api-call","devtools.formatters.core\/has-body-api-call","devtools.formatters.core\/body-api-call","devtools.formatters\/is-ours?","o","devtools.formatters\/present?","formatters","devtools.util\/get-formatters-safe","cljs.core\/boolean","cljs.core\/some","devtools.formatters\/install-our-formatter!","devtools.util\/set-formatters-safe!","devtools.prefs\/pref","devtools.formatters\/uninstall-our-formatters!","new-formatters","cljs.core\/remove","cljs.core\/vec","new-formatters-js","cljs.core\/empty?","cljs.core\/into-array","devtools.formatters\/installed?","devtools.formatters\/install!","devtools.formatters\/uninstall!"]}

View file

@ -0,0 +1,88 @@
(ns devtools.formatters.budgeting
(:require-macros [devtools.oops :refer [oget oset ocall]])
(:require [devtools.formatters.templating :refer [render-markup]]
[devtools.formatters.state :refer [get-depth-budget set-depth-budget]]
[devtools.formatters.helpers :refer [pref]]
[devtools.formatters.markup :refer [<header-expander>]]))
; This functionality provides a workaround to issue #22 (https://github.com/binaryage/cljs-devtools/issues/22).
; The idea is to track hierarchy depth for json-ml(s) we are generating.
; If we are about to cross the depth limit hardcoded in WebKit,
; instead we render simple expandable placeholders which resume full rendering in their bodies (when expanded by user).
; Note that this technique has some quirks, it may break styling in some pathological cases.
; we need to reserve some depth levels for our expander symbol markup
(def header-expander-depth-cost 2)
; -- tracking over-budget values -------------------------------------------------------------------------------------------
; note: phantomjs does not have WeakSet, so we have to emulate it when testing
(def over-budget-values (if (exists? js/WeakSet) (js/WeakSet.) (volatile! #{})))
(defn add-over-budget-value! [value]
(if (volatile? over-budget-values)
(vreset! over-budget-values (conj @over-budget-values value))
(ocall over-budget-values "add" value)))
(defn delete-over-budget-value! [value]
(if (volatile? over-budget-values)
(vreset! over-budget-values (disj @over-budget-values value))
(ocall over-budget-values "delete" value)))
(defn has-over-budget-value? [value]
(if (volatile? over-budget-values)
(contains? @over-budget-values value)
(ocall over-budget-values "has" value)))
; -- depth budget accounting ------------------------------------------------------------------------------------------------
(defn object-reference? [json-ml]
(= (first json-ml) "object"))
(defn determine-depth [json-ml]
(if (array? json-ml)
(inc (apply max (map determine-depth json-ml)))
0))
(defn has-any-object-reference? [json-ml]
(if (array? json-ml)
(if (object-reference? json-ml)
true
(some has-any-object-reference? json-ml))))
(defn transfer-remaining-depth-budget! [object-reference depth-budget]
{:pre [(not (neg? depth-budget))]}
(let [data (second object-reference)
_ (assert (object? data))
config (oget data "config")]
(oset data ["config"] (set-depth-budget config depth-budget))))
(defn distribute-budget! [json-ml depth-budget]
{:pre [(not (neg? depth-budget))]}
(if (array? json-ml)
(let [new-depth-budget (dec depth-budget)]
(if (object-reference? json-ml)
(transfer-remaining-depth-budget! json-ml new-depth-budget)
(doseq [item json-ml]
(distribute-budget! item new-depth-budget)))))
json-ml)
; -- api --------------------------------------------------------------------------------------------------------------------
(defn was-over-budget?! [value]
(when (has-over-budget-value? value)
(delete-over-budget-value! value)
true))
(defn alter-json-ml-to-fit-in-remaining-budget! [value json-ml]
(if-let [initial-hierarchy-depth-budget (pref :initial-hierarchy-depth-budget)] ; this is hardcoded in InjectedScriptSource.js in WebKit, look for maxCustomPreviewRecursionDepth
(let [remaining-depth-budget (or (get-depth-budget) (dec initial-hierarchy-depth-budget))
depth (determine-depth json-ml)
final? (not (has-any-object-reference? json-ml))
needed-depth (if final? depth (+ depth header-expander-depth-cost))]
(if (>= remaining-depth-budget needed-depth)
(distribute-budget! json-ml remaining-depth-budget)
(let [expander-ml (render-markup (<header-expander> value))]
(add-over-budget-value! value) ; we need to record over-budget values to for later was-over-budget?! check, see has-body* in formatters.core
expander-ml)))
json-ml))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,182 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters.budgeting');
goog.require('cljs.core');
goog.require('devtools.formatters.templating');
goog.require('devtools.formatters.state');
goog.require('devtools.formatters.helpers');
goog.require('devtools.formatters.markup');
devtools.formatters.budgeting.header_expander_depth_cost = (2);
devtools.formatters.budgeting.over_budget_values = (((typeof WeakSet !== 'undefined'))?(new WeakSet()):cljs.core.volatile_BANG_.call(null,cljs.core.PersistentHashSet.EMPTY));
devtools.formatters.budgeting.add_over_budget_value_BANG_ = (function devtools$formatters$budgeting$add_over_budget_value_BANG_(value){
if(cljs.core.volatile_QMARK_.call(null,devtools.formatters.budgeting.over_budget_values)){
return cljs.core.vreset_BANG_.call(null,devtools.formatters.budgeting.over_budget_values,cljs.core.conj.call(null,cljs.core.deref.call(null,devtools.formatters.budgeting.over_budget_values),value));
} else {
var o__25266__auto__ = devtools.formatters.budgeting.over_budget_values;
return (o__25266__auto__["add"]).call(o__25266__auto__,value);
}
});
devtools.formatters.budgeting.delete_over_budget_value_BANG_ = (function devtools$formatters$budgeting$delete_over_budget_value_BANG_(value){
if(cljs.core.volatile_QMARK_.call(null,devtools.formatters.budgeting.over_budget_values)){
return cljs.core.vreset_BANG_.call(null,devtools.formatters.budgeting.over_budget_values,cljs.core.disj.call(null,cljs.core.deref.call(null,devtools.formatters.budgeting.over_budget_values),value));
} else {
var o__25266__auto__ = devtools.formatters.budgeting.over_budget_values;
return (o__25266__auto__["delete"]).call(o__25266__auto__,value);
}
});
devtools.formatters.budgeting.has_over_budget_value_QMARK_ = (function devtools$formatters$budgeting$has_over_budget_value_QMARK_(value){
if(cljs.core.volatile_QMARK_.call(null,devtools.formatters.budgeting.over_budget_values)){
return cljs.core.contains_QMARK_.call(null,cljs.core.deref.call(null,devtools.formatters.budgeting.over_budget_values),value);
} else {
var o__25266__auto__ = devtools.formatters.budgeting.over_budget_values;
return (o__25266__auto__["has"]).call(o__25266__auto__,value);
}
});
devtools.formatters.budgeting.object_reference_QMARK_ = (function devtools$formatters$budgeting$object_reference_QMARK_(json_ml){
return cljs.core._EQ_.call(null,cljs.core.first.call(null,json_ml),"object");
});
devtools.formatters.budgeting.determine_depth = (function devtools$formatters$budgeting$determine_depth(json_ml){
if(cljs.core.array_QMARK_.call(null,json_ml)){
return (cljs.core.apply.call(null,cljs.core.max,cljs.core.map.call(null,devtools.formatters.budgeting.determine_depth,json_ml)) + (1));
} else {
return (0);
}
});
devtools.formatters.budgeting.has_any_object_reference_QMARK_ = (function devtools$formatters$budgeting$has_any_object_reference_QMARK_(json_ml){
if(cljs.core.array_QMARK_.call(null,json_ml)){
if(devtools.formatters.budgeting.object_reference_QMARK_.call(null,json_ml)){
return true;
} else {
return cljs.core.some.call(null,devtools.formatters.budgeting.has_any_object_reference_QMARK_,json_ml);
}
} else {
return null;
}
});
devtools.formatters.budgeting.transfer_remaining_depth_budget_BANG_ = (function devtools$formatters$budgeting$transfer_remaining_depth_budget_BANG_(object_reference,depth_budget){
if((!((depth_budget < (0))))){
} else {
throw (new Error("Assert failed: (not (neg? depth-budget))"));
}
var data = cljs.core.second.call(null,object_reference);
var _ = ((cljs.core.object_QMARK_.call(null,data))?null:(function(){throw (new Error("Assert failed: (object? data)"))})());
var config = (data["config"]);
var G__28089 = data;
var target__25271__auto__ = G__28089;
if(cljs.core.truth_(target__25271__auto__)){
} else {
throw (new Error(["Assert failed: ",["unable to locate object path ",null," in ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(G__28089)].join(''),"\n","target__25271__auto__"].join('')));
}
(target__25271__auto__["config"] = devtools.formatters.state.set_depth_budget.call(null,config,depth_budget));
return G__28089;
});
devtools.formatters.budgeting.distribute_budget_BANG_ = (function devtools$formatters$budgeting$distribute_budget_BANG_(json_ml,depth_budget){
if((!((depth_budget < (0))))){
} else {
throw (new Error("Assert failed: (not (neg? depth-budget))"));
}
if(cljs.core.array_QMARK_.call(null,json_ml)){
var new_depth_budget_28094 = (depth_budget - (1));
if(devtools.formatters.budgeting.object_reference_QMARK_.call(null,json_ml)){
devtools.formatters.budgeting.transfer_remaining_depth_budget_BANG_.call(null,json_ml,new_depth_budget_28094);
} else {
var seq__28090_28095 = cljs.core.seq.call(null,json_ml);
var chunk__28091_28096 = null;
var count__28092_28097 = (0);
var i__28093_28098 = (0);
while(true){
if((i__28093_28098 < count__28092_28097)){
var item_28099 = cljs.core._nth.call(null,chunk__28091_28096,i__28093_28098);
devtools.formatters.budgeting.distribute_budget_BANG_.call(null,item_28099,new_depth_budget_28094);
var G__28100 = seq__28090_28095;
var G__28101 = chunk__28091_28096;
var G__28102 = count__28092_28097;
var G__28103 = (i__28093_28098 + (1));
seq__28090_28095 = G__28100;
chunk__28091_28096 = G__28101;
count__28092_28097 = G__28102;
i__28093_28098 = G__28103;
continue;
} else {
var temp__5720__auto___28104 = cljs.core.seq.call(null,seq__28090_28095);
if(temp__5720__auto___28104){
var seq__28090_28105__$1 = temp__5720__auto___28104;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__28090_28105__$1)){
var c__4550__auto___28106 = cljs.core.chunk_first.call(null,seq__28090_28105__$1);
var G__28107 = cljs.core.chunk_rest.call(null,seq__28090_28105__$1);
var G__28108 = c__4550__auto___28106;
var G__28109 = cljs.core.count.call(null,c__4550__auto___28106);
var G__28110 = (0);
seq__28090_28095 = G__28107;
chunk__28091_28096 = G__28108;
count__28092_28097 = G__28109;
i__28093_28098 = G__28110;
continue;
} else {
var item_28111 = cljs.core.first.call(null,seq__28090_28105__$1);
devtools.formatters.budgeting.distribute_budget_BANG_.call(null,item_28111,new_depth_budget_28094);
var G__28112 = cljs.core.next.call(null,seq__28090_28105__$1);
var G__28113 = null;
var G__28114 = (0);
var G__28115 = (0);
seq__28090_28095 = G__28112;
chunk__28091_28096 = G__28113;
count__28092_28097 = G__28114;
i__28093_28098 = G__28115;
continue;
}
} else {
}
}
break;
}
}
} else {
}
return json_ml;
});
devtools.formatters.budgeting.was_over_budget_QMARK__BANG_ = (function devtools$formatters$budgeting$was_over_budget_QMARK__BANG_(value){
if(cljs.core.truth_(devtools.formatters.budgeting.has_over_budget_value_QMARK_.call(null,value))){
devtools.formatters.budgeting.delete_over_budget_value_BANG_.call(null,value);
return true;
} else {
return null;
}
});
devtools.formatters.budgeting.alter_json_ml_to_fit_in_remaining_budget_BANG_ = (function devtools$formatters$budgeting$alter_json_ml_to_fit_in_remaining_budget_BANG_(value,json_ml){
var temp__5718__auto__ = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"initial-hierarchy-depth-budget","initial-hierarchy-depth-budget",-482715807));
if(cljs.core.truth_(temp__5718__auto__)){
var initial_hierarchy_depth_budget = temp__5718__auto__;
var remaining_depth_budget = (function (){var or__4131__auto__ = devtools.formatters.state.get_depth_budget.call(null);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return (initial_hierarchy_depth_budget - (1));
}
})();
var depth = devtools.formatters.budgeting.determine_depth.call(null,json_ml);
var final_QMARK_ = cljs.core.not.call(null,devtools.formatters.budgeting.has_any_object_reference_QMARK_.call(null,json_ml));
var needed_depth = ((final_QMARK_)?depth:(depth + devtools.formatters.budgeting.header_expander_depth_cost));
if((remaining_depth_budget >= needed_depth)){
return devtools.formatters.budgeting.distribute_budget_BANG_.call(null,json_ml,remaining_depth_budget);
} else {
var expander_ml = devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_header_expander_GT_.call(null,value));
devtools.formatters.budgeting.add_over_budget_value_BANG_.call(null,value);
return expander_ml;
}
} else {
return json_ml;
}
});
//# sourceMappingURL=budgeting.js.map?rel=1582812680734

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/formatters\/budgeting.js","sources":["budgeting.cljs?rel=1582812680735"],"lineCount":182,"mappings":";AAAA;;;;;;AAcA,2DAAA,3DAAKA;AAKL,AAAKC,mDAAmB,EAAI,QAAAC,0BAAqB,KAAAA,WAAc,mCAAA,nCAACC;AAEhE,4DAAA,5DAAMC,gIAAwBC;AAA9B,AACE,GAAI,AAACC,oCAAUL;AACb,OAACM,iCAAQN,iDAAmB,yBAAA,AAAAO,zBAACC,mDAAMR,kDAAmBI;;AACtD,IAAAK,mBAAOT;AAAP,AAAA,OAAA,CAAAS,iBAAA,aAAAA,iBAAgCL;;;AAEpC,+DAAA,\/DAAMM,sIAA2BN;AAAjC,AACE,GAAI,AAACC,oCAAUL;AACb,OAACM,iCAAQN,iDAAmB,yBAAA,AAAAO,zBAACI,mDAAMX,kDAAmBI;;AACtD,IAAAK,mBAAOT;AAAP,AAAA,OAAA,CAAAS,iBAAA,gBAAAA,iBAAmCL;;;AAEvC,6DAAA,7DAAMQ,kIAAwBR;AAA9B,AACE,GAAI,AAACC,oCAAUL;AACb,2CAAA,AAAAO,pCAACM,8DAAWb,kDAAmBI;;AAC\/B,IAAAK,mBAAOT;AAAP,AAAA,OAAA,CAAAS,iBAAA,aAAAA,iBAAgCL;;;AAIpC,wDAAA,xDAAMU,wHAAmBC;AAAzB,AACE,mEAAA,5DAACC,yBAAE,AAACC,0BAAMF;;AAEZ,gDAAA,hDAAMG,wGAAiBH;AAAvB,AACE,GAAI,AAACI,iCAAOJ;AACV,kIAAA,1HAAK,AAACK,0BAAMC,cAAI,AAACC,wBAAIJ,8CAAgBH;;AADvC;;;AAIF,gEAAA,hEAAMQ,wIAA2BR;AAAjC,AACE,GAAI,AAACI,iCAAOJ;AACV,GAAI,AAACD,gEAAkBC;AAAvB;;AAEE,OAACS,yBAAKD,8DAA0BR;;;AAHpC;;;AAKF,sEAAA,tEAAMW,oJAAkCC,iBAAiBC;AAAzD,AAAA,GACS,GAAK,gBAAA,fAAMA;AADpB;AAAA,AAAA,MAAA,KAAAH,MAAA;;;AAEE,IAAMI,OAAK,AAACC,2BAAOH;IACbI,IAAE,2CAAA,KAAA,AAAA,kBAAA,KAAAN,MAAA,3EAAQ,AAACO,kCAAQH;IACnBI,SAAO,MAAA,LAAMJ;AAFnB,AAGE,IAAAK,WAAML;IAANM,wBAAAD;AAAA,AAAA,oBAAAC;AAAA;AAAA,AAAA,MAAA,KAAAV,MAAA,CAAA,kBAAA,CAAA,gCAAA,KAAA,mDAAAS,oBAAA,KAAA;;;AAAA,CAAAC,sBAAA,YAAsB,AAACC,qDAAiBH,OAAOL;;AAA\/CM;;AAEJ,wDAAA,xDAAMG,wHAAoBtB,QAAQa;AAAlC,AAAA,GACS,GAAK,gBAAA,fAAMA;AADpB;AAAA,AAAA,MAAA,KAAAH,MAAA;;;AAEE,GAAI,AAACN,iCAAOJ;AACV,IAAMuB,yBAAiB,gBAAA,fAAKV;AAA5B,AACE,GAAI,AAACd,gEAAkBC;AACrB,AAACW,8EAAiCX,QAAQuB;;AAC1C,IAAAC,mBAAA,AAAAC,wBAAazB;IAAb0B,qBAAA;IAAAC,qBAAA;IAAAC,iBAAA;;AAAA,AAAA,GAAA,AAAA,CAAAA,iBAAAD;AAAA,iBAAA,AAAAE,yBAAAH,mBAAAE,zDAAQS;AAAR,AAAA,AACE,AAACf,gEAAmBe,WAAKd;;AAD3B;AAAA,eAAAC;eAAAE;eAAAC;eAAA,CAAAC,iBAAA;;;;;;;AAAA,IAAAE,2BAAA,AAAAL,wBAAAD;AAAA,AAAA,GAAAM;AAAA,AAAA,IAAAN,uBAAAM;AAAA,AAAA,GAAA,AAAAC,uCAAAP;AAAA,IAAAQ,wBAAA,AAAAC,gCAAAT;AAAA,AAAA,eAAA,AAAAU,+BAAAV;eAAAQ;eAAA,AAAAG,0BAAAH;eAAA;;;;;;;AAAA,iBAAA,AAAA9B,0BAAAsB,vCAAQa;AAAR,AAAA,AACE,AAACf,gEAAmBe,WAAKd;;AAD3B;AAAA,eAAA,AAAAa,yBAAAZ;eAAA;eAAA;eAAA;;;;;;;;AAAA;;;;;;AAJN;;AAMAxB;;AAIF,6DAAA,7DAAMsC,kIAAmBjD;AAAzB,AACE,oBAAM,AAACQ,qEAAuBR;AAA9B,AACE,AAACM,uEAA0BN;;AAD7B;;AAAA;;;AAIF,+EAAA,\/EAAMkD,sKAA2ClD,MAAMW;AAAvD,AACE,IAAAwC,qBAAwC,2CAAA,3CAACE;AAAzC,AAAA,oBAAAF;AAAA,qCAAAA,jCAASC;AAAT,AACE,IAAME,yBAAuB,iBAAAC,mBAAI,AAACC;AAAL,AAAA,oBAAAD;AAAAA;;AAAuB,yCAAA,jCAAKH;;;IACnDK,QAAM,AAAC3C,wDAAgBH;IACvB+C,eAAO,AAACC,wBAAI,AAACxC,wEAA0BR;IACvCiD,eAAa,EAAIF,cAAOD,MAAM,CAAGA,QAAM9D;AAH7C,AAIE,GAAI,CAAI2D,0BAAuBM;AAC7B,OAAC3B,gEAAmBtB,QAAQ2C;;AAC5B,IAAMO,cAAY,AAACC,uDAAc,AAACC,6DAAkB\/D;AAApD,AACE,AAACD,oEAAuBC;;AACxB6D;;;AACNlD","names":["devtools.formatters.budgeting\/header-expander-depth-cost","devtools.formatters.budgeting\/over-budget-values","js\/WeakSet","cljs.core\/volatile!","devtools.formatters.budgeting\/add-over-budget-value!","value","cljs.core\/volatile?","cljs.core\/vreset!","cljs.core\/deref","cljs.core\/conj","o__25266__auto__","devtools.formatters.budgeting\/delete-over-budget-value!","cljs.core\/disj","devtools.formatters.budgeting\/has-over-budget-value?","cljs.core\/contains?","devtools.formatters.budgeting\/object-reference?","json-ml","cljs.core\/=","cljs.core\/first","devtools.formatters.budgeting\/determine-depth","cljs.core\/array?","cljs.core\/apply","cljs.core\/max","cljs.core\/map","devtools.formatters.budgeting\/has-any-object-reference?","cljs.core\/some","js\/Error","devtools.formatters.budgeting\/transfer-remaining-depth-budget!","object-reference","depth-budget","data","cljs.core\/second","_","cljs.core\/object?","config","G__28089","target__25271__auto__","devtools.formatters.state\/set-depth-budget","devtools.formatters.budgeting\/distribute-budget!","new-depth-budget","seq__28090","cljs.core\/seq","chunk__28091","count__28092","i__28093","cljs.core\/-nth","temp__5720__auto__","cljs.core\/chunked-seq?","c__4550__auto__","cljs.core\/chunk-first","cljs.core\/chunk-rest","cljs.core\/count","cljs.core\/next","item","devtools.formatters.budgeting\/was-over-budget?!","devtools.formatters.budgeting\/alter-json-ml-to-fit-in-remaining-budget!","temp__5718__auto__","initial-hierarchy-depth-budget","devtools.formatters.helpers\/pref","remaining-depth-budget","or__4131__auto__","devtools.formatters.state\/get-depth-budget","depth","final?","cljs.core\/not","needed-depth","expander-ml","devtools.formatters.templating\/render-markup","devtools.formatters.markup\/<header-expander>"]}

View file

@ -0,0 +1,85 @@
(ns devtools.formatters.core
(:require-macros [devtools.oops :refer [safe-call]])
(:require [devtools.prefs :refer [pref]]
[devtools.format :refer [IDevtoolsFormat]]
[devtools.protocols :refer [IFormat]]
[devtools.reporter :as reporter]
[devtools.formatters.templating :refer [surrogate? render-markup get-surrogate-body]]
[devtools.formatters.helpers :refer [cljs-value?]]
[devtools.formatters.state :refer [prevent-recursion? *current-state* get-default-state update-current-state!
reset-depth-limits]]
[devtools.formatters.markup :refer [<header> <surrogate-header> <surrogate-body>]]
[devtools.formatters.budgeting :refer [was-over-budget?! alter-json-ml-to-fit-in-remaining-budget!]]))
; -- RAW API ----------------------------------------------------------------------------------------------------------------
(defn want-value?* [value]
(and (not (prevent-recursion?))
(or (cljs-value? value) (surrogate? value))))
(defn header* [value]
(let [json-ml (cond
(surrogate? value) (render-markup (<surrogate-header> value))
(safe-call satisfies? false IDevtoolsFormat value) (devtools.format/-header value)
(safe-call satisfies? false IFormat value) (devtools.protocols/-header value)
:else (render-markup (<header> value)))]
(alter-json-ml-to-fit-in-remaining-budget! value json-ml))) ; see issue #22
(defn has-body* [value]
; note: body is emulated using surrogate references
(if (was-over-budget?! value) ; see issue #22
false ; see alter-json-ml-to-fit-in-remaining-budget!, in case we didn't fit into budget, a header-expander placeholder with body was added in place
(boolean
(cond
(surrogate? value) (some? (get-surrogate-body value))
(safe-call satisfies? false IDevtoolsFormat value) (devtools.format/-has-body value)
(safe-call satisfies? false IFormat value) (devtools.protocols/-has-body value)
:else false))))
(defn body* [value]
(update-current-state! reset-depth-limits)
(cond
(surrogate? value) (render-markup (<surrogate-body> value))
(safe-call satisfies? false IDevtoolsFormat value) (devtools.format/-body value)
(safe-call satisfies? false IFormat value) (devtools.protocols/-body value)))
; ---------------------------------------------------------------------------------------------------------------------------
; config-aware RAW API, see state management documentation state.cljs
(defn config-wrapper [raw-fn]
(fn [value config]
(binding [*current-state* (or config (get-default-state))]
(raw-fn value))))
(def want-value? (config-wrapper want-value?*))
(def header (config-wrapper header*))
(def has-body (config-wrapper has-body*))
(def body (config-wrapper body*))
; -- API CALLS --------------------------------------------------------------------------------------------------------------
(defn wrap-with-exception-guard [f]
(fn [& args]
(try
(apply f args)
(catch :default e
(reporter/report-internal-error! e "an exception was raised during value formatting")
nil))))
(defn build-api-call [raw-fn pre-handler-key post-handler-key]
"Wraps raw API call in a function which calls pre-handler and post-handler.
pre-handler gets a chance to pre-process value before it is passed to cljs-devtools
post-handler gets a chance to post-process value returned by cljs-devtools."
(let [handler (fn [value config]
(let [pre-handler (or (pref pre-handler-key) identity)
post-handler (or (pref post-handler-key) identity)
preprocessed-value (pre-handler value)
result (if (want-value? preprocessed-value config)
(raw-fn preprocessed-value config))]
(post-handler result)))]
(wrap-with-exception-guard handler)))
(def header-api-call (build-api-call header :header-pre-handler :header-post-handler))
(def has-body-api-call (build-api-call has-body :has-body-pre-handler :has-body-post-handler))
(def body-api-call (build-api-call body :body-pre-handler :body-post-handler))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,220 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters.core');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.format');
goog.require('devtools.protocols');
goog.require('devtools.reporter');
goog.require('devtools.formatters.templating');
goog.require('devtools.formatters.helpers');
goog.require('devtools.formatters.state');
goog.require('devtools.formatters.markup');
goog.require('devtools.formatters.budgeting');
devtools.formatters.core.want_value_QMARK__STAR_ = (function devtools$formatters$core$want_value_QMARK__STAR_(value){
var and__4120__auto__ = cljs.core.not.call(null,devtools.formatters.state.prevent_recursion_QMARK_.call(null));
if(and__4120__auto__){
var or__4131__auto__ = devtools.formatters.helpers.cljs_value_QMARK_.call(null,value);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return devtools.formatters.templating.surrogate_QMARK_.call(null,value);
}
} else {
return and__4120__auto__;
}
});
devtools.formatters.core.header_STAR_ = (function devtools$formatters$core$header_STAR_(value){
var json_ml = ((devtools.formatters.templating.surrogate_QMARK_.call(null,value))?devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_surrogate_header_GT_.call(null,value)):(cljs.core.truth_((function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$format$IDevtoolsFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
}
}catch (e28118){var _e__25273__auto__ = e28118;
return false;
}})())?devtools.format._header.call(null,value):(cljs.core.truth_((function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$IFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
}
}catch (e28120){var _e__25273__auto__ = e28120;
return false;
}})())?devtools.protocols._header.call(null,value):devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_header_GT_.call(null,value))
)));
return devtools.formatters.budgeting.alter_json_ml_to_fit_in_remaining_budget_BANG_.call(null,value,json_ml);
});
devtools.formatters.core.has_body_STAR_ = (function devtools$formatters$core$has_body_STAR_(value){
if(cljs.core.truth_(devtools.formatters.budgeting.was_over_budget_QMARK__BANG_.call(null,value))){
return false;
} else {
return cljs.core.boolean$.call(null,((devtools.formatters.templating.surrogate_QMARK_.call(null,value))?(!((devtools.formatters.templating.get_surrogate_body.call(null,value) == null))):(cljs.core.truth_((function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$format$IDevtoolsFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
}
}catch (e28122){var _e__25273__auto__ = e28122;
return false;
}})())?devtools.format._has_body.call(null,value):(cljs.core.truth_((function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$IFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
}
}catch (e28124){var _e__25273__auto__ = e28124;
return false;
}})())?devtools.protocols._has_body.call(null,value):false
))));
}
});
devtools.formatters.core.body_STAR_ = (function devtools$formatters$core$body_STAR_(value){
devtools.formatters.state.update_current_state_BANG_.call(null,devtools.formatters.state.reset_depth_limits);
if(devtools.formatters.templating.surrogate_QMARK_.call(null,value)){
return devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_surrogate_body_GT_.call(null,value));
} else {
if(cljs.core.truth_((function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$format$IDevtoolsFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
}
}catch (e28126){var _e__25273__auto__ = e28126;
return false;
}})())){
return devtools.format._body.call(null,value);
} else {
if(cljs.core.truth_((function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$IFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
}
}catch (e28128){var _e__25273__auto__ = e28128;
return false;
}})())){
return devtools.protocols._body.call(null,value);
} else {
return null;
}
}
}
});
devtools.formatters.core.config_wrapper = (function devtools$formatters$core$config_wrapper(raw_fn){
return (function (value,config){
var _STAR_current_state_STAR__orig_val__28130 = devtools.formatters.state._STAR_current_state_STAR_;
var _STAR_current_state_STAR__temp_val__28131 = (function (){var or__4131__auto__ = config;
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return devtools.formatters.state.get_default_state.call(null);
}
})();
devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR__temp_val__28131;
try{return raw_fn.call(null,value);
}finally {devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR__orig_val__28130;
}});
});
devtools.formatters.core.want_value_QMARK_ = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.want_value_QMARK__STAR_);
devtools.formatters.core.header = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.header_STAR_);
devtools.formatters.core.has_body = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.has_body_STAR_);
devtools.formatters.core.body = devtools.formatters.core.config_wrapper.call(null,devtools.formatters.core.body_STAR_);
devtools.formatters.core.wrap_with_exception_guard = (function devtools$formatters$core$wrap_with_exception_guard(f){
return (function() {
var G__28133__delegate = function (args){
try{return cljs.core.apply.call(null,f,args);
}catch (e28132){var e = e28132;
devtools.reporter.report_internal_error_BANG_.call(null,e,"an exception was raised during value formatting");
return null;
}};
var G__28133 = function (var_args){
var args = null;
if (arguments.length > 0) {
var G__28134__i = 0, G__28134__a = new Array(arguments.length - 0);
while (G__28134__i < G__28134__a.length) {G__28134__a[G__28134__i] = arguments[G__28134__i + 0]; ++G__28134__i;}
args = new cljs.core.IndexedSeq(G__28134__a,0,null);
}
return G__28133__delegate.call(this,args);};
G__28133.cljs$lang$maxFixedArity = 0;
G__28133.cljs$lang$applyTo = (function (arglist__28135){
var args = cljs.core.seq(arglist__28135);
return G__28133__delegate(args);
});
G__28133.cljs$core$IFn$_invoke$arity$variadic = G__28133__delegate;
return G__28133;
})()
;
});
devtools.formatters.core.build_api_call = (function devtools$formatters$core$build_api_call(raw_fn,pre_handler_key,post_handler_key){
var handler = (function (value,config){
var pre_handler = (function (){var or__4131__auto__ = devtools.prefs.pref.call(null,pre_handler_key);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return cljs.core.identity;
}
})();
var post_handler = (function (){var or__4131__auto__ = devtools.prefs.pref.call(null,post_handler_key);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return cljs.core.identity;
}
})();
var preprocessed_value = pre_handler.call(null,value);
var result = (cljs.core.truth_(devtools.formatters.core.want_value_QMARK_.call(null,preprocessed_value,config))?raw_fn.call(null,preprocessed_value,config):null);
return post_handler.call(null,result);
});
return devtools.formatters.core.wrap_with_exception_guard.call(null,handler);
});
devtools.formatters.core.header_api_call = devtools.formatters.core.build_api_call.call(null,devtools.formatters.core.header,new cljs.core.Keyword(null,"header-pre-handler","header-pre-handler",-1997722262),new cljs.core.Keyword(null,"header-post-handler","header-post-handler",514828618));
devtools.formatters.core.has_body_api_call = devtools.formatters.core.build_api_call.call(null,devtools.formatters.core.has_body,new cljs.core.Keyword(null,"has-body-pre-handler","has-body-pre-handler",1787020038),new cljs.core.Keyword(null,"has-body-post-handler","has-body-post-handler",-863451271));
devtools.formatters.core.body_api_call = devtools.formatters.core.build_api_call.call(null,devtools.formatters.core.body,new cljs.core.Keyword(null,"body-pre-handler","body-pre-handler",1211926529),new cljs.core.Keyword(null,"body-post-handler","body-post-handler",-1040905424));
//# sourceMappingURL=core.js.map?rel=1582812680758

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,118 @@
(ns devtools.formatters.helpers
(:require-macros [devtools.oops :refer [oget safe-call]])
(:require [devtools.prefs :as prefs]
[devtools.munging :as munging]
[devtools.format :refer [IDevtoolsFormat]]
[devtools.protocols :refer [ITemplate IGroup ISurrogate IFormat]]))
(defn pref [v]
(if (keyword? v)
(recur (prefs/pref v))
v))
(defn get-prototype [o]
(.-prototype o))
(defn get-constructor [o]
(.-constructor o))
; ---------------------------------------------------------------------------------------------------------------------------
(defn is-prototype? [o]
(identical? (get-prototype (get-constructor o)) o))
(defn is-js-symbol? [o]
(= (goog/typeOf o) "symbol"))
(defn cljs-function? [value]
(and (not (pref :disable-cljs-fn-formatting)) ; TODO: this should be deprecated
(not (var? value)) ; HACK: vars have IFn protocol and would act as functions TODO: implement custom rendering for vars
(munging/cljs-fn? value)))
(defn has-formatting-protocol? [value]
(or (safe-call satisfies? false IPrintWithWriter value)
(safe-call satisfies? false IDevtoolsFormat value) ; legacy
(safe-call satisfies? false IFormat value)))
; IRC #clojurescript @ freenode.net on 2015-01-27:
; [13:40:09] darwin_: Hi, what is the best way to test if I'm handled ClojureScript data value or plain javascript object?
; [14:04:34] dnolen: there is a very low level thing you can check
; [14:04:36] dnolen: https://github.com/clojure/clojurescript/blob/c2550c4fdc94178a7957497e2bfde54e5600c457/src/clj/cljs/core.clj#L901
; [14:05:00] dnolen: this property is unlikely to change - still it's probably not something anything anyone should use w/o a really good reason
(defn cljs-type? [f]
(and (goog/isObject f) ; see http://stackoverflow.com/a/22482737/84283
(not (is-prototype? f))
(.-cljs$lang$type f)))
(defn cljs-instance? [value]
(and (goog/isObject value) ; see http://stackoverflow.com/a/22482737/84283
(cljs-type? (get-constructor value))))
(defn cljs-land-value? [value]
(or (cljs-instance? value)
(has-formatting-protocol? value))) ; some raw js types can be extend-protocol to support cljs printing, see issue #21
(defn cljs-value? [value]
(and
(or (cljs-land-value? value)
(cljs-function? value))
(not (is-prototype? value))
(not (is-js-symbol? value))))
(defn bool? [value]
(or (true? value) (false? value)))
(defn instance-of-a-well-known-type? [value]
(let [well-known-types (pref :well-known-types)
constructor-fn (get-constructor value)
[ns name] (munging/parse-constructor-info constructor-fn)
fully-qualified-type-name (str ns "/" name)]
(contains? well-known-types fully-qualified-type-name)))
(defn should-render-instance? [value]
(and (cljs-instance? value)
(not (instance-of-a-well-known-type? value))))
(defn directly-printable? [value]
(or (string? value)
(number? value)
(bool? value)))
; ---------------------------------------------------------------------------------------------------------------------------
(defn abbreviated? [template]
(some #(= (pref :more-marker) %) template))
(defn abbreviate-long-string [string marker prefix-limit postfix-limit]
(let [prefix (.slice string 0 prefix-limit)
postfix (.slice string (- (.-length string) postfix-limit))]
(str prefix marker postfix)))
(defn get-more-marker [more-count]
(str (pref :plus-symbol) more-count (pref :more-symbol)))
(defn wrap-arity [arity]
(let [args-open-symbol (pref :args-open-symbol)
args-close-symbol (pref :args-close-symbol)]
(str args-open-symbol arity args-close-symbol)))
(defn fetch-field-value [obj field]
[field (oget obj (munge field))])
(defn fetch-fields-values [obj fields]
(map (partial fetch-field-value obj) fields))
(defn expandable? [obj]
(if (satisfies? ISeqable obj)
(if-let [min-count (pref (if (instance-of-a-well-known-type? obj)
:min-expandable-sequable-count-for-well-known-types
:min-expandable-sequable-count))]
(if-not (empty? obj)
(let [actual-count (bounded-count min-count obj)]
(>= actual-count min-count))))))
(defn should-render? [pref-key value default-check]
(if-let [render-pref (pref pref-key)]
(cond
(true? render-pref) (default-check value)
(fn? render-pref) (render-pref value))))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,228 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters.helpers');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.munging');
goog.require('devtools.format');
goog.require('devtools.protocols');
devtools.formatters.helpers.pref = (function devtools$formatters$helpers$pref(v){
while(true){
if((v instanceof cljs.core.Keyword)){
var G__26259 = devtools.prefs.pref.call(null,v);
v = G__26259;
continue;
} else {
return v;
}
break;
}
});
devtools.formatters.helpers.get_prototype = (function devtools$formatters$helpers$get_prototype(o){
return o.prototype;
});
devtools.formatters.helpers.get_constructor = (function devtools$formatters$helpers$get_constructor(o){
return o.constructor;
});
devtools.formatters.helpers.is_prototype_QMARK_ = (function devtools$formatters$helpers$is_prototype_QMARK_(o){
return (devtools.formatters.helpers.get_prototype.call(null,devtools.formatters.helpers.get_constructor.call(null,o)) === o);
});
devtools.formatters.helpers.is_js_symbol_QMARK_ = (function devtools$formatters$helpers$is_js_symbol_QMARK_(o){
return cljs.core._EQ_.call(null,goog.typeOf(o),"symbol");
});
devtools.formatters.helpers.cljs_function_QMARK_ = (function devtools$formatters$helpers$cljs_function_QMARK_(value){
var and__4120__auto__ = cljs.core.not.call(null,devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"disable-cljs-fn-formatting","disable-cljs-fn-formatting",1903786837)));
if(and__4120__auto__){
var and__4120__auto____$1 = (!(cljs.core.var_QMARK_.call(null,value)));
if(and__4120__auto____$1){
return devtools.munging.cljs_fn_QMARK_.call(null,value);
} else {
return and__4120__auto____$1;
}
} else {
return and__4120__auto__;
}
});
devtools.formatters.helpers.has_formatting_protocol_QMARK_ = (function devtools$formatters$helpers$has_formatting_protocol_QMARK_(value){
var or__4131__auto__ = (function (){try{if((!((value == null)))){
if((((value.cljs$lang$protocol_mask$partition0$ & (2147483648))) || ((cljs.core.PROTOCOL_SENTINEL === value.cljs$core$IPrintWithWriter$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition0$)){
return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.IPrintWithWriter,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,cljs.core.IPrintWithWriter,value);
}
}catch (e26262){var _e__25273__auto__ = e26262;
return false;
}})();
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
var or__4131__auto____$1 = (function (){try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$format$IDevtoolsFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,value);
}
}catch (e26266){var _e__25273__auto__ = e26266;
return false;
}})();
if(cljs.core.truth_(or__4131__auto____$1)){
return or__4131__auto____$1;
} else {
try{if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$IFormat$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,value);
}
}catch (e26268){var _e__25273__auto__ = e26268;
return false;
}}
}
});
devtools.formatters.helpers.cljs_type_QMARK_ = (function devtools$formatters$helpers$cljs_type_QMARK_(f){
var and__4120__auto__ = goog.isObject(f);
if(cljs.core.truth_(and__4120__auto__)){
var and__4120__auto____$1 = (!(devtools.formatters.helpers.is_prototype_QMARK_.call(null,f)));
if(and__4120__auto____$1){
return f.cljs$lang$type;
} else {
return and__4120__auto____$1;
}
} else {
return and__4120__auto__;
}
});
devtools.formatters.helpers.cljs_instance_QMARK_ = (function devtools$formatters$helpers$cljs_instance_QMARK_(value){
var and__4120__auto__ = goog.isObject(value);
if(cljs.core.truth_(and__4120__auto__)){
return devtools.formatters.helpers.cljs_type_QMARK_.call(null,devtools.formatters.helpers.get_constructor.call(null,value));
} else {
return and__4120__auto__;
}
});
devtools.formatters.helpers.cljs_land_value_QMARK_ = (function devtools$formatters$helpers$cljs_land_value_QMARK_(value){
var or__4131__auto__ = devtools.formatters.helpers.cljs_instance_QMARK_.call(null,value);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return devtools.formatters.helpers.has_formatting_protocol_QMARK_.call(null,value);
}
});
devtools.formatters.helpers.cljs_value_QMARK_ = (function devtools$formatters$helpers$cljs_value_QMARK_(value){
var and__4120__auto__ = (function (){var or__4131__auto__ = devtools.formatters.helpers.cljs_land_value_QMARK_.call(null,value);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return devtools.formatters.helpers.cljs_function_QMARK_.call(null,value);
}
})();
if(cljs.core.truth_(and__4120__auto__)){
return (((!(devtools.formatters.helpers.is_prototype_QMARK_.call(null,value)))) && ((!(devtools.formatters.helpers.is_js_symbol_QMARK_.call(null,value)))));
} else {
return and__4120__auto__;
}
});
devtools.formatters.helpers.bool_QMARK_ = (function devtools$formatters$helpers$bool_QMARK_(value){
return ((value === true) || (value === false));
});
devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_ = (function devtools$formatters$helpers$instance_of_a_well_known_type_QMARK_(value){
var well_known_types = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"well-known-types","well-known-types",70638649));
var constructor_fn = devtools.formatters.helpers.get_constructor.call(null,value);
var vec__26270 = devtools.munging.parse_constructor_info.call(null,constructor_fn);
var ns = cljs.core.nth.call(null,vec__26270,(0),null);
var name = cljs.core.nth.call(null,vec__26270,(1),null);
var fully_qualified_type_name = [cljs.core.str.cljs$core$IFn$_invoke$arity$1(ns),"/",cljs.core.str.cljs$core$IFn$_invoke$arity$1(name)].join('');
return cljs.core.contains_QMARK_.call(null,well_known_types,fully_qualified_type_name);
});
devtools.formatters.helpers.should_render_instance_QMARK_ = (function devtools$formatters$helpers$should_render_instance_QMARK_(value){
var and__4120__auto__ = devtools.formatters.helpers.cljs_instance_QMARK_.call(null,value);
if(cljs.core.truth_(and__4120__auto__)){
return (!(devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_.call(null,value)));
} else {
return and__4120__auto__;
}
});
devtools.formatters.helpers.directly_printable_QMARK_ = (function devtools$formatters$helpers$directly_printable_QMARK_(value){
return ((typeof value === 'string') || (typeof value === 'number') || (devtools.formatters.helpers.bool_QMARK_.call(null,value)));
});
devtools.formatters.helpers.abbreviated_QMARK_ = (function devtools$formatters$helpers$abbreviated_QMARK_(template){
return cljs.core.some.call(null,(function (p1__26273_SHARP_){
return cljs.core._EQ_.call(null,devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"more-marker","more-marker",-14717935)),p1__26273_SHARP_);
}),template);
});
devtools.formatters.helpers.abbreviate_long_string = (function devtools$formatters$helpers$abbreviate_long_string(string,marker,prefix_limit,postfix_limit){
var prefix = string.slice((0),prefix_limit);
var postfix = string.slice((string.length - postfix_limit));
return [cljs.core.str.cljs$core$IFn$_invoke$arity$1(prefix),cljs.core.str.cljs$core$IFn$_invoke$arity$1(marker),cljs.core.str.cljs$core$IFn$_invoke$arity$1(postfix)].join('');
});
devtools.formatters.helpers.get_more_marker = (function devtools$formatters$helpers$get_more_marker(more_count){
return [cljs.core.str.cljs$core$IFn$_invoke$arity$1(devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"plus-symbol","plus-symbol",-1984915189))),cljs.core.str.cljs$core$IFn$_invoke$arity$1(more_count),cljs.core.str.cljs$core$IFn$_invoke$arity$1(devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"more-symbol","more-symbol",-2139760242)))].join('');
});
devtools.formatters.helpers.wrap_arity = (function devtools$formatters$helpers$wrap_arity(arity){
var args_open_symbol = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"args-open-symbol","args-open-symbol",-1336957557));
var args_close_symbol = devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"args-close-symbol","args-close-symbol",777697973));
return [cljs.core.str.cljs$core$IFn$_invoke$arity$1(args_open_symbol),cljs.core.str.cljs$core$IFn$_invoke$arity$1(arity),cljs.core.str.cljs$core$IFn$_invoke$arity$1(args_close_symbol)].join('');
});
devtools.formatters.helpers.fetch_field_value = (function devtools$formatters$helpers$fetch_field_value(obj,field){
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [field,(obj[cljs.core.munge.call(null,field)])], null);
});
devtools.formatters.helpers.fetch_fields_values = (function devtools$formatters$helpers$fetch_fields_values(obj,fields){
return cljs.core.map.call(null,cljs.core.partial.call(null,devtools.formatters.helpers.fetch_field_value,obj),fields);
});
devtools.formatters.helpers.expandable_QMARK_ = (function devtools$formatters$helpers$expandable_QMARK_(obj){
if((((!((obj == null))))?(((((obj.cljs$lang$protocol_mask$partition0$ & (8388608))) || ((cljs.core.PROTOCOL_SENTINEL === obj.cljs$core$ISeqable$))))?true:(((!obj.cljs$lang$protocol_mask$partition0$))?cljs.core.native_satisfies_QMARK_.call(null,cljs.core.ISeqable,obj):false)):cljs.core.native_satisfies_QMARK_.call(null,cljs.core.ISeqable,obj))){
var temp__5718__auto__ = devtools.formatters.helpers.pref.call(null,((devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_.call(null,obj))?new cljs.core.Keyword(null,"min-expandable-sequable-count-for-well-known-types","min-expandable-sequable-count-for-well-known-types",-1879576081):new cljs.core.Keyword(null,"min-expandable-sequable-count","min-expandable-sequable-count",63566227)));
if(cljs.core.truth_(temp__5718__auto__)){
var min_count = temp__5718__auto__;
if((!(cljs.core.empty_QMARK_.call(null,obj)))){
var actual_count = cljs.core.bounded_count.call(null,min_count,obj);
return (actual_count >= min_count);
} else {
return null;
}
} else {
return null;
}
} else {
return null;
}
});
devtools.formatters.helpers.should_render_QMARK_ = (function devtools$formatters$helpers$should_render_QMARK_(pref_key,value,default_check){
var temp__5718__auto__ = devtools.formatters.helpers.pref.call(null,pref_key);
if(cljs.core.truth_(temp__5718__auto__)){
var render_pref = temp__5718__auto__;
if(render_pref === true){
return default_check.call(null,value);
} else {
if(cljs.core.fn_QMARK_.call(null,render_pref)){
return render_pref.call(null,value);
} else {
return null;
}
}
} else {
return null;
}
});
//# sourceMappingURL=helpers.js.map?rel=1582812679441

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,451 @@
(ns devtools.formatters.markup
(:require-macros [devtools.formatters.markup :refer [emit-markup-db]])
(:require [devtools.formatters.helpers :refer [bool? cljs-function? cljs-type? cljs-instance?
should-render-instance? expandable? abbreviated?
abbreviate-long-string get-constructor pref should-render?
get-more-marker wrap-arity fetch-fields-values]]
[devtools.formatters.printing :refer [managed-print-via-writer managed-print-via-protocol]]
[devtools.formatters.state :refer [set-prevent-recursion set-managed-print-level reset-depth-limits]]
[devtools.formatters.templating :refer [get-surrogate-body
get-surrogate-target
get-surrogate-start-index
get-surrogate-header]]
[devtools.munging :as munging]))
; reusable hiccup-like templates
(declare get-markup-db)
; -- cljs printing ---------------------------------------------------------------------------------------------------------
(defn print-with [method value tag & [max-level]]
(let [job-fn #(method value tag (get-markup-db))]
(if (some? max-level)
(binding [*print-level* (inc max-level)] ; when printing do at most print-level deep recursion
(job-fn))
(job-fn))))
(defn print-via-writer [value tag & [max-level]]
(print-with managed-print-via-writer value tag max-level))
(defn print-via-protocol [value tag & [max-level]]
(print-with managed-print-via-protocol value tag max-level))
; -- references -------------------------------------------------------------------------------------------------------------
(defn <expandable> [& children]
(let [inner-markup (concat [:expandable-inner-tag] children)]
[:expandable-tag :expandable-symbol inner-markup]))
(defn <raw-surrogate> [& args]
(concat ["surrogate"] args))
(defn <surrogate> [& [object header body start-index]]
(let [header (if (some? body) (<expandable> header) header)]
(<raw-surrogate> object header body start-index)))
(defn <reference> [& args]
(concat ["reference"] args))
(defn <reference-surrogate> [& args]
(<reference> (apply <surrogate> args)))
(defn <circular-reference> [& children]
(<reference-surrogate> nil [:circular-reference-tag :circular-ref-icon] (concat [:circular-reference-body-tag] children)))
(defn <native-reference> [object]
(let [reference (<reference> object #(set-prevent-recursion % true))]
[:native-reference-wrapper-tag :native-reference-background [:native-reference-tag reference]]))
(defn <header-expander> [object]
(<reference> (<raw-surrogate> object :header-expander-symbol :target) reset-depth-limits))
; -- simple markup ----------------------------------------------------------------------------------------------------------
(defn <cljs-land> [& children]
(concat [:cljs-land-tag] children))
(defn <nil> []
; this code is duplicated in templating.cljs, see make-reference
[:nil-tag :nil-label])
(defn <bool> [bool]
[:bool-tag (str bool)])
(defn <keyword> [keyword]
[:keyword-tag (str keyword)])
(defn <symbol> [symbol]
[:symbol-tag (str symbol)])
(defn <number> [number]
(if (integer? number)
[:integer-tag number]
[:float-tag number]))
; -- string markup ----------------------------------------------------------------------------------------------------------
(defn <string> [string]
(let [dq (pref :dq)
re-nl (js/RegExp. "\n" "g")
nl-marker (pref :new-line-string-replacer)
inline-string (.replace string re-nl nl-marker)
max-inline-string-size (+ (pref :string-prefix-limit) (pref :string-postfix-limit))
quote-string (fn [s] (str dq s dq))
should-abbreviate? (> (count inline-string) max-inline-string-size)]
(if should-abbreviate?
(let [abbreviated-string (abbreviate-long-string inline-string
(pref :string-abbreviation-marker)
(pref :string-prefix-limit)
(pref :string-postfix-limit))
abbreviated-string-markup [:string-tag (quote-string abbreviated-string)]
string-with-nl-markers (.replace string re-nl (str nl-marker "\n"))
details-markup [:expanded-string-tag string-with-nl-markers]]
(<reference-surrogate> string abbreviated-string-markup details-markup))
[:string-tag (quote-string inline-string)])))
; -- generic preview markup -------------------------------------------------------------------------------------------------
(defn <preview> [value]
(print-via-writer value :header-tag (pref :max-print-level)))
; -- body-related templates -------------------------------------------------------------------------------------------------
(defn <body> [markup]
[:body-tag markup])
(defn <aligned-body> [markups-lists]
(let [prepend-li-tag (fn [line]
(if line
(concat [:aligned-li-tag] line)))
aligned-lines (keep prepend-li-tag markups-lists)]
(<body> (concat [:standard-ol-no-margin-tag] aligned-lines))))
(defn <standard-body> [markups-lists & [no-margin?]]
(let [ol-tag (if no-margin? :standard-ol-no-margin-tag :standard-ol-tag)
li-tag (if no-margin? :standard-li-no-margin-tag :standard-li-tag)
prepend-li-tag (fn [line]
(if line
(concat [li-tag] line)))
lines-markups (keep prepend-li-tag markups-lists)]
(concat [ol-tag] lines-markups)))
(defn <standard-body-reference> [o]
(<standard-body> [[(<reference> o)]]))
; -- generic details markup -------------------------------------------------------------------------------------------------
(defn <index> [value]
[:index-tag value :line-index-separator])
(defn- body-line [index value]
(let [index-markup (<index> index)
value-markup (print-via-writer value :item-tag (pref :body-line-max-print-level))]
[index-markup value-markup]))
; TODO: this fn is screaming for rewrite
(defn- prepare-body-lines [data starting-index]
(loop [work data
index starting-index
lines []]
(if (empty? work)
lines
(recur (rest work) (inc index) (conj lines (body-line index (first work)))))))
(defn- body-lines [value starting-index]
(let [seq (seq value)
max-number-body-items (pref :max-number-body-items)
chunk (take max-number-body-items seq)
rest (drop max-number-body-items seq)
lines (prepare-body-lines chunk starting-index)
continue? (not (empty? (take 1 rest)))]
(if-not continue?
lines
(let [more-label-markup [:body-items-more-tag :body-items-more-label]
start-index (+ starting-index max-number-body-items)
more-markup (<reference-surrogate> rest more-label-markup :target start-index)]
(conj lines [more-markup])))))
(defn <details> [value starting-index]
(let [has-continuation? (pos? starting-index)
body-markup (<standard-body> (body-lines value starting-index) has-continuation?)]
(if has-continuation?
body-markup
(<body> body-markup))))
; -- generic list template --------------------------------------------------------------------------------------------------
(defn <list-details> [items _opts]
(<aligned-body> (map list items)))
(defn <list> [items max-count & [opts]]
(let [items-markups (take max-count items)
more-count (- (count items) max-count)
more? (pos? more-count)
separator (or (:separator opts) :list-separator)
more-symbol (if more?
(if-let [more-symbol (:more-symbol opts)]
(if (fn? more-symbol)
(more-symbol more-count)
more-symbol)
(get-more-marker more-count)))
preview-markup (concat [(or (:tag opts) :list-tag)
(or (:open-symbol opts) :list-open-symbol)]
(interpose separator items-markups)
(if more? [separator more-symbol])
[(or (:close-symbol opts) :list-close-symbol)])]
(if more?
(let [details-markup (:details opts)
default-details-fn (partial <list-details> items opts)]
(<reference-surrogate> nil preview-markup (or details-markup default-details-fn)))
preview-markup)))
; -- mete-related markup ----------------------------------------------------------------------------------------------------
(defn <meta> [metadata]
(let [body-fn (fn [] [:meta-body-tag (<preview> metadata)])
header [:meta-header-tag "meta"]]
[:meta-reference-tag (<reference-surrogate> metadata header body-fn)])) ; body must be lazy, see #35
(defn <meta-wrapper> [metadata & children]
(concat [:meta-wrapper-tag] children [(<meta> metadata)]))
; -- function markup --------------------------------------------------------------------------------------------------------
(defn <function-details> [fn-obj ns _name arities prefix]
{:pre [(fn? fn-obj)]}
(let [arities (map wrap-arity arities)
make-arity-markup-list (fn [arity]
[[:fn-multi-arity-args-indent-tag prefix]
[:fn-args-tag arity]])
arities-markupts-lists (if (> (count arities) 1) (map make-arity-markup-list arities))
ns-markups-list (if-not (empty? ns) [:ns-icon [:fn-ns-name-tag ns]])
native-markups-list [:native-icon (<native-reference> fn-obj)]]
(<aligned-body> (concat arities-markupts-lists [ns-markups-list native-markups-list]))))
(defn <arities> [arities]
(let [multi-arity? (> (count arities) 1)]
[:fn-args-tag (wrap-arity (if multi-arity?
(pref :multi-arity-symbol)
(first arities)))]))
(defn <function> [fn-obj]
{:pre [(fn? fn-obj)]}
(let [[ns name] (munging/parse-fn-info fn-obj)
lambda? (empty? name)
spacer-symbol (pref :spacer)
rest-symbol (pref :rest-symbol)
multi-arity-symbol (pref :multi-arity-symbol)
arities (munging/extract-arities fn-obj true spacer-symbol multi-arity-symbol rest-symbol)
arities-markup (<arities> arities)
name-markup (if-not lambda? [:fn-name-tag name])
icon-markup (if lambda? :lambda-icon :fn-icon)
prefix-markup [:fn-prefix-tag icon-markup name-markup]
preview-markup [:fn-header-tag prefix-markup arities-markup]
details-fn (partial <function-details> fn-obj ns name arities prefix-markup)]
(<reference-surrogate> fn-obj preview-markup details-fn)))
; -- type markup ------------------------------------------------------------------------------------------------------------
(defn <type-basis-item> [basis-item]
[:type-basis-item-tag (name basis-item)])
(defn <type-basis> [basis]
(let [item-markups (map <type-basis-item> basis)
children-markups (interpose :type-basis-item-separator item-markups)]
(concat [:type-basis-tag] children-markups)))
(defn <type-details> [constructor-fn ns _name basis]
(let [ns-markup (if-not (empty? ns) [:ns-icon [:fn-ns-name-tag ns]])
basis-markup (if (empty? basis)
[:empty-basis-symbol]
[:basis-icon (<type-basis> basis)])
native-markup [:native-icon (<native-reference> constructor-fn)]]
(<aligned-body> [basis-markup ns-markup native-markup])))
(defn <type> [constructor-fn & [header-tag]]
(let [[ns name basis] (munging/parse-constructor-info constructor-fn)
name-markup [:type-name-tag name]
preview-markup [(or header-tag :type-header-tag) :type-symbol name-markup]
details-markup-fn (partial <type-details> constructor-fn ns name basis)]
[:type-wrapper-tag
:type-header-background
[:type-ref-tag (<reference-surrogate> constructor-fn preview-markup details-markup-fn)]]))
(defn <standalone-type> [constructor-fn & [header-tag]]
[:standalone-type-tag (<type> constructor-fn header-tag)])
; -- protocols markup -------------------------------------------------------------------------------------------------------
(defn <protocol-method-arity> [arity-fn]
(<reference> arity-fn))
(defn <protocol-method-arities-details> [fns]
(<aligned-body> (map <protocol-method-arity> fns)))
(defn <protocol-method-arities> [fns & [max-fns]]
(let [max-fns (or max-fns (pref :max-protocol-method-arities-list))
more? (> (count fns) max-fns)
aritites-markups (map <protocol-method-arity> (take max-fns fns))
preview-markup (concat [:protocol-method-arities-header-tag :protocol-method-arities-header-open-symbol]
(interpose :protocol-method-arities-list-header-separator aritites-markups)
(if more? [:protocol-method-arities-more-symbol])
[:protocol-method-arities-header-close-symbol])]
(if more?
(let [details-markup-fn (partial <protocol-method-arities-details> fns)]
(<reference-surrogate> nil preview-markup details-markup-fn))
preview-markup)))
(defn <protocol-method> [name arities]
[:protocol-method-tag
:method-icon
[:protocol-method-name-tag name]
(<protocol-method-arities> arities)])
(defn <protocol-details> [obj ns _name selector _fast?]
(let [protocol-obj (munging/get-protocol-object selector)
ns-markups-list (if-not (empty? ns) [:ns-icon [:protocol-ns-name-tag ns]])
native-markups-list (if (some? protocol-obj) [:native-icon (<native-reference> protocol-obj)])
methods (munging/collect-protocol-methods obj selector)
methods-markups (map (fn [[name arities]] (<protocol-method> name arities)) methods)
methods-markups-lists (map list methods-markups)]
(<aligned-body> (concat methods-markups-lists [ns-markups-list native-markups-list]))))
(defn <protocol> [obj protocol & [tag]]
(let [{:keys [ns name selector fast?]} protocol
preview-markup [(or tag :protocol-name-tag) name]
prefix-markup [(if fast? :fast-protocol-tag :slow-protocol-tag) :protocol-background]]
(if (some? obj)
(let [details-markup-fn (partial <protocol-details> obj ns name selector fast?)]
(conj prefix-markup (<reference-surrogate> obj preview-markup details-markup-fn)))
(conj prefix-markup preview-markup))))
(defn <more-protocols> [more-count]
(let [fake-protocol {:name (get-more-marker more-count)}]
(<protocol> nil fake-protocol :protocol-more-tag)))
(defn <protocols-list> [obj protocols & [max-protocols]]
(let [max-protocols (or max-protocols (pref :max-list-protocols))
protocols-markups (map (partial <protocol> obj) protocols)]
(<list> protocols-markups max-protocols {:tag :protocols-header-tag
:open-symbol :protocols-list-open-symbol
:close-symbol :protocols-list-close-symbol
:separator :header-protocol-separator
:more-symbol <more-protocols>})))
; -- instance fields markup -------------------------------------------------------------------------------------------------
(defn <field> [name value]
[:header-field-tag
[:header-field-name-tag (str name)]
:header-field-value-spacer
[:header-field-value-tag (<reference> (<surrogate> value) #(set-managed-print-level % 1))]
:header-field-separator])
(defn <fields-details-row> [field]
(let [[name value] field]
[:body-field-tr-tag
[:body-field-td1-tag
:body-field-symbol
[:body-field-name-tag (str name)]]
[:body-field-td2-tag
:body-field-value-spacer]
[:body-field-td3-tag
[:body-field-value-tag (<reference-surrogate> value)]]]))
(defn <fields> [fields & [max-fields]]
(if (zero? (count fields))
[:fields-header-tag :fields-header-no-fields-symbol]
(let [max-fields (or max-fields (pref :max-instance-header-fields))
more? (> (count fields) max-fields)
fields-markups (map (fn [[name value]] (<field> name value)) (take max-fields fields))]
(concat [:fields-header-tag
:fields-header-open-symbol]
fields-markups
[(if more? :more-fields-symbol)
:fields-header-close-symbol]))))
(defn <fields-details> [fields obj]
(let [protocols (munging/scan-protocols obj)
has-protocols? (not (empty? protocols))
fields-markup (if-not (zero? (count fields))
[:fields-icon (concat [:instance-body-fields-table-tag] (map <fields-details-row> fields))])
protocols-list-markup (if has-protocols? [:protocols-icon (<protocols-list> obj protocols)])
native-markup [:native-icon (<native-reference> obj)]]
(<aligned-body> [fields-markup protocols-list-markup native-markup])))
; -- type/record instance markup --------------------------------------------------------------------------------------------
(defn <instance> [value]
(let [constructor-fn (get-constructor value)
[_ns _name basis] (munging/parse-constructor-info constructor-fn)
custom-printing? (implements? IPrintWithWriter value)
type-markup (<type> constructor-fn :instance-type-header-tag)
fields (fetch-fields-values value basis)
fields-markup (<fields> fields (if custom-printing? 0))
fields-details-markup-fn #(<fields-details> fields value)
fields-preview-markup [:instance-value-tag (<reference-surrogate> value fields-markup fields-details-markup-fn)]
custom-printing-markup (if custom-printing?
[:instance-custom-printing-wrapper-tag
:instance-custom-printing-background
(print-via-protocol value :instance-custom-printing-tag)])]
[:instance-header-tag
:instance-header-background
fields-preview-markup
custom-printing-markup
type-markup]))
; ---------------------------------------------------------------------------------------------------------------------------
(defn <header> [value]
(<cljs-land> (<preview> value)))
(defn <surrogate-header> [surrogate]
(or (get-surrogate-header surrogate)
(<preview> (get-surrogate-target surrogate))))
(defn <surrogate-target> [surrogate]
(let [target (get-surrogate-target surrogate)]
(if (seqable? target)
(let [starting-index (get-surrogate-start-index surrogate)]
(<details> target starting-index))
(<standard-body-reference> target))))
(defn <surrogate-body> [surrogate]
(if-let [body (get-surrogate-body surrogate)]
(if (= :target body)
(<surrogate-target> surrogate)
body)))
; ---------------------------------------------------------------------------------------------------------------------------
(defn <atomic> [value]
(cond
(should-render? :render-nils value nil?) (<nil>)
(should-render? :render-bools value bool?) (<bool> value)
(should-render? :render-strings value string?) (<string> value)
(should-render? :render-numbers value number?) (<number> value)
(should-render? :render-keywords value keyword?) (<keyword> value)
(should-render? :render-symbols value symbol?) (<symbol> value)
(should-render? :render-instances value should-render-instance?) (<instance> value)
(should-render? :render-types value cljs-type?) (<standalone-type> value)
(should-render? :render-functions value cljs-function?) (<function> value)))
; ---------------------------------------------------------------------------------------------------------------------------
(def ^:dynamic *markup-db*)
; emit-markup-db macro will generate a map of all markup <functions> in this namespace:
;
; {:atomic <atomic>
; :reference <reference>
; :native-reference <native-reference>
; ...}
;
; we generate it only on first call and cache it in *markup-db*
; emitting markup db statically into def would prevent dead-code elimination
;
(defn get-markup-db []
(if (nil? *markup-db*)
(set! *markup-db* (emit-markup-db)))
*markup-db*)

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,145 @@
(ns devtools.formatters.printing
(:require-macros [devtools.oops :refer [safe-call]])
(:require [devtools.prefs :refer [pref]]
[devtools.format :refer [IDevtoolsFormat]]
[devtools.protocols :refer [ITemplate IGroup ISurrogate IFormat]]
[devtools.formatters.state :refer [push-object-to-current-history! *current-state* get-current-state
is-circular? get-managed-print-level set-managed-print-level
update-current-state!]]
[devtools.formatters.helpers :refer [cljs-value? expandable? abbreviated? directly-printable? should-render?]]))
; -- helpers ----------------------------------------------------------------------------------------------------------------
(defn markup? [value]
(::markup (meta value)))
(defn mark-as-markup [value]
(with-meta value {::markup true}))
(defn build-markup [markup-db fn-key & args]
(let [f (get markup-db fn-key)]
(assert f (str "missing markup method in markup-db: " fn-key))
(mark-as-markup (apply f args))))
(defn wrap-value-as-reference-if-needed [markup-db value]
(if (or (directly-printable? value) (markup? value))
value
(build-markup markup-db :reference-surrogate value)))
; -- TemplateWriter ---------------------------------------------------------------------------------------------------------
(deftype TemplateWriter [^:mutable group markup-db]
Object
(merge [_ a] (set! group (concat group a)))
(get-group [_] group)
IWriter
(-write [_ o] (set! group (concat group [(wrap-value-as-reference-if-needed markup-db o)]))) ; issue #21
(-flush [_] nil))
(defn make-template-writer [markup-db]
(TemplateWriter. [] markup-db))
; -- post-processing --------------------------------------------------------------------------------------------------------
(defn already-reference? [group]
(if-let [tag (first (first group))]
(= tag "reference")))
(defn wrap-group-in-reference-if-needed [group obj markup-db]
(if (and (not (already-reference? group))
(or (expandable? obj) (abbreviated? group)))
(let [expandable-markup (apply build-markup markup-db :expandable group)
surrogate-markup (build-markup markup-db :raw-surrogate obj expandable-markup :target)
reference-markup (build-markup markup-db :reference surrogate-markup)]
[reference-markup])
group))
(defn wrap-group-in-circular-warning-if-needed [group markup-db circular?]
(if circular?
[(apply build-markup markup-db :circular-reference group)]
group))
(defn wrap-group-in-meta-if-needed [group value markup-db]
(if (should-render? :render-metas value #(some? (meta %)))
[(apply (partial (:meta-wrapper markup-db) (meta value)) group)]
group))
; default printer implementation can do this:
; :else (write-all writer "#<" (str obj) ">")
; we want to wrap stringified obj in a reference for further inspection
;
; this behaviour changed in https://github.com/clojure/clojurescript/commit/34c3b8985ed8197d90f441c46d168c4024a20eb8
; newly functions and :else branch print "#object [" ... "]"
;
; in some situations obj can still be a clojurescript value (e.g. deftypes)
; we have to implement a special flag to prevent infinite recursion
; see https://github.com/binaryage/cljs-devtools/issues/2
; https://github.com/binaryage/cljs-devtools/issues/8
(defn detect-edge-case-and-patch-it [group obj markup-db]
(cond
(or
(and (= (count group) 5) (= (nth group 0) "#object[") (= (nth group 4) "\"]")) ; function case
(and (= (count group) 5) (= (nth group 0) "#object[") (= (nth group 4) "]")) ; :else -constructor case
(and (= (count group) 3) (= (nth group 0) "#object[") (= (nth group 2) "]"))) ; :else -cljs$lang$ctorStr case
[(build-markup markup-db :native-reference obj)]
(and (= (count group) 3) (= (nth group 0) "#<") (= (str obj) (nth group 1)) (= (nth group 2) ">")) ; old code prior r1.7.28
[(nth group 0) (build-markup :native-reference obj) (nth group 2)]
:else group))
(defn post-process-printed-output [output-group obj markup-db circular?]
(-> output-group
(detect-edge-case-and-patch-it obj markup-db) ; an ugly hack
(wrap-group-in-reference-if-needed obj markup-db)
(wrap-group-in-circular-warning-if-needed markup-db circular?)
(wrap-group-in-meta-if-needed obj markup-db)))
; -- alternative printer ----------------------------------------------------------------------------------------------------
(defn alt-printer-job [obj writer opts]
(let [{:keys [markup-db]} opts]
(if (or (safe-call satisfies? false IDevtoolsFormat obj)
(safe-call satisfies? false IFormat obj)) ; we have to wrap value in reference if detected IFormat
(-write writer (build-markup markup-db :reference obj))
(if-let [atomic-markup (build-markup markup-db :atomic obj)]
(-write writer atomic-markup)
(let [default-impl (:fallback-impl opts)
; we want to limit print-level, at max-print-level level use maximal abbreviation e.g. [...] or {...}
inner-opts (if (= *print-level* 1) (assoc opts :print-length 0) opts)]
(default-impl obj writer inner-opts))))))
(defn alt-printer-impl [obj writer opts]
(binding [*current-state* (get-current-state)]
(let [{:keys [markup-db]} opts
circular? (is-circular? obj)
inner-writer (make-template-writer (:markup-db opts))]
(push-object-to-current-history! obj)
(alt-printer-job obj inner-writer opts)
(.merge writer (post-process-printed-output (.get-group inner-writer) obj markup-db circular?)))))
; -- common code for managed printing ---------------------------------------------------------------------------------------
(defn managed-print [tag markup-db printer]
(let [writer (make-template-writer markup-db)
opts {:alt-impl alt-printer-impl
:markup-db markup-db
:print-length (pref :max-header-elements)
:more-marker (pref :more-marker)}
job-fn #(printer writer opts)]
(if-let [managed-print-level (get-managed-print-level)]
(binding [*print-level* managed-print-level]
(update-current-state! #(set-managed-print-level % nil)) ; reset managed-print-level so it does not propagate further down in expaded data
(job-fn))
(job-fn))
(concat [(pref tag)] (.get-group writer))))
; -- public printing API ----------------------------------------------------------------------------------------------------
(defn managed-print-via-writer [value tag markup-db]
(managed-print tag markup-db (fn [writer opts]
(pr-seq-writer [value] writer opts)))) ; note we use pr-seq-writer becasue pr-writer is private for some reason
(defn managed-print-via-protocol [value tag markup-db]
(managed-print tag markup-db (fn [writer opts]
(-pr-writer value writer opts))))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,299 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters.printing');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.format');
goog.require('devtools.protocols');
goog.require('devtools.formatters.state');
goog.require('devtools.formatters.helpers');
devtools.formatters.printing.markup_QMARK_ = (function devtools$formatters$printing$markup_QMARK_(value){
return new cljs.core.Keyword("devtools.formatters.printing","markup","devtools.formatters.printing/markup",-1990109186).cljs$core$IFn$_invoke$arity$1(cljs.core.meta.call(null,value));
});
devtools.formatters.printing.mark_as_markup = (function devtools$formatters$printing$mark_as_markup(value){
return cljs.core.with_meta.call(null,value,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword("devtools.formatters.printing","markup","devtools.formatters.printing/markup",-1990109186),true], null));
});
devtools.formatters.printing.build_markup = (function devtools$formatters$printing$build_markup(var_args){
var args__4736__auto__ = [];
var len__4730__auto___26288 = arguments.length;
var i__4731__auto___26289 = (0);
while(true){
if((i__4731__auto___26289 < len__4730__auto___26288)){
args__4736__auto__.push((arguments[i__4731__auto___26289]));
var G__26290 = (i__4731__auto___26289 + (1));
i__4731__auto___26289 = G__26290;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((2) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((2)),(0),null)):null);
return devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__4737__auto__);
});
devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic = (function (markup_db,fn_key,args){
var f = cljs.core.get.call(null,markup_db,fn_key);
if(cljs.core.truth_(f)){
} else {
throw (new Error(["Assert failed: ",["missing markup method in markup-db: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(fn_key)].join(''),"\n","f"].join('')));
}
return devtools.formatters.printing.mark_as_markup.call(null,cljs.core.apply.call(null,f,args));
});
devtools.formatters.printing.build_markup.cljs$lang$maxFixedArity = (2);
/** @this {Function} */
devtools.formatters.printing.build_markup.cljs$lang$applyTo = (function (seq26285){
var G__26286 = cljs.core.first.call(null,seq26285);
var seq26285__$1 = cljs.core.next.call(null,seq26285);
var G__26287 = cljs.core.first.call(null,seq26285__$1);
var seq26285__$2 = cljs.core.next.call(null,seq26285__$1);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__26286,G__26287,seq26285__$2);
});
devtools.formatters.printing.wrap_value_as_reference_if_needed = (function devtools$formatters$printing$wrap_value_as_reference_if_needed(markup_db,value){
if(cljs.core.truth_((function (){var or__4131__auto__ = devtools.formatters.helpers.directly_printable_QMARK_.call(null,value);
if(or__4131__auto__){
return or__4131__auto__;
} else {
return devtools.formatters.printing.markup_QMARK_.call(null,value);
}
})())){
return value;
} else {
return devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"reference-surrogate","reference-surrogate",274031791),value);
}
});
/**
* @constructor
* @implements {cljs.core.IWriter}
* @implements {devtools.formatters.printing.Object}
*/
devtools.formatters.printing.TemplateWriter = (function (group,markup_db){
this.group = group;
this.markup_db = markup_db;
this.cljs$lang$protocol_mask$partition0$ = 1073741824;
this.cljs$lang$protocol_mask$partition1$ = 0;
});
devtools.formatters.printing.TemplateWriter.prototype.merge = (function (a){
var self__ = this;
var _ = this;
return self__.group = cljs.core.concat.call(null,self__.group,a);
});
devtools.formatters.printing.TemplateWriter.prototype.get_group = (function (){
var self__ = this;
var _ = this;
return self__.group;
});
devtools.formatters.printing.TemplateWriter.prototype.cljs$core$IWriter$_write$arity$2 = (function (_,o){
var self__ = this;
var ___$1 = this;
return self__.group = cljs.core.concat.call(null,self__.group,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [devtools.formatters.printing.wrap_value_as_reference_if_needed.call(null,self__.markup_db,o)], null));
});
devtools.formatters.printing.TemplateWriter.prototype.cljs$core$IWriter$_flush$arity$1 = (function (_){
var self__ = this;
var ___$1 = this;
return null;
});
devtools.formatters.printing.TemplateWriter.getBasis = (function (){
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.with_meta(new cljs.core.Symbol(null,"group","group",-2071839637,null),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"mutable","mutable",875778266),true], null)),new cljs.core.Symbol(null,"markup-db","markup-db",-1841597035,null)], null);
});
devtools.formatters.printing.TemplateWriter.cljs$lang$type = true;
devtools.formatters.printing.TemplateWriter.cljs$lang$ctorStr = "devtools.formatters.printing/TemplateWriter";
devtools.formatters.printing.TemplateWriter.cljs$lang$ctorPrWriter = (function (this__4374__auto__,writer__4375__auto__,opt__4376__auto__){
return cljs.core._write.call(null,writer__4375__auto__,"devtools.formatters.printing/TemplateWriter");
});
/**
* Positional factory function for devtools.formatters.printing/TemplateWriter.
*/
devtools.formatters.printing.__GT_TemplateWriter = (function devtools$formatters$printing$__GT_TemplateWriter(group,markup_db){
return (new devtools.formatters.printing.TemplateWriter(group,markup_db));
});
devtools.formatters.printing.make_template_writer = (function devtools$formatters$printing$make_template_writer(markup_db){
return (new devtools.formatters.printing.TemplateWriter(cljs.core.PersistentVector.EMPTY,markup_db));
});
devtools.formatters.printing.already_reference_QMARK_ = (function devtools$formatters$printing$already_reference_QMARK_(group){
var temp__5718__auto__ = cljs.core.first.call(null,cljs.core.first.call(null,group));
if(cljs.core.truth_(temp__5718__auto__)){
var tag = temp__5718__auto__;
return cljs.core._EQ_.call(null,tag,"reference");
} else {
return null;
}
});
devtools.formatters.printing.wrap_group_in_reference_if_needed = (function devtools$formatters$printing$wrap_group_in_reference_if_needed(group,obj,markup_db){
if(cljs.core.truth_((function (){var and__4120__auto__ = cljs.core.not.call(null,devtools.formatters.printing.already_reference_QMARK_.call(null,group));
if(and__4120__auto__){
var or__4131__auto__ = devtools.formatters.helpers.expandable_QMARK_.call(null,obj);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return devtools.formatters.helpers.abbreviated_QMARK_.call(null,group);
}
} else {
return and__4120__auto__;
}
})())){
var expandable_markup = cljs.core.apply.call(null,devtools.formatters.printing.build_markup,markup_db,new cljs.core.Keyword(null,"expandable","expandable",-704609097),group);
var surrogate_markup = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"raw-surrogate","raw-surrogate",904931181),obj,expandable_markup,new cljs.core.Keyword(null,"target","target",253001721));
var reference_markup = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"reference","reference",-1711695023),surrogate_markup);
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [reference_markup], null);
} else {
return group;
}
});
devtools.formatters.printing.wrap_group_in_circular_warning_if_needed = (function devtools$formatters$printing$wrap_group_in_circular_warning_if_needed(group,markup_db,circular_QMARK_){
if(cljs.core.truth_(circular_QMARK_)){
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.apply.call(null,devtools.formatters.printing.build_markup,markup_db,new cljs.core.Keyword(null,"circular-reference","circular-reference",970308727),group)], null);
} else {
return group;
}
});
devtools.formatters.printing.wrap_group_in_meta_if_needed = (function devtools$formatters$printing$wrap_group_in_meta_if_needed(group,value,markup_db){
if(cljs.core.truth_(devtools.formatters.helpers.should_render_QMARK_.call(null,new cljs.core.Keyword(null,"render-metas","render-metas",1141294116),value,(function (p1__26291_SHARP_){
return (!((cljs.core.meta.call(null,p1__26291_SHARP_) == null)));
})))){
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.apply.call(null,cljs.core.partial.call(null,new cljs.core.Keyword(null,"meta-wrapper","meta-wrapper",-1989845587).cljs$core$IFn$_invoke$arity$1(markup_db),cljs.core.meta.call(null,value)),group)], null);
} else {
return group;
}
});
devtools.formatters.printing.detect_edge_case_and_patch_it = (function devtools$formatters$printing$detect_edge_case_and_patch_it(group,obj,markup_db){
if(((((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(5))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#object[")) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(4)),"\"]")))) || (((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(5))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#object[")) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(4)),"]")))) || (((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(3))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#object[")) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(2)),"]")))))){
return new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"native-reference","native-reference",-2013708658),obj)], null);
} else {
if(((cljs.core._EQ_.call(null,cljs.core.count.call(null,group),(3))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(0)),"#<")) && (cljs.core._EQ_.call(null,cljs.core.str.cljs$core$IFn$_invoke$arity$1(obj),cljs.core.nth.call(null,group,(1)))) && (cljs.core._EQ_.call(null,cljs.core.nth.call(null,group,(2)),">")))){
return new cljs.core.PersistentVector(null, 3, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.nth.call(null,group,(0)),devtools.formatters.printing.build_markup.call(null,new cljs.core.Keyword(null,"native-reference","native-reference",-2013708658),obj),cljs.core.nth.call(null,group,(2))], null);
} else {
return group;
}
}
});
devtools.formatters.printing.post_process_printed_output = (function devtools$formatters$printing$post_process_printed_output(output_group,obj,markup_db,circular_QMARK_){
return devtools.formatters.printing.wrap_group_in_meta_if_needed.call(null,devtools.formatters.printing.wrap_group_in_circular_warning_if_needed.call(null,devtools.formatters.printing.wrap_group_in_reference_if_needed.call(null,devtools.formatters.printing.detect_edge_case_and_patch_it.call(null,output_group,obj,markup_db),obj,markup_db),markup_db,circular_QMARK_),obj,markup_db);
});
devtools.formatters.printing.alt_printer_job = (function devtools$formatters$printing$alt_printer_job(obj,writer,opts){
var map__26292 = opts;
var map__26292__$1 = (((((!((map__26292 == null))))?(((((map__26292.cljs$lang$protocol_mask$partition0$ & (64))) || ((cljs.core.PROTOCOL_SENTINEL === map__26292.cljs$core$ISeq$))))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__26292):map__26292);
var markup_db = cljs.core.get.call(null,map__26292__$1,new cljs.core.Keyword(null,"markup-db","markup-db",812838734));
if(cljs.core.truth_((function (){var or__4131__auto__ = (function (){try{if((!((obj == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === obj.devtools$format$IDevtoolsFormat$)))){
return true;
} else {
if((!obj.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,obj);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.format.IDevtoolsFormat,obj);
}
}catch (e26296){var _e__25273__auto__ = e26296;
return false;
}})();
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
try{if((!((obj == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === obj.devtools$protocols$IFormat$)))){
return true;
} else {
if((!obj.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,obj);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IFormat,obj);
}
}catch (e26298){var _e__25273__auto__ = e26298;
return false;
}}
})())){
return cljs.core._write.call(null,writer,devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"reference","reference",-1711695023),obj));
} else {
var temp__5718__auto__ = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"atomic","atomic",-120459460),obj);
if(cljs.core.truth_(temp__5718__auto__)){
var atomic_markup = temp__5718__auto__;
return cljs.core._write.call(null,writer,atomic_markup);
} else {
var default_impl = new cljs.core.Keyword(null,"fallback-impl","fallback-impl",-1501286995).cljs$core$IFn$_invoke$arity$1(opts);
var inner_opts = ((cljs.core._EQ_.call(null,cljs.core._STAR_print_level_STAR_,(1)))?cljs.core.assoc.call(null,opts,new cljs.core.Keyword(null,"print-length","print-length",1931866356),(0)):opts);
return default_impl.call(null,obj,writer,inner_opts);
}
}
});
devtools.formatters.printing.alt_printer_impl = (function devtools$formatters$printing$alt_printer_impl(obj,writer,opts){
var _STAR_current_state_STAR__orig_val__26300 = devtools.formatters.state._STAR_current_state_STAR_;
var _STAR_current_state_STAR__temp_val__26301 = devtools.formatters.state.get_current_state.call(null);
devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR__temp_val__26301;
try{var map__26302 = opts;
var map__26302__$1 = (((((!((map__26302 == null))))?(((((map__26302.cljs$lang$protocol_mask$partition0$ & (64))) || ((cljs.core.PROTOCOL_SENTINEL === map__26302.cljs$core$ISeq$))))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__26302):map__26302);
var markup_db = cljs.core.get.call(null,map__26302__$1,new cljs.core.Keyword(null,"markup-db","markup-db",812838734));
var circular_QMARK_ = devtools.formatters.state.is_circular_QMARK_.call(null,obj);
var inner_writer = devtools.formatters.printing.make_template_writer.call(null,new cljs.core.Keyword(null,"markup-db","markup-db",812838734).cljs$core$IFn$_invoke$arity$1(opts));
devtools.formatters.state.push_object_to_current_history_BANG_.call(null,obj);
devtools.formatters.printing.alt_printer_job.call(null,obj,inner_writer,opts);
return writer.merge(devtools.formatters.printing.post_process_printed_output.call(null,inner_writer.get_group(),obj,markup_db,circular_QMARK_));
}finally {devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR__orig_val__26300;
}});
devtools.formatters.printing.managed_print = (function devtools$formatters$printing$managed_print(tag,markup_db,printer){
var writer = devtools.formatters.printing.make_template_writer.call(null,markup_db);
var opts = new cljs.core.PersistentArrayMap(null, 4, [new cljs.core.Keyword(null,"alt-impl","alt-impl",670969595),devtools.formatters.printing.alt_printer_impl,new cljs.core.Keyword(null,"markup-db","markup-db",812838734),markup_db,new cljs.core.Keyword(null,"print-length","print-length",1931866356),devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"max-header-elements","max-header-elements",713629864)),new cljs.core.Keyword(null,"more-marker","more-marker",-14717935),devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"more-marker","more-marker",-14717935))], null);
var job_fn = ((function (writer,opts){
return (function (){
return printer.call(null,writer,opts);
});})(writer,opts))
;
var temp__5718__auto___26307 = devtools.formatters.state.get_managed_print_level.call(null);
if(cljs.core.truth_(temp__5718__auto___26307)){
var managed_print_level_26308 = temp__5718__auto___26307;
var _STAR_print_level_STAR__orig_val__26305_26309 = cljs.core._STAR_print_level_STAR_;
var _STAR_print_level_STAR__temp_val__26306_26310 = managed_print_level_26308;
cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR__temp_val__26306_26310;
try{devtools.formatters.state.update_current_state_BANG_.call(null,((function (_STAR_print_level_STAR__orig_val__26305_26309,_STAR_print_level_STAR__temp_val__26306_26310,managed_print_level_26308,temp__5718__auto___26307,writer,opts,job_fn){
return (function (p1__26304_SHARP_){
return devtools.formatters.state.set_managed_print_level.call(null,p1__26304_SHARP_,null);
});})(_STAR_print_level_STAR__orig_val__26305_26309,_STAR_print_level_STAR__temp_val__26306_26310,managed_print_level_26308,temp__5718__auto___26307,writer,opts,job_fn))
);
job_fn.call(null);
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR__orig_val__26305_26309;
}} else {
job_fn.call(null);
}
return cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [devtools.prefs.pref.call(null,tag)], null),writer.get_group());
});
devtools.formatters.printing.managed_print_via_writer = (function devtools$formatters$printing$managed_print_via_writer(value,tag,markup_db){
return devtools.formatters.printing.managed_print.call(null,tag,markup_db,(function (writer,opts){
return cljs.core.pr_seq_writer.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [value], null),writer,opts);
}));
});
devtools.formatters.printing.managed_print_via_protocol = (function devtools$formatters$printing$managed_print_via_protocol(value,tag,markup_db){
return devtools.formatters.printing.managed_print.call(null,tag,markup_db,(function (writer,opts){
return cljs.core._pr_writer.call(null,value,writer,opts);
}));
});
//# sourceMappingURL=printing.js.map?rel=1582812679491

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,73 @@
(ns devtools.formatters.state)
; - state management --------------------------------------------------------------------------------------------------------
;
; we have to maintain some state:
; a) to prevent infinite recursion in some pathological cases (https://github.com/binaryage/cljs-devtools/issues/2)
; b) to keep track of printed objects to visually signal circular data structures
;
; We dynamically bind *current-config* to the config passed from "outside" when entering calls to our API methods.
; Initially the state is empty, but we accumulate there a history of seen values when rendering individual values
; in depth-first traversal order. See alt-printer-impl where we re-bind *current-config* for each traversal level.
; But there is a catch. For larger data structures our printing methods usually do not print everything at once.
; We can include so called "object references" which are just placeholders which can be expanded later
; by DevTools UI (when user clicks a disclosure triangle).
; For proper continuation in rendering of those references we have to carry our existing state over.
; We use "config" feature of custom formatters system to pass current state to future API calls.
(def ^:dynamic *current-state* nil)
(defn valid-current-state? []
(some? *current-state*))
(defn get-default-state []
{})
(defn get-current-state []
{:pre [(valid-current-state?)]}
*current-state*)
(defn update-current-state! [f & args]
{:pre [(valid-current-state?)]}
(set! *current-state* (apply f *current-state* args)))
; -- high level API ---------------------------------------------------------------------------------------------------------
(defn push-object-to-current-history! [object]
(update-current-state! update :history conj object))
(defn get-current-history []
(:history (get-current-state)))
(defn is-circular? [object]
(let [history (get-current-history)]
(some #(identical? % object) history)))
(defn ^bool prevent-recursion? []
(boolean (:prevent-recursion (get-current-state))))
(defn set-prevent-recursion [state val]
(if (some? val)
(assoc state :prevent-recursion val)
(dissoc state :prevent-recursion)))
(defn get-managed-print-level []
(:managed-print-level (get-current-state)))
(defn set-managed-print-level [state val]
(if (some? val)
(assoc state :managed-print-level val)
(dissoc state :managed-print-level)))
(defn get-depth-budget []
(:depth-budget (get-current-state)))
(defn set-depth-budget [state val]
(if (some? val)
(assoc state :depth-budget val)
(dissoc state :depth-budget)))
(defn reset-depth-limits [state]
(-> state
(set-depth-budget nil)
(set-managed-print-level nil)))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,106 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters.state');
goog.require('cljs.core');
devtools.formatters.state._STAR_current_state_STAR_ = null;
devtools.formatters.state.valid_current_state_QMARK_ = (function devtools$formatters$state$valid_current_state_QMARK_(){
return (!((devtools.formatters.state._STAR_current_state_STAR_ == null)));
});
devtools.formatters.state.get_default_state = (function devtools$formatters$state$get_default_state(){
return cljs.core.PersistentArrayMap.EMPTY;
});
devtools.formatters.state.get_current_state = (function devtools$formatters$state$get_current_state(){
if(devtools.formatters.state.valid_current_state_QMARK_.call(null)){
} else {
throw (new Error("Assert failed: (valid-current-state?)"));
}
return devtools.formatters.state._STAR_current_state_STAR_;
});
devtools.formatters.state.update_current_state_BANG_ = (function devtools$formatters$state$update_current_state_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___26279 = arguments.length;
var i__4731__auto___26280 = (0);
while(true){
if((i__4731__auto___26280 < len__4730__auto___26279)){
args__4736__auto__.push((arguments[i__4731__auto___26280]));
var G__26281 = (i__4731__auto___26280 + (1));
i__4731__auto___26280 = G__26281;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (f,args){
if(devtools.formatters.state.valid_current_state_QMARK_.call(null)){
} else {
throw (new Error("Assert failed: (valid-current-state?)"));
}
return devtools.formatters.state._STAR_current_state_STAR_ = cljs.core.apply.call(null,f,devtools.formatters.state._STAR_current_state_STAR_,args);
});
devtools.formatters.state.update_current_state_BANG_.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.formatters.state.update_current_state_BANG_.cljs$lang$applyTo = (function (seq26277){
var G__26278 = cljs.core.first.call(null,seq26277);
var seq26277__$1 = cljs.core.next.call(null,seq26277);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__26278,seq26277__$1);
});
devtools.formatters.state.push_object_to_current_history_BANG_ = (function devtools$formatters$state$push_object_to_current_history_BANG_(object){
return devtools.formatters.state.update_current_state_BANG_.call(null,cljs.core.update,new cljs.core.Keyword(null,"history","history",-247395220),cljs.core.conj,object);
});
devtools.formatters.state.get_current_history = (function devtools$formatters$state$get_current_history(){
return new cljs.core.Keyword(null,"history","history",-247395220).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null));
});
devtools.formatters.state.is_circular_QMARK_ = (function devtools$formatters$state$is_circular_QMARK_(object){
var history = devtools.formatters.state.get_current_history.call(null);
return cljs.core.some.call(null,((function (history){
return (function (p1__26282_SHARP_){
return (p1__26282_SHARP_ === object);
});})(history))
,history);
});
devtools.formatters.state.prevent_recursion_QMARK_ = (function devtools$formatters$state$prevent_recursion_QMARK_(){
return cljs.core.boolean$.call(null,new cljs.core.Keyword(null,"prevent-recursion","prevent-recursion",-1498371606).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null)));
});
devtools.formatters.state.set_prevent_recursion = (function devtools$formatters$state$set_prevent_recursion(state,val){
if((!((val == null)))){
return cljs.core.assoc.call(null,state,new cljs.core.Keyword(null,"prevent-recursion","prevent-recursion",-1498371606),val);
} else {
return cljs.core.dissoc.call(null,state,new cljs.core.Keyword(null,"prevent-recursion","prevent-recursion",-1498371606));
}
});
devtools.formatters.state.get_managed_print_level = (function devtools$formatters$state$get_managed_print_level(){
return new cljs.core.Keyword(null,"managed-print-level","managed-print-level",-844058473).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null));
});
devtools.formatters.state.set_managed_print_level = (function devtools$formatters$state$set_managed_print_level(state,val){
if((!((val == null)))){
return cljs.core.assoc.call(null,state,new cljs.core.Keyword(null,"managed-print-level","managed-print-level",-844058473),val);
} else {
return cljs.core.dissoc.call(null,state,new cljs.core.Keyword(null,"managed-print-level","managed-print-level",-844058473));
}
});
devtools.formatters.state.get_depth_budget = (function devtools$formatters$state$get_depth_budget(){
return new cljs.core.Keyword(null,"depth-budget","depth-budget",-335905888).cljs$core$IFn$_invoke$arity$1(devtools.formatters.state.get_current_state.call(null));
});
devtools.formatters.state.set_depth_budget = (function devtools$formatters$state$set_depth_budget(state,val){
if((!((val == null)))){
return cljs.core.assoc.call(null,state,new cljs.core.Keyword(null,"depth-budget","depth-budget",-335905888),val);
} else {
return cljs.core.dissoc.call(null,state,new cljs.core.Keyword(null,"depth-budget","depth-budget",-335905888));
}
});
devtools.formatters.state.reset_depth_limits = (function devtools$formatters$state$reset_depth_limits(state){
return devtools.formatters.state.set_managed_print_level.call(null,devtools.formatters.state.set_depth_budget.call(null,state,null),null);
});
//# sourceMappingURL=state.js.map?rel=1582812679457

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/formatters\/state.js","sources":["state.cljs?rel=1582812679457"],"lineCount":106,"mappings":";AAAA;;AAiBA,sDAAA,tDAAeA;AAEf,uDAAA,vDAAMC;AAAN,AACE,UAAA,wDAAA,vDAAOD;;AAET,8CAAA,9CAAME;AAAN,AAAA;;AAGA,8CAAA,9CAAME;AAAN,AAAA,GACS,AAACH;AADV;AAAA,AAAA,MAAA,KAAAE,MAAA;;;AAEEH;;AAEF,AAAA,uDAAA,+DAAAK,tHAAMM;AAAN,AAAA,IAAAL,qBAAA;AAAA,AAAA,IAAAC,0BAAA,AAAA;AAAA,AAAA,IAAAC,wBAAA;;AAAA,AAAA,GAAA,CAAAA,wBAAAD;AAAA,AAAA,AAAAD,wBAAA,CAAA,UAAAE;;AAAA,eAAA,CAAAA,wBAAA;;;;AAAA;;;;AAAA,IAAAC,uBAAA,EAAA,CAAA,MAAA,AAAAH,4BAAA,AAAA,KAAAI,qBAAA,AAAAJ,yBAAA,KAAA,IAAA,OAAA;AAAA,AAAA,OAAAK,0FAAA,CAAA,UAAA,MAAAF;;;AAAA,AAAA,AAAA,4FAAA,5FAAME,uGAAuBM,EAAIC;AAAjC,AAAA,GACS,AAACjB;AADV;AAAA,AAAA,MAAA,KAAAE,MAAA;;;AAEE,OAAMH,sDAAgB,AAACmB,0BAAMF,EAAEjB,oDAAgBkB;;;AAFjD,AAAA,+EAAA,\/EAAMP;;AAAN;AAAA,AAAA,yEAAA,WAAAC,pFAAMD;AAAN,AAAA,IAAAE,WAAA,AAAAC,0BAAAF;IAAAA,eAAA,AAAAG,yBAAAH;AAAA,AAAA,IAAAI,qBAAA;AAAA,AAAA,OAAAA,wDAAAH,SAAAD;;;AAAA,AAMA,iEAAA,jEAAMQ,0IAAiCC;AAAvC,AACE,uFAAA,hFAACV,+DAAsBW,4EAAgBC,eAAKF;;AAE9C,gDAAA,hDAAMG;AAAN,AACE,OAAA,yFAAU,AAACpB;;AAEb,+CAAA,\/CAAMqB,sGAAcJ;AAApB,AACE,IAAMK,UAAQ,AAACF;AAAf,AACE,gCAAA,zBAACI;kBAADD;AAAA,AAAO,QAAAA,qBAAcN;;CAAQK;;AAEjC,qDAAA,rDAAYG;AAAZ,AACE,OAACC,6BAAQ,AAAA,8GAAoB,AAAC1B;;AAEhC,kDAAA,lDAAM2B,4GAAuBC,MAAMC;AAAnC,AACE,GAAI,GAAA,QAAA,PAAOA;AACT,uCAAA,hCAACC,0BAAMF,sFAAyBC;;AAChC,wCAAA,jCAACE,2BAAOH;;;AAEZ,oDAAA,pDAAMI;AAAN,AACE,OAAA,iHAAsB,AAAChC;;AAEzB,oDAAA,pDAAMiC,gHAAyBL,MAAMC;AAArC,AACE,GAAI,GAAA,QAAA,PAAOA;AACT,uCAAA,hCAACC,0BAAMF,yFAA2BC;;AAClC,wCAAA,jCAACE,2BAAOH;;;AAEZ,6CAAA,7CAAMM;AAAN,AACE,OAAA,mGAAe,AAAClC;;AAElB,6CAAA,7CAAMmC,kGAAkBP,MAAMC;AAA9B,AACE,GAAI,GAAA,QAAA,PAAOA;AACT,uCAAA,hCAACC,0BAAMF,2EAAoBC;;AAC3B,wCAAA,jCAACE,2BAAOH;;;AAEZ,+CAAA,\/CAAMQ,sGAAoBR;AAA1B,wHACMA,rDACA,2DAAA,3DAACO,nEACD,oIAAA,7HAACF","names":["devtools.formatters.state\/*current-state*","devtools.formatters.state\/valid-current-state?","devtools.formatters.state\/get-default-state","js\/Error","devtools.formatters.state\/get-current-state","var_args","args__4736__auto__","len__4730__auto__","i__4731__auto__","argseq__4737__auto__","cljs.core\/IndexedSeq","devtools.formatters.state\/update-current-state!","seq26277","G__26278","cljs.core\/first","cljs.core\/next","self__4717__auto__","f","args","cljs.core\/apply","devtools.formatters.state\/push-object-to-current-history!","object","cljs.core\/update","cljs.core\/conj","devtools.formatters.state\/get-current-history","devtools.formatters.state\/is-circular?","history","p1__26282#","cljs.core\/some","devtools.formatters.state\/prevent-recursion?","cljs.core\/boolean","devtools.formatters.state\/set-prevent-recursion","state","val","cljs.core\/assoc","cljs.core\/dissoc","devtools.formatters.state\/get-managed-print-level","devtools.formatters.state\/set-managed-print-level","devtools.formatters.state\/get-depth-budget","devtools.formatters.state\/set-depth-budget","devtools.formatters.state\/reset-depth-limits"]}

View file

@ -0,0 +1,209 @@
(ns devtools.formatters.templating
(:require-macros [devtools.oops :refer [oget oset ocall oapply safe-call unchecked-aget]])
(:require [clojure.walk :refer [prewalk]]
[devtools.util :refer [pprint-str]]
[devtools.protocols :refer [ITemplate IGroup ISurrogate IFormat]]
[devtools.formatters.helpers :refer [pref cljs-value?]]
[devtools.formatters.state :refer [get-current-state prevent-recursion?]]
[clojure.string :as string]))
; -- object marking support -------------------------------------------------------------------------------------------------
(defn mark-as-group! [value]
(specify! value IGroup)
value)
(defn group? [value]
(satisfies? IGroup value))
(defn mark-as-template! [value]
(specify! value ITemplate)
value)
(defn template? [value]
(satisfies? ITemplate value))
(defn mark-as-surrogate! [value]
(specify! value ISurrogate)
value)
(defn surrogate? [value]
(satisfies? ISurrogate value))
(defn reference? [value]
(and (group? value)
(= (unchecked-aget value 0) "object")))
; ---------------------------------------------------------------------------------------------------------------------------
(defn make-group [& items]
(let [group (mark-as-group! #js [])]
(doseq [item items]
(if (some? item)
(if (coll? item)
(.apply (unchecked-aget group "push") group (mark-as-group! (into-array item))) ; convenience helper to splat cljs collections
(.push group (pref item)))))
group))
(defn make-template
[tag style & children]
(let [tag (pref tag)
style (pref style)
template (mark-as-template! #js [tag (if (empty? style)
#js {}
#js {"style" style})])]
(doseq [child children]
(if (some? child)
(if (coll? child)
(.apply (unchecked-aget template "push") template (mark-as-template! (into-array (keep pref child)))) ; convenience helper to splat cljs collections
(if-let [child-value (pref child)]
(.push template child-value)))))
template))
(defn concat-templates! [template & templates]
(mark-as-template! (.apply (oget template "concat") template (into-array (map into-array (keep pref templates))))))
(defn extend-template! [template & args]
(concat-templates! template args))
(defn make-surrogate
; passing :target as body means that targt object body should be rendered using standard templates
; see <surrogate-body> in markup.cljs
([object] (make-surrogate object nil))
([object header] (make-surrogate object header nil))
([object header body] (make-surrogate object header body 0))
([object header body start-index]
(mark-as-surrogate! (js-obj
"target" object
"header" header
"body" body
"startIndex" (or start-index 0)))))
(defn get-surrogate-target [surrogate]
{:pre [(surrogate? surrogate)]}
(oget surrogate "target"))
(defn get-surrogate-header [surrogate]
{:pre [(surrogate? surrogate)]}
(oget surrogate "header"))
(defn get-surrogate-body [surrogate]
{:pre [(surrogate? surrogate)]}
(oget surrogate "body"))
(defn get-surrogate-start-index [surrogate]
{:pre [(surrogate? surrogate)]}
(oget surrogate "startIndex"))
(defn make-reference [object & [state-override-fn]]
{:pre [(or (nil? state-override-fn) (fn? state-override-fn))]}
(if (nil? object)
; this code is duplicated in markup.cljs <nil>
(make-template :span :nil-style :nil-label)
(let [sub-state (if (some? state-override-fn)
(state-override-fn (get-current-state))
(get-current-state))]
(make-group "object" #js {"object" object
"config" sub-state}))))
; -- JSON ML support --------------------------------------------------------------------------------------------------------
; a renderer from hiccup-like data markup to json-ml
;
; [[tag style] child1 child2 ...] -> #js [tag #js {"style" ...} child1 child2 ...]
;
(declare render-json-ml*)
(def ^:dynamic *current-render-stack* [])
(def ^:dynamic *current-render-path* [])
(defn print-preview [markup]
(binding [*print-level* 1]
(pr-str markup)))
(defn add-stack-separators [stack]
(interpose "-------------" stack))
(defn replace-fns-with-markers [stack]
(let [f (fn [v]
(if (fn? v)
"##fn##"
v))]
(prewalk f stack)))
(defn pprint-render-calls [stack]
(map pprint-str stack))
(defn pprint-render-stack [stack]
(string/join "\n" (-> stack
reverse
replace-fns-with-markers
pprint-render-calls
add-stack-separators)))
(defn pprint-render-path [path]
(pprint-str path))
(defn assert-markup-error [msg]
(assert false (str msg "\n"
"Render path: " (pprint-render-path *current-render-path*) "\n"
"Render stack:\n"
(pprint-render-stack *current-render-stack*))))
(defn surrogate-markup? [markup]
(and (sequential? markup) (= (first markup) "surrogate")))
(defn render-special [name args]
(case name
"surrogate" (let [obj (first args)
converted-args (map render-json-ml* (rest args))]
(apply make-surrogate (concat [obj] converted-args)))
"reference" (let [obj (first args)
converted-obj (if (surrogate-markup? obj) (render-json-ml* obj) obj)]
(apply make-reference (concat [converted-obj] (rest args))))
(assert-markup-error (str "no matching special tag name: '" name "'"))))
(defn emptyish? [v]
(if (or (seqable? v) (array? v) (string? v))
(empty? v)
false))
(defn render-subtree [tag children]
(let [[html-tag style] tag]
(apply make-template html-tag style (map render-json-ml* (remove emptyish? (map pref children))))))
(defn render-json-ml* [markup]
(if-not (sequential? markup)
markup
(binding [*current-render-path* (conj *current-render-path* (first markup))]
(let [tag (pref (first markup))]
(cond
(string? tag) (render-special tag (rest markup))
(sequential? tag) (render-subtree tag (rest markup))
:else (assert-markup-error (str "invalid json-ml markup at " (print-preview markup) ":")))))))
(defn render-json-ml [markup]
(binding [*current-render-stack* (conj *current-render-stack* markup)
*current-render-path* (conj *current-render-path* "<render-json-ml>")]
(render-json-ml* markup)))
; -- template rendering -----------------------------------------------------------------------------------------------------
(defn ^:dynamic assert-failed-markup-rendering [initial-value value]
(assert false (str "result of markup rendering must be a template,\n"
"resolved to " (pprint-str value)
"initial value: " (pprint-str initial-value))))
(defn render-markup* [initial-value value]
(cond
(fn? value) (recur initial-value (value))
(keyword? value) (recur initial-value (pref value))
(sequential? value) (recur initial-value (render-json-ml value))
(template? value) value
(surrogate? value) value
(reference? value) value
:else (assert-failed-markup-rendering initial-value value)))
(defn render-markup [value]
(render-markup* value value))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,655 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.formatters.templating');
goog.require('cljs.core');
goog.require('clojure.walk');
goog.require('devtools.util');
goog.require('devtools.protocols');
goog.require('devtools.formatters.helpers');
goog.require('devtools.formatters.state');
goog.require('clojure.string');
devtools.formatters.templating.mark_as_group_BANG_ = (function devtools$formatters$templating$mark_as_group_BANG_(value){
var x27760_27761 = value;
x27760_27761.devtools$protocols$IGroup$ = cljs.core.PROTOCOL_SENTINEL;
return value;
});
devtools.formatters.templating.group_QMARK_ = (function devtools$formatters$templating$group_QMARK_(value){
if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$IGroup$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IGroup,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.IGroup,value);
}
});
devtools.formatters.templating.mark_as_template_BANG_ = (function devtools$formatters$templating$mark_as_template_BANG_(value){
var x27763_27764 = value;
x27763_27764.devtools$protocols$ITemplate$ = cljs.core.PROTOCOL_SENTINEL;
return value;
});
devtools.formatters.templating.template_QMARK_ = (function devtools$formatters$templating$template_QMARK_(value){
if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$ITemplate$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ITemplate,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ITemplate,value);
}
});
devtools.formatters.templating.mark_as_surrogate_BANG_ = (function devtools$formatters$templating$mark_as_surrogate_BANG_(value){
var x27766_27767 = value;
x27766_27767.devtools$protocols$ISurrogate$ = cljs.core.PROTOCOL_SENTINEL;
return value;
});
devtools.formatters.templating.surrogate_QMARK_ = (function devtools$formatters$templating$surrogate_QMARK_(value){
if((!((value == null)))){
if(((false) || ((cljs.core.PROTOCOL_SENTINEL === value.devtools$protocols$ISurrogate$)))){
return true;
} else {
if((!value.cljs$lang$protocol_mask$partition$)){
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ISurrogate,value);
} else {
return false;
}
}
} else {
return cljs.core.native_satisfies_QMARK_.call(null,devtools.protocols.ISurrogate,value);
}
});
devtools.formatters.templating.reference_QMARK_ = (function devtools$formatters$templating$reference_QMARK_(value){
return ((devtools.formatters.templating.group_QMARK_.call(null,value)) && (cljs.core._EQ_.call(null,(value[(0)]),"object")));
});
devtools.formatters.templating.make_group = (function devtools$formatters$templating$make_group(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27774 = arguments.length;
var i__4731__auto___27775 = (0);
while(true){
if((i__4731__auto___27775 < len__4730__auto___27774)){
args__4736__auto__.push((arguments[i__4731__auto___27775]));
var G__27776 = (i__4731__auto___27775 + (1));
i__4731__auto___27775 = G__27776;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic = (function (items){
var group = devtools.formatters.templating.mark_as_group_BANG_.call(null,[]);
var seq__27770_27777 = cljs.core.seq.call(null,items);
var chunk__27771_27778 = null;
var count__27772_27779 = (0);
var i__27773_27780 = (0);
while(true){
if((i__27773_27780 < count__27772_27779)){
var item_27781 = cljs.core._nth.call(null,chunk__27771_27778,i__27773_27780);
if((!((item_27781 == null)))){
if(cljs.core.coll_QMARK_.call(null,item_27781)){
(group["push"]).apply(group,devtools.formatters.templating.mark_as_group_BANG_.call(null,cljs.core.into_array.call(null,item_27781)));
} else {
group.push(devtools.formatters.helpers.pref.call(null,item_27781));
}
} else {
}
var G__27782 = seq__27770_27777;
var G__27783 = chunk__27771_27778;
var G__27784 = count__27772_27779;
var G__27785 = (i__27773_27780 + (1));
seq__27770_27777 = G__27782;
chunk__27771_27778 = G__27783;
count__27772_27779 = G__27784;
i__27773_27780 = G__27785;
continue;
} else {
var temp__5720__auto___27786 = cljs.core.seq.call(null,seq__27770_27777);
if(temp__5720__auto___27786){
var seq__27770_27787__$1 = temp__5720__auto___27786;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__27770_27787__$1)){
var c__4550__auto___27788 = cljs.core.chunk_first.call(null,seq__27770_27787__$1);
var G__27789 = cljs.core.chunk_rest.call(null,seq__27770_27787__$1);
var G__27790 = c__4550__auto___27788;
var G__27791 = cljs.core.count.call(null,c__4550__auto___27788);
var G__27792 = (0);
seq__27770_27777 = G__27789;
chunk__27771_27778 = G__27790;
count__27772_27779 = G__27791;
i__27773_27780 = G__27792;
continue;
} else {
var item_27793 = cljs.core.first.call(null,seq__27770_27787__$1);
if((!((item_27793 == null)))){
if(cljs.core.coll_QMARK_.call(null,item_27793)){
(group["push"]).apply(group,devtools.formatters.templating.mark_as_group_BANG_.call(null,cljs.core.into_array.call(null,item_27793)));
} else {
group.push(devtools.formatters.helpers.pref.call(null,item_27793));
}
} else {
}
var G__27794 = cljs.core.next.call(null,seq__27770_27787__$1);
var G__27795 = null;
var G__27796 = (0);
var G__27797 = (0);
seq__27770_27777 = G__27794;
chunk__27771_27778 = G__27795;
count__27772_27779 = G__27796;
i__27773_27780 = G__27797;
continue;
}
} else {
}
}
break;
}
return group;
});
devtools.formatters.templating.make_group.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.formatters.templating.make_group.cljs$lang$applyTo = (function (seq27769){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq27769));
});
devtools.formatters.templating.make_template = (function devtools$formatters$templating$make_template(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27805 = arguments.length;
var i__4731__auto___27806 = (0);
while(true){
if((i__4731__auto___27806 < len__4730__auto___27805)){
args__4736__auto__.push((arguments[i__4731__auto___27806]));
var G__27807 = (i__4731__auto___27806 + (1));
i__4731__auto___27806 = G__27807;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((2) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((2)),(0),null)):null);
return devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__4737__auto__);
});
devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic = (function (tag,style,children){
var tag__$1 = devtools.formatters.helpers.pref.call(null,tag);
var style__$1 = devtools.formatters.helpers.pref.call(null,style);
var template = devtools.formatters.templating.mark_as_template_BANG_.call(null,[tag__$1,((cljs.core.empty_QMARK_.call(null,style__$1))?({}):({"style": style__$1}))]);
var seq__27801_27808 = cljs.core.seq.call(null,children);
var chunk__27802_27809 = null;
var count__27803_27810 = (0);
var i__27804_27811 = (0);
while(true){
if((i__27804_27811 < count__27803_27810)){
var child_27812 = cljs.core._nth.call(null,chunk__27802_27809,i__27804_27811);
if((!((child_27812 == null)))){
if(cljs.core.coll_QMARK_.call(null,child_27812)){
(template["push"]).apply(template,devtools.formatters.templating.mark_as_template_BANG_.call(null,cljs.core.into_array.call(null,cljs.core.keep.call(null,devtools.formatters.helpers.pref,child_27812))));
} else {
var temp__5718__auto___27813 = devtools.formatters.helpers.pref.call(null,child_27812);
if(cljs.core.truth_(temp__5718__auto___27813)){
var child_value_27814 = temp__5718__auto___27813;
template.push(child_value_27814);
} else {
}
}
} else {
}
var G__27815 = seq__27801_27808;
var G__27816 = chunk__27802_27809;
var G__27817 = count__27803_27810;
var G__27818 = (i__27804_27811 + (1));
seq__27801_27808 = G__27815;
chunk__27802_27809 = G__27816;
count__27803_27810 = G__27817;
i__27804_27811 = G__27818;
continue;
} else {
var temp__5720__auto___27819 = cljs.core.seq.call(null,seq__27801_27808);
if(temp__5720__auto___27819){
var seq__27801_27820__$1 = temp__5720__auto___27819;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__27801_27820__$1)){
var c__4550__auto___27821 = cljs.core.chunk_first.call(null,seq__27801_27820__$1);
var G__27822 = cljs.core.chunk_rest.call(null,seq__27801_27820__$1);
var G__27823 = c__4550__auto___27821;
var G__27824 = cljs.core.count.call(null,c__4550__auto___27821);
var G__27825 = (0);
seq__27801_27808 = G__27822;
chunk__27802_27809 = G__27823;
count__27803_27810 = G__27824;
i__27804_27811 = G__27825;
continue;
} else {
var child_27826 = cljs.core.first.call(null,seq__27801_27820__$1);
if((!((child_27826 == null)))){
if(cljs.core.coll_QMARK_.call(null,child_27826)){
(template["push"]).apply(template,devtools.formatters.templating.mark_as_template_BANG_.call(null,cljs.core.into_array.call(null,cljs.core.keep.call(null,devtools.formatters.helpers.pref,child_27826))));
} else {
var temp__5718__auto___27827 = devtools.formatters.helpers.pref.call(null,child_27826);
if(cljs.core.truth_(temp__5718__auto___27827)){
var child_value_27828 = temp__5718__auto___27827;
template.push(child_value_27828);
} else {
}
}
} else {
}
var G__27829 = cljs.core.next.call(null,seq__27801_27820__$1);
var G__27830 = null;
var G__27831 = (0);
var G__27832 = (0);
seq__27801_27808 = G__27829;
chunk__27802_27809 = G__27830;
count__27803_27810 = G__27831;
i__27804_27811 = G__27832;
continue;
}
} else {
}
}
break;
}
return template;
});
devtools.formatters.templating.make_template.cljs$lang$maxFixedArity = (2);
/** @this {Function} */
devtools.formatters.templating.make_template.cljs$lang$applyTo = (function (seq27798){
var G__27799 = cljs.core.first.call(null,seq27798);
var seq27798__$1 = cljs.core.next.call(null,seq27798);
var G__27800 = cljs.core.first.call(null,seq27798__$1);
var seq27798__$2 = cljs.core.next.call(null,seq27798__$1);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__27799,G__27800,seq27798__$2);
});
devtools.formatters.templating.concat_templates_BANG_ = (function devtools$formatters$templating$concat_templates_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27835 = arguments.length;
var i__4731__auto___27836 = (0);
while(true){
if((i__4731__auto___27836 < len__4730__auto___27835)){
args__4736__auto__.push((arguments[i__4731__auto___27836]));
var G__27837 = (i__4731__auto___27836 + (1));
i__4731__auto___27836 = G__27837;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (template,templates){
return devtools.formatters.templating.mark_as_template_BANG_.call(null,(template["concat"]).apply(template,cljs.core.into_array.call(null,cljs.core.map.call(null,cljs.core.into_array,cljs.core.keep.call(null,devtools.formatters.helpers.pref,templates)))));
});
devtools.formatters.templating.concat_templates_BANG_.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.formatters.templating.concat_templates_BANG_.cljs$lang$applyTo = (function (seq27833){
var G__27834 = cljs.core.first.call(null,seq27833);
var seq27833__$1 = cljs.core.next.call(null,seq27833);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__27834,seq27833__$1);
});
devtools.formatters.templating.extend_template_BANG_ = (function devtools$formatters$templating$extend_template_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27840 = arguments.length;
var i__4731__auto___27841 = (0);
while(true){
if((i__4731__auto___27841 < len__4730__auto___27840)){
args__4736__auto__.push((arguments[i__4731__auto___27841]));
var G__27842 = (i__4731__auto___27841 + (1));
i__4731__auto___27841 = G__27842;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (template,args){
return devtools.formatters.templating.concat_templates_BANG_.call(null,template,args);
});
devtools.formatters.templating.extend_template_BANG_.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.formatters.templating.extend_template_BANG_.cljs$lang$applyTo = (function (seq27838){
var G__27839 = cljs.core.first.call(null,seq27838);
var seq27838__$1 = cljs.core.next.call(null,seq27838);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__27839,seq27838__$1);
});
devtools.formatters.templating.make_surrogate = (function devtools$formatters$templating$make_surrogate(var_args){
var G__27844 = arguments.length;
switch (G__27844) {
case 1:
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
break;
case 2:
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));
break;
case 3:
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
break;
case 4:
return devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));
break;
default:
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
}
});
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$1 = (function (object){
return devtools.formatters.templating.make_surrogate.call(null,object,null);
});
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$2 = (function (object,header){
return devtools.formatters.templating.make_surrogate.call(null,object,header,null);
});
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$3 = (function (object,header,body){
return devtools.formatters.templating.make_surrogate.call(null,object,header,body,(0));
});
devtools.formatters.templating.make_surrogate.cljs$core$IFn$_invoke$arity$4 = (function (object,header,body,start_index){
return devtools.formatters.templating.mark_as_surrogate_BANG_.call(null,(function (){var obj27846 = ({"target":object,"header":header,"body":body,"startIndex":(function (){var or__4131__auto__ = start_index;
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return (0);
}
})()});
return obj27846;
})());
});
devtools.formatters.templating.make_surrogate.cljs$lang$maxFixedArity = 4;
devtools.formatters.templating.get_surrogate_target = (function devtools$formatters$templating$get_surrogate_target(surrogate){
if(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate)){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return (surrogate["target"]);
});
devtools.formatters.templating.get_surrogate_header = (function devtools$formatters$templating$get_surrogate_header(surrogate){
if(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate)){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return (surrogate["header"]);
});
devtools.formatters.templating.get_surrogate_body = (function devtools$formatters$templating$get_surrogate_body(surrogate){
if(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate)){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return (surrogate["body"]);
});
devtools.formatters.templating.get_surrogate_start_index = (function devtools$formatters$templating$get_surrogate_start_index(surrogate){
if(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate)){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return (surrogate["startIndex"]);
});
devtools.formatters.templating.make_reference = (function devtools$formatters$templating$make_reference(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27854 = arguments.length;
var i__4731__auto___27855 = (0);
while(true){
if((i__4731__auto___27855 < len__4730__auto___27854)){
args__4736__auto__.push((arguments[i__4731__auto___27855]));
var G__27856 = (i__4731__auto___27855 + (1));
i__4731__auto___27855 = G__27856;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic = (function (object,p__27850){
var vec__27851 = p__27850;
var state_override_fn = cljs.core.nth.call(null,vec__27851,(0),null);
if((((state_override_fn == null)) || (cljs.core.fn_QMARK_.call(null,state_override_fn)))){
} else {
throw (new Error("Assert failed: (or (nil? state-override-fn) (fn? state-override-fn))"));
}
if((object == null)){
return devtools.formatters.templating.make_template.call(null,new cljs.core.Keyword(null,"span","span",1394872991),new cljs.core.Keyword(null,"nil-style","nil-style",-1505044832),new cljs.core.Keyword(null,"nil-label","nil-label",-587789203));
} else {
var sub_state = (((!((state_override_fn == null))))?state_override_fn.call(null,devtools.formatters.state.get_current_state.call(null)):devtools.formatters.state.get_current_state.call(null));
return devtools.formatters.templating.make_group.call(null,"object",({"object": object, "config": sub_state}));
}
});
devtools.formatters.templating.make_reference.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.formatters.templating.make_reference.cljs$lang$applyTo = (function (seq27848){
var G__27849 = cljs.core.first.call(null,seq27848);
var seq27848__$1 = cljs.core.next.call(null,seq27848);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__27849,seq27848__$1);
});
devtools.formatters.templating._STAR_current_render_stack_STAR_ = cljs.core.PersistentVector.EMPTY;
devtools.formatters.templating._STAR_current_render_path_STAR_ = cljs.core.PersistentVector.EMPTY;
devtools.formatters.templating.print_preview = (function devtools$formatters$templating$print_preview(markup){
var _STAR_print_level_STAR__orig_val__27857 = cljs.core._STAR_print_level_STAR_;
var _STAR_print_level_STAR__temp_val__27858 = (1);
cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR__temp_val__27858;
try{return cljs.core.pr_str.call(null,markup);
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR__orig_val__27857;
}});
devtools.formatters.templating.add_stack_separators = (function devtools$formatters$templating$add_stack_separators(stack){
return cljs.core.interpose.call(null,"-------------",stack);
});
devtools.formatters.templating.replace_fns_with_markers = (function devtools$formatters$templating$replace_fns_with_markers(stack){
var f = (function (v){
if(cljs.core.fn_QMARK_.call(null,v)){
return "##fn##";
} else {
return v;
}
});
return clojure.walk.prewalk.call(null,f,stack);
});
devtools.formatters.templating.pprint_render_calls = (function devtools$formatters$templating$pprint_render_calls(stack){
return cljs.core.map.call(null,devtools.util.pprint_str,stack);
});
devtools.formatters.templating.pprint_render_stack = (function devtools$formatters$templating$pprint_render_stack(stack){
return clojure.string.join.call(null,"\n",devtools.formatters.templating.add_stack_separators.call(null,devtools.formatters.templating.pprint_render_calls.call(null,devtools.formatters.templating.replace_fns_with_markers.call(null,cljs.core.reverse.call(null,stack)))));
});
devtools.formatters.templating.pprint_render_path = (function devtools$formatters$templating$pprint_render_path(path){
return devtools.util.pprint_str.call(null,path);
});
devtools.formatters.templating.assert_markup_error = (function devtools$formatters$templating$assert_markup_error(msg){
throw (new Error(["Assert failed: ",[cljs.core.str.cljs$core$IFn$_invoke$arity$1(msg),"\n","Render path: ",devtools.formatters.templating.pprint_render_path.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_),"\n","Render stack:\n",cljs.core.str.cljs$core$IFn$_invoke$arity$1(devtools.formatters.templating.pprint_render_stack.call(null,devtools.formatters.templating._STAR_current_render_stack_STAR_))].join(''),"\n","false"].join('')));
});
devtools.formatters.templating.surrogate_markup_QMARK_ = (function devtools$formatters$templating$surrogate_markup_QMARK_(markup){
return ((cljs.core.sequential_QMARK_.call(null,markup)) && (cljs.core._EQ_.call(null,cljs.core.first.call(null,markup),"surrogate")));
});
devtools.formatters.templating.render_special = (function devtools$formatters$templating$render_special(name,args){
var G__27859 = name;
switch (G__27859) {
case "surrogate":
var obj = cljs.core.first.call(null,args);
var converted_args = cljs.core.map.call(null,devtools.formatters.templating.render_json_ml_STAR_,cljs.core.rest.call(null,args));
return cljs.core.apply.call(null,devtools.formatters.templating.make_surrogate,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [obj], null),converted_args));
break;
case "reference":
var obj = cljs.core.first.call(null,args);
var converted_obj = ((devtools.formatters.templating.surrogate_markup_QMARK_.call(null,obj))?devtools.formatters.templating.render_json_ml_STAR_.call(null,obj):obj);
return cljs.core.apply.call(null,devtools.formatters.templating.make_reference,cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [converted_obj], null),cljs.core.rest.call(null,args)));
break;
default:
return devtools.formatters.templating.assert_markup_error.call(null,["no matching special tag name: '",cljs.core.str.cljs$core$IFn$_invoke$arity$1(name),"'"].join(''));
}
});
devtools.formatters.templating.emptyish_QMARK_ = (function devtools$formatters$templating$emptyish_QMARK_(v){
if(((cljs.core.seqable_QMARK_.call(null,v)) || (cljs.core.array_QMARK_.call(null,v)) || (typeof v === 'string'))){
return cljs.core.empty_QMARK_.call(null,v);
} else {
return false;
}
});
devtools.formatters.templating.render_subtree = (function devtools$formatters$templating$render_subtree(tag,children){
var vec__27861 = tag;
var html_tag = cljs.core.nth.call(null,vec__27861,(0),null);
var style = cljs.core.nth.call(null,vec__27861,(1),null);
return cljs.core.apply.call(null,devtools.formatters.templating.make_template,html_tag,style,cljs.core.map.call(null,devtools.formatters.templating.render_json_ml_STAR_,cljs.core.remove.call(null,devtools.formatters.templating.emptyish_QMARK_,cljs.core.map.call(null,devtools.formatters.helpers.pref,children))));
});
devtools.formatters.templating.render_json_ml_STAR_ = (function devtools$formatters$templating$render_json_ml_STAR_(markup){
if((!(cljs.core.sequential_QMARK_.call(null,markup)))){
return markup;
} else {
var _STAR_current_render_path_STAR__orig_val__27864 = devtools.formatters.templating._STAR_current_render_path_STAR_;
var _STAR_current_render_path_STAR__temp_val__27865 = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_,cljs.core.first.call(null,markup));
devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR__temp_val__27865;
try{var tag = devtools.formatters.helpers.pref.call(null,cljs.core.first.call(null,markup));
if(typeof tag === 'string'){
return devtools.formatters.templating.render_special.call(null,tag,cljs.core.rest.call(null,markup));
} else {
if(cljs.core.sequential_QMARK_.call(null,tag)){
return devtools.formatters.templating.render_subtree.call(null,tag,cljs.core.rest.call(null,markup));
} else {
return devtools.formatters.templating.assert_markup_error.call(null,["invalid json-ml markup at ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(devtools.formatters.templating.print_preview.call(null,markup)),":"].join(''));
}
}
}finally {devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR__orig_val__27864;
}}
});
devtools.formatters.templating.render_json_ml = (function devtools$formatters$templating$render_json_ml(markup){
var _STAR_current_render_stack_STAR__orig_val__27866 = devtools.formatters.templating._STAR_current_render_stack_STAR_;
var _STAR_current_render_path_STAR__orig_val__27867 = devtools.formatters.templating._STAR_current_render_path_STAR_;
var _STAR_current_render_stack_STAR__temp_val__27868 = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_stack_STAR_,markup);
var _STAR_current_render_path_STAR__temp_val__27869 = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_,"<render-json-ml>");
devtools.formatters.templating._STAR_current_render_stack_STAR_ = _STAR_current_render_stack_STAR__temp_val__27868;
devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR__temp_val__27869;
try{return devtools.formatters.templating.render_json_ml_STAR_.call(null,markup);
}finally {devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR__orig_val__27867;
devtools.formatters.templating._STAR_current_render_stack_STAR_ = _STAR_current_render_stack_STAR__orig_val__27866;
}});
devtools.formatters.templating.assert_failed_markup_rendering = (function devtools$formatters$templating$assert_failed_markup_rendering(initial_value,value){
throw (new Error(["Assert failed: ",["result of markup rendering must be a template,\n","resolved to ",devtools.util.pprint_str.call(null,value),"initial value: ",devtools.util.pprint_str.call(null,initial_value)].join(''),"\n","false"].join('')));
});
devtools.formatters.templating.render_markup_STAR_ = (function devtools$formatters$templating$render_markup_STAR_(initial_value,value){
while(true){
if(cljs.core.fn_QMARK_.call(null,value)){
var G__27870 = initial_value;
var G__27871 = value.call(null);
initial_value = G__27870;
value = G__27871;
continue;
} else {
if((value instanceof cljs.core.Keyword)){
var G__27872 = initial_value;
var G__27873 = devtools.formatters.helpers.pref.call(null,value);
initial_value = G__27872;
value = G__27873;
continue;
} else {
if(cljs.core.sequential_QMARK_.call(null,value)){
var G__27874 = initial_value;
var G__27875 = devtools.formatters.templating.render_json_ml.call(null,value);
initial_value = G__27874;
value = G__27875;
continue;
} else {
if(devtools.formatters.templating.template_QMARK_.call(null,value)){
return value;
} else {
if(devtools.formatters.templating.surrogate_QMARK_.call(null,value)){
return value;
} else {
if(devtools.formatters.templating.reference_QMARK_.call(null,value)){
return value;
} else {
return devtools.formatters.templating.assert_failed_markup_rendering.call(null,initial_value,value);
}
}
}
}
}
}
break;
}
});
devtools.formatters.templating.render_markup = (function devtools$formatters$templating$render_markup(value){
return devtools.formatters.templating.render_markup_STAR_.call(null,value,value);
});
//# sourceMappingURL=templating.js.map?rel=1582812680548

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,155 @@
(ns devtools.hints
(:require-macros [devtools.compiler :refer [check-compiler-options!]]
[devtools.oops :refer [unchecked-aget]])
(:require [devtools.prefs :refer [pref]]
[devtools.context :as context]
[cljs.stacktrace :as stacktrace]))
; cljs.stacktrace does not play well in :advanced mode optimizations, see https://github.com/binaryage/cljs-devtools/issues/37
(check-compiler-options!)
(defn ^:dynamic available? []
true)
; Question: How much time have you lost staring at "Cannot read property 'call' of null" kind of errors?
;
; ---------------------------------------------------------------------------------------------------------------------------
;
; The idea is to try enhance error object's .stack and .message fields with additional info about
; the call site causing null type error. With optimizations :none the name of the null call site can be seen.
;
; The enhancing handler function tries to:
; 1) parse error's stack trace.
; 2) look original javascript source file up (via sync AJAX fetch by default).
; 3) locate reported line and column.
; 4) presents problematic line with a column hint as addition to .stack or .message strings.
; Technically the trick here is to override TypeError.prototype.toString
; and global window.onerror handler to enhance uncaught errors.
;
; With that we should handle two situations:
; 1) either error gets printed (typically in user's catch via console), so patched toString() method gets called.
; 2) or it is uncaught and our global error handler should take care of possible enhancement
; before devtools present it to the user themselves.
;
; note: Tested under Chrome only
(def ^:dynamic *installed* false)
(def ^:dynamic *original-global-error-handler* nil)
(def ^:dynamic *original-type-error-prototype-to-string* nil)
(def processed-errors (volatile! nil))
; ---------------------------------------------------------------------------------------------------------------------------
(defn set-processed-errors! [val]
(vreset! processed-errors val))
(defn get-processed-errors! []
(if-let [val @processed-errors]
val
(if (exists? js/WeakSet)
(set-processed-errors! (js/WeakSet.)))))
; ---------------------------------------------------------------------------------------------------------------------------
(defn empty-as-nil [str]
(if (empty? str) nil str))
(defn ajax-reader [url]
(let [xhr (js/XMLHttpRequest.)]
(.open xhr "GET" url false)
(.send xhr)
(empty-as-nil (.-responseText xhr))))
(defn retrieve-javascript-source [where]
(let [reader (or (pref :file-reader) ajax-reader)]
(reader where)))
(defn get-line [lines line-number]
(unchecked-aget lines (dec line-number))) ; line numbering is 1-based
(defn extend-content [content lines line-number min-length]
(if (or (> (count content) min-length)
(not (pos? line-number)))
content
(let [prev-line-number (dec line-number)
prev-line (get-line lines prev-line-number)
new-content (str prev-line "\n" content)]
(extend-content new-content lines prev-line-number min-length))))
(defn mark-call-closed-at-column [line column]
(let [n (dec column) ; column number is 1-based
prefix (.substring line 0 n)
postfix (.substring line n)]
(str prefix " <<< ☢ NULL ☢ <<< " postfix)))
(defn mark-null-call-site-location [file line-number column]
(let [content (retrieve-javascript-source file)
lines (.split content "\n")
line (get-line lines line-number)
marked-line (mark-call-closed-at-column line column)
min-length (or (pref :sanity-hint-min-length) 128)]
(extend-content marked-line lines line-number min-length)))
(defn make-sense-of-the-error [message file line-number column]
(cond
(re-matches #"Cannot read property 'call' of.*" message) (mark-null-call-site-location file line-number column)
:else nil))
(defn parse-stacktrace [native-stack-trace]
(stacktrace/parse-stacktrace {} native-stack-trace {:ua-product :chrome} {:asset-root ""}))
(defn error-object-sense [error]
(try
(let [native-stack-trace (.-stack error)
stack-trace (parse-stacktrace native-stack-trace)
top-item (second stack-trace) ; first line is just an error message
{:keys [file line column]} top-item]
(make-sense-of-the-error (.-message error) file line column))
(catch :default _e
; silently fail in case of troubles parsing stack trace
false)))
(defn type-error-to-string [self]
(if-let [seen-errors (get-processed-errors!)]
(when-not (.has seen-errors self)
(.add seen-errors self)
(when-let [sense (error-object-sense self)]
(set! (.-message self) (str (.-message self) ", a sanity hint:\n" sense))))) ; this is dirty, patch message field before it gets used
(.call *original-type-error-prototype-to-string* self))
(defn global-error-handler [message url line column error]
(let [res (if *original-global-error-handler*
(*original-global-error-handler* message url line column error))]
(if-not res
(when-let [sense (error-object-sense error)]
(.info (context/get-console) "A sanity hint for incoming uncaught error:\n" sense)
false)
true)))
(defn install-type-error-enhancer []
(set! *original-global-error-handler* (.-onerror (context/get-root)))
(set! (.-onerror (context/get-root)) global-error-handler)
(let [prototype (.-prototype js/TypeError)]
(set! *original-type-error-prototype-to-string* (.-toString prototype))
(set! (.-toString prototype) #(this-as self (type-error-to-string self))))) ; work around http://dev.clojure.org/jira/browse/CLJS-1545
; -- installation -----------------------------------------------------------------------------------------------------------
(defn installed? []
*installed*)
(defn install! []
(when-not *installed*
(set! *installed* true)
(install-type-error-enhancer)
true))
(defn uninstall! []
(when *installed*
(set! *installed* false)
(assert *original-type-error-prototype-to-string*)
(set! (.-onerror (context/get-root)) *original-global-error-handler*)
(let [prototype (.-prototype js/TypeError)]
(set! (.-toString prototype) *original-type-error-prototype-to-string*))))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,195 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.hints');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.context');
goog.require('cljs.stacktrace');
devtools.hints.available_QMARK_ = (function devtools$hints$available_QMARK_(){
return true;
});
devtools.hints._STAR_installed_STAR_ = false;
devtools.hints._STAR_original_global_error_handler_STAR_ = null;
devtools.hints._STAR_original_type_error_prototype_to_string_STAR_ = null;
devtools.hints.processed_errors = cljs.core.volatile_BANG_.call(null,null);
devtools.hints.set_processed_errors_BANG_ = (function devtools$hints$set_processed_errors_BANG_(val){
return cljs.core.vreset_BANG_.call(null,devtools.hints.processed_errors,val);
});
devtools.hints.get_processed_errors_BANG_ = (function devtools$hints$get_processed_errors_BANG_(){
var temp__5718__auto__ = cljs.core.deref.call(null,devtools.hints.processed_errors);
if(cljs.core.truth_(temp__5718__auto__)){
var val = temp__5718__auto__;
return val;
} else {
if((typeof WeakSet !== 'undefined')){
return devtools.hints.set_processed_errors_BANG_.call(null,(new WeakSet()));
} else {
return null;
}
}
});
devtools.hints.empty_as_nil = (function devtools$hints$empty_as_nil(str){
if(cljs.core.empty_QMARK_.call(null,str)){
return null;
} else {
return str;
}
});
devtools.hints.ajax_reader = (function devtools$hints$ajax_reader(url){
var xhr = (new XMLHttpRequest());
xhr.open("GET",url,false);
xhr.send();
return devtools.hints.empty_as_nil.call(null,xhr.responseText);
});
devtools.hints.retrieve_javascript_source = (function devtools$hints$retrieve_javascript_source(where){
var reader = (function (){var or__4131__auto__ = devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"file-reader","file-reader",-450847664));
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return devtools.hints.ajax_reader;
}
})();
return reader.call(null,where);
});
devtools.hints.get_line = (function devtools$hints$get_line(lines,line_number){
return (lines[(line_number - (1))]);
});
devtools.hints.extend_content = (function devtools$hints$extend_content(content,lines,line_number,min_length){
if((((cljs.core.count.call(null,content) > min_length)) || ((!((line_number > (0))))))){
return content;
} else {
var prev_line_number = (line_number - (1));
var prev_line = devtools.hints.get_line.call(null,lines,prev_line_number);
var new_content = [cljs.core.str.cljs$core$IFn$_invoke$arity$1(prev_line),"\n",cljs.core.str.cljs$core$IFn$_invoke$arity$1(content)].join('');
return devtools.hints.extend_content.call(null,new_content,lines,prev_line_number,min_length);
}
});
devtools.hints.mark_call_closed_at_column = (function devtools$hints$mark_call_closed_at_column(line,column){
var n = (column - (1));
var prefix = line.substring((0),n);
var postfix = line.substring(n);
return [cljs.core.str.cljs$core$IFn$_invoke$arity$1(prefix)," <<< \u2622 NULL \u2622 <<< ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(postfix)].join('');
});
devtools.hints.mark_null_call_site_location = (function devtools$hints$mark_null_call_site_location(file,line_number,column){
var content = devtools.hints.retrieve_javascript_source.call(null,file);
var lines = content.split("\n");
var line = devtools.hints.get_line.call(null,lines,line_number);
var marked_line = devtools.hints.mark_call_closed_at_column.call(null,line,column);
var min_length = (function (){var or__4131__auto__ = devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"sanity-hint-min-length","sanity-hint-min-length",104958154));
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return (128);
}
})();
return devtools.hints.extend_content.call(null,marked_line,lines,line_number,min_length);
});
devtools.hints.make_sense_of_the_error = (function devtools$hints$make_sense_of_the_error(message,file,line_number,column){
if(cljs.core.truth_(cljs.core.re_matches.call(null,/Cannot read property 'call' of.*/,message))){
return devtools.hints.mark_null_call_site_location.call(null,file,line_number,column);
} else {
return null;
}
});
devtools.hints.parse_stacktrace = (function devtools$hints$parse_stacktrace(native_stack_trace){
return cljs.stacktrace.parse_stacktrace.call(null,cljs.core.PersistentArrayMap.EMPTY,native_stack_trace,new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"ua-product","ua-product",938384227),new cljs.core.Keyword(null,"chrome","chrome",1718738387)], null),new cljs.core.PersistentArrayMap(null, 1, [new cljs.core.Keyword(null,"asset-root","asset-root",1771735072),""], null));
});
devtools.hints.error_object_sense = (function devtools$hints$error_object_sense(error){
try{var native_stack_trace = error.stack;
var stack_trace = devtools.hints.parse_stacktrace.call(null,native_stack_trace);
var top_item = cljs.core.second.call(null,stack_trace);
var map__28376 = top_item;
var map__28376__$1 = (((((!((map__28376 == null))))?(((((map__28376.cljs$lang$protocol_mask$partition0$ & (64))) || ((cljs.core.PROTOCOL_SENTINEL === map__28376.cljs$core$ISeq$))))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__28376):map__28376);
var file = cljs.core.get.call(null,map__28376__$1,new cljs.core.Keyword(null,"file","file",-1269645878));
var line = cljs.core.get.call(null,map__28376__$1,new cljs.core.Keyword(null,"line","line",212345235));
var column = cljs.core.get.call(null,map__28376__$1,new cljs.core.Keyword(null,"column","column",2078222095));
return devtools.hints.make_sense_of_the_error.call(null,error.message,file,line,column);
}catch (e28375){var _e = e28375;
return false;
}});
devtools.hints.type_error_to_string = (function devtools$hints$type_error_to_string(self){
var temp__5718__auto___28378 = devtools.hints.get_processed_errors_BANG_.call(null);
if(cljs.core.truth_(temp__5718__auto___28378)){
var seen_errors_28379 = temp__5718__auto___28378;
if(cljs.core.truth_(seen_errors_28379.has(self))){
} else {
seen_errors_28379.add(self);
var temp__5720__auto___28380 = devtools.hints.error_object_sense.call(null,self);
if(cljs.core.truth_(temp__5720__auto___28380)){
var sense_28381 = temp__5720__auto___28380;
self.message = [cljs.core.str.cljs$core$IFn$_invoke$arity$1(self.message),", a sanity hint:\n",cljs.core.str.cljs$core$IFn$_invoke$arity$1(sense_28381)].join('');
} else {
}
}
} else {
}
return devtools.hints._STAR_original_type_error_prototype_to_string_STAR_.call(self);
});
devtools.hints.global_error_handler = (function devtools$hints$global_error_handler(message,url,line,column,error){
var res = (cljs.core.truth_(devtools.hints._STAR_original_global_error_handler_STAR_)?devtools.hints._STAR_original_global_error_handler_STAR_.call(null,message,url,line,column,error):null);
if(cljs.core.not.call(null,res)){
var temp__5720__auto__ = devtools.hints.error_object_sense.call(null,error);
if(cljs.core.truth_(temp__5720__auto__)){
var sense = temp__5720__auto__;
devtools.context.get_console.call(null).info("A sanity hint for incoming uncaught error:\n",sense);
return false;
} else {
return null;
}
} else {
return true;
}
});
devtools.hints.install_type_error_enhancer = (function devtools$hints$install_type_error_enhancer(){
devtools.hints._STAR_original_global_error_handler_STAR_ = devtools.context.get_root.call(null).onerror;
devtools.context.get_root.call(null).onerror = devtools.hints.global_error_handler;
var prototype = TypeError.prototype;
devtools.hints._STAR_original_type_error_prototype_to_string_STAR_ = prototype.toString;
return prototype.toString = ((function (prototype){
return (function (){
var self = this;
return devtools.hints.type_error_to_string.call(null,self);
});})(prototype))
;
});
devtools.hints.installed_QMARK_ = (function devtools$hints$installed_QMARK_(){
return devtools.hints._STAR_installed_STAR_;
});
devtools.hints.install_BANG_ = (function devtools$hints$install_BANG_(){
if(devtools.hints._STAR_installed_STAR_){
return null;
} else {
devtools.hints._STAR_installed_STAR_ = true;
devtools.hints.install_type_error_enhancer.call(null);
return true;
}
});
devtools.hints.uninstall_BANG_ = (function devtools$hints$uninstall_BANG_(){
if(devtools.hints._STAR_installed_STAR_){
devtools.hints._STAR_installed_STAR_ = false;
if(cljs.core.truth_(devtools.hints._STAR_original_type_error_prototype_to_string_STAR_)){
} else {
throw (new Error("Assert failed: *original-type-error-prototype-to-string*"));
}
devtools.context.get_root.call(null).onerror = devtools.hints._STAR_original_global_error_handler_STAR_;
var prototype = TypeError.prototype;
return prototype.toString = devtools.hints._STAR_original_type_error_prototype_to_string_STAR_;
} else {
return null;
}
});
//# sourceMappingURL=hints.js.map?rel=1582812680957

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,616 @@
(ns devtools.munging
"This namespace implements various heuristics to map Javascript names back to corresponding ClojureScript names.
The functionality here heavily depends on observed ClojureScript compiler and runtime behaviour (fragile!).
Answers given by functions in this namespace cannot be perfect because generated Javascript naming schemes produced by
ClojureScript compiler were not designed with easy reversibility in mind. We recommend this functionality to be used for
presentation in the UI only. The goal here is to provide user with more familiar view of runtime state of her app
in most common cases (on best effort basis).
Our main weapons in this uneven fight are:
1. munged function names as they appear in Javascript (generated by ClojureScript)
2. we can also analyze function sources accessible via .toString
3. special cljs$core$IFn$_invoke protocol props generated for multi-arity functions
We can also cheat and look at runtime state of browser environment to determine some answers about namespaces.
This code can be used only in non-advanced builds!
If you discovered breakage or a new case which should be covered by this code, please open an issue:
https://github.com/binaryage/cljs-devtools/issues"
(:refer-clojure :exclude [js-reserved?])
(:require-macros [devtools.munging :refer [get-fast-path-protocol-partitions-count
get-fast-path-protocols-lookup-table]]
[devtools.oops :refer [oget ocall safe-call]])
(:require [clojure.string :as string]
[devtools.context :as context]
[goog.object :as gobj])
(:import [goog.string StringBuffer]))
(declare collect-fn-arities)
(def dollar-replacement "~﹩~")
(def max-fixed-arity-to-scan 64)
; -- helpers ----------------------------------------------------------------------------------------------------------------
(defn ^:dynamic get-global-scope []
(context/get-root))
(defn js-reserved? [x]
; js-reserved? is private as of ClojureScript 1.9.293
(if-let [js-reserved-fn (oget (get-global-scope) "cljs" "core" "js_reserved_QMARK_")]
(js-reserved-fn x)))
(defn get-fn-source-safely [f]
(try
(if (js-in "toString" f)
(ocall f "toString")
"")
(catch :default _
"")))
(defn get-fn-fixed-arity [f n]
(oget f (str "cljs$core$IFn$_invoke$arity$" n)))
(defn get-fn-variadic-arity [f]
(oget f (str "cljs$core$IFn$_invoke$arity$variadic")))
(defn get-fn-max-fixed-arity [f]
(oget f "cljs$lang$maxFixedArity"))
(defn get-type-name [t]
(let [sb (StringBuffer.)
writer (StringBufferWriter. sb)]
(try
; we cannot use (type->str f) because it does not work for defrecords as of v1.9.89
; instead we rely on .cljs$lang$ctorPrWriter which is defined for both deftypes and defrecords
; and it is used here: https://github.com/clojure/clojurescript/blob/cfbefad0b9f2ae9af92ebc2ec211c8472a884ddf/src/main/cljs/cljs/core.cljs#L9173
; relevant JIRA ticket: http://dev.clojure.org/jira/browse/CLJS-1725
(ocall t "cljs$lang$ctorPrWriter" t writer)
(catch :default _
"?"))
(-flush writer)
(str sb)))
(defn char-to-subscript
"Given a character with a single digit converts it into a subscript character.
Zero chracter maps to unicode 'SUBSCRIPT ZERO' (U+2080)."
[char]
{:pre [(string? char)
(= (count char) 1)]}
(let [char-code (ocall (js/String. char) "charCodeAt" 0) ; this is an ugly trick to overcome a V8? bug, char string might not be a real string "object"
num-code (- char-code 48)
subscript-code (+ 0x2080 num-code)]
(ocall js/String "fromCharCode" subscript-code)))
(defn make-subscript
"Given a subscript number converts it into a string representation consisting of unicode subscript characters (digits)."
[subscript]
{:pre [(number? subscript)]}
(string/join (map char-to-subscript (str subscript))))
(defn char-to-superscript
"Given a character with a single digit converts it into a superscript character.
Zero chracter maps to unicode 'SUPERSCRIPT ZERO' (U+2070)."
[char]
{:pre [(string? char)
(= (count char) 1)]}
(let [char-code (ocall (js/String. char) "charCodeAt" 0) ; this is an ugly trick to overcome a V8? bug, char string might not be a real string "object"
num-code (- char-code 48)
superscript-code (case num-code ; see https://en.wikipedia.org/wiki/Unicode_subscripts_and_superscripts
1 0x00B9
2 0x00B2
3 0x00B3
(+ 0x2070 num-code))]
(ocall js/String "fromCharCode" superscript-code)))
(defn make-superscript
"Given a superscript number converts it into a string representation consisting of unicode superscript characters (digits)."
[superscript]
{:pre [(number? superscript)]}
(string/join (map char-to-superscript (str superscript))))
; -- cljs naming conventions ------------------------------------------------------------------------------------------------
(defn cljs-fn-name?
"Given a Javascript name answers if the name was likely generated by ClojureScript.
We use a simple heuristic here:
The name must contain at least two separate dollars because we assume two-segment namespaces."
[munged-name]
(if (string? munged-name)
(some? (re-matches #"^[^$]*\$[^$]+\$.*$" munged-name))))
(defn parse-fn-source
"Given a function source code parses out [name args]. Note that both strings are still munged.
Suitable for further processing.
For exampe for input below the function will return [\"devtools_sample$core$hello\" \"name, unused_param\"]:
function devtools_sample$core$hello(name, unused_param){
return [cljs.core.str(\"hello, \"),cljs.core.str(name),cljs.core.str(\"!\")].join('');
}
"
[fn-source]
(if-let [meat (second (re-find #"function\s(.*?)\{" fn-source))]
(if-let [match (re-find #"(.*?)\((.*)\)" meat)]
(rest match))))
(defn trivial-fn-source? [fn-source]
{:pre [(string? fn-source)]}
(or (some? (re-matches #"function\s*\(\s*\)\s*\{\s*\}\s*" fn-source))
(some? (re-matches #"function.*\(\)\s*\{\s*\[native code\]\s*\}\s*" fn-source))))
(defn cljs-fn?
"Given a Javascript function object returns true if the function looks like a ClojureScript function.
Uses various heuristics:
1. must be fn? (is javascript function or satisfies Fn and IFn protocols)
2. and name must be cljs-fn-name? (name can come from f.name or parsed out of function source)
3. or if anonymous function, must be non-trivial"
[f]
(if (safe-call fn? false f) ; calling fn? on window object could throw for some weird reason
(let [name (oget f name)]
(if-not (empty? name)
(cljs-fn-name? name)
(let [fn-source (get-fn-source-safely f)]
(let [[name] (parse-fn-source fn-source)]
(if-not (empty? name)
(cljs-fn-name? name)
(not (trivial-fn-source? fn-source))))))))) ; we assume non-trivial anonymous functions to come from cljs
; -- demunging --------------------------------------------------------------------------------------------------------------
(defn dollar-preserving-demunge
"Standard cljs.core/demunge is too agresive in replacing dollars.
This wrapper function works around it by leaving dollars intact."
[munged-name]
(-> munged-name
(string/replace "$" dollar-replacement)
(demunge)
(string/replace dollar-replacement "$")))
(defn revert-reserved [s]
(or (if-let [m (re-matches #"(.*)\$" s)]
(if (js-reserved? (second m))
(second m)))
s))
(defn reserved-aware-demunge [munged-name]
(-> munged-name
(dollar-preserving-demunge)
(revert-reserved)))
(defn proper-demunge [munged-name]
(reserved-aware-demunge munged-name))
(defn proper-arg-demunge [munged-arg-name]
(-> munged-arg-name
(proper-demunge)
(string/replace #"^-(.*)$" "_$1"))) ; leading dash was probably a leading underscore (convention)
(defn proper-ns-demunge [munged-ns-name]
(-> munged-ns-name
(proper-demunge)
(string/replace "$" ".")))
(defn ns-exists? [ns-module-name]
{:pre [(string? ns-module-name)]}
(if-let [goog-namespaces (oget (get-global-scope) "goog" "dependencies_" "nameToPath")]
(some? (oget goog-namespaces ns-module-name))))
(defn detect-namespace-prefix
"Given a name broken into namespace parts returns [detected-ns remaining-parts],
where detected-ns is a string representing longest detected existing namespace and
remaining-parts is a vector of remaing input parts not included in the detected-ns concatenation.
For given input [\"cljs\" \"core\" \"first\"] returns [\"cljs.core\" [\"first\"]] (asumming cljs.core exists)"
[tokens & [ns-detector]]
(let [effective-detector (or ns-detector ns-exists?)]
(loop [name-tokens []
remaining-tokens tokens]
(if (empty? remaining-tokens)
["" name-tokens]
(let [ns-name (string/join "." remaining-tokens)]
(if (effective-detector ns-name)
[ns-name name-tokens]
(recur (concat [(last remaining-tokens)] name-tokens) (butlast remaining-tokens))))))))
(defn normalize-arity [arity-tokens]
(if-not (empty? arity-tokens)
(let [arity (first arity-tokens)]
(case arity
"variadic" arity
(js/parseInt arity 10)))))
(defn strip-arity [tokens]
(let [[prefix-tokens arity-tokens] (split-with #(not= % "arity") tokens)]
[prefix-tokens (normalize-arity (rest arity-tokens))]))
(defn parse-protocol [tokens detector]
(loop [remaining-tokens tokens
name-tokens []]
(if (empty? remaining-tokens)
[name-tokens]
(let [[protocol-ns name-and-method-tokens] (detect-namespace-prefix remaining-tokens detector)]
(if (empty? protocol-ns)
(recur (rest remaining-tokens) (conj name-tokens (first remaining-tokens)))
[name-tokens protocol-ns (first name-and-method-tokens) (rest name-and-method-tokens)]))))) ; we assume protocol names are always a single-token
(defn break-munged-name
"Given a munged-name from Javascript lands attempts to break it into:
[fn-ns fn-name protocol-ns protocol-name protocol-method arity].
Protocol and arity elements are optional. Function elements are always present or \"\".
examples for input:
cljs$core$rest => ['cljs.core', 'rest']
cljs.core.reduce$cljs$core$IFn$_invoke$arity$3 => ['cljs.core' 'reduce' 'cljs.core' 'IFn' '_invoke' 3]"
([munged-name]
(break-munged-name munged-name nil))
([munged-name ns-detector]
(if (empty? munged-name)
["" ""]
(let [effective-detector (or ns-detector ns-exists?)
tokens (vec (.split munged-name #"[$.]"))
[tokens arity] (strip-arity tokens)
[fn-ns tokens] (detect-namespace-prefix tokens effective-detector)
; remianing parts contains function name,
; but may be optionally followed by protocol namespace, protocol name and protocol method
[fn-name-tokens protocol-ns protocol-name protocol-method-tokens] (parse-protocol tokens effective-detector)
fn-name (string/join "$" fn-name-tokens)
protocol-method (if protocol-method-tokens (string/join "$" protocol-method-tokens))]
[fn-ns fn-name protocol-ns protocol-name protocol-method arity]))))
(defn break-and-demunge-name
"Given a munged-name from Javascript lands attempts to break it into a namespace part and remaining short name.
Then applies appropriate demunging on them and returns ClojureScript versions of the names."
([munged-name]
(break-and-demunge-name munged-name nil))
([munged-name ns-detector]
(let [result (break-munged-name munged-name ns-detector)
[munged-ns munged-name munged-protocol-ns munged-protocol-name munged-protocol-method arity] result]
[(proper-ns-demunge munged-ns)
(proper-demunge munged-name)
(if munged-protocol-ns (proper-ns-demunge munged-protocol-ns))
(if munged-protocol-name (proper-demunge munged-protocol-name))
(if munged-protocol-method (proper-demunge munged-protocol-method))
arity])))
; -- fn info ----------------------------------------------------------------------------------------------------------------
(defn parse-fn-source-info
"Given function source code tries to retrieve [ns name & args] on best effort basis, where
ns is demunged namespace part of the function name (or \"\" if namespace cannot be detected)
name is demunged short name (or \"\" if function is anonymous or name cannot be retrieved)
args is optional number of demunged argument names.
Please note that this function always returns a vector with something. In worst cases [\"\" \"\"].
"
[fn-source]
(if-let [[munged-name args] (parse-fn-source fn-source)]
(let [[ns name] (break-and-demunge-name munged-name)
demunged-args (map (comp proper-arg-demunge string/trim) (string/split args #","))]
(concat [ns name] demunged-args))
["" ""]))
(defn parse-fn-info
"Given Javascript function object tries to retrieve [ns name & args] as in parse-fn-source-info (on best effort basis)."
[f]
(let [fn-source (get-fn-source-safely f)]
(parse-fn-source-info fn-source)))
(defn parse-fn-info-deep
"Given a Javascript function object tries to retrieve [ns name & args] as in parse-fn-info (on best effort basis).
The difference from parse-fn-info is that this function prefers to read args from arities if available.
It recurses arbitrary deep following IFn protocol leads.
If we hit multi-arity situation in leaf, we don't attempt to list arguments and return ::multi-arity placeholder instead.
The reason for reading arities is that it gives more accurate parameter names in some cases.
We observed that variadic functions don't always contain original parameter names, but individual IFn arity functions do."
[f]
(let [fn-info (parse-fn-info f)
arities (collect-fn-arities f)]
(if (some? arities)
(if (> (count arities) 1)
(concat (take 2 fn-info) ::multi-arity)
(concat (take 2 fn-info) (drop 2 (parse-fn-info-deep (second (first arities))))))
fn-info)))
; -- support for human-readable names ---------------------------------------------------------------------------------------
(defn find-index-of-human-prefix
"Given a demunged ClojureScript parameter name. Tries to detect human readable part and returns the index where it ends.
Returns nil if no prefix can be detected.
The idea is to convert macro-generated parameters and other generated names to more friendly names.
We observed that param names generated by gensym have prefix followed by big numbers.
Other generated names contain two dashes after prefix (originally probably using underscores)."
[name]
(let [sep-start (.indexOf name "--")
num-prefix (count (second (re-find #"(.*?)\d{2,}" name)))
finds (filter pos? [sep-start num-prefix])]
(if-not (empty? finds)
(apply min finds))))
(defn humanize-name
"Given a name and intermediate state. Convert name to a human readable version by keeping human readable prefix with
optional subscribt postfix and store it in ::result. Subscript number is picked based on state. State keeps track of
previously assigned subscripts. Returns a new state."
[state name]
(let [index (find-index-of-human-prefix name)
prefix (if (> index 0) (.substring name 0 index) name)]
(if-let [subscript (get state prefix)]
(-> state
(update ::result conj (str prefix (make-subscript subscript)))
(update prefix inc))
(-> state
(update ::result conj prefix)
(assoc prefix 2)))))
(defn humanize-names
"Given a list of names, returns a list of human-readable versions of those names.
It detects human-readable prefix using a simple heuristics. When names repeat it assigns simple subscripts starting with 2.
Subscripts are assigned left-to-right.
Given [\"p--a\" \"p--b\" \"x\" \"p--c\"] returns [\"p\" \"p₂\" \"x\" \"p₃\"]"
[names]
(with-meta (::result (reduce humanize-name {::result []} names)) (meta names)))
; -- arities ----------------------------------------------------------------------------------------------------------------
(defn collect-fn-fixed-arities [f max-arity]
(loop [arity 0
collection {}]
(if (> arity max-arity)
collection
(recur (inc arity) (if-let [arity-fn (get-fn-fixed-arity f arity)]
(assoc collection arity arity-fn)
collection)))))
(defn collect-fn-variadic-arities [f]
(if-let [variadic-arity (get-fn-variadic-arity f)]
{::variadic variadic-arity}))
(defn review-arity [[arity arity-fn]]
(let [sub-arities (collect-fn-arities arity-fn)]
(if (::variadic sub-arities)
[::variadic arity-fn]
[arity arity-fn])))
(defn review-arities
"Some arities can be marked as fixed arity but in fact point to a variadic-arity function. We want to detect this case
and turn such improperly categorized arities to ::variadic."
[arities]
(if (::variadic arities)
arities
(into {} (map review-arity arities))))
(defn collect-fn-arities
"Given a Javascript function object, tries to inspect known arity properties generated by ClojureScript compiler and
collects all available arity functions into a map. Arities are keyed by arity count and variadic arity gets ::variadic key."
[f]
(let [max-fixed-arity (get-fn-max-fixed-arity f)
fixed-arities (collect-fn-fixed-arities f (or max-fixed-arity max-fixed-arity-to-scan)) ; we cannot rely on cljs$lang$maxFixedArity when people implement IFn protocol by hand
variadic-arities (collect-fn-variadic-arities f)
arities (review-arities (merge fixed-arities variadic-arities))]
(if-not (empty? arities)
arities)))
; -- args lists -------------------------------------------------------------------------------------------------------------
(defn arity-keywords-comparator
"::variadic goes last, other keywords compare by name."
[x y]
(cond
(= ::variadic x) 1
(= ::variadic y) -1
:else (compare (name x) (name y))))
(defn arities-key-comparator
"numbers go first (ordered), then keywords (ordered by name), and then ::variadic sticks last"
[x y]
(let [kx? (keyword? x)
ky? (keyword? y)]
(cond
(and kx? ky?) (arity-keywords-comparator x y)
kx? 1
ky? -1
:else (compare x y))))
(defn arities-to-args-lists*
[arities]
(let [sorted-keys (sort arities-key-comparator (keys arities))
sorted-fns (map #(get arities %) sorted-keys)
sorted-infos (map parse-fn-info-deep sorted-fns)
sorted-args-lists (map #(drop 2 %) sorted-infos)]
(if (= (last sorted-keys) ::variadic)
(concat (butlast sorted-args-lists) [(vary-meta (last sorted-args-lists) assoc ::variadic true)])
sorted-args-lists)))
(defn arities-to-args-lists
"Given a map of arity functions. Tries to parse individual functions and prepare an arguments list for each arity.
Returned list of arguments list is sorted by arity count, variadic arity goes last if available.
The function also optionally humanizes argument names in each arguments list if requested."
[arities & [humanize?]]
(let [args-lists (arities-to-args-lists* arities)]
(if humanize?
(map humanize-names args-lists)
args-lists)))
; -- UI presentation --------------------------------------------------------------------------------------------------------
(defn args-lists-to-strings
"Converts a list of arguments lists into a list of strings suitable for UI presentation."
[args-lists spacer-symbol multi-arity-symbol rest-symbol]
(let [string-mapper (fn [arg]
(case arg
::multi-arity multi-arity-symbol
arg))
printer (fn [args-list]
(let [variadic? (::variadic (meta args-list))
args-strings (map string-mapper args-list)]
(str (string/join spacer-symbol (butlast args-strings))
(if variadic? rest-symbol spacer-symbol)
(last args-strings))))]
(->> args-lists
(map printer)
(map string/trim))))
(defn extract-arities [f humanize? spacer-symbol multi-arity-symbol rest-symbol]
(-> (or (collect-fn-arities f) {:naked f})
(arities-to-args-lists humanize?)
(args-lists-to-strings spacer-symbol multi-arity-symbol rest-symbol)))
(defn common-protocol? [protocol-ns protocol-name]
(and (= protocol-ns "cljs.core")
(= protocol-name "IFn")))
(defn present-fn-part [fn-ns fn-name include-ns?]
(str
(if (and include-ns? (not (empty? fn-ns))) (str fn-ns "/"))
fn-name))
(defn present-protocol-part [protocol-ns protocol-name protocol-method include-protocol-ns?]
(str (if include-protocol-ns? protocol-ns)
(if-not (empty? protocol-name) (str (if include-protocol-ns? ".") protocol-name))
(if-not (empty? protocol-method) (str (if (or include-protocol-ns? (not (empty? protocol-name))) ":")
protocol-method))))
(defn present-function-name
"Given javascript function name tries to present it as plain string for display in UI on best effort basis."
[munged-name options]
(let [{:keys [include-ns? include-protocol-ns? silence-common-protocols? ns-detector]} options
[fn-ns fn-name protocol-ns protocol-name protocol-method arity] (break-and-demunge-name munged-name ns-detector)
arity-str (if (some? arity)
(if (= arity "variadic")
"\u207F" ; 'SUPERSCRIPT LATIN SMALL LETTER N' (U+207F)
(make-superscript arity)))]
(if (empty? fn-name)
munged-name
(let [fn-part (present-fn-part fn-ns fn-name include-ns?)
protocol-part (if (and protocol-ns
(not (and silence-common-protocols?
(common-protocol? protocol-ns protocol-name))))
(present-protocol-part protocol-ns protocol-name protocol-method include-protocol-ns?))]
(str
(or protocol-part fn-part)
arity-str
(if protocol-part (str " (" fn-part ")")))))))
; -- types ------------------------------------------------------------------------------------------------------------------
(defn get-basis [f]
(ocall f "getBasis"))
(defn parse-constructor-info
"Given a Javascript constructor function tries to retrieve [ns name basis]. Returns nil if not a cljs type."
[f]
(if (and (goog/isObject f) (.-cljs$lang$type f))
(let [type-name (get-type-name f)
parts (.split type-name #"/")
basis (safe-call get-basis [] f)]
(assert (<= (count parts) 2))
(while (< (count parts) 2)
(.unshift parts nil))
(conj (vec parts) basis))))
; -- protocols --------------------------------------------------------------------------------------------------------------
(defn protocol-path [protocol-selector]
(string/split protocol-selector #"\."))
(defn get-protocol-object [protocol-selector]
(loop [obj (get-global-scope)
path (protocol-path protocol-selector)]
(if (empty? path)
obj
(if (goog/isObject obj)
(recur (oget obj (first path)) (rest path))))))
(defn protocol-exists? [protocol-selector]
(some? (get-protocol-object protocol-selector)))
(defn get-protocol-selector [key]
(if-let [m (re-matches #"(.*)\$$" key)]
(if-not (string/includes? key "cljs$lang$protocol_mask$partition")
(let [protocol-selector (string/replace (second m) "$" ".")]
(if (protocol-exists? protocol-selector)
protocol-selector)))))
(defn demunge-protocol-selector [protocol-selector]
(let [parts (map proper-demunge (protocol-path protocol-selector))
_ (assert (>= (count parts) 2)
(str "expected protocol selector to contain at least one dot: '" protocol-selector "'"))
ns (string/join "." (butlast parts))
name (last parts)]
[ns name protocol-selector]))
(def fast-path-protocols-lookup-table (delay (get-fast-path-protocols-lookup-table)))
(defn key-for-protocol-partition [partition]
(str "cljs$lang$protocol_mask$partition" partition "$"))
(defn scan-fast-path-protocols-partition [obj partition]
{:pre [(number? partition)]}
(let [partition-key (key-for-protocol-partition partition)
partition-bits (or (oget obj partition-key) 0)]
(if (> partition-bits 0)
(let [lookup-table (get @fast-path-protocols-lookup-table partition)
_ (assert (map? lookup-table)
(str "fast-path-protocols-lookup-table does not contain lookup table for partition " partition))
* (fn [accum [bit protocol]]
(if (zero? (bit-and partition-bits bit))
accum
(conj accum protocol)))]
(reduce * [] lookup-table)))))
(defn scan-fast-path-protocols [obj]
(apply concat (map (partial scan-fast-path-protocols-partition obj) (range (get-fast-path-protocol-partitions-count)))))
(defn scan-slow-path-protocols [obj]
(let [keys (gobj/getKeys obj)
selectors (keep get-protocol-selector keys)]
(map demunge-protocol-selector selectors)))
(defn make-protocol-descriptor [ns name selector fast?]
{:ns ns
:name name
:selector selector
:fast? fast?})
(defn convert-to-protocol-descriptor [fast? [ns name selector]]
(make-protocol-descriptor ns name selector fast?))
(defn protocol-descriptors-comparator [a b]
(compare (:name a) (:name b)))
(defn scan-protocols [obj]
(let [fast-path-protocols (map (partial convert-to-protocol-descriptor true) (scan-fast-path-protocols obj))
slow-path-protocols (map (partial convert-to-protocol-descriptor false) (scan-slow-path-protocols obj))
all-protocols (concat fast-path-protocols slow-path-protocols)]
(sort protocol-descriptors-comparator all-protocols)))
(defn collect-protocol-methods [obj protocol-selector]
(let [key-prefix (string/replace protocol-selector #"\." "\\$")
pattern (re-pattern (str "^" key-prefix "\\$(.*)\\$arity\\$(\\d+)$"))
all-keys (gobj/getKeys obj)
matches (keep (partial re-matches pattern) all-keys)
methods (group-by second matches)
match-to-arity (fn [match]
(let [arity (nth match 2)]
(js/parseInt arity 10)))
match-arity-comparator (fn [a b]
(compare (match-to-arity a) (match-to-arity b)))
post-process (fn [[munged-name matches]]
(let [name (proper-demunge munged-name)
sorted-matches (sort match-arity-comparator matches)
sorted-fns (map #(oget obj (first %)) sorted-matches)]
[name sorted-fns]))
by-name-comparator (fn [a b]
(compare (first a) (first b)))]
; TODO: he we could be able to retrieve parameter lists from protocol definition methods
; parameter names there are usually more consistent than parameters picked by protocol implementors
(sort by-name-comparator (map post-process methods))))

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,34 @@
(ns devtools.prefs
(:require-macros [devtools.prefs :refer [emit-external-config emit-env-config]])
(:require [devtools.defaults :as defaults]))
; we use delay for DCE, see https://github.com/binaryage/cljs-devtools/issues/37
(def default-config (delay @defaults/config))
(def external-config (delay (emit-external-config)))
(def env-config (delay (emit-env-config)))
(def initial-config (delay (merge @default-config @external-config @env-config)))
(def ^:dynamic *current-config* (delay @initial-config))
; -- public api -------------------------------------------------------------------------------------------------------------
(defn set-prefs! [new-prefs]
(set! *current-config* new-prefs))
(defn get-prefs []
(when (delay? *current-config*)
(set-prefs! @*current-config*))
*current-config*)
(defn pref [key]
(key (get-prefs)))
(defn set-pref! [key val]
(set-prefs! (assoc (get-prefs) key val)))
(defn merge-prefs! [m]
(set-prefs! (merge (get-prefs) m)))
(defn update-pref! [key f & args]
(let [new-val (apply f (pref key) args)]
(set-pref! key new-val)))

View file

@ -0,0 +1 @@
["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:use-macros",["^ ","~$emit-env-config","~$devtools.prefs","~$emit-external-config","^4"],"~:excludes",["~#set",[]],"~:name","^4","~:imports",null,"~:requires",["^ ","~$defaults","~$devtools.defaults","^<","^<"],"~:cljs.spec/speced-vars",[],"~:uses",null,"~:defs",["^ ","~$merge-prefs!",["^ ","~:protocol-inline",null,"~:meta",["^ ","~:file","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","~:line",29,"~:column",7,"~:end-line",29,"~:end-column",19,"~:arglists",["~#list",["~$quote",["^I",[["~$m"]]]]]],"^8","~$devtools.prefs/merge-prefs!","^C","js/compiled/out/devtools/prefs.cljs","^G",19,"~:method-params",["^I",[["~$m"]]],"~:protocol-impl",null,"~:arglists-meta",["^I",[null,null]],"^E",1,"~:variadic?",false,"^D",29,"~:ret-tag","~$any","^F",29,"~:max-fixed-arity",1,"~:fn-var",true,"^H",["^I",["^J",["^I",[["~$m"]]]]]],"~$external-config",["^ ","^8","~$devtools.prefs/external-config","^C","js/compiled/out/devtools/prefs.cljs","^D",7,"^E",1,"^F",7,"^G",21,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",7,"^E",6,"^F",7,"^G",21],"~:tag","~$cljs.core/Delay"],"~$get-prefs",["^ ","^A",null,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",18,"^E",7,"^F",18,"^G",16,"^H",["^I",["^J",["^I",[[]]]]]],"^8","~$devtools.prefs/get-prefs","^C","js/compiled/out/devtools/prefs.cljs","^G",16,"^L",["^I",[[]]],"^M",null,"^N",["^I",[null,null]],"^E",1,"^O",false,"^D",18,"^P","^W","^F",18,"^R",0,"^S",true,"^H",["^I",["^J",["^I",[[]]]]]],"~$initial-config",["^ ","^8","~$devtools.prefs/initial-config","^C","js/compiled/out/devtools/prefs.cljs","^D",9,"^E",1,"^F",9,"^G",20,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",9,"^E",6,"^F",9,"^G",20],"^V","^W"],"~$set-pref!",["^ ","^A",null,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",26,"^E",7,"^F",26,"^G",16,"^H",["^I",["^J",["^I",[["~$key","~$val"]]]]]],"^8","~$devtools.prefs/set-pref!","^C","js/compiled/out/devtools/prefs.cljs","^G",16,"^L",["^I",[["^11","^12"]]],"^M",null,"^N",["^I",[null,null]],"^E",1,"^O",false,"^D",26,"^P","^Q","^F",26,"^R",2,"^S",true,"^H",["^I",["^J",["^I",[["^11","^12"]]]]]],"~$default-config",["^ ","^8","~$devtools.prefs/default-config","^C","js/compiled/out/devtools/prefs.cljs","^D",6,"^E",1,"^F",6,"^G",20,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",6,"^E",6,"^F",6,"^G",20],"^V","^W"],"~$pref",["^ ","^A",null,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",23,"^E",7,"^F",23,"^G",11,"^H",["^I",["^J",["^I",[["^11"]]]]]],"^8","~$devtools.prefs/pref","^C","js/compiled/out/devtools/prefs.cljs","^G",11,"^L",["^I",[["^11"]]],"^M",null,"^N",["^I",[null,null]],"^E",1,"^O",false,"^D",23,"^P","^Q","^F",23,"^R",1,"^S",true,"^H",["^I",["^J",["^I",[["^11"]]]]]],"~$*current-config*",["^ ","^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",11,"^E",16,"^F",11,"^G",32,"~:dynamic",true],"^8","~$devtools.prefs/*current-config*","^C","js/compiled/out/devtools/prefs.cljs","^G",32,"^E",1,"^19",true,"^D",11,"^F",11,"^V","^W"],"~$set-prefs!",["^ ","^A",null,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",15,"^E",7,"^F",15,"^G",17,"^H",["^I",["^J",["^I",[["~$new-prefs"]]]]]],"^8","~$devtools.prefs/set-prefs!","^C","js/compiled/out/devtools/prefs.cljs","^G",17,"^L",["^I",[["^1<"]]],"^M",null,"^N",["^I",[null,null]],"^E",1,"^O",false,"^D",15,"^F",15,"^R",1,"^S",true,"^H",["^I",["^J",["^I",[["^1<"]]]]]],"~$update-pref!",["^ ","^A",null,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",32,"^E",7,"^F",32,"^G",19,"^H",["^I",["^J",["^I",[["^11","~$f","~$&","~$args"]]]]],"~:top-fn",["^ ","^O",true,"~:fixed-arity",2,"^R",2,"^L",[["^I",["^11","~$f","^1?"]]],"^H",["^I",[["^11","~$f","~$&","^1?"]]],"^N",["^I",[null]]]],"^8","~$devtools.prefs/update-pref!","^C","js/compiled/out/devtools/prefs.cljs","^G",19,"^1@",["^ ","^O",true,"^1A",2,"^R",2,"^L",[["^I",["^11","~$f","^1?"]]],"^H",["^I",[["^11","~$f","~$&","^1?"]]],"^N",["^I",[null]]],"^L",[["^I",["^11","~$f","^1?"]]],"^M",null,"^1A",2,"^N",["^I",[null]],"^E",1,"^O",true,"~:methods",[["^ ","^1A",2,"^O",true,"^V","^Q"]],"^D",32,"^P","^Q","^F",32,"^R",2,"^S",true,"^H",["^I",[["^11","~$f","~$&","^1?"]]]],"~$env-config",["^ ","^8","~$devtools.prefs/env-config","^C","js/compiled/out/devtools/prefs.cljs","^D",8,"^E",1,"^F",8,"^G",16,"^B",["^ ","^C","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/prefs.cljs","^D",8,"^E",6,"^F",8,"^G",16],"^V","^W"]],"~:cljs.spec/registry-ref",[],"~:require-macros",["^ ","^4","^4","^;","^<","^<","^<"],"~:doc",null]

View file

@ -0,0 +1,78 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.prefs');
goog.require('cljs.core');
goog.require('devtools.defaults');
devtools.prefs.default_config = (new cljs.core.Delay((function (){
return cljs.core.deref.call(null,devtools.defaults.config);
}),null));
devtools.prefs.external_config = (new cljs.core.Delay((function (){
return cljs.core.PersistentArrayMap.EMPTY;
}),null));
devtools.prefs.env_config = (new cljs.core.Delay((function (){
return cljs.core.PersistentArrayMap.EMPTY;
}),null));
devtools.prefs.initial_config = (new cljs.core.Delay((function (){
return cljs.core.merge.call(null,cljs.core.deref.call(null,devtools.prefs.default_config),cljs.core.deref.call(null,devtools.prefs.external_config),cljs.core.deref.call(null,devtools.prefs.env_config));
}),null));
devtools.prefs._STAR_current_config_STAR_ = (new cljs.core.Delay((function (){
return cljs.core.deref.call(null,devtools.prefs.initial_config);
}),null));
devtools.prefs.set_prefs_BANG_ = (function devtools$prefs$set_prefs_BANG_(new_prefs){
return devtools.prefs._STAR_current_config_STAR_ = new_prefs;
});
devtools.prefs.get_prefs = (function devtools$prefs$get_prefs(){
if(cljs.core.delay_QMARK_.call(null,devtools.prefs._STAR_current_config_STAR_)){
devtools.prefs.set_prefs_BANG_.call(null,cljs.core.deref.call(null,devtools.prefs._STAR_current_config_STAR_));
} else {
}
return devtools.prefs._STAR_current_config_STAR_;
});
devtools.prefs.pref = (function devtools$prefs$pref(key){
return key.call(null,devtools.prefs.get_prefs.call(null));
});
devtools.prefs.set_pref_BANG_ = (function devtools$prefs$set_pref_BANG_(key,val){
return devtools.prefs.set_prefs_BANG_.call(null,cljs.core.assoc.call(null,devtools.prefs.get_prefs.call(null),key,val));
});
devtools.prefs.merge_prefs_BANG_ = (function devtools$prefs$merge_prefs_BANG_(m){
return devtools.prefs.set_prefs_BANG_.call(null,cljs.core.merge.call(null,devtools.prefs.get_prefs.call(null),m));
});
devtools.prefs.update_pref_BANG_ = (function devtools$prefs$update_pref_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___26107 = arguments.length;
var i__4731__auto___26108 = (0);
while(true){
if((i__4731__auto___26108 < len__4730__auto___26107)){
args__4736__auto__.push((arguments[i__4731__auto___26108]));
var G__26109 = (i__4731__auto___26108 + (1));
i__4731__auto___26108 = G__26109;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((2) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((2)),(0),null)):null);
return devtools.prefs.update_pref_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__4737__auto__);
});
devtools.prefs.update_pref_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (key,f,args){
var new_val = cljs.core.apply.call(null,f,devtools.prefs.pref.call(null,key),args);
return devtools.prefs.set_pref_BANG_.call(null,key,new_val);
});
devtools.prefs.update_pref_BANG_.cljs$lang$maxFixedArity = (2);
/** @this {Function} */
devtools.prefs.update_pref_BANG_.cljs$lang$applyTo = (function (seq26104){
var G__26105 = cljs.core.first.call(null,seq26104);
var seq26104__$1 = cljs.core.next.call(null,seq26104);
var G__26106 = cljs.core.first.call(null,seq26104__$1);
var seq26104__$2 = cljs.core.next.call(null,seq26104__$1);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__26105,G__26106,seq26104__$2);
});
//# sourceMappingURL=prefs.js.map?rel=1582812679293

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/prefs.js","sources":["prefs.cljs?rel=1582812679294"],"lineCount":78,"mappings":";AAAA;;;AAKA,AAAKA,gCAAe,KAAAC,gBAAA;AAAA,AAAA,OAAAC,0BAAQC;GAAR;AACpB,AAAKC,iCAAgB,KAAAH,gBAAA;AAAA,AAAO,AAAA;GAAP;AACrB,AAAKI,4BAAW,KAAAJ,gBAAA;AAAA,AAAO,AAAA;GAAP;AAChB,AAAKK,gCAAe,KAAAL,gBAAA;AAAA,AAAO,iCAAA,AAAAC,yDAAA,AAAAA,0DAAA,AAAAA,7IAACK,oDAAOP,yDAAgBI,0DAAiBC;GAAhD;AAEpB,AAAeG,4CAAiB,KAAAP,gBAAA;AAAA,AAAA,OAAAC,0BAAQI;GAAR;AAIhC,iCAAA,jCAAMG,0EAAYC;AAAlB,AACE,OAAMF,4CAAiBE;;AAEzB,2BAAA,3BAAMC;AAAN,AACE,GAAM,AAACC,iCAAOJ;AAAd,AACE,yCAAA,AAAAN,zCAACO,mEAAYD;;AADf;;AAEAA;;AAEF,sBAAA,tBAAMK,oDAAMC;AAAZ,AACE,OAACA,cAAI,AAACH;;AAER,gCAAA,hCAAMI,wEAAWD,IAAIE;AAArB,AACE,OAACP,yCAAW,AAACQ,0BAAM,AAACN,oCAAWG,IAAIE;;AAErC,mCAAA,nCAAME,8EAAcC;AAApB,AACE,OAACV,yCAAW,AAACF,0BAAM,AAACI,oCAAWQ;;AAEjC,AAAA,mCAAA,2CAAAC,9EAAMM;AAAN,AAAA,IAAAL,qBAAA;AAAA,AAAA,IAAAC,0BAAA,AAAA;AAAA,AAAA,IAAAC,wBAAA;;AAAA,AAAA,GAAA,CAAAA,wBAAAD;AAAA,AAAA,AAAAD,wBAAA,CAAA,UAAAE;;AAAA,eAAA,CAAAA,wBAAA;;;;AAAA;;;;AAAA,IAAAC,uBAAA,EAAA,CAAA,MAAA,AAAAH,4BAAA,AAAA,KAAAI,qBAAA,AAAAJ,yBAAA,KAAA,IAAA,OAAA;AAAA,AAAA,OAAAK,sEAAA,CAAA,UAAA,MAAA,CAAA,UAAA,MAAAF;;;AAAA,AAAA,AAAA,wEAAA,xEAAME,mFAAcZ,IAAImB,EAAIC;AAA5B,AACE,IAAMC,UAAQ,AAACC,0BAAMH,EAAE,AAACpB,8BAAKC,KAAKoB;AAAlC,AACE,OAACnB,wCAAUD,IAAIqB;;;AAFnB,AAAA,2DAAA,3DAAMT;;AAAN;AAAA,AAAA,qDAAA,WAAAC,hEAAMD;AAAN,AAAA,IAAAE,WAAA,AAAAC,0BAAAF;IAAAA,eAAA,AAAAG,yBAAAH;IAAAI,WAAA,AAAAF,0BAAAF;IAAAA,eAAA,AAAAG,yBAAAH;AAAA,AAAA,IAAAK,qBAAA;AAAA,AAAA,OAAAA,wDAAAJ,SAAAG,SAAAJ;;;AAAA","names":["devtools.prefs\/default-config","cljs.core\/Delay","cljs.core\/deref","devtools.defaults\/config","devtools.prefs\/external-config","devtools.prefs\/env-config","devtools.prefs\/initial-config","cljs.core\/merge","devtools.prefs\/*current-config*","devtools.prefs\/set-prefs!","new-prefs","devtools.prefs\/get-prefs","cljs.core\/delay?","devtools.prefs\/pref","key","devtools.prefs\/set-pref!","val","cljs.core\/assoc","devtools.prefs\/merge-prefs!","m","var_args","args__4736__auto__","len__4730__auto__","i__4731__auto__","argseq__4737__auto__","cljs.core\/IndexedSeq","devtools.prefs\/update-pref!","seq26104","G__26105","cljs.core\/first","cljs.core\/next","G__26106","self__4717__auto__","f","args","new-val","cljs.core\/apply"]}

View file

@ -0,0 +1,11 @@
(ns devtools.preload
(:require [devtools.prefs :as prefs]
[devtools.core :as core]))
; this namespace is intended to be included in cljs compiler :preloads
; overrides for default configuration can be specified in :external-config > :devtools/config
; see https://github.com/binaryage/cljs-devtools/blob/master/docs/installation.md#install-it-via-preloads
; https://github.com/binaryage/cljs-devtools/blob/master/docs/configuration.md#configuration-via-preloads
(if-not (prefs/pref :suppress-preload-install)
(core/install!))

View file

@ -0,0 +1 @@
["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:use-macros",["^ "],"~:excludes",["~#set",[]],"~:name","~$devtools.preload","~:imports",null,"~:requires",["^ ","~$prefs","~$devtools.prefs","^:","^:","~$core","~$devtools.core","^<","^<"],"~:cljs.spec/speced-vars",[],"~:uses",null,"~:defs",["^ "],"~:cljs.spec/registry-ref",[],"~:require-macros",["^ ","^9","^:","^:","^:"],"~:cljs.analyzer/constants",["^ ","~:seen",["^4",["~:suppress-preload-install"]],"~:order",["^D"]],"~:doc",null]

View file

@ -0,0 +1,11 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.preload');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.core');
if(cljs.core.not.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"suppress-preload-install","suppress-preload-install",1724845090)))){
devtools.core.install_BANG_.call(null);
} else {
}
//# sourceMappingURL=preload.js.map?rel=1582812680994

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/preload.js","sources":["preload.cljs?rel=1582812680994"],"lineCount":11,"mappings":";AAAA;;;;AASA,GAAA,AAAAA,wBAAQ,8BAAA,9BAACC;AACP,AAACC;;AADH","names":["cljs.core\/not","devtools.prefs\/pref","devtools.core\/install!"]}

View file

@ -0,0 +1,15 @@
(ns devtools.protocols)
(defprotocol ITemplate
"Marker protocol indicating a devtools template.")
(defprotocol IGroup
"Marker protocol indicating a devtools group.")
(defprotocol ISurrogate
"Marker protocol indicating a devtools surrogate object.")
(defprotocol IFormat
(-header [value])
(-has-body [value])
(-body [value]))

View file

@ -0,0 +1 @@
["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:use-macros",["^ "],"~:excludes",["~#set",[]],"~:name","~$devtools.protocols","~:imports",null,"~:requires",null,"~:cljs.spec/speced-vars",[],"~:uses",null,"~:defs",["^ ","~$ITemplate",["^ ","~:meta",["^ ","~:protocol-symbol",true,"~:file","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","~:end-column",23,"~:column",14,"~:line",3,"~:protocol-info",["^ ","~:methods",["^ "]],"~:end-line",3,"~:doc","Marker protocol indicating a devtools template.","~:jsdoc",["~#list",["@interface"]]],"^>",true,"^5","~$devtools.protocols/ITemplate","^?","js/compiled/out/devtools/protocols.cljs","^@",23,"^A",1,"^B",3,"^C",["^ ","^D",["^ "]],"~:info",null,"^E",3,"~:tag","~$any","~:impls",["^4",[]],"^F","Marker protocol indicating a devtools template.","^G",["^H",["@interface"]]],"~$IGroup",["^ ","^=",["^ ","^>",true,"^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","^@",20,"^A",14,"^B",6,"^C",["^ ","^D",["^ "]],"^E",6,"^F","Marker protocol indicating a devtools group.","^G",["^H",["@interface"]]],"^>",true,"^5","~$devtools.protocols/IGroup","^?","js/compiled/out/devtools/protocols.cljs","^@",20,"^A",1,"^B",6,"^C",["^ ","^D",["^ "]],"^J",null,"^E",6,"^K","^L","^M",["^4",[]],"^F","Marker protocol indicating a devtools group.","^G",["^H",["@interface"]]],"~$ISurrogate",["^ ","^=",["^ ","^>",true,"^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","^@",24,"^A",14,"^B",9,"^C",["^ ","^D",["^ "]],"^E",9,"^F","Marker protocol indicating a devtools surrogate object.","^G",["^H",["@interface"]]],"^>",true,"^5","~$devtools.protocols/ISurrogate","^?","js/compiled/out/devtools/protocols.cljs","^@",24,"^A",1,"^B",9,"^C",["^ ","^D",["^ "]],"^J",null,"^E",9,"^K","^L","^M",["^4",[]],"^F","Marker protocol indicating a devtools surrogate object.","^G",["^H",["@interface"]]],"~$IFormat",["^ ","^=",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","^B",12,"^A",14,"^E",12,"^@",21,"^>",true,"^G",["^H",["@interface"]],"^C",["^ ","^D",["^ ","~$-header",[["~$value"]],"~$-has-body",[["^T"]],"~$-body",[["^T"]]]]],"^>",true,"^5","~$devtools.protocols/IFormat","^?","js/compiled/out/devtools/protocols.cljs","^@",21,"^A",1,"^B",12,"^C",["^ ","^D",["^ ","^S",[["^T"]],"^U",[["^T"]],"^V",[["^T"]]]],"^J",null,"^E",12,"^K","^L","^M",["^4",[]],"^G",["^H",["@interface"]]],"^S",["^ ","~:protocol-inline",null,"^=",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","^B",13,"^A",4,"^E",13,"^@",11,"~:protocol","^W","^F",null,"~:arglists",["^H",["~$quote",["^H",[["^T"]]]]]],"^Y","^W","^5","~$devtools.protocols/-header","^?","js/compiled/out/devtools/protocols.cljs","^@",11,"~:method-params",["^H",[["^T"]]],"~:protocol-impl",null,"~:arglists-meta",["^H",[null,null]],"^A",1,"~:variadic?",false,"^B",12,"~:ret-tag","^L","^E",13,"~:max-fixed-arity",1,"~:fn-var",true,"^Z",["^H",["^[",["^H",[["^T"]]]]],"^F",null],"^U",["^ ","^X",null,"^=",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","^B",14,"^A",4,"^E",14,"^@",13,"^Y","^W","^F",null,"^Z",["^H",["^[",["^H",[["^T"]]]]]],"^Y","^W","^5","~$devtools.protocols/-has-body","^?","js/compiled/out/devtools/protocols.cljs","^@",13,"^11",["^H",[["^T"]]],"^12",null,"^13",["^H",[null,null]],"^A",1,"^14",false,"^B",12,"^15","^L","^E",14,"^16",1,"^17",true,"^Z",["^H",["^[",["^H",[["^T"]]]]],"^F",null],"^V",["^ ","^X",null,"^=",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/protocols.cljs","^B",15,"^A",4,"^E",15,"^@",9,"^Y","^W","^F",null,"^Z",["^H",["^[",["^H",[["^T"]]]]]],"^Y","^W","^5","~$devtools.protocols/-body","^?","js/compiled/out/devtools/protocols.cljs","^@",9,"^11",["^H",[["^T"]]],"^12",null,"^13",["^H",[null,null]],"^A",1,"^14",false,"^B",12,"^15","^L","^E",15,"^16",1,"^17",true,"^Z",["^H",["^[",["^H",[["^T"]]]]],"^F",null]],"~:cljs.spec/registry-ref",[],"~:require-macros",null,"^F",null]

View file

@ -0,0 +1,89 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.protocols');
goog.require('cljs.core');
/**
* Marker protocol indicating a devtools template.
* @interface
*/
devtools.protocols.ITemplate = function(){};
/**
* Marker protocol indicating a devtools group.
* @interface
*/
devtools.protocols.IGroup = function(){};
/**
* Marker protocol indicating a devtools surrogate object.
* @interface
*/
devtools.protocols.ISurrogate = function(){};
/**
* @interface
*/
devtools.protocols.IFormat = function(){};
devtools.protocols._header = (function devtools$protocols$_header(value){
if((((!((value == null)))) && ((!((value.devtools$protocols$IFormat$_header$arity$1 == null)))))){
return value.devtools$protocols$IFormat$_header$arity$1(value);
} else {
var x__4433__auto__ = (((value == null))?null:value);
var m__4434__auto__ = (devtools.protocols._header[goog.typeOf(x__4433__auto__)]);
if((!((m__4434__auto__ == null)))){
return m__4434__auto__.call(null,value);
} else {
var m__4431__auto__ = (devtools.protocols._header["_"]);
if((!((m__4431__auto__ == null)))){
return m__4431__auto__.call(null,value);
} else {
throw cljs.core.missing_protocol.call(null,"IFormat.-header",value);
}
}
}
});
devtools.protocols._has_body = (function devtools$protocols$_has_body(value){
if((((!((value == null)))) && ((!((value.devtools$protocols$IFormat$_has_body$arity$1 == null)))))){
return value.devtools$protocols$IFormat$_has_body$arity$1(value);
} else {
var x__4433__auto__ = (((value == null))?null:value);
var m__4434__auto__ = (devtools.protocols._has_body[goog.typeOf(x__4433__auto__)]);
if((!((m__4434__auto__ == null)))){
return m__4434__auto__.call(null,value);
} else {
var m__4431__auto__ = (devtools.protocols._has_body["_"]);
if((!((m__4431__auto__ == null)))){
return m__4431__auto__.call(null,value);
} else {
throw cljs.core.missing_protocol.call(null,"IFormat.-has-body",value);
}
}
}
});
devtools.protocols._body = (function devtools$protocols$_body(value){
if((((!((value == null)))) && ((!((value.devtools$protocols$IFormat$_body$arity$1 == null)))))){
return value.devtools$protocols$IFormat$_body$arity$1(value);
} else {
var x__4433__auto__ = (((value == null))?null:value);
var m__4434__auto__ = (devtools.protocols._body[goog.typeOf(x__4433__auto__)]);
if((!((m__4434__auto__ == null)))){
return m__4434__auto__.call(null,value);
} else {
var m__4431__auto__ = (devtools.protocols._body["_"]);
if((!((m__4431__auto__ == null)))){
return m__4431__auto__.call(null,value);
} else {
throw cljs.core.missing_protocol.call(null,"IFormat.-body",value);
}
}
}
});
//# sourceMappingURL=protocols.js.map?rel=1582812679003

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/protocols.js","sources":["protocols.cljs?rel=1582812679003"],"lineCount":89,"mappings":";AAAA;;AAEA,AAAA;AAAA;;;;+BAAA,\/BAAaA;;AAAb,AAGA,AAAA;AAAA;;;;4BAAA,5BAAaC;;AAAb,AAGA,AAAA;AAAA;;;;gCAAA,hCAAaC;;AAAb,AAGA,AAAA;AAAA;;;6BAAA,7BAAaS;;AAAb,6BAAA,7BACGN,kEAASO;AADZ,AAAA,GAAA,EAAA,GAAA,UAAA,aAAA,GAAA,CAAA,oDAAA,9EACYA,0BAAAA;AADZ,OACYA,iDAAAA;;AADZ,IAAAT,kBAAA,EAAA,UAAA,OAAA,hBACYS,qBAAAA;IADZR,kBAAA,CAAAC,2BAAA,AAAAC,YAAAH;AAAA,AAAA,GAAA,GAAA,CAAAC,mBAAA;AAAA,OAAAA,0BACYQ;;AADZ,IAAAL,kBAAA,CAAAF,2BAAA;AAAA,AAAA,GAAA,GAAA,CAAAE,mBAAA;AAAA,OAAAA,0BACYK;;AADZ,MAAA,AAAAJ,qCAAA,kBACYI;;;;;;AADZ,+BAAA,\/BAEGH,sEAAWG;AAFd,AAAA,GAAA,EAAA,GAAA,UAAA,aAAA,GAAA,CAAA,sDAAA,hFAEcA,0BAAAA;AAFd,OAEcA,mDAAAA;;AAFd,IAAAT,kBAAA,EAAA,UAAA,OAAA,hBAEcS,qBAAAA;IAFdR,kBAAA,CAAAK,6BAAA,AAAAH,YAAAH;AAAA,AAAA,GAAA,GAAA,CAAAC,mBAAA;AAAA,OAAAA,0BAEcQ;;AAFd,IAAAL,kBAAA,CAAAE,6BAAA;AAAA,AAAA,GAAA,GAAA,CAAAF,mBAAA;AAAA,OAAAA,0BAEcK;;AAFd,MAAA,AAAAJ,qCAAA,oBAEcI;;;;;;AAFd,2BAAA,3BAGGF,8DAAOE;AAHV,AAAA,GAAA,EAAA,GAAA,UAAA,aAAA,GAAA,CAAA,kDAAA,5EAGUA,0BAAAA;AAHV,OAGUA,+CAAAA;;AAHV,IAAAT,kBAAA,EAAA,UAAA,OAAA,hBAGUS,qBAAAA;IAHVR,kBAAA,CAAAM,yBAAA,AAAAJ,YAAAH;AAAA,AAAA,GAAA,GAAA,CAAAC,mBAAA;AAAA,OAAAA,0BAGUQ;;AAHV,IAAAL,kBAAA,CAAAG,yBAAA;AAAA,AAAA,GAAA,GAAA,CAAAH,mBAAA;AAAA,OAAAA,0BAGUK;;AAHV,MAAA,AAAAJ,qCAAA,gBAGUI;;;;;;AAHV","names":["devtools.protocols\/ITemplate","devtools.protocols\/IGroup","devtools.protocols\/ISurrogate","x__4433__auto__","m__4434__auto__","devtools.protocols\/-header","goog\/typeOf","m__4431__auto__","cljs.core\/missing-protocol","devtools.protocols\/-has-body","devtools.protocols\/-body","devtools.protocols\/IFormat","value"]}

View file

@ -0,0 +1,35 @@
(ns devtools.reporter
(:require-macros [devtools.oops :refer [oget]])
(:require [devtools.util :as util]
[devtools.context :as context]))
(def issues-url "https://github.com/binaryage/cljs-devtools/issues")
; -- internal errors -------------------------------------------------------------------------------------------------------
(defn report-internal-error! [e & [context footer]]
(let [console (context/get-console)]
(try
(let [message (if (instance? js/Error e)
(or (.-message e) e)
e)
header #js ["%cCLJS DevTools Error%c%s"
"background-color:red;color:white;font-weight:bold;padding:0px 3px;border-radius:2px;"
"color:red"
(str " " message)]
context-msg (str "In " (util/get-lib-info) (if context (str ", " context ".") ".") "\n\n")
footer-msg (if (some? footer)
footer
(str "\n\n" "---\n" "Please report the issue here: " issues-url))
details #js [context-msg e footer-msg]]
(let [group-collapsed (oget console "groupCollapsed")
log (oget console "log")
group-end (oget console "groupEnd")]
(assert group-collapsed)
(assert log)
(assert group-end)
(.apply group-collapsed console header)
(.apply log console details)
(.call group-end console)))
(catch :default e
(.error console "FATAL: report-internal-error! failed" e)))))

View file

@ -0,0 +1 @@
["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:externs",["^ ","~$Error",["^ "]],"~:use-macros",["^ ","~$oget","~$devtools.oops"],"~:excludes",["~#set",[]],"~:name","~$devtools.reporter","~:imports",null,"~:requires",["^ ","~$util","~$devtools.util","^>","^>","~$context","~$devtools.context","^@","^@"],"~:cljs.spec/speced-vars",[],"~:uses",null,"~:defs",["^ ","~$issues-url",["^ ","^9","~$devtools.reporter/issues-url","~:file","js/compiled/out/devtools/reporter.cljs","~:line",6,"~:column",1,"~:end-line",6,"~:end-column",16,"~:meta",["^ ","^F","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/reporter.cljs","^G",6,"^H",6,"^I",6,"^J",16],"~:tag","~$string"],"~$report-internal-error!",["^ ","~:protocol-inline",null,"^K",["^ ","^F","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/reporter.cljs","^G",10,"^H",7,"^I",10,"^J",29,"~:arglists",["~#list",["~$quote",["^Q",[["~$e","~$&",["^?","~$footer"]]]]]],"~:top-fn",["^ ","~:variadic?",true,"~:fixed-arity",1,"~:max-fixed-arity",1,"~:method-params",[["^Q",["~$e",["^?","^S"]]]],"^P",["^Q",[["~$e","~$&",["^?","^S"]]]],"~:arglists-meta",["^Q",[null]]]],"^9","~$devtools.reporter/report-internal-error!","^F","js/compiled/out/devtools/reporter.cljs","^J",29,"^T",["^ ","^U",true,"^V",1,"^W",1,"^X",[["^Q",["~$e",["^?","^S"]]]],"^P",["^Q",[["~$e","~$&",["^?","^S"]]]],"^Y",["^Q",[null]]],"^X",[["^Q",["~$e",["^?","^S"]]]],"~:protocol-impl",null,"^V",1,"^Y",["^Q",[null]],"^H",1,"^U",true,"~:methods",[["^ ","^V",1,"^U",true]],"^G",10,"~:ret-tag","~$any","^I",10,"^W",1,"~:fn-var",true,"^P",["^Q",[["~$e","~$&",["^?","^S"]]]]]],"~:cljs.spec/registry-ref",[],"~:require-macros",["^ ","^6","^6"],"~:doc",null]

View file

@ -0,0 +1,81 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.reporter');
goog.require('cljs.core');
goog.require('devtools.util');
goog.require('devtools.context');
devtools.reporter.issues_url = "https://github.com/binaryage/cljs-devtools/issues";
devtools.reporter.report_internal_error_BANG_ = (function devtools$reporter$report_internal_error_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___28084 = arguments.length;
var i__4731__auto___28085 = (0);
while(true){
if((i__4731__auto___28085 < len__4730__auto___28084)){
args__4736__auto__.push((arguments[i__4731__auto___28085]));
var G__28086 = (i__4731__auto___28085 + (1));
i__4731__auto___28085 = G__28086;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((1) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((1)),(0),null)):null);
return devtools.reporter.report_internal_error_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__4737__auto__);
});
devtools.reporter.report_internal_error_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (e,p__28079){
var vec__28080 = p__28079;
var context = cljs.core.nth.call(null,vec__28080,(0),null);
var footer = cljs.core.nth.call(null,vec__28080,(1),null);
var console = devtools.context.get_console.call(null);
try{var message = (((e instanceof Error))?(function (){var or__4131__auto__ = e.message;
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return e;
}
})():e);
var header = ["%cCLJS DevTools Error%c%s","background-color:red;color:white;font-weight:bold;padding:0px 3px;border-radius:2px;","color:red",[" ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(message)].join('')];
var context_msg = ["In ",devtools.util.get_lib_info.call(null),(cljs.core.truth_(context)?[", ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(context),"."].join(''):"."),"\n\n"].join('');
var footer_msg = (((!((footer == null))))?footer:["\n\n","---\n","Please report the issue here: ",devtools.reporter.issues_url].join(''));
var details = [context_msg,e,footer_msg];
var group_collapsed = (console["groupCollapsed"]);
var log = (console["log"]);
var group_end = (console["groupEnd"]);
if(cljs.core.truth_(group_collapsed)){
} else {
throw (new Error("Assert failed: group-collapsed"));
}
if(cljs.core.truth_(log)){
} else {
throw (new Error("Assert failed: log"));
}
if(cljs.core.truth_(group_end)){
} else {
throw (new Error("Assert failed: group-end"));
}
group_collapsed.apply(console,header);
log.apply(console,details);
return group_end.call(console);
}catch (e28083){var e__$1 = e28083;
return console.error("FATAL: report-internal-error! failed",e__$1);
}});
devtools.reporter.report_internal_error_BANG_.cljs$lang$maxFixedArity = (1);
/** @this {Function} */
devtools.reporter.report_internal_error_BANG_.cljs$lang$applyTo = (function (seq28077){
var G__28078 = cljs.core.first.call(null,seq28077);
var seq28077__$1 = cljs.core.next.call(null,seq28077);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__28078,seq28077__$1);
});
//# sourceMappingURL=reporter.js.map?rel=1582812680716

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/reporter.js","sources":["reporter.cljs?rel=1582812680716"],"lineCount":81,"mappings":";AAAA;;;;AAKA,+BAAA,\/BAAKA;AAIL,AAAA,gDAAA,wDAAAC,xGAAMM;AAAN,AAAA,IAAAL,qBAAA;AAAA,AAAA,IAAAC,0BAAA,AAAA;AAAA,AAAA,IAAAC,wBAAA;;AAAA,AAAA,GAAA,CAAAA,wBAAAD;AAAA,AAAA,AAAAD,wBAAA,CAAA,UAAAE;;AAAA,eAAA,CAAAA,wBAAA;;;;AAAA;;;;AAAA,IAAAC,uBAAA,EAAA,CAAA,MAAA,AAAAH,4BAAA,AAAA,KAAAI,qBAAA,AAAAJ,yBAAA,KAAA,IAAA,OAAA;AAAA,AAAA,OAAAK,mFAAA,CAAA,UAAA,MAAAF;;;AAAA,AAAA,AAAA,qFAAA,aAAAG,lGAAMD,gGAAwBS;AAA9B,AAAA,IAAAP,aAAAD;cAAA,AAAAE,wBAAAD,WAAA,IAAA,jDAAmCQ;aAAnC,AAAAP,wBAAAD,WAAA,IAAA,hDAA2CS;AAA3C,AACE,IAAMC,UAAQ,AAACC;AAAf,AACE,IAAA,AACE,IAAME,UAAQ,EAAI,cAAWC,bAASP,qBACtB,iBAAAQ,mBAAI,AAAWR;AAAf,AAAA,oBAAAQ;AAAAA;;AAAkBR;;KAClBA;aAFhB,CAAA,4BAAA,uFAAA,7HAGMS,yIAGY,CAAA,gDAASH;IACrBI,cAAY,CAAA,qJAAA,\/IAAW,AAACC,sCAAmB,oGAAA,lFAAIV,SAAQ,CAAA,0DAAA,TAAUA;IACjEW,aAAW,EAAI,GAAA,WAAA,VAAOV,mBACTA,OACA,CAAA,OAAA,QAAA,iCAAqDlB;cAVxE,VAWM6B,WAAaH,YAAYV,EAAEY;AAXjC,AAYE,IAAME,kBAAgB,SAAA,RAAMX;IACtBY,MAAI,SAAA,RAAMZ;IACVa,YAAU,SAAA,RAAMb;AAFtB,AAGE,oBAAQW;AAAR;AAAA,AAAA,MAAA,KAAAP,MAAA;;;AACA,oBAAQQ;AAAR;AAAA,AAAA,MAAA,KAAAR,MAAA;;;AACA,oBAAQS;AAAR;AAAA,AAAA,MAAA,KAAAT,MAAA;;;AACA,AAAQO,sBAAgBX,QAAQM;;AAChC,AAAQM,UAAIZ,QAAQU;;AACpB,OAAOG,eAAUb;gBArBvB,YAAAE,RAsBkBL;AAtBlB,AAuBI,qBAAA,dAAQG,qDAA+CH;;;AAzB\/D,AAAA,wEAAA,xEAAMT;;AAAN;AAAA,AAAA,kEAAA,WAAAI,7EAAMJ;AAAN,AAAA,IAAAK,WAAA,AAAAC,0BAAAF;IAAAA,eAAA,AAAAG,yBAAAH;AAAA,AAAA,IAAAI,qBAAA;AAAA,AAAA,OAAAA,wDAAAH,SAAAD;;;AAAA","names":["devtools.reporter\/issues-url","var_args","args__4736__auto__","len__4730__auto__","i__4731__auto__","argseq__4737__auto__","cljs.core\/IndexedSeq","devtools.reporter\/report-internal-error!","p__28079","vec__28080","cljs.core\/nth","seq28077","G__28078","cljs.core\/first","cljs.core\/next","self__4717__auto__","e","context","footer","console","devtools.context\/get-console","e28083","message","js\/Error","or__4131__auto__","header","context-msg","devtools.util\/get-lib-info","footer-msg","details","group-collapsed","log","group-end"]}

View file

@ -0,0 +1,39 @@
(ns devtools.toolbox
(:require-macros [devtools.toolbox])
(:require [devtools.protocols :refer [IFormat]]
[devtools.formatters.templating :refer [render-markup]]
[devtools.formatters.markup :refer [<preview> <body> <standard-body-reference> <surrogate>]]))
(defn envelope
"This is a simple wrapper for logging \"busy\" objects.
This is especially handy when you happen to be logging javascript objects with many properties.
Standard javascript console renderer tends to print a lot of infomation in the header in some cases and that can make
console output pretty busy. By using envelope you can force your own short header and let the details expand on demand
via disclosure triangle. The header can be styled and you can optionally specify preferred wrapping tag (advanced)."
([obj]
(envelope obj :default-envelope-header))
([obj header]
(envelope obj header :default-envelope-style))
([obj header style]
(envelope obj header style :span))
([obj header style tag]
(reify
IFormat
(-header [_] (render-markup [[tag style] (if (fn? header) (header obj) header)]))
(-has-body [_] true)
(-body [_] (render-markup (<body> (<standard-body-reference> obj)))))))
(defn force-format
"Forces object to be rendered by cljs-devtools during console logging.
Unfortunately custom formatters subsystem in DevTools is not applied to primitive values like numbers, strings, null, etc.
This wrapper can be used as a workaround if you really need to force cljs-devtools rendering:
(.log js/console nil) ; will render 'null'
(.log js/console (force-format nil)) ; will render 'nil' and not 'null'
See https://github.com/binaryage/cljs-devtools/issues/17
"
[obj]
(render-markup (<surrogate> obj)))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,144 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.toolbox');
goog.require('cljs.core');
goog.require('devtools.protocols');
goog.require('devtools.formatters.templating');
goog.require('devtools.formatters.markup');
/**
* This is a simple wrapper for logging "busy" objects.
* This is especially handy when you happen to be logging javascript objects with many properties.
* Standard javascript console renderer tends to print a lot of infomation in the header in some cases and that can make
* console output pretty busy. By using envelope you can force your own short header and let the details expand on demand
* via disclosure triangle. The header can be styled and you can optionally specify preferred wrapping tag (advanced).
*/
devtools.toolbox.envelope = (function devtools$toolbox$envelope(var_args){
var G__28166 = arguments.length;
switch (G__28166) {
case 1:
return devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$1((arguments[(0)]));
break;
case 2:
return devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$2((arguments[(0)]),(arguments[(1)]));
break;
case 3:
return devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$3((arguments[(0)]),(arguments[(1)]),(arguments[(2)]));
break;
case 4:
return devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$4((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),(arguments[(3)]));
break;
default:
throw (new Error(["Invalid arity: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(arguments.length)].join('')));
}
});
devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$1 = (function (obj){
return devtools.toolbox.envelope.call(null,obj,new cljs.core.Keyword(null,"default-envelope-header","default-envelope-header",-90723598));
});
devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$2 = (function (obj,header){
return devtools.toolbox.envelope.call(null,obj,header,new cljs.core.Keyword(null,"default-envelope-style","default-envelope-style",-1676750479));
});
devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$3 = (function (obj,header,style){
return devtools.toolbox.envelope.call(null,obj,header,style,new cljs.core.Keyword(null,"span","span",1394872991));
});
devtools.toolbox.envelope.cljs$core$IFn$_invoke$arity$4 = (function (obj,header,style,tag){
if((typeof devtools !== 'undefined') && (typeof devtools.toolbox !== 'undefined') && (typeof devtools.toolbox.t_devtools$toolbox28167 !== 'undefined')){
} else {
/**
* @constructor
* @implements {devtools.protocols.IFormat}
* @implements {cljs.core.IMeta}
* @implements {cljs.core.IWithMeta}
*/
devtools.toolbox.t_devtools$toolbox28167 = (function (obj,header,style,tag,meta28168){
this.obj = obj;
this.header = header;
this.style = style;
this.tag = tag;
this.meta28168 = meta28168;
this.cljs$lang$protocol_mask$partition0$ = 393216;
this.cljs$lang$protocol_mask$partition1$ = 0;
});
devtools.toolbox.t_devtools$toolbox28167.prototype.cljs$core$IWithMeta$_with_meta$arity$2 = (function (_28169,meta28168__$1){
var self__ = this;
var _28169__$1 = this;
return (new devtools.toolbox.t_devtools$toolbox28167(self__.obj,self__.header,self__.style,self__.tag,meta28168__$1));
});
devtools.toolbox.t_devtools$toolbox28167.prototype.cljs$core$IMeta$_meta$arity$1 = (function (_28169){
var self__ = this;
var _28169__$1 = this;
return self__.meta28168;
});
devtools.toolbox.t_devtools$toolbox28167.prototype.devtools$protocols$IFormat$ = cljs.core.PROTOCOL_SENTINEL;
devtools.toolbox.t_devtools$toolbox28167.prototype.devtools$protocols$IFormat$_header$arity$1 = (function (_){
var self__ = this;
var ___$1 = this;
return devtools.formatters.templating.render_markup.call(null,new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [self__.tag,self__.style], null),((cljs.core.fn_QMARK_.call(null,self__.header))?self__.header.call(null,self__.obj):self__.header)], null));
});
devtools.toolbox.t_devtools$toolbox28167.prototype.devtools$protocols$IFormat$_has_body$arity$1 = (function (_){
var self__ = this;
var ___$1 = this;
return true;
});
devtools.toolbox.t_devtools$toolbox28167.prototype.devtools$protocols$IFormat$_body$arity$1 = (function (_){
var self__ = this;
var ___$1 = this;
return devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_body_GT_.call(null,devtools.formatters.markup._LT_standard_body_reference_GT_.call(null,self__.obj)));
});
devtools.toolbox.t_devtools$toolbox28167.getBasis = (function (){
return new cljs.core.PersistentVector(null, 5, 5, cljs.core.PersistentVector.EMPTY_NODE, [new cljs.core.Symbol(null,"obj","obj",-1672671807,null),new cljs.core.Symbol(null,"header","header",1759972661,null),new cljs.core.Symbol(null,"style","style",1143888791,null),new cljs.core.Symbol(null,"tag","tag",350170304,null),new cljs.core.Symbol(null,"meta28168","meta28168",180092075,null)], null);
});
devtools.toolbox.t_devtools$toolbox28167.cljs$lang$type = true;
devtools.toolbox.t_devtools$toolbox28167.cljs$lang$ctorStr = "devtools.toolbox/t_devtools$toolbox28167";
devtools.toolbox.t_devtools$toolbox28167.cljs$lang$ctorPrWriter = (function (this__4374__auto__,writer__4375__auto__,opt__4376__auto__){
return cljs.core._write.call(null,writer__4375__auto__,"devtools.toolbox/t_devtools$toolbox28167");
});
/**
* Positional factory function for devtools.toolbox/t_devtools$toolbox28167.
*/
devtools.toolbox.__GT_t_devtools$toolbox28167 = (function devtools$toolbox$__GT_t_devtools$toolbox28167(obj__$1,header__$1,style__$1,tag__$1,meta28168){
return (new devtools.toolbox.t_devtools$toolbox28167(obj__$1,header__$1,style__$1,tag__$1,meta28168));
});
}
return (new devtools.toolbox.t_devtools$toolbox28167(obj,header,style,tag,cljs.core.PersistentArrayMap.EMPTY));
});
devtools.toolbox.envelope.cljs$lang$maxFixedArity = 4;
/**
* Forces object to be rendered by cljs-devtools during console logging.
*
* Unfortunately custom formatters subsystem in DevTools is not applied to primitive values like numbers, strings, null, etc.
* This wrapper can be used as a workaround if you really need to force cljs-devtools rendering:
*
* (.log js/console nil) ; will render 'null'
* (.log js/console (force-format nil)) ; will render 'nil' and not 'null'
*
* See https://github.com/binaryage/cljs-devtools/issues/17
*
*/
devtools.toolbox.force_format = (function devtools$toolbox$force_format(obj){
return devtools.formatters.templating.render_markup.call(null,devtools.formatters.markup._LT_surrogate_GT_.call(null,obj));
});
//# sourceMappingURL=toolbox.js.map?rel=1582812680788

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/toolbox.js","sources":["toolbox.cljs?rel=1582812680789"],"lineCount":144,"mappings":";AAAA;;;;;AAMA,AAAA;;;;;;;4BAAA,oCAAAA,hEAAME;AAAN,AAAA,IAAAD,WAAA,AAAA;AAAA,AAAA,QAAAA;KAAA;AAAA,OAAAC,wDAAA,CAAA,UAAA;;;KAAA;AAAA,OAAAA,wDAAA,CAAA,UAAA,MAAA,CAAA,UAAA;;;KAAA;AAAA,OAAAA,wDAAA,CAAA,UAAA,MAAA,CAAA,UAAA,MAAA,CAAA,UAAA;;;KAAA;AAAA,OAAAA,wDAAA,CAAA,UAAA,MAAA,CAAA,UAAA,MAAA,CAAA,UAAA,MAAA,CAAA,UAAA;;;;AAAA,MAAA,KAAAC,MAAA,CAAA,8DAAA,AAAA;;;;;AAAA,AAAA,0DAAA,1DAAMD,qEAMFE;AANJ,AAOG,+CAAA,xCAACF,oCAASE;;;AAPb,AAAA,0DAAA,1DAAMF,qEAQFE,IAAIC;AARR,AASG,sDAAA,\/CAACH,oCAASE,IAAIC;;;AATjB,AAAA,0DAAA,1DAAMH,qEAUFE,IAAIC,OAAOC;AAVf,AAWG,4DAAA,rDAACJ,oCAASE,IAAIC,OAAOC;;;AAXxB,AAAA,0DAAA,1DAAMJ,qEAYFE,IAAIC,OAAOC,MAAMC;AAZrB,AAaG,AAAA,GAAA,QAAAC,qCAAAC,6CAAAC;AAAA;AAAA,AAAA,AAAA;;;;;;;;;;;;;;;;AAAA,AAAA,AAAA,AAAA,AAAAC,4FAAA,WAAAC,OAAAC;;AAAA,AAAA,IAAAD,aAAA;qDADCR,WAAIC,cAAOC,aAAMC,3FAClB,AAAA,YAAAI,0FAAAE;;;AAAA,AAAA,AAAA,AAAAF,mFAAA,WAAAC;;AAAA,AAAA,IAAAA,aAAA;AAAA,AAAAC;;;AAAA,AAAA,AAAA,AAAAF,iFAAAG;;AAAA,AAAA,AAAA,AAAAH,gGAAA,WAEYS;;AAFZ,AAAA,YAAA,RAEYA;AAFZ,AAEe,8DAAA,mFAAA,1IAACC,6NAAgBd,WAAID,qBAAO,EAAI,AAACgB,8BAAIjB,gBAAQ,AAACA,wBAAOD,YAAKC;;;AAFzE,AAAA,AAAA,AAAAM,kGAAA,WAGcS;;AAHd,AAAA,YAAA,RAGcA;AAHd,AAAA;;;AAAA,AAAA,AAAA,AAAAT,8FAAA,WAIUS;;AAJV,AAAA,YAAA,RAIUA;AAJV,AAIa,OAACC,uDAAc,AAACE,kDAAO,AAACC,qEAA0BpB;;;AAJ\/D,AAAA,AAAAO,oDAAA;AAAA,AAAA,AAAA;;;AAAA,AAAA,AAAAA,0DAAA;;AAAA,AAAA,AAAAA,6DAAA;;AAAA,AAAA,AAAAA,kEAAA,WAAAI,mBAAAC,qBAAAC;AAAA,AAAA,OAAAC,2BAAAF,qBAAA;;;AAAA;;;wGADCZ,QAAIC,WAAOC,UAAMC,rIAClBY,gDAAA,6FAAAN;qDADCT,QAAIC,WAAOC,UAAMC,lFAClB,AAAA,YAAAI,8EAAAE;;;AAAAF;;qDADCP,IAAIC,OAAOC,MAAMC,tEAClB,YAAAI,8DAAA;;;AAbH,AAAA,oDAAA,pDAAMT;;AAAN,AAmBA;;;;;;;;;;;;gCAAA,hCAAMuB,wEAWHrB;AAXH,AAYE,OAACiB,uDAAc,AAACK,uDAAYtB","names":["var_args","G__28166","devtools.toolbox\/envelope","js\/Error","obj","header","style","tag","js\/devtools","js\/devtools.toolbox","js\/devtools.toolbox.t_devtools$toolbox28167","devtools.toolbox\/t_devtools$toolbox28167","_28169","meta28168","cljs.core\/PROTOCOL_SENTINEL","this__4374__auto__","writer__4375__auto__","opt__4376__auto__","cljs.core\/-write","devtools.toolbox\/->t_devtools$toolbox28167","_","devtools.formatters.templating\/render-markup","cljs.core\/fn?","devtools.formatters.markup\/<body>","devtools.formatters.markup\/<standard-body-reference>","devtools.toolbox\/force-format","devtools.formatters.markup\/<surrogate>"]}

View file

@ -0,0 +1,248 @@
(ns devtools.util
(:require-macros [devtools.oops :refer [oget ocall oset unchecked-aget unchecked-aset]]
[devtools.compiler :refer [check-compiler-options!]])
(:require [goog.userAgent :as ua]
[clojure.data :as data]
[devtools.version :refer [get-current-version]]
[devtools.context :as context]
[cljs.pprint :as cljs-pprint]
[devtools.prefs :as prefs]))
; cljs.pprint does not play well in advanced mode :optimizations, see https://github.com/binaryage/cljs-devtools/issues/37
(check-compiler-options!)
(def lib-info-style "color:black;font-weight:bold;")
(def reset-style "color:black")
(def advanced-build-explanation-url
"https://github.com/binaryage/cljs-devtools/blob/master/docs/faq.md#why-custom-formatters-do-not-work-for-advanced-builds")
(def ^:dynamic *custom-formatters-active* false)
(def ^:dynamic *console-open* false)
(def ^:dynamic *custom-formatters-warning-reported* false)
; -- general helpers --------------------------------------------------------------------------------------------------------
(defn pprint-str [& args]
(with-out-str
(binding [*print-level* 300]
(apply cljs-pprint/pprint args))))
; -- version helpers --------------------------------------------------------------------------------------------------------
(defn ^:dynamic make-version-info []
(str (get-current-version)))
(defn ^:dynamic make-lib-info []
(str "CLJS DevTools " (make-version-info)))
(defn get-lib-info []
(make-lib-info))
; -- node.js support --------------------------------------------------------------------------------------------------------
(defn ^:dynamic get-node-info [root]
(try
(let [process (oget root "process")
version (oget process "version")
platform (oget process "platform")]
(if (and version platform)
{:version version
:platform platform}))
(catch :default _
nil)))
(defn ^:dynamic get-node-description [node-info]
(str (or (:platform node-info) "?") "/" (or (:version node-info) "?")))
(defn ^:dynamic in-node-context? []
(some? (get-node-info (context/get-root))))
; -- javascript context utils -----------------------------------------------------------------------------------------------
(defn ^:dynamic get-js-context-description []
(if-let [node-info (get-node-info (context/get-root))]
(str "node/" (get-node-description node-info))
(let [user-agent (ua/getUserAgentString)]
(if (empty? user-agent)
"<unknown context>"
user-agent))))
; -- message formatters -----------------------------------------------------------------------------------------------------
(defn ^:dynamic unknown-feature-msg [feature known-features lib-info]
(str "No such feature " feature " is currently available in " lib-info ". "
"The list of supported features is " (pr-str known-features) "."))
(defn ^:dynamic feature-not-available-msg [feature]
(str "Feature " feature " cannot be installed. "
"Unsupported Javascript context: " (get-js-context-description) "."))
(defn ^:dynamic custom-formatters-not-active-msg []
(str "CLJS DevTools: some custom formatters were not rendered.\n"
"https://github.com/binaryage/cljs-devtools/blob/master/docs/faq.md#why-some-custom-formatters-were-not-rendered"))
; -- devtools formatters access ---------------------------------------------------------------------------------------------
(def formatter-key "devtoolsFormatters")
(defn get-formatters-safe []
(let [formatters (unchecked-aget (context/get-root) formatter-key)]
(if (array? formatters) ; TODO: maybe issue a warning if formatters are anything else than array or nil
formatters
#js [])))
(defn set-formatters-safe! [new-formatters]
{:pre [(or (nil? new-formatters) (array? new-formatters))]}
(unchecked-aset (context/get-root) formatter-key (if (empty? new-formatters) nil new-formatters)))
(defn print-config-overrides-if-requested! [msg]
(when (prefs/pref :print-config-overrides)
(let [diff (second (data/diff @prefs/default-config (prefs/get-prefs)))]
(if-not (empty? diff)
(.info (context/get-console) msg (pprint-str diff))))))
; -- custom formatters detection --------------------------------------------------------------------------------------------
(deftype CustomFormattersDetector [])
; https://github.com/binaryage/cljs-devtools/issues/16
(defn make-detector []
(let [detector (CustomFormattersDetector.)]
(unchecked-aset detector "header" (fn [_object _config]
(set! *custom-formatters-active* true)
nil))
(unchecked-aset detector "hasBody" (constantly false))
(unchecked-aset detector "body" (constantly nil))
detector))
(defn install-detector! [detector]
(let [formatters (get-formatters-safe)]
(.push formatters detector)
(set-formatters-safe! formatters)))
(defn uninstall-detector! [detector]
; play it safe here, this method is called asynchronously
; in theory someone else could have installed additional custom formatters
; we have to be careful removing only ours formatters
(let [current-formatters (unchecked-aget (context/get-root) formatter-key)]
(if (array? current-formatters)
(let [new-formatters (.filter current-formatters #(not (= detector %)))]
(set-formatters-safe! new-formatters)))))
(defn check-custom-formatters-active! []
(if (and *console-open* (not *custom-formatters-active*))
(when-not *custom-formatters-warning-reported*
(set! *custom-formatters-warning-reported* true)
(.warn (context/get-console) (custom-formatters-not-active-msg)))))
(defn uninstall-detector-and-check-custom-formatters-active! [detector]
(uninstall-detector! detector)
(check-custom-formatters-active!))
; a variation of http://stackoverflow.com/a/30638226/84283
(defn make-detection-printer []
(let [f (fn [])]
(oset f ["toString"] (fn []
(set! *console-open* true)
(js/setTimeout check-custom-formatters-active! 0) ; console is being opened, schedule another check
""))
f))
(defn wrap-with-custom-formatter-detection! [f]
(if-not (prefs/pref :dont-detect-custom-formatters)
(let [detector (make-detector)]
; this is a tricky business here
; we cannot ask DevTools if custom formatters are available and/or enabled
; we abuse the fact that we are printing info banner upon cljs-devtools installation anyways
; we install a special CustomFormattersDetector formatter which just records calls to it
; but does not format anything, it skips the opportunity to format the output so it has no visual effect
; this way we are able to detect if custom formatters are active and record it in *custom-formatters-active*
; but this technique does not work when printing happens when DevTools console is closed
; we have to add another system for detection of when console opens and re-detect custom formatters with opened console
(install-detector! detector)
(f "%c%s" "color:transparent" (make-detection-printer))
; note that custom formatters are applied asynchronously
; we have to uninstall our detector a bit later
(js/setTimeout (partial uninstall-detector-and-check-custom-formatters-active! detector) 0))
(f)))
; -- banner -----------------------------------------------------------------------------------------------------------------
(defn feature-for-display [installed-features feature]
(let [color (if (some #{feature} installed-features) "color:#0000ff" "color:#ccc")]
["%c%s" [color (str feature)]]))
(defn feature-list-display [installed-features feature-groups]
(let [labels (map (partial feature-for-display installed-features) (:all feature-groups))
* (fn [accum val]
[(str (first accum) " " (first val))
(concat (second accum) (second val))])]
(reduce * (first labels) (rest labels))))
(defn display-banner! [installed-features feature-groups fmt & params]
(let [[fmt-str fmt-params] (feature-list-display installed-features feature-groups)]
(wrap-with-custom-formatter-detection! (fn [add-fmt & add-args]
(let [items (concat [(str fmt " " fmt-str add-fmt)] params fmt-params add-args)
console (context/get-console)]
(.apply (.-info console) console (into-array items)))))))
(defn display-banner-if-needed! [features-to-install feature-groups]
(if-not (prefs/pref :dont-display-banner)
(do
(let [banner (str "Installing %c%s%c and enabling features")]
(display-banner! features-to-install feature-groups banner lib-info-style (get-lib-info) reset-style)))
; detection cannot be performed if we are not allowed to print something to console => assume active
(set! *custom-formatters-active* true)))
; -- unknown features -------------------------------------------------------------------------------------------------------
(defn report-unknown-features! [features known-features]
(let [lib-info (get-lib-info)]
(doseq [feature features]
(if-not (some #{feature} known-features)
(.warn (context/get-console) (unknown-feature-msg feature known-features lib-info))))))
(defn is-known-feature? [known-features feature]
(boolean (some #{feature} known-features)))
(defn convert-legacy-feature [feature]
(case feature
:custom-formatters :formatters
:sanity-hints :hints
feature))
(defn convert-legacy-features [features]
(map convert-legacy-feature features))
(defn sanititze-features! [features feature-groups]
(let [known-features (:all feature-groups)
features (convert-legacy-features features)] ; new feature names were introduced in v0.8
(report-unknown-features! features known-features)
(filter (partial is-known-feature? known-features) features)))
(defn resolve-features! [features-desc feature-groups]
(let [features (cond
(and (keyword? features-desc) (features-desc feature-groups)) (features-desc feature-groups)
(nil? features-desc) (:default feature-groups)
(seqable? features-desc) features-desc
:else [features-desc])]
(sanititze-features! features feature-groups)))
; -- advanced mode check ----------------------------------------------------------------------------------------------------
(defn under-advanced-build? []
(if-not (prefs/pref :disable-advanced-mode-check)
(nil? (oget (context/get-root) "devtools" "version")))) ; we rely on the fact that under advanced mode the namespace will be renamed
(defn display-advanced-build-warning-if-needed! []
(if-not (prefs/pref :dont-display-advanced-build-warning)
(let [banner (str "%cNOT%c installing %c%s%c under advanced build. See " advanced-build-explanation-url ".")]
(.warn (context/get-console) banner "font-weight:bold" reset-style lib-info-style (get-lib-info) reset-style))))
; -- installer --------------------------------------------------------------------------------------------------------------
(defn install-feature! [feature features-to-install available-fn install-fn]
(if (some #{feature} features-to-install)
(if (or (prefs/pref :bypass-availability-checks) (available-fn feature))
(install-fn)
(.warn (context/get-console) (feature-not-available-msg feature)))))

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,515 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.util');
goog.require('cljs.core');
goog.require('goog.userAgent');
goog.require('clojure.data');
goog.require('devtools.version');
goog.require('devtools.context');
goog.require('cljs.pprint');
goog.require('devtools.prefs');
devtools.util.lib_info_style = "color:black;font-weight:bold;";
devtools.util.reset_style = "color:black";
devtools.util.advanced_build_explanation_url = "https://github.com/binaryage/cljs-devtools/blob/master/docs/faq.md#why-custom-formatters-do-not-work-for-advanced-builds";
devtools.util._STAR_custom_formatters_active_STAR_ = false;
devtools.util._STAR_console_open_STAR_ = false;
devtools.util._STAR_custom_formatters_warning_reported_STAR_ = false;
devtools.util.pprint_str = (function devtools$util$pprint_str(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27702 = arguments.length;
var i__4731__auto___27703 = (0);
while(true){
if((i__4731__auto___27703 < len__4730__auto___27702)){
args__4736__auto__.push((arguments[i__4731__auto___27703]));
var G__27704 = (i__4731__auto___27703 + (1));
i__4731__auto___27703 = G__27704;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((0) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((0)),(0),null)):null);
return devtools.util.pprint_str.cljs$core$IFn$_invoke$arity$variadic(argseq__4737__auto__);
});
devtools.util.pprint_str.cljs$core$IFn$_invoke$arity$variadic = (function (args){
var sb__4661__auto__ = (new goog.string.StringBuffer());
var _STAR_print_newline_STAR__orig_val__27696_27705 = cljs.core._STAR_print_newline_STAR_;
var _STAR_print_fn_STAR__orig_val__27697_27706 = cljs.core._STAR_print_fn_STAR_;
var _STAR_print_newline_STAR__temp_val__27698_27707 = true;
var _STAR_print_fn_STAR__temp_val__27699_27708 = ((function (_STAR_print_newline_STAR__orig_val__27696_27705,_STAR_print_fn_STAR__orig_val__27697_27706,_STAR_print_newline_STAR__temp_val__27698_27707,sb__4661__auto__){
return (function (x__4662__auto__){
return sb__4661__auto__.append(x__4662__auto__);
});})(_STAR_print_newline_STAR__orig_val__27696_27705,_STAR_print_fn_STAR__orig_val__27697_27706,_STAR_print_newline_STAR__temp_val__27698_27707,sb__4661__auto__))
;
cljs.core._STAR_print_newline_STAR_ = _STAR_print_newline_STAR__temp_val__27698_27707;
cljs.core._STAR_print_fn_STAR_ = _STAR_print_fn_STAR__temp_val__27699_27708;
try{var _STAR_print_level_STAR__orig_val__27700_27709 = cljs.core._STAR_print_level_STAR_;
var _STAR_print_level_STAR__temp_val__27701_27710 = (300);
cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR__temp_val__27701_27710;
try{cljs.core.apply.call(null,cljs.pprint.pprint,args);
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR__orig_val__27700_27709;
}}finally {cljs.core._STAR_print_fn_STAR_ = _STAR_print_fn_STAR__orig_val__27697_27706;
cljs.core._STAR_print_newline_STAR_ = _STAR_print_newline_STAR__orig_val__27696_27705;
}
return cljs.core.str.cljs$core$IFn$_invoke$arity$1(sb__4661__auto__);
});
devtools.util.pprint_str.cljs$lang$maxFixedArity = (0);
/** @this {Function} */
devtools.util.pprint_str.cljs$lang$applyTo = (function (seq27695){
var self__4718__auto__ = this;
return self__4718__auto__.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq27695));
});
devtools.util.make_version_info = (function devtools$util$make_version_info(){
return "0.9.10";
});
devtools.util.make_lib_info = (function devtools$util$make_lib_info(){
return ["CLJS DevTools ",devtools.util.make_version_info.call(null)].join('');
});
devtools.util.get_lib_info = (function devtools$util$get_lib_info(){
return devtools.util.make_lib_info.call(null);
});
devtools.util.get_node_info = (function devtools$util$get_node_info(root){
try{var process = (root["process"]);
var version = (process["version"]);
var platform = (process["platform"]);
if(cljs.core.truth_((function (){var and__4120__auto__ = version;
if(cljs.core.truth_(and__4120__auto__)){
return platform;
} else {
return and__4120__auto__;
}
})())){
return new cljs.core.PersistentArrayMap(null, 2, [new cljs.core.Keyword(null,"version","version",425292698),version,new cljs.core.Keyword(null,"platform","platform",-1086422114),platform], null);
} else {
return null;
}
}catch (e27711){var _ = e27711;
return null;
}});
devtools.util.get_node_description = (function devtools$util$get_node_description(node_info){
return [cljs.core.str.cljs$core$IFn$_invoke$arity$1((function (){var or__4131__auto__ = new cljs.core.Keyword(null,"platform","platform",-1086422114).cljs$core$IFn$_invoke$arity$1(node_info);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return "?";
}
})()),"/",cljs.core.str.cljs$core$IFn$_invoke$arity$1((function (){var or__4131__auto__ = new cljs.core.Keyword(null,"version","version",425292698).cljs$core$IFn$_invoke$arity$1(node_info);
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return "?";
}
})())].join('');
});
devtools.util.in_node_context_QMARK_ = (function devtools$util$in_node_context_QMARK_(){
return (!((devtools.util.get_node_info.call(null,devtools.context.get_root.call(null)) == null)));
});
devtools.util.get_js_context_description = (function devtools$util$get_js_context_description(){
var temp__5718__auto__ = devtools.util.get_node_info.call(null,devtools.context.get_root.call(null));
if(cljs.core.truth_(temp__5718__auto__)){
var node_info = temp__5718__auto__;
return ["node/",devtools.util.get_node_description.call(null,node_info)].join('');
} else {
var user_agent = goog.userAgent.getUserAgentString();
if(cljs.core.empty_QMARK_.call(null,user_agent)){
return "<unknown context>";
} else {
return user_agent;
}
}
});
devtools.util.unknown_feature_msg = (function devtools$util$unknown_feature_msg(feature,known_features,lib_info){
return ["No such feature ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(feature)," is currently available in ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(lib_info),". ","The list of supported features is ",cljs.core.pr_str.call(null,known_features),"."].join('');
});
devtools.util.feature_not_available_msg = (function devtools$util$feature_not_available_msg(feature){
return ["Feature ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(feature)," cannot be installed. ","Unsupported Javascript context: ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(devtools.util.get_js_context_description.call(null)),"."].join('');
});
devtools.util.custom_formatters_not_active_msg = (function devtools$util$custom_formatters_not_active_msg(){
return ["CLJS DevTools: some custom formatters were not rendered.\n","https://github.com/binaryage/cljs-devtools/blob/master/docs/faq.md#why-some-custom-formatters-were-not-rendered"].join('');
});
devtools.util.formatter_key = "devtoolsFormatters";
devtools.util.get_formatters_safe = (function devtools$util$get_formatters_safe(){
var formatters = (devtools.context.get_root.call(null)[devtools.util.formatter_key]);
if(cljs.core.array_QMARK_.call(null,formatters)){
return formatters;
} else {
return [];
}
});
devtools.util.set_formatters_safe_BANG_ = (function devtools$util$set_formatters_safe_BANG_(new_formatters){
if((((new_formatters == null)) || (cljs.core.array_QMARK_.call(null,new_formatters)))){
} else {
throw (new Error("Assert failed: (or (nil? new-formatters) (array? new-formatters))"));
}
return (devtools.context.get_root.call(null)[devtools.util.formatter_key] = ((cljs.core.empty_QMARK_.call(null,new_formatters))?null:new_formatters));
});
devtools.util.print_config_overrides_if_requested_BANG_ = (function devtools$util$print_config_overrides_if_requested_BANG_(msg){
if(cljs.core.truth_(devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"print-config-overrides","print-config-overrides",-274716965)))){
var diff = cljs.core.second.call(null,clojure.data.diff.call(null,cljs.core.deref.call(null,devtools.prefs.default_config),devtools.prefs.get_prefs.call(null)));
if((!(cljs.core.empty_QMARK_.call(null,diff)))){
return devtools.context.get_console.call(null).info(msg,devtools.util.pprint_str.call(null,diff));
} else {
return null;
}
} else {
return null;
}
});
/**
* @constructor
*/
devtools.util.CustomFormattersDetector = (function (){
});
devtools.util.CustomFormattersDetector.getBasis = (function (){
return cljs.core.PersistentVector.EMPTY;
});
devtools.util.CustomFormattersDetector.cljs$lang$type = true;
devtools.util.CustomFormattersDetector.cljs$lang$ctorStr = "devtools.util/CustomFormattersDetector";
devtools.util.CustomFormattersDetector.cljs$lang$ctorPrWriter = (function (this__4374__auto__,writer__4375__auto__,opt__4376__auto__){
return cljs.core._write.call(null,writer__4375__auto__,"devtools.util/CustomFormattersDetector");
});
/**
* Positional factory function for devtools.util/CustomFormattersDetector.
*/
devtools.util.__GT_CustomFormattersDetector = (function devtools$util$__GT_CustomFormattersDetector(){
return (new devtools.util.CustomFormattersDetector());
});
devtools.util.make_detector = (function devtools$util$make_detector(){
var detector = (new devtools.util.CustomFormattersDetector());
(detector["header"] = ((function (detector){
return (function (_object,_config){
devtools.util._STAR_custom_formatters_active_STAR_ = true;
return null;
});})(detector))
);
(detector["hasBody"] = cljs.core.constantly.call(null,false));
(detector["body"] = cljs.core.constantly.call(null,null));
return detector;
});
devtools.util.install_detector_BANG_ = (function devtools$util$install_detector_BANG_(detector){
var formatters = devtools.util.get_formatters_safe.call(null);
formatters.push(detector);
return devtools.util.set_formatters_safe_BANG_.call(null,formatters);
});
devtools.util.uninstall_detector_BANG_ = (function devtools$util$uninstall_detector_BANG_(detector){
var current_formatters = (devtools.context.get_root.call(null)[devtools.util.formatter_key]);
if(cljs.core.array_QMARK_.call(null,current_formatters)){
var new_formatters = current_formatters.filter(((function (current_formatters){
return (function (p1__27712_SHARP_){
return (!(cljs.core._EQ_.call(null,detector,p1__27712_SHARP_)));
});})(current_formatters))
);
return devtools.util.set_formatters_safe_BANG_.call(null,new_formatters);
} else {
return null;
}
});
devtools.util.check_custom_formatters_active_BANG_ = (function devtools$util$check_custom_formatters_active_BANG_(){
if(((devtools.util._STAR_console_open_STAR_) && ((!(devtools.util._STAR_custom_formatters_active_STAR_))))){
if(devtools.util._STAR_custom_formatters_warning_reported_STAR_){
return null;
} else {
devtools.util._STAR_custom_formatters_warning_reported_STAR_ = true;
return devtools.context.get_console.call(null).warn(devtools.util.custom_formatters_not_active_msg.call(null));
}
} else {
return null;
}
});
devtools.util.uninstall_detector_and_check_custom_formatters_active_BANG_ = (function devtools$util$uninstall_detector_and_check_custom_formatters_active_BANG_(detector){
devtools.util.uninstall_detector_BANG_.call(null,detector);
return devtools.util.check_custom_formatters_active_BANG_.call(null);
});
devtools.util.make_detection_printer = (function devtools$util$make_detection_printer(){
var f = (function (){
return null;
});
var G__27713_27714 = f;
var target__25271__auto___27715 = G__27713_27714;
if(cljs.core.truth_(target__25271__auto___27715)){
} else {
throw (new Error(["Assert failed: ",["unable to locate object path ",null," in ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(G__27713_27714)].join(''),"\n","target__25271__auto__"].join('')));
}
(target__25271__auto___27715["toString"] = ((function (G__27713_27714,target__25271__auto___27715,f){
return (function (){
devtools.util._STAR_console_open_STAR_ = true;
setTimeout(devtools.util.check_custom_formatters_active_BANG_,(0));
return "";
});})(G__27713_27714,target__25271__auto___27715,f))
);
return f;
});
devtools.util.wrap_with_custom_formatter_detection_BANG_ = (function devtools$util$wrap_with_custom_formatter_detection_BANG_(f){
if(cljs.core.not.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"dont-detect-custom-formatters","dont-detect-custom-formatters",-29005804)))){
var detector = devtools.util.make_detector.call(null);
devtools.util.install_detector_BANG_.call(null,detector);
f.call(null,"%c%s","color:transparent",devtools.util.make_detection_printer.call(null));
return setTimeout(cljs.core.partial.call(null,devtools.util.uninstall_detector_and_check_custom_formatters_active_BANG_,detector),(0));
} else {
return f.call(null);
}
});
devtools.util.feature_for_display = (function devtools$util$feature_for_display(installed_features,feature){
var color = (cljs.core.truth_(cljs.core.some.call(null,cljs.core.PersistentHashSet.createAsIfByAssoc([feature]),installed_features))?"color:#0000ff":"color:#ccc");
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, ["%c%s",new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [color,cljs.core.str.cljs$core$IFn$_invoke$arity$1(feature)], null)], null);
});
devtools.util.feature_list_display = (function devtools$util$feature_list_display(installed_features,feature_groups){
var labels = cljs.core.map.call(null,cljs.core.partial.call(null,devtools.util.feature_for_display,installed_features),new cljs.core.Keyword(null,"all","all",892129742).cljs$core$IFn$_invoke$arity$1(feature_groups));
var _STAR_ = ((function (labels){
return (function (accum,val){
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [[cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,accum))," ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(cljs.core.first.call(null,val))].join(''),cljs.core.concat.call(null,cljs.core.second.call(null,accum),cljs.core.second.call(null,val))], null);
});})(labels))
;
return cljs.core.reduce.call(null,_STAR_,cljs.core.first.call(null,labels),cljs.core.rest.call(null,labels));
});
devtools.util.display_banner_BANG_ = (function devtools$util$display_banner_BANG_(var_args){
var args__4736__auto__ = [];
var len__4730__auto___27723 = arguments.length;
var i__4731__auto___27724 = (0);
while(true){
if((i__4731__auto___27724 < len__4730__auto___27723)){
args__4736__auto__.push((arguments[i__4731__auto___27724]));
var G__27725 = (i__4731__auto___27724 + (1));
i__4731__auto___27724 = G__27725;
continue;
} else {
}
break;
}
var argseq__4737__auto__ = ((((3) < args__4736__auto__.length))?(new cljs.core.IndexedSeq(args__4736__auto__.slice((3)),(0),null)):null);
return devtools.util.display_banner_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),(arguments[(2)]),argseq__4737__auto__);
});
devtools.util.display_banner_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (installed_features,feature_groups,fmt,params){
var vec__27720 = devtools.util.feature_list_display.call(null,installed_features,feature_groups);
var fmt_str = cljs.core.nth.call(null,vec__27720,(0),null);
var fmt_params = cljs.core.nth.call(null,vec__27720,(1),null);
return devtools.util.wrap_with_custom_formatter_detection_BANG_.call(null,((function (vec__27720,fmt_str,fmt_params){
return (function() {
var G__27726__delegate = function (add_fmt,add_args){
var items = cljs.core.concat.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [[cljs.core.str.cljs$core$IFn$_invoke$arity$1(fmt)," ",cljs.core.str.cljs$core$IFn$_invoke$arity$1(fmt_str),cljs.core.str.cljs$core$IFn$_invoke$arity$1(add_fmt)].join('')], null),params,fmt_params,add_args);
var console = devtools.context.get_console.call(null);
return console.info.apply(console,cljs.core.into_array.call(null,items));
};
var G__27726 = function (add_fmt,var_args){
var add_args = null;
if (arguments.length > 1) {
var G__27727__i = 0, G__27727__a = new Array(arguments.length - 1);
while (G__27727__i < G__27727__a.length) {G__27727__a[G__27727__i] = arguments[G__27727__i + 1]; ++G__27727__i;}
add_args = new cljs.core.IndexedSeq(G__27727__a,0,null);
}
return G__27726__delegate.call(this,add_fmt,add_args);};
G__27726.cljs$lang$maxFixedArity = 1;
G__27726.cljs$lang$applyTo = (function (arglist__27728){
var add_fmt = cljs.core.first(arglist__27728);
var add_args = cljs.core.rest(arglist__27728);
return G__27726__delegate(add_fmt,add_args);
});
G__27726.cljs$core$IFn$_invoke$arity$variadic = G__27726__delegate;
return G__27726;
})()
;})(vec__27720,fmt_str,fmt_params))
);
});
devtools.util.display_banner_BANG_.cljs$lang$maxFixedArity = (3);
/** @this {Function} */
devtools.util.display_banner_BANG_.cljs$lang$applyTo = (function (seq27716){
var G__27717 = cljs.core.first.call(null,seq27716);
var seq27716__$1 = cljs.core.next.call(null,seq27716);
var G__27718 = cljs.core.first.call(null,seq27716__$1);
var seq27716__$2 = cljs.core.next.call(null,seq27716__$1);
var G__27719 = cljs.core.first.call(null,seq27716__$2);
var seq27716__$3 = cljs.core.next.call(null,seq27716__$2);
var self__4717__auto__ = this;
return self__4717__auto__.cljs$core$IFn$_invoke$arity$variadic(G__27717,G__27718,G__27719,seq27716__$3);
});
devtools.util.display_banner_if_needed_BANG_ = (function devtools$util$display_banner_if_needed_BANG_(features_to_install,feature_groups){
if(cljs.core.not.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"dont-display-banner","dont-display-banner",-1175550370)))){
var banner = "Installing %c%s%c and enabling features";
return devtools.util.display_banner_BANG_.call(null,features_to_install,feature_groups,banner,devtools.util.lib_info_style,devtools.util.get_lib_info.call(null),devtools.util.reset_style);
} else {
return devtools.util._STAR_custom_formatters_active_STAR_ = true;
}
});
devtools.util.report_unknown_features_BANG_ = (function devtools$util$report_unknown_features_BANG_(features,known_features){
var lib_info = devtools.util.get_lib_info.call(null);
var seq__27729 = cljs.core.seq.call(null,features);
var chunk__27730 = null;
var count__27731 = (0);
var i__27732 = (0);
while(true){
if((i__27732 < count__27731)){
var feature = cljs.core._nth.call(null,chunk__27730,i__27732);
if(cljs.core.not.call(null,cljs.core.some.call(null,cljs.core.PersistentHashSet.createAsIfByAssoc([feature]),known_features))){
devtools.context.get_console.call(null).warn(devtools.util.unknown_feature_msg.call(null,feature,known_features,lib_info));
} else {
}
var G__27733 = seq__27729;
var G__27734 = chunk__27730;
var G__27735 = count__27731;
var G__27736 = (i__27732 + (1));
seq__27729 = G__27733;
chunk__27730 = G__27734;
count__27731 = G__27735;
i__27732 = G__27736;
continue;
} else {
var temp__5720__auto__ = cljs.core.seq.call(null,seq__27729);
if(temp__5720__auto__){
var seq__27729__$1 = temp__5720__auto__;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__27729__$1)){
var c__4550__auto__ = cljs.core.chunk_first.call(null,seq__27729__$1);
var G__27737 = cljs.core.chunk_rest.call(null,seq__27729__$1);
var G__27738 = c__4550__auto__;
var G__27739 = cljs.core.count.call(null,c__4550__auto__);
var G__27740 = (0);
seq__27729 = G__27737;
chunk__27730 = G__27738;
count__27731 = G__27739;
i__27732 = G__27740;
continue;
} else {
var feature = cljs.core.first.call(null,seq__27729__$1);
if(cljs.core.not.call(null,cljs.core.some.call(null,cljs.core.PersistentHashSet.createAsIfByAssoc([feature]),known_features))){
devtools.context.get_console.call(null).warn(devtools.util.unknown_feature_msg.call(null,feature,known_features,lib_info));
} else {
}
var G__27741 = cljs.core.next.call(null,seq__27729__$1);
var G__27742 = null;
var G__27743 = (0);
var G__27744 = (0);
seq__27729 = G__27741;
chunk__27730 = G__27742;
count__27731 = G__27743;
i__27732 = G__27744;
continue;
}
} else {
return null;
}
}
break;
}
});
devtools.util.is_known_feature_QMARK_ = (function devtools$util$is_known_feature_QMARK_(known_features,feature){
return cljs.core.boolean$.call(null,cljs.core.some.call(null,cljs.core.PersistentHashSet.createAsIfByAssoc([feature]),known_features));
});
devtools.util.convert_legacy_feature = (function devtools$util$convert_legacy_feature(feature){
var G__27745 = feature;
var G__27745__$1 = (((G__27745 instanceof cljs.core.Keyword))?G__27745.fqn:null);
switch (G__27745__$1) {
case "custom-formatters":
return new cljs.core.Keyword(null,"formatters","formatters",-1875637118);
break;
case "sanity-hints":
return new cljs.core.Keyword(null,"hints","hints",-991113151);
break;
default:
return feature;
}
});
devtools.util.convert_legacy_features = (function devtools$util$convert_legacy_features(features){
return cljs.core.map.call(null,devtools.util.convert_legacy_feature,features);
});
devtools.util.sanititze_features_BANG_ = (function devtools$util$sanititze_features_BANG_(features,feature_groups){
var known_features = new cljs.core.Keyword(null,"all","all",892129742).cljs$core$IFn$_invoke$arity$1(feature_groups);
var features__$1 = devtools.util.convert_legacy_features.call(null,features);
devtools.util.report_unknown_features_BANG_.call(null,features__$1,known_features);
return cljs.core.filter.call(null,cljs.core.partial.call(null,devtools.util.is_known_feature_QMARK_,known_features),features__$1);
});
devtools.util.resolve_features_BANG_ = (function devtools$util$resolve_features_BANG_(features_desc,feature_groups){
var features = (cljs.core.truth_((function (){var and__4120__auto__ = (features_desc instanceof cljs.core.Keyword);
if(and__4120__auto__){
return features_desc.call(null,feature_groups);
} else {
return and__4120__auto__;
}
})())?features_desc.call(null,feature_groups):(((features_desc == null))?new cljs.core.Keyword(null,"default","default",-1987822328).cljs$core$IFn$_invoke$arity$1(feature_groups):((cljs.core.seqable_QMARK_.call(null,features_desc))?features_desc:new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, [features_desc], null)
)));
return devtools.util.sanititze_features_BANG_.call(null,features,feature_groups);
});
devtools.util.under_advanced_build_QMARK_ = (function devtools$util$under_advanced_build_QMARK_(){
if(cljs.core.not.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"disable-advanced-mode-check","disable-advanced-mode-check",-968346539)))){
return ((function (){var temp__5718__auto__ = (devtools.context.get_root.call(null)["devtools"]);
if(cljs.core.truth_(temp__5718__auto__)){
var o27747 = temp__5718__auto__;
return (o27747["version"]);
} else {
return null;
}
})() == null);
} else {
return null;
}
});
devtools.util.display_advanced_build_warning_if_needed_BANG_ = (function devtools$util$display_advanced_build_warning_if_needed_BANG_(){
if(cljs.core.not.call(null,devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"dont-display-advanced-build-warning","dont-display-advanced-build-warning",-91321563)))){
var banner = ["%cNOT%c installing %c%s%c under advanced build. See ",devtools.util.advanced_build_explanation_url,"."].join('');
return devtools.context.get_console.call(null).warn(banner,"font-weight:bold",devtools.util.reset_style,devtools.util.lib_info_style,devtools.util.get_lib_info.call(null),devtools.util.reset_style);
} else {
return null;
}
});
devtools.util.install_feature_BANG_ = (function devtools$util$install_feature_BANG_(feature,features_to_install,available_fn,install_fn){
if(cljs.core.truth_(cljs.core.some.call(null,cljs.core.PersistentHashSet.createAsIfByAssoc([feature]),features_to_install))){
if(cljs.core.truth_((function (){var or__4131__auto__ = devtools.prefs.pref.call(null,new cljs.core.Keyword(null,"bypass-availability-checks","bypass-availability-checks",1934691680));
if(cljs.core.truth_(or__4131__auto__)){
return or__4131__auto__;
} else {
return available_fn.call(null,feature);
}
})())){
return install_fn.call(null);
} else {
return devtools.context.get_console.call(null).warn(devtools.util.feature_not_available_msg.call(null,feature));
}
} else {
return null;
}
});
//# sourceMappingURL=util.js.map?rel=1582812680475

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,7 @@
(ns devtools.version
(:require-macros [devtools.version :refer [get-current-version]]))
(def current-version (get-current-version))
(defn get-current-version []
current-version)

View file

@ -0,0 +1 @@
["^ ","~:rename-macros",["^ "],"~:renames",["^ "],"~:use-macros",["^ ","~$get-current-version","~$devtools.version"],"~:excludes",["~#set",[]],"~:name","^4","~:imports",null,"~:requires",null,"~:cljs.spec/speced-vars",[],"~:uses",null,"~:defs",["^ ","~$current-version",["^ ","^7","~$devtools.version/current-version","~:file","js/compiled/out/devtools/version.cljs","~:line",4,"~:column",1,"~:end-line",4,"~:end-column",21,"~:meta",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/version.cljs","^@",4,"^A",6,"^B",4,"^C",21],"~:tag","~$string"],"^3",["^ ","~:protocol-inline",null,"^D",["^ ","^?","/home/simon/workspace/geocsv-lite/js/compiled/out/devtools/version.cljs","^@",6,"^A",7,"^B",6,"^C",26,"~:arglists",["~#list",["~$quote",["^I",[[]]]]]],"^7","~$devtools.version/get-current-version","^?","js/compiled/out/devtools/version.cljs","^C",26,"~:method-params",["^I",[[]]],"~:protocol-impl",null,"~:arglists-meta",["^I",[null,null]],"^A",1,"~:variadic?",false,"^@",6,"~:ret-tag","^F","^B",6,"~:max-fixed-arity",0,"~:fn-var",true,"^H",["^I",["^J",["^I",[[]]]]]]],"~:cljs.spec/registry-ref",[],"~:require-macros",["^ ","^4","^4"],"~:doc",null]

View file

@ -0,0 +1,9 @@
// Compiled by ClojureScript 1.10.520 {}
goog.provide('devtools.version');
goog.require('cljs.core');
devtools.version.current_version = "0.9.10";
devtools.version.get_current_version = (function devtools$version$get_current_version(){
return devtools.version.current_version;
});
//# sourceMappingURL=version.js.map?rel=1582812679505

View file

@ -0,0 +1 @@
{"version":3,"file":"\/home\/simon\/workspace\/geocsv-lite\/js\/compiled\/out\/devtools\/version.js","sources":["version.cljs?rel=1582812679505"],"lineCount":9,"mappings":";AAAA;;AAGA,AAAKA,mCAAgB;AAErB,uCAAA,vCAAMC;AAAN,AACED","names":["devtools.version\/current-version","devtools.version\/get-current-version"]}