Added compiled JavaScript to repository for GitHub pages

This feels like a mistake...
This commit is contained in:
Simon Brooke 2020-10-20 14:44:11 +01:00
parent 3d5a2fb322
commit dc226b1f25
468 changed files with 212152 additions and 2 deletions

View file

@ -0,0 +1,88 @@
(ns devtools.formatters.budgeting
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]])
(: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,180 @@
// Compiled by ClojureScript 1.9.229 {}
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__41049__auto__ = devtools.formatters.budgeting.over_budget_values;
return goog.object.get(o__41049__auto__,"add").call(o__41049__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__41049__auto__ = devtools.formatters.budgeting.over_budget_values;
return goog.object.get(o__41049__auto__,"delete").call(o__41049__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__41049__auto__ = devtools.formatters.budgeting.over_budget_values;
return goog.object.get(o__41049__auto__,"has").call(o__41049__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(cljs.core.truth_(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 = goog.object.get(data,"config");
var G__41808 = data;
var target__41068__auto__ = G__41808;
if(cljs.core.truth_(target__41068__auto__)){
} else {
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str("unable to locate object path "),cljs.core.str(null),cljs.core.str(" in "),cljs.core.str(G__41808)].join('')),cljs.core.str("\n"),cljs.core.str("target__41068__auto__")].join('')));
}
goog.object.set(target__41068__auto__,cljs.core.last.call(null,new cljs.core.PersistentVector(null, 1, 5, cljs.core.PersistentVector.EMPTY_NODE, ["config"], null)),devtools.formatters.state.set_depth_budget.call(null,config,depth_budget));
return G__41808;
});
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_41817 = (depth_budget - (1));
if(cljs.core.truth_(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_41817);
} else {
var seq__41813_41818 = cljs.core.seq.call(null,json_ml);
var chunk__41814_41819 = null;
var count__41815_41820 = (0);
var i__41816_41821 = (0);
while(true){
if((i__41816_41821 < count__41815_41820)){
var item_41822 = cljs.core._nth.call(null,chunk__41814_41819,i__41816_41821);
devtools$formatters$budgeting$distribute_budget_BANG_.call(null,item_41822,new_depth_budget_41817);
var G__41823 = seq__41813_41818;
var G__41824 = chunk__41814_41819;
var G__41825 = count__41815_41820;
var G__41826 = (i__41816_41821 + (1));
seq__41813_41818 = G__41823;
chunk__41814_41819 = G__41824;
count__41815_41820 = G__41825;
i__41816_41821 = G__41826;
continue;
} else {
var temp__4657__auto___41827 = cljs.core.seq.call(null,seq__41813_41818);
if(temp__4657__auto___41827){
var seq__41813_41828__$1 = temp__4657__auto___41827;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__41813_41828__$1)){
var c__25941__auto___41829 = cljs.core.chunk_first.call(null,seq__41813_41828__$1);
var G__41830 = cljs.core.chunk_rest.call(null,seq__41813_41828__$1);
var G__41831 = c__25941__auto___41829;
var G__41832 = cljs.core.count.call(null,c__25941__auto___41829);
var G__41833 = (0);
seq__41813_41818 = G__41830;
chunk__41814_41819 = G__41831;
count__41815_41820 = G__41832;
i__41816_41821 = G__41833;
continue;
} else {
var item_41834 = cljs.core.first.call(null,seq__41813_41828__$1);
devtools$formatters$budgeting$distribute_budget_BANG_.call(null,item_41834,new_depth_budget_41817);
var G__41835 = cljs.core.next.call(null,seq__41813_41828__$1);
var G__41836 = null;
var G__41837 = (0);
var G__41838 = (0);
seq__41813_41818 = G__41835;
chunk__41814_41819 = G__41836;
count__41815_41820 = G__41837;
i__41816_41821 = G__41838;
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__4655__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__4655__auto__)){
var initial_hierarchy_depth_budget = temp__4655__auto__;
var remaining_depth_budget = (function (){var or__25130__auto__ = devtools.formatters.state.get_depth_budget.call(null);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__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=1603199213223

View file

@ -0,0 +1 @@
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/devtools\/formatters\/budgeting.js","sources":["budgeting.cljs?rel=1603199213224"],"lineCount":180,"mappings":";AAAA;;;;;;AAcA,2DAAA,3DAAKA;AAKL,AAAKC,mDAAmB,EAAI,OAASC,yBAAY,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,AAAAU,gBAAAD,iBAAA,YAAAA,iBAAgCL;;;AAEpC,+DAAA,\/DAAMO,sIAA2BP;AAAjC,AACE,GAAI,AAACC,oCAAUL;AACb,OAACM,iCAAQN,iDAAmB,yBAAA,AAAAO,zBAACK,mDAAMZ,kDAAmBI;;AACtD,IAAAK,mBAAOT;AAAP,AAAA,OAAA,AAAAU,gBAAAD,iBAAA,eAAAA,iBAAmCL;;;AAEvC,6DAAA,7DAAMS,kIAAwBT;AAA9B,AACE,GAAI,AAACC,oCAAUL;AACb,2CAAA,AAAAO,pCAACO,8DAAWd,kDAAmBI;;AAC\/B,IAAAK,mBAAOT;AAAP,AAAA,OAAA,AAAAU,gBAAAD,iBAAA,YAAAA,iBAAgCL;;;AAIpC,wDAAA,xDAAMW,wHAAmBC;AAAzB,AACE,mEAAA,5DAACC,yBAAE,AAACC,0BAAMF;;AAEZ,gDAAA,hDAAMG,wGAAiBH;AAAvB,AACE,GAAI,AAACI,iCAAOJ;AACV,kIAAA,1HAAK,AAACK,0BAAMC,cAAI,AAACC,wBAAIC,8CAAgBR;;AADvC;;;AAIF,gEAAA,hEAAMS,wIAA2BT;AAAjC,AACE,GAAI,AAACI,iCAAOJ;AACV,oBAAI,AAACD,gEAAkBC;AAAvB;;AAEE,OAACU,yBAAKC,8DAA0BX;;;AAHpC;;;AAKF,sEAAA,tEAAMa,oJAAkCC,iBAAiBC;AAAzD,AAAA,GACS,EAAK,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,AAAA1B,qBAAA,LAAMsB;AAFnB,AAGE,IAAAK,WAAML;IAANM,wBAAAD;AAAA,AAAA,oBAAAC;AAAA;AAAA,AAAA,MAAA,KAAAV,MAAA,eAAA,iCAAA,eAAA,+CAAA,oBAAA,sBAAAS,mCAAA,oBAAA;;;AAAA,AAAAE,gBAAAD,sBAAA,AAAAE,yBAAA,mFAAA,kBAAsB,AAACC,qDAAiBL,OAAOL;;AAA\/CM;;AAEJ,wDAAA,xDAAMK,wHAAoB1B,QAAQe;AAAlC,AAAA,GACS,EAAK,gBAAA,fAAMA;AADpB;AAAA,AAAA,MAAA,KAAAH,MAAA;;;AAEE,GAAI,AAACR,iCAAOJ;AACV,IAAM2B,yBAAiB,gBAAA,fAAKZ;AAA5B,AACE,oBAAI,AAAChB,gEAAkBC;AACrB,AAACa,8EAAiCb,QAAQ2B;;AAC1C,IAAAC,mBAAA,AAAAC,wBAAa7B;IAAb8B,qBAAA;IAAAC,qBAAA;IAAAC,iBAAA;;AAAA,AAAA,GAAA,AAAA,CAAAA,iBAAAD;AAAA,iBAAA,AAAAE,yBAAAH,mBAAAE,zDAAQS;AAAR,AAAA,AACE,AAACC,gEAAmBD,WAAKd;;AAD3B,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,yBAAA,AAAAC,gCAAAT;AAAA,AAAA,eAAA,AAAAU,+BAAAV;eAAAQ;eAAA,AAAAG,0BAAAH;eAAA;;;;;;;AAAA,iBAAA,AAAAlC,0BAAA0B,vCAAQa;AAAR,AAAA,AACE,AAACC,gEAAmBD,WAAKd;;AAD3B,eAAA,AAAAa,yBAAAZ;eAAA;eAAA;eAAA;;;;;;;;AAAA;;;;;;AAJN;;AAMA5B;;AAIF,6DAAA,7DAAM2C,kIAAmBvD;AAAzB,AACE,oBAAM,AAACS,qEAAuBT;AAA9B,AACE,AAACO,uEAA0BP;;AAD7B;;AAAA;;;AAIF,+EAAA,\/EAAMwD,sKAA2CxD,MAAMY;AAAvD,AACE,IAAA6C,qBAAwC,2CAAA,3CAACE;AAAzC,AAAA,oBAAAF;AAAA,qCAAAA,jCAASC;AAAT,AACE,IAAME,yBAAuB,iBAAAC,oBAAI,AAACC;AAAL,AAAA,oBAAAD;AAAAA;;AAAuB,yCAAA,jCAAKH;;;IACnDK,QAAM,AAAChD,wDAAgBH;IACvBoD,eAAO,AAACC,wBAAI,AAAC5C,wEAA0BT;IACvCsD,eAAa,EAAIF,cAAOD,MAAM,CAAGA,QAAMpE;AAH7C,AAIE,GAAI,CAAIiE,0BAAuBM;AAC7B,OAAC5B,gEAAmB1B,QAAQgD;;AAC5B,IAAMO,cAAY,AAACC,uDAAc,AAACC,6DAAkBrE;AAApD,AACE,AAACD,oEAAuBC;;AACxBmE;;;AACNvD","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__41049__auto__","goog.object\/get","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","determine-depth","devtools.formatters.budgeting\/has-any-object-reference?","cljs.core\/some","has-any-object-reference?","js\/Error","devtools.formatters.budgeting\/transfer-remaining-depth-budget!","object-reference","depth-budget","data","cljs.core\/second","_","cljs.core\/object?","config","G__41808","target__41068__auto__","goog.object\/set","cljs.core\/last","devtools.formatters.state\/set-depth-budget","devtools.formatters.budgeting\/distribute-budget!","new-depth-budget","seq__41813","cljs.core\/seq","chunk__41814","count__41815","i__41816","cljs.core\/-nth","temp__4657__auto__","cljs.core\/chunked-seq?","c__25941__auto__","cljs.core\/chunk-first","cljs.core\/chunk-rest","cljs.core\/count","cljs.core\/next","item","distribute-budget!","devtools.formatters.budgeting\/was-over-budget?!","devtools.formatters.budgeting\/alter-json-ml-to-fit-in-remaining-budget!","temp__4655__auto__","initial-hierarchy-depth-budget","devtools.formatters.helpers\/pref","remaining-depth-budget","or__25130__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,84 @@
(ns devtools.formatters.core
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]])
(:require [devtools.prefs :refer [pref]]
[devtools.format :refer [IDevtoolsFormat]]
[devtools.protocols :refer [IFormat]]
[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
(.error js/console "CLJS DevTools internal error:" e)
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,218 @@
// Compiled by ClojureScript 1.9.229 {}
goog.provide('devtools.formatters.core');
goog.require('cljs.core');
goog.require('devtools.prefs');
goog.require('devtools.format');
goog.require('devtools.protocols');
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__25118__auto__ = cljs.core.not.call(null,devtools.formatters.state.prevent_recursion_QMARK_.call(null));
if(and__25118__auto__){
var or__25130__auto__ = devtools.formatters.helpers.cljs_value_QMARK_.call(null,value);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
return devtools.formatters.templating.surrogate_QMARK_.call(null,value);
}
} else {
return and__25118__auto__;
}
});
devtools.formatters.core.header_STAR_ = (function devtools$formatters$core$header_STAR_(value){
var json_ml = (cljs.core.truth_(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) || (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 (e41845){var e__41074__auto__ = e41845;
return false;
}})())?devtools.format._header.call(null,value):(cljs.core.truth_((function (){try{if(!((value == null))){
if((false) || (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 (e41847){var e__41074__auto__ = e41847;
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,(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,value))?cljs.core.some_QMARK_.call(null,devtools.formatters.templating.get_surrogate_body.call(null,value)):(cljs.core.truth_((function (){try{if(!((value == null))){
if((false) || (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 (e41853){var e__41074__auto__ = e41853;
return false;
}})())?devtools.format._has_body.call(null,value):(cljs.core.truth_((function (){try{if(!((value == null))){
if((false) || (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 (e41855){var e__41074__auto__ = e41855;
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(cljs.core.truth_(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) || (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 (e41861){var e__41074__auto__ = e41861;
return false;
}})())){
return devtools.format._body.call(null,value);
} else {
if(cljs.core.truth_((function (){try{if(!((value == null))){
if((false) || (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 (e41863){var e__41074__auto__ = e41863;
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_41866 = devtools.formatters.state._STAR_current_state_STAR_;
devtools.formatters.state._STAR_current_state_STAR_ = (function (){var or__25130__auto__ = config;
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
return devtools.formatters.state.get_default_state.call(null);
}
})();
try{return raw_fn.call(null,value);
}finally {devtools.formatters.state._STAR_current_state_STAR_ = _STAR_current_state_STAR_41866;
}});
});
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__41869__delegate = function (args){
try{return cljs.core.apply.call(null,f,args);
}catch (e41868){var e = e41868;
console.error("CLJS DevTools internal error:",e);
return null;
}};
var G__41869 = function (var_args){
var args = null;
if (arguments.length > 0) {
var G__41870__i = 0, G__41870__a = new Array(arguments.length - 0);
while (G__41870__i < G__41870__a.length) {G__41870__a[G__41870__i] = arguments[G__41870__i + 0]; ++G__41870__i;}
args = new cljs.core.IndexedSeq(G__41870__a,0);
}
return G__41869__delegate.call(this,args);};
G__41869.cljs$lang$maxFixedArity = 0;
G__41869.cljs$lang$applyTo = (function (arglist__41871){
var args = cljs.core.seq(arglist__41871);
return G__41869__delegate(args);
});
G__41869.cljs$core$IFn$_invoke$arity$variadic = G__41869__delegate;
return G__41869;
})()
;
});
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__25130__auto__ = devtools.prefs.pref.call(null,pre_handler_key);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
return cljs.core.identity;
}
})();
var post_handler = (function (){var or__25130__auto__ = devtools.prefs.pref.call(null,post_handler_key);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__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=1603199213329

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,115 @@
(ns devtools.formatters.helpers
(:require-macros [devtools.util :refer [oget oset ocall oapply 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-constructor [o]
(oget o "constructor"))
; ---------------------------------------------------------------------------------------------------------------------------
(defn is-prototype? [o]
(identical? (.-prototype (.-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))
(oget f "cljs$lang$type")))
(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 (apply str (take prefix-limit string))
postfix (apply str (take-last postfix-limit string))]
(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 (seqable? 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,235 @@
// Compiled by ClojureScript 1.9.229 {}
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__41363 = devtools.prefs.pref.call(null,v);
v = G__41363;
continue;
} else {
return v;
}
break;
}
});
devtools.formatters.helpers.get_constructor = (function devtools$formatters$helpers$get_constructor(o){
return goog.object.get(o,"constructor");
});
devtools.formatters.helpers.is_prototype_QMARK_ = (function devtools$formatters$helpers$is_prototype_QMARK_(o){
return (o.constructor.prototype === 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__25118__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__25118__auto__){
var and__25118__auto____$1 = !(cljs.core.var_QMARK_.call(null,value));
if(and__25118__auto____$1){
return devtools.munging.cljs_fn_QMARK_.call(null,value);
} else {
return and__25118__auto____$1;
}
} else {
return and__25118__auto__;
}
});
devtools.formatters.helpers.has_formatting_protocol_QMARK_ = (function devtools$formatters$helpers$has_formatting_protocol_QMARK_(value){
var or__25130__auto__ = (function (){try{if(!((value == null))){
if(((value.cljs$lang$protocol_mask$partition0$ & (2147483648))) || (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 (e41376){var e__41074__auto__ = e41376;
return false;
}})();
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
var or__25130__auto____$1 = (function (){try{if(!((value == null))){
if((false) || (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 (e41380){var e__41074__auto__ = e41380;
return false;
}})();
if(cljs.core.truth_(or__25130__auto____$1)){
return or__25130__auto____$1;
} else {
try{if(!((value == null))){
if((false) || (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 (e41382){var e__41074__auto__ = e41382;
return false;
}}
}
});
devtools.formatters.helpers.cljs_type_QMARK_ = (function devtools$formatters$helpers$cljs_type_QMARK_(f){
var and__25118__auto__ = goog.isObject(f);
if(cljs.core.truth_(and__25118__auto__)){
var and__25118__auto____$1 = cljs.core.not.call(null,devtools.formatters.helpers.is_prototype_QMARK_.call(null,f));
if(and__25118__auto____$1){
return goog.object.get(f,"cljs$lang$type");
} else {
return and__25118__auto____$1;
}
} else {
return and__25118__auto__;
}
});
devtools.formatters.helpers.cljs_instance_QMARK_ = (function devtools$formatters$helpers$cljs_instance_QMARK_(value){
var and__25118__auto__ = goog.isObject(value);
if(cljs.core.truth_(and__25118__auto__)){
return devtools.formatters.helpers.cljs_type_QMARK_.call(null,devtools.formatters.helpers.get_constructor.call(null,value));
} else {
return and__25118__auto__;
}
});
devtools.formatters.helpers.cljs_land_value_QMARK_ = (function devtools$formatters$helpers$cljs_land_value_QMARK_(value){
var or__25130__auto__ = devtools.formatters.helpers.cljs_instance_QMARK_.call(null,value);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__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__25118__auto__ = (function (){var or__25130__auto__ = devtools.formatters.helpers.cljs_land_value_QMARK_.call(null,value);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
return devtools.formatters.helpers.cljs_function_QMARK_.call(null,value);
}
})();
if(cljs.core.truth_(and__25118__auto__)){
return (cljs.core.not.call(null,devtools.formatters.helpers.is_prototype_QMARK_.call(null,value))) && (cljs.core.not.call(null,devtools.formatters.helpers.is_js_symbol_QMARK_.call(null,value)));
} else {
return and__25118__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__41387 = devtools.munging.parse_constructor_info.call(null,constructor_fn);
var ns = cljs.core.nth.call(null,vec__41387,(0),null);
var name = cljs.core.nth.call(null,vec__41387,(1),null);
var fully_qualified_type_name = [cljs.core.str(ns),cljs.core.str("/"),cljs.core.str(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__25118__auto__ = devtools.formatters.helpers.cljs_instance_QMARK_.call(null,value);
if(cljs.core.truth_(and__25118__auto__)){
return cljs.core.not.call(null,devtools.formatters.helpers.instance_of_a_well_known_type_QMARK_.call(null,value));
} else {
return and__25118__auto__;
}
});
devtools.formatters.helpers.directly_printable_QMARK_ = (function devtools$formatters$helpers$directly_printable_QMARK_(value){
var or__25130__auto__ = typeof value === 'string';
if(or__25130__auto__){
return or__25130__auto__;
} else {
var or__25130__auto____$1 = typeof value === 'number';
if(or__25130__auto____$1){
return or__25130__auto____$1;
} else {
return 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__41390_SHARP_){
return cljs.core._EQ_.call(null,devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"more-marker","more-marker",-14717935)),p1__41390_SHARP_);
}),template);
});
devtools.formatters.helpers.abbreviate_long_string = (function devtools$formatters$helpers$abbreviate_long_string(string,marker,prefix_limit,postfix_limit){
var prefix = cljs.core.apply.call(null,cljs.core.str,cljs.core.take.call(null,prefix_limit,string));
var postfix = cljs.core.apply.call(null,cljs.core.str,cljs.core.take_last.call(null,postfix_limit,string));
return [cljs.core.str(prefix),cljs.core.str(marker),cljs.core.str(postfix)].join('');
});
devtools.formatters.helpers.get_more_marker = (function devtools$formatters$helpers$get_more_marker(more_count){
return [cljs.core.str(devtools.formatters.helpers.pref.call(null,new cljs.core.Keyword(null,"plus-symbol","plus-symbol",-1984915189))),cljs.core.str(more_count),cljs.core.str(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(args_open_symbol),cljs.core.str(arity),cljs.core.str(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,goog.object.get(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(cljs.core.seqable_QMARK_.call(null,obj)){
var temp__4655__auto__ = devtools.formatters.helpers.pref.call(null,(cljs.core.truth_(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__4655__auto__)){
var min_count = temp__4655__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__4655__auto__ = devtools.formatters.helpers.pref.call(null,pref_key);
if(cljs.core.truth_(temp__4655__auto__)){
var render_pref = temp__4655__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=1603199212173

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1,452 @@
(ns devtools.formatters.markup
(:require-macros [devtools.util :refer [oget oset ocall oapply safe-call]]
[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 [:meta-body-tag (<preview> metadata)]
header [:meta-header-tag "meta"]]
[:meta-reference-tag (<reference-surrogate> metadata header body)]))
(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.util :refer [oget oset ocall oapply 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,292 @@
// Compiled by ClojureScript 1.9.229 {}
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__26212__auto__ = [];
var len__26205__auto___41404 = arguments.length;
var i__26206__auto___41405 = (0);
while(true){
if((i__26206__auto___41405 < len__26205__auto___41404)){
args__26212__auto__.push((arguments[i__26206__auto___41405]));
var G__41406 = (i__26206__auto___41405 + (1));
i__26206__auto___41405 = G__41406;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((2) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((2)),(0),null)):null);
return devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__26213__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([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str("missing markup method in markup-db: "),cljs.core.str(fn_key)].join('')),cljs.core.str("\n"),cljs.core.str("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);
devtools.formatters.printing.build_markup.cljs$lang$applyTo = (function (seq41401){
var G__41402 = cljs.core.first.call(null,seq41401);
var seq41401__$1 = cljs.core.next.call(null,seq41401);
var G__41403 = cljs.core.first.call(null,seq41401__$1);
var seq41401__$2 = cljs.core.next.call(null,seq41401__$1);
return devtools.formatters.printing.build_markup.cljs$core$IFn$_invoke$arity$variadic(G__41402,G__41403,seq41401__$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__25130__auto__ = devtools.formatters.helpers.directly_printable_QMARK_.call(null,value);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__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__25736__auto__,writer__25737__auto__,opt__25738__auto__){
return cljs.core._write.call(null,writer__25737__auto__,"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__4655__auto__ = cljs.core.first.call(null,cljs.core.first.call(null,group));
if(cljs.core.truth_(temp__4655__auto__)){
var tag = temp__4655__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__25118__auto__ = cljs.core.not.call(null,devtools.formatters.printing.already_reference_QMARK_.call(null,group));
if(and__25118__auto__){
var or__25130__auto__ = devtools.formatters.helpers.expandable_QMARK_.call(null,obj);
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
return devtools.formatters.helpers.abbreviated_QMARK_.call(null,group);
}
} else {
return and__25118__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__41407_SHARP_){
return cljs.core.some_QMARK_.call(null,cljs.core.meta.call(null,p1__41407_SHARP_));
})))){
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(obj)].join(''),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__41416 = opts;
var map__41416__$1 = ((((!((map__41416 == null)))?((((map__41416.cljs$lang$protocol_mask$partition0$ & (64))) || (map__41416.cljs$core$ISeq$))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__41416):map__41416);
var markup_db = cljs.core.get.call(null,map__41416__$1,new cljs.core.Keyword(null,"markup-db","markup-db",812838734));
if(cljs.core.truth_((function (){var or__25130__auto__ = (function (){try{if(!((obj == null))){
if((false) || (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 (e41420){var e__41074__auto__ = e41420;
return false;
}})();
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
try{if(!((obj == null))){
if((false) || (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 (e41422){var e__41074__auto__ = e41422;
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__4655__auto__ = devtools.formatters.printing.build_markup.call(null,markup_db,new cljs.core.Keyword(null,"atomic","atomic",-120459460),obj);
if(cljs.core.truth_(temp__4655__auto__)){
var atomic_markup = temp__4655__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_41427 = devtools.formatters.state._STAR_current_state_STAR_;
devtools.formatters.state._STAR_current_state_STAR_ = devtools.formatters.state.get_current_state.call(null);
try{var map__41428 = opts;
var map__41428__$1 = ((((!((map__41428 == null)))?((((map__41428.cljs$lang$protocol_mask$partition0$ & (64))) || (map__41428.cljs$core$ISeq$))?true:false):false))?cljs.core.apply.call(null,cljs.core.hash_map,map__41428):map__41428);
var markup_db = cljs.core.get.call(null,map__41428__$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_41427;
}});
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__4655__auto___41433 = devtools.formatters.state.get_managed_print_level.call(null);
if(cljs.core.truth_(temp__4655__auto___41433)){
var managed_print_level_41434 = temp__4655__auto___41433;
var _STAR_print_level_STAR_41432_41435 = cljs.core._STAR_print_level_STAR_;
cljs.core._STAR_print_level_STAR_ = managed_print_level_41434;
try{devtools.formatters.state.update_current_state_BANG_.call(null,((function (_STAR_print_level_STAR_41432_41435,managed_print_level_41434,temp__4655__auto___41433,writer,opts,job_fn){
return (function (p1__41430_SHARP_){
return devtools.formatters.state.set_managed_print_level.call(null,p1__41430_SHARP_,null);
});})(_STAR_print_level_STAR_41432_41435,managed_print_level_41434,temp__4655__auto___41433,writer,opts,job_fn))
);
job_fn.call(null);
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR_41432_41435;
}} 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=1603199212398

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,104 @@
// Compiled by ClojureScript 1.9.229 {}
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 cljs.core.some_QMARK_.call(null,devtools.formatters.state._STAR_current_state_STAR_);
});
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(cljs.core.truth_(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__26212__auto__ = [];
var len__26205__auto___41395 = arguments.length;
var i__26206__auto___41396 = (0);
while(true){
if((i__26206__auto___41396 < len__26205__auto___41395)){
args__26212__auto__.push((arguments[i__26206__auto___41396]));
var G__41397 = (i__26206__auto___41396 + (1));
i__26206__auto___41396 = G__41397;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
return devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__auto__);
});
devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic = (function (f,args){
if(cljs.core.truth_(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);
devtools.formatters.state.update_current_state_BANG_.cljs$lang$applyTo = (function (seq41393){
var G__41394 = cljs.core.first.call(null,seq41393);
var seq41393__$1 = cljs.core.next.call(null,seq41393);
return devtools.formatters.state.update_current_state_BANG_.cljs$core$IFn$_invoke$arity$variadic(G__41394,seq41393__$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__41398_SHARP_){
return (p1__41398_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(cljs.core.some_QMARK_.call(null,val)){
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(cljs.core.some_QMARK_.call(null,val)){
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(cljs.core.some_QMARK_.call(null,val)){
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=1603199212244

View file

@ -0,0 +1 @@
{"version":3,"file":"\/Users\/simon\/workspace\/swinging-needle-meter\/docs\/js\/compiled\/out\/devtools\/formatters\/state.js","sources":["state.cljs?rel=1603199212244"],"lineCount":104,"mappings":";AAAA;;AAiBA,sDAAA,tDAAeA;AAEf,uDAAA,vDAAMC;AAAN,AACE,OAACC,gCAAMF;;AAET,8CAAA,9CAAMG;AAAN,AAAA;;AAGA,8CAAA,9CAAME;AAAN,AAAA,oBACS,AAACJ;AADV;AAAA,AAAA,MAAA,KAAAG,MAAA;;;AAEEJ;;AAEF,AAAA,uDAAA,+DAAAM,tHAAMM;AAAN,AAAA,IAAAL,sBAAA;AAAA,AAAA,IAAAC,2BAAA,AAAA;AAAA,AAAA,IAAAC,yBAAA;;AAAA,AAAA,GAAA,CAAAA,yBAAAD;AAAA,AAAA,AAAAD,yBAAA,CAAA,UAAAE;;AAAA,eAAA,CAAAA,yBAAA;;;;AAAA;;;;AAAA,IAAAC,wBAAA,EAAA,CAAA,MAAA,AAAAH,6BAAA,AAAA,KAAAI,qBAAA,AAAAJ,0BAAA,KAAA,IAAA,OAAA;AAAA,AAAA,OAAAK,0FAAA,CAAA,UAAA,MAAAF;;;AAAA,AAAA,AAAA,AAAAE,4FAAA,WAA6BK,EAAIC;AAAjC,AAAA,oBACS,AAACjB;AADV;AAAA,AAAA,MAAA,KAAAG,MAAA;;;AAEE,OAAMJ,sDAAgB,AAACmB,0BAAMF,EAAEjB,oDAAgBkB;;;AAFjD,AAAA,AAAAN,+EAAA;;AAAA,AAAA,AAAAA,yEAAA,WAAAC;AAAA,AAAA,IAAAC,WAAA,AAAAC,0BAAAF;IAAAA,eAAA,AAAAG,yBAAAH;AAAA,AAAA,OAAAD,0FAAAE,SAAAD;;;AAAA,AAMA,iEAAA,jEAAMO,0IAAiCC;AAAvC,AACE,uFAAA,hFAACT,+DAAsBU,4EAAgBC,eAAKF;;AAE9C,gDAAA,hDAAMG;AAAN,AACE,OAAA,yFAAU,AAACnB;;AAEb,+CAAA,\/CAAMoB,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,AAACzB;;AAEhC,kDAAA,lDAAM0B,4GAAuBC,MAAMC;AAAnC,AACE,GAAI,AAAC\/B,gCAAM+B;AACT,uCAAA,hCAACC,0BAAMF,sFAAyBC;;AAChC,wCAAA,jCAACE,2BAAOH;;;AAEZ,oDAAA,pDAAMI;AAAN,AACE,OAAA,iHAAsB,AAAC\/B;;AAEzB,oDAAA,pDAAMgC,gHAAyBL,MAAMC;AAArC,AACE,GAAI,AAAC\/B,gCAAM+B;AACT,uCAAA,hCAACC,0BAAMF,yFAA2BC;;AAClC,wCAAA,jCAACE,2BAAOH;;;AAEZ,6CAAA,7CAAMM;AAAN,AACE,OAAA,mGAAe,AAACjC;;AAElB,6CAAA,7CAAMkC,kGAAkBP,MAAMC;AAA9B,AACE,GAAI,AAAC\/B,gCAAM+B;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?","cljs.core\/some?","devtools.formatters.state\/get-default-state","js\/Error","devtools.formatters.state\/get-current-state","var_args","args__26212__auto__","len__26205__auto__","i__26206__auto__","argseq__26213__auto__","cljs.core\/IndexedSeq","devtools.formatters.state\/update-current-state!","seq41393","G__41394","cljs.core\/first","cljs.core\/next","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__41398#","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,214 @@
(ns devtools.formatters.templating
(:require [cljs.pprint]
[clojure.walk :refer [prewalk]]
[devtools.util :refer-macros [oget oset ocall oapply safe-call]]
[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)
(= (aget value 0) "object")))
; ---------------------------------------------------------------------------------------------------------------------------
(defn make-group [& items]
(let [group (mark-as-group! #js [])]
(doseq [item items]
(if (some? item)
(if (coll? item)
(.apply (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 (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 pprint-str [markup]
(with-out-str
(binding [*print-level* 300]
(cljs.pprint/pprint markup))))
(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,681 @@
// Compiled by ClojureScript 1.9.229 {}
goog.provide('devtools.formatters.templating');
goog.require('cljs.core');
goog.require('cljs.pprint');
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 x41457_41458 = value;
x41457_41458.devtools$protocols$IGroup$ = true;
return value;
});
devtools.formatters.templating.group_QMARK_ = (function devtools$formatters$templating$group_QMARK_(value){
if(!((value == null))){
if((false) || (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 x41462_41463 = value;
x41462_41463.devtools$protocols$ITemplate$ = true;
return value;
});
devtools.formatters.templating.template_QMARK_ = (function devtools$formatters$templating$template_QMARK_(value){
if(!((value == null))){
if((false) || (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 x41467_41468 = value;
x41467_41468.devtools$protocols$ISurrogate$ = true;
return value;
});
devtools.formatters.templating.surrogate_QMARK_ = (function devtools$formatters$templating$surrogate_QMARK_(value){
if(!((value == null))){
if((false) || (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){
var and__25118__auto__ = devtools.formatters.templating.group_QMARK_.call(null,value);
if(cljs.core.truth_(and__25118__auto__)){
return cljs.core._EQ_.call(null,(value[(0)]),"object");
} else {
return and__25118__auto__;
}
});
devtools.formatters.templating.make_group = (function devtools$formatters$templating$make_group(var_args){
var args__26212__auto__ = [];
var len__26205__auto___41476 = arguments.length;
var i__26206__auto___41477 = (0);
while(true){
if((i__26206__auto___41477 < len__26205__auto___41476)){
args__26212__auto__.push((arguments[i__26206__auto___41477]));
var G__41478 = (i__26206__auto___41477 + (1));
i__26206__auto___41477 = G__41478;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((0) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((0)),(0),null)):null);
return devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic(argseq__26213__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__41472_41479 = cljs.core.seq.call(null,items);
var chunk__41473_41480 = null;
var count__41474_41481 = (0);
var i__41475_41482 = (0);
while(true){
if((i__41475_41482 < count__41474_41481)){
var item_41483 = cljs.core._nth.call(null,chunk__41473_41480,i__41475_41482);
if(cljs.core.some_QMARK_.call(null,item_41483)){
if(cljs.core.coll_QMARK_.call(null,item_41483)){
(group["push"]).apply(group,devtools.formatters.templating.mark_as_group_BANG_.call(null,cljs.core.into_array.call(null,item_41483)));
} else {
group.push(devtools.formatters.helpers.pref.call(null,item_41483));
}
} else {
}
var G__41484 = seq__41472_41479;
var G__41485 = chunk__41473_41480;
var G__41486 = count__41474_41481;
var G__41487 = (i__41475_41482 + (1));
seq__41472_41479 = G__41484;
chunk__41473_41480 = G__41485;
count__41474_41481 = G__41486;
i__41475_41482 = G__41487;
continue;
} else {
var temp__4657__auto___41488 = cljs.core.seq.call(null,seq__41472_41479);
if(temp__4657__auto___41488){
var seq__41472_41489__$1 = temp__4657__auto___41488;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__41472_41489__$1)){
var c__25941__auto___41490 = cljs.core.chunk_first.call(null,seq__41472_41489__$1);
var G__41491 = cljs.core.chunk_rest.call(null,seq__41472_41489__$1);
var G__41492 = c__25941__auto___41490;
var G__41493 = cljs.core.count.call(null,c__25941__auto___41490);
var G__41494 = (0);
seq__41472_41479 = G__41491;
chunk__41473_41480 = G__41492;
count__41474_41481 = G__41493;
i__41475_41482 = G__41494;
continue;
} else {
var item_41495 = cljs.core.first.call(null,seq__41472_41489__$1);
if(cljs.core.some_QMARK_.call(null,item_41495)){
if(cljs.core.coll_QMARK_.call(null,item_41495)){
(group["push"]).apply(group,devtools.formatters.templating.mark_as_group_BANG_.call(null,cljs.core.into_array.call(null,item_41495)));
} else {
group.push(devtools.formatters.helpers.pref.call(null,item_41495));
}
} else {
}
var G__41496 = cljs.core.next.call(null,seq__41472_41489__$1);
var G__41497 = null;
var G__41498 = (0);
var G__41499 = (0);
seq__41472_41479 = G__41496;
chunk__41473_41480 = G__41497;
count__41474_41481 = G__41498;
i__41475_41482 = G__41499;
continue;
}
} else {
}
}
break;
}
return group;
});
devtools.formatters.templating.make_group.cljs$lang$maxFixedArity = (0);
devtools.formatters.templating.make_group.cljs$lang$applyTo = (function (seq41471){
return devtools.formatters.templating.make_group.cljs$core$IFn$_invoke$arity$variadic(cljs.core.seq.call(null,seq41471));
});
devtools.formatters.templating.make_template = (function devtools$formatters$templating$make_template(var_args){
var args__26212__auto__ = [];
var len__26205__auto___41507 = arguments.length;
var i__26206__auto___41508 = (0);
while(true){
if((i__26206__auto___41508 < len__26205__auto___41507)){
args__26212__auto__.push((arguments[i__26206__auto___41508]));
var G__41509 = (i__26206__auto___41508 + (1));
i__26206__auto___41508 = G__41509;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((2) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((2)),(0),null)):null);
return devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),(arguments[(1)]),argseq__26213__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__41503_41510 = cljs.core.seq.call(null,children);
var chunk__41504_41511 = null;
var count__41505_41512 = (0);
var i__41506_41513 = (0);
while(true){
if((i__41506_41513 < count__41505_41512)){
var child_41514 = cljs.core._nth.call(null,chunk__41504_41511,i__41506_41513);
if(cljs.core.some_QMARK_.call(null,child_41514)){
if(cljs.core.coll_QMARK_.call(null,child_41514)){
(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_41514))));
} else {
var temp__4655__auto___41515 = devtools.formatters.helpers.pref.call(null,child_41514);
if(cljs.core.truth_(temp__4655__auto___41515)){
var child_value_41516 = temp__4655__auto___41515;
template.push(child_value_41516);
} else {
}
}
} else {
}
var G__41517 = seq__41503_41510;
var G__41518 = chunk__41504_41511;
var G__41519 = count__41505_41512;
var G__41520 = (i__41506_41513 + (1));
seq__41503_41510 = G__41517;
chunk__41504_41511 = G__41518;
count__41505_41512 = G__41519;
i__41506_41513 = G__41520;
continue;
} else {
var temp__4657__auto___41521 = cljs.core.seq.call(null,seq__41503_41510);
if(temp__4657__auto___41521){
var seq__41503_41522__$1 = temp__4657__auto___41521;
if(cljs.core.chunked_seq_QMARK_.call(null,seq__41503_41522__$1)){
var c__25941__auto___41523 = cljs.core.chunk_first.call(null,seq__41503_41522__$1);
var G__41524 = cljs.core.chunk_rest.call(null,seq__41503_41522__$1);
var G__41525 = c__25941__auto___41523;
var G__41526 = cljs.core.count.call(null,c__25941__auto___41523);
var G__41527 = (0);
seq__41503_41510 = G__41524;
chunk__41504_41511 = G__41525;
count__41505_41512 = G__41526;
i__41506_41513 = G__41527;
continue;
} else {
var child_41528 = cljs.core.first.call(null,seq__41503_41522__$1);
if(cljs.core.some_QMARK_.call(null,child_41528)){
if(cljs.core.coll_QMARK_.call(null,child_41528)){
(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_41528))));
} else {
var temp__4655__auto___41529 = devtools.formatters.helpers.pref.call(null,child_41528);
if(cljs.core.truth_(temp__4655__auto___41529)){
var child_value_41530 = temp__4655__auto___41529;
template.push(child_value_41530);
} else {
}
}
} else {
}
var G__41531 = cljs.core.next.call(null,seq__41503_41522__$1);
var G__41532 = null;
var G__41533 = (0);
var G__41534 = (0);
seq__41503_41510 = G__41531;
chunk__41504_41511 = G__41532;
count__41505_41512 = G__41533;
i__41506_41513 = G__41534;
continue;
}
} else {
}
}
break;
}
return template;
});
devtools.formatters.templating.make_template.cljs$lang$maxFixedArity = (2);
devtools.formatters.templating.make_template.cljs$lang$applyTo = (function (seq41500){
var G__41501 = cljs.core.first.call(null,seq41500);
var seq41500__$1 = cljs.core.next.call(null,seq41500);
var G__41502 = cljs.core.first.call(null,seq41500__$1);
var seq41500__$2 = cljs.core.next.call(null,seq41500__$1);
return devtools.formatters.templating.make_template.cljs$core$IFn$_invoke$arity$variadic(G__41501,G__41502,seq41500__$2);
});
devtools.formatters.templating.concat_templates_BANG_ = (function devtools$formatters$templating$concat_templates_BANG_(var_args){
var args__26212__auto__ = [];
var len__26205__auto___41537 = arguments.length;
var i__26206__auto___41538 = (0);
while(true){
if((i__26206__auto___41538 < len__26205__auto___41537)){
args__26212__auto__.push((arguments[i__26206__auto___41538]));
var G__41539 = (i__26206__auto___41538 + (1));
i__26206__auto___41538 = G__41539;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
return devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__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,goog.object.get(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);
devtools.formatters.templating.concat_templates_BANG_.cljs$lang$applyTo = (function (seq41535){
var G__41536 = cljs.core.first.call(null,seq41535);
var seq41535__$1 = cljs.core.next.call(null,seq41535);
return devtools.formatters.templating.concat_templates_BANG_.cljs$core$IFn$_invoke$arity$variadic(G__41536,seq41535__$1);
});
devtools.formatters.templating.extend_template_BANG_ = (function devtools$formatters$templating$extend_template_BANG_(var_args){
var args__26212__auto__ = [];
var len__26205__auto___41542 = arguments.length;
var i__26206__auto___41543 = (0);
while(true){
if((i__26206__auto___41543 < len__26205__auto___41542)){
args__26212__auto__.push((arguments[i__26206__auto___41543]));
var G__41544 = (i__26206__auto___41543 + (1));
i__26206__auto___41543 = G__41544;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
return devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__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);
devtools.formatters.templating.extend_template_BANG_.cljs$lang$applyTo = (function (seq41540){
var G__41541 = cljs.core.first.call(null,seq41540);
var seq41540__$1 = cljs.core.next.call(null,seq41540);
return devtools.formatters.templating.extend_template_BANG_.cljs$core$IFn$_invoke$arity$variadic(G__41541,seq41540__$1);
});
devtools.formatters.templating.make_surrogate = (function devtools$formatters$templating$make_surrogate(var_args){
var args41545 = [];
var len__26205__auto___41550 = arguments.length;
var i__26206__auto___41551 = (0);
while(true){
if((i__26206__auto___41551 < len__26205__auto___41550)){
args41545.push((arguments[i__26206__auto___41551]));
var G__41552 = (i__26206__auto___41551 + (1));
i__26206__auto___41551 = G__41552;
continue;
} else {
}
break;
}
var G__41547 = args41545.length;
switch (G__41547) {
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([cljs.core.str("Invalid arity: "),cljs.core.str(args41545.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 obj41549 = {"target":object,"header":header,"body":body,"startIndex":(function (){var or__25130__auto__ = start_index;
if(cljs.core.truth_(or__25130__auto__)){
return or__25130__auto__;
} else {
return (0);
}
})()};
return obj41549;
})());
});
devtools.formatters.templating.make_surrogate.cljs$lang$maxFixedArity = 4;
devtools.formatters.templating.get_surrogate_target = (function devtools$formatters$templating$get_surrogate_target(surrogate){
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return goog.object.get(surrogate,"target");
});
devtools.formatters.templating.get_surrogate_header = (function devtools$formatters$templating$get_surrogate_header(surrogate){
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return goog.object.get(surrogate,"header");
});
devtools.formatters.templating.get_surrogate_body = (function devtools$formatters$templating$get_surrogate_body(surrogate){
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return goog.object.get(surrogate,"body");
});
devtools.formatters.templating.get_surrogate_start_index = (function devtools$formatters$templating$get_surrogate_start_index(surrogate){
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,surrogate))){
} else {
throw (new Error("Assert failed: (surrogate? surrogate)"));
}
return goog.object.get(surrogate,"startIndex");
});
devtools.formatters.templating.make_reference = (function devtools$formatters$templating$make_reference(var_args){
var args__26212__auto__ = [];
var len__26205__auto___41560 = arguments.length;
var i__26206__auto___41561 = (0);
while(true){
if((i__26206__auto___41561 < len__26205__auto___41560)){
args__26212__auto__.push((arguments[i__26206__auto___41561]));
var G__41562 = (i__26206__auto___41561 + (1));
i__26206__auto___41561 = G__41562;
continue;
} else {
}
break;
}
var argseq__26213__auto__ = ((((1) < args__26212__auto__.length))?(new cljs.core.IndexedSeq(args__26212__auto__.slice((1)),(0),null)):null);
return devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic((arguments[(0)]),argseq__26213__auto__);
});
devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic = (function (object,p__41556){
var vec__41557 = p__41556;
var state_override_fn = cljs.core.nth.call(null,vec__41557,(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 = ((cljs.core.some_QMARK_.call(null,state_override_fn))?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);
devtools.formatters.templating.make_reference.cljs$lang$applyTo = (function (seq41554){
var G__41555 = cljs.core.first.call(null,seq41554);
var seq41554__$1 = cljs.core.next.call(null,seq41554);
return devtools.formatters.templating.make_reference.cljs$core$IFn$_invoke$arity$variadic(G__41555,seq41554__$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.pprint_str = (function devtools$formatters$templating$pprint_str(markup){
var sb__26116__auto__ = (new goog.string.StringBuffer());
var _STAR_print_newline_STAR_41566_41569 = cljs.core._STAR_print_newline_STAR_;
var _STAR_print_fn_STAR_41567_41570 = cljs.core._STAR_print_fn_STAR_;
cljs.core._STAR_print_newline_STAR_ = true;
cljs.core._STAR_print_fn_STAR_ = ((function (_STAR_print_newline_STAR_41566_41569,_STAR_print_fn_STAR_41567_41570,sb__26116__auto__){
return (function (x__26117__auto__){
return sb__26116__auto__.append(x__26117__auto__);
});})(_STAR_print_newline_STAR_41566_41569,_STAR_print_fn_STAR_41567_41570,sb__26116__auto__))
;
try{var _STAR_print_level_STAR_41568_41571 = cljs.core._STAR_print_level_STAR_;
cljs.core._STAR_print_level_STAR_ = (300);
try{cljs.pprint.pprint.call(null,markup);
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR_41568_41571;
}}finally {cljs.core._STAR_print_fn_STAR_ = _STAR_print_fn_STAR_41567_41570;
cljs.core._STAR_print_newline_STAR_ = _STAR_print_newline_STAR_41566_41569;
}
return [cljs.core.str(sb__26116__auto__)].join('');
});
devtools.formatters.templating.print_preview = (function devtools$formatters$templating$print_preview(markup){
var _STAR_print_level_STAR_41573 = cljs.core._STAR_print_level_STAR_;
cljs.core._STAR_print_level_STAR_ = (1);
try{return cljs.core.pr_str.call(null,markup);
}finally {cljs.core._STAR_print_level_STAR_ = _STAR_print_level_STAR_41573;
}});
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.formatters.templating.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.formatters.templating.pprint_str.call(null,path);
});
devtools.formatters.templating.assert_markup_error = (function devtools$formatters$templating$assert_markup_error(msg){
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str(msg),cljs.core.str("\n"),cljs.core.str("Render path: "),cljs.core.str(devtools.formatters.templating.pprint_render_path.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_)),cljs.core.str("\n"),cljs.core.str("Render stack:\n"),cljs.core.str(devtools.formatters.templating.pprint_render_stack.call(null,devtools.formatters.templating._STAR_current_render_stack_STAR_))].join('')),cljs.core.str("\n"),cljs.core.str("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__41575 = name;
switch (G__41575) {
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 = (cljs.core.truth_(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,[cljs.core.str("no matching special tag name: '"),cljs.core.str(name),cljs.core.str("'")].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__41580 = tag;
var html_tag = cljs.core.nth.call(null,vec__41580,(0),null);
var style = cljs.core.nth.call(null,vec__41580,(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_41584 = devtools.formatters.templating._STAR_current_render_path_STAR_;
devtools.formatters.templating._STAR_current_render_path_STAR_ = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_,cljs.core.first.call(null,markup));
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,[cljs.core.str("invalid json-ml markup at "),cljs.core.str(devtools.formatters.templating.print_preview.call(null,markup)),cljs.core.str(":")].join(''));
}
}
}finally {devtools.formatters.templating._STAR_current_render_path_STAR_ = _STAR_current_render_path_STAR_41584;
}}
});
devtools.formatters.templating.render_json_ml = (function devtools$formatters$templating$render_json_ml(markup){
var _STAR_current_render_stack_STAR_41587 = devtools.formatters.templating._STAR_current_render_stack_STAR_;
var _STAR_current_render_path_STAR_41588 = devtools.formatters.templating._STAR_current_render_path_STAR_;
devtools.formatters.templating._STAR_current_render_stack_STAR_ = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_stack_STAR_,markup);
devtools.formatters.templating._STAR_current_render_path_STAR_ = cljs.core.conj.call(null,devtools.formatters.templating._STAR_current_render_path_STAR_,"<render-json-ml>");
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_41588;
devtools.formatters.templating._STAR_current_render_stack_STAR_ = _STAR_current_render_stack_STAR_41587;
}});
devtools.formatters.templating.assert_failed_markup_rendering = (function devtools$formatters$templating$assert_failed_markup_rendering(initial_value,value){
throw (new Error([cljs.core.str("Assert failed: "),cljs.core.str([cljs.core.str("result of markup rendering must be a template,\n"),cljs.core.str("resolved to "),cljs.core.str(devtools.formatters.templating.pprint_str.call(null,value)),cljs.core.str("initial value: "),cljs.core.str(devtools.formatters.templating.pprint_str.call(null,initial_value))].join('')),cljs.core.str("\n"),cljs.core.str("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__41589 = initial_value;
var G__41590 = value.call(null);
initial_value = G__41589;
value = G__41590;
continue;
} else {
if((value instanceof cljs.core.Keyword)){
var G__41591 = initial_value;
var G__41592 = devtools.formatters.helpers.pref.call(null,value);
initial_value = G__41591;
value = G__41592;
continue;
} else {
if(cljs.core.sequential_QMARK_.call(null,value)){
var G__41593 = initial_value;
var G__41594 = devtools.formatters.templating.render_json_ml.call(null,value);
initial_value = G__41593;
value = G__41594;
continue;
} else {
if(cljs.core.truth_(devtools.formatters.templating.template_QMARK_.call(null,value))){
return value;
} else {
if(cljs.core.truth_(devtools.formatters.templating.surrogate_QMARK_.call(null,value))){
return value;
} else {
if(cljs.core.truth_(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=1603199212660

File diff suppressed because one or more lines are too long