123 lines
4.3 KiB
JavaScript
123 lines
4.3 KiB
JavaScript
// Compiled by ClojureScript 1.9.229 {}
|
|
goog.provide('clojure.walk');
|
|
goog.require('cljs.core');
|
|
/**
|
|
* Traverses form, an arbitrary data structure. inner and outer are
|
|
* functions. Applies inner to each element of form, building up a
|
|
* data structure of the same type, then applies outer to the result.
|
|
* Recognizes all Clojure data structures. Consumes seqs as with doall.
|
|
*/
|
|
clojure.walk.walk = (function clojure$walk$walk(inner,outer,form){
|
|
if(cljs.core.list_QMARK_.call(null,form)){
|
|
return outer.call(null,cljs.core.apply.call(null,cljs.core.list,cljs.core.map.call(null,inner,form)));
|
|
} else {
|
|
if(cljs.core.seq_QMARK_.call(null,form)){
|
|
return outer.call(null,cljs.core.doall.call(null,cljs.core.map.call(null,inner,form)));
|
|
} else {
|
|
if(cljs.core.record_QMARK_.call(null,form)){
|
|
return outer.call(null,cljs.core.reduce.call(null,(function (r,x){
|
|
return cljs.core.conj.call(null,r,inner.call(null,x));
|
|
}),form,form));
|
|
} else {
|
|
if(cljs.core.coll_QMARK_.call(null,form)){
|
|
return outer.call(null,cljs.core.into.call(null,cljs.core.empty.call(null,form),cljs.core.map.call(null,inner,form)));
|
|
} else {
|
|
return outer.call(null,form);
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
});
|
|
/**
|
|
* Performs a depth-first, post-order traversal of form. Calls f on
|
|
* each sub-form, uses f's return value in place of the original.
|
|
* Recognizes all Clojure data structures. Consumes seqs as with doall.
|
|
*/
|
|
clojure.walk.postwalk = (function clojure$walk$postwalk(f,form){
|
|
return clojure.walk.walk.call(null,cljs.core.partial.call(null,clojure$walk$postwalk,f),f,form);
|
|
});
|
|
/**
|
|
* Like postwalk, but does pre-order traversal.
|
|
*/
|
|
clojure.walk.prewalk = (function clojure$walk$prewalk(f,form){
|
|
return clojure.walk.walk.call(null,cljs.core.partial.call(null,clojure$walk$prewalk,f),cljs.core.identity,f.call(null,form));
|
|
});
|
|
/**
|
|
* Recursively transforms all map keys from strings to keywords.
|
|
*/
|
|
clojure.walk.keywordize_keys = (function clojure$walk$keywordize_keys(m){
|
|
var f = (function (p__41442){
|
|
var vec__41443 = p__41442;
|
|
var k = cljs.core.nth.call(null,vec__41443,(0),null);
|
|
var v = cljs.core.nth.call(null,vec__41443,(1),null);
|
|
if(typeof k === 'string'){
|
|
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.keyword.call(null,k),v], null);
|
|
} else {
|
|
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [k,v], null);
|
|
}
|
|
});
|
|
return clojure.walk.postwalk.call(null,((function (f){
|
|
return (function (x){
|
|
if(cljs.core.map_QMARK_.call(null,x)){
|
|
return cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,f,x));
|
|
} else {
|
|
return x;
|
|
}
|
|
});})(f))
|
|
,m);
|
|
});
|
|
/**
|
|
* Recursively transforms all map keys from keywords to strings.
|
|
*/
|
|
clojure.walk.stringify_keys = (function clojure$walk$stringify_keys(m){
|
|
var f = (function (p__41450){
|
|
var vec__41451 = p__41450;
|
|
var k = cljs.core.nth.call(null,vec__41451,(0),null);
|
|
var v = cljs.core.nth.call(null,vec__41451,(1),null);
|
|
if((k instanceof cljs.core.Keyword)){
|
|
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [cljs.core.name.call(null,k),v], null);
|
|
} else {
|
|
return new cljs.core.PersistentVector(null, 2, 5, cljs.core.PersistentVector.EMPTY_NODE, [k,v], null);
|
|
}
|
|
});
|
|
return clojure.walk.postwalk.call(null,((function (f){
|
|
return (function (x){
|
|
if(cljs.core.map_QMARK_.call(null,x)){
|
|
return cljs.core.into.call(null,cljs.core.PersistentArrayMap.EMPTY,cljs.core.map.call(null,f,x));
|
|
} else {
|
|
return x;
|
|
}
|
|
});})(f))
|
|
,m);
|
|
});
|
|
/**
|
|
* Recursively transforms form by replacing keys in smap with their
|
|
* values. Like clojure/replace but works on any data structure. Does
|
|
* replacement at the root of the tree first.
|
|
*/
|
|
clojure.walk.prewalk_replace = (function clojure$walk$prewalk_replace(smap,form){
|
|
return clojure.walk.prewalk.call(null,(function (x){
|
|
if(cljs.core.contains_QMARK_.call(null,smap,x)){
|
|
return smap.call(null,x);
|
|
} else {
|
|
return x;
|
|
}
|
|
}),form);
|
|
});
|
|
/**
|
|
* Recursively transforms form by replacing keys in smap with their
|
|
* values. Like clojure/replace but works on any data structure. Does
|
|
* replacement at the leaves of the tree first.
|
|
*/
|
|
clojure.walk.postwalk_replace = (function clojure$walk$postwalk_replace(smap,form){
|
|
return clojure.walk.postwalk.call(null,(function (x){
|
|
if(cljs.core.contains_QMARK_.call(null,smap,x)){
|
|
return smap.call(null,x);
|
|
} else {
|
|
return x;
|
|
}
|
|
}),form);
|
|
});
|
|
|
|
//# sourceMappingURL=walk.js.map?rel=1603199212448
|