You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323
  1. function* keyVal(obj){
  2. for (let en in obj){
  3. yield [en,obj[en]]
  4. }
  5. }
  6. function* keyVal2(obj){
  7. let ctr = 0
  8. for (let en in obj){
  9. yield [ctr++,en,obj[en]]
  10. }
  11. }
  12. _deep_walk = {}
  13. _deep_walk.mx_ = 15000
  14. _deep_walk.mx_depth = 8
  15. // _deep_walk.mx_depth = 6
  16. _deep_walk.cnt = 0
  17. _deep_walk.depth = 0
  18. _deep_walk.skip_walk = 1
  19. _deep_walk.k = new Set()
  20. _deep_walk.stops = new Set()
  21. _deep_walk.m = new Map()
  22. _deep_walk_dflt = {
  23. path:[],
  24. paths:[],
  25. names:[],
  26. }
  27. // kvt(APP.store.getState())
  28. function kvt(o,path=[],d=0) {
  29. // clog(":",d,path.join("."))
  30. _deep_walk.st ? clog(d,path.join(".")) :1
  31. if (o.skip_walk){
  32. clog("skip_walk",d ,_deep_walk.cnt)
  33. _deep_walk.st = 1
  34. return
  35. } else if(_deep_walk.cnt > _deep_walk.mx_) {
  36. clog("_deep_walk.cnt > _deep_walk.mx_")
  37. return
  38. } else if (d > _deep_walk.mx_depth){
  39. clog("d > _deep_walk.mx_depth",_deep_walk.cnt,d)
  40. return
  41. }
  42. // _deep_walk.cnt += 1
  43. var k,v
  44. var new_obj
  45. var ometa
  46. var breadth_first = []
  47. for ([k,v] of keyVal(o)){
  48. _deep_walk.cnt += 1
  49. // clog("cntx",_deep_walk.cnt)
  50. if(_deep_walk.cnt > _deep_walk.mx_) {
  51. clog("_deep_walk.cnt > _deep_walk.mx_ 1")
  52. return
  53. }
  54. if (k.includes("handler")){
  55. clog(d,_deep_walk.cnt,[...path,k].join("."))
  56. }
  57. // clog(_deep_walk.cnt,k)
  58. // if (typeof(v) != "object" && typeof(v) != "function"){
  59. /*
  60. if (typeof(v) != "object" || ( v && v.nodeName)){
  61. // _deep_walk.k.add(typeof(v) === undefined ? "_undefined" : typeof(v) )
  62. _deep_walk.stops.add( typeof(v) )
  63. // return
  64. continue
  65. }
  66. */
  67. // _deep_walk.cnt += 1
  68. // new_obj = _deep_walk.m.has(o)
  69. new_obj = _deep_walk.m.setD(v,jc(_deep_walk_dflt))
  70. ometa = _deep_walk.m.get(v)
  71. ometa.names.push(k)
  72. ometa.paths.push([...path,k])
  73. _deep_walk.k.add(k === undefined ? "_undefined" : k )
  74. if (typeof(v) != "object" || ( v && v.nodeName)){
  75. // _deep_walk.k.add(typeof(v) === undefined ? "_undefined" : typeof(v) )
  76. _deep_walk.stops.add( typeof(v) )
  77. // return
  78. continue
  79. }
  80. if (new_obj && typeof(v) == "object" && v){
  81. breadth_first.push(k)
  82. // kvt(v,[...path,k],d+1)
  83. }
  84. }
  85. for ([k,v] of keyVal(o)){
  86. // clog("cntx2",_deep_walk.cnt)
  87. if(_deep_walk.cnt > _deep_walk.mx_) {
  88. clog("_deep_walk.cnt > _deep_walk.mx_ 2")
  89. return
  90. }
  91. if (breadth_first.includes(k)){
  92. kvt(v,[...path,k],d+1)
  93. }
  94. }
  95. if (!d){
  96. clog("FIN!")
  97. }
  98. }
  99. function kvt00(o,path=[],d=0) {
  100. // clog(":",d,path.join("."))
  101. _deep_walk.st ? clog(d,path.join(".")) :1
  102. if (o.skip_walk){
  103. clog("skip_walk",d ,_deep_walk.cnt)
  104. _deep_walk.st = 1
  105. return
  106. } else if(_deep_walk.cnt > _deep_walk.mx_) {
  107. clog("_deep_walk.cnt > _deep_walk.mx_")
  108. return
  109. } else if (d > _deep_walk.mx_depth){
  110. clog("d > _deep_walk.mx_depth")
  111. return
  112. }
  113. // _deep_walk.cnt += 1
  114. var k,v
  115. var new_obj
  116. var ometa
  117. var breadth_first = []
  118. for ([k,v] of keyVal(o)){
  119. _deep_walk.cnt += 1
  120. clog("cntx",_deep_walk.cnt)
  121. if(_deep_walk.cnt > _deep_walk.mx_) {
  122. clog("_deep_walk.cnt > _deep_walk.mx_ 1")
  123. return
  124. }
  125. if (k.includes("handler")){
  126. clog(d,_deep_walk.cnt,[...path,k].join("."))
  127. }
  128. // clog(_deep_walk.cnt,k)
  129. // if (typeof(v) != "object" && typeof(v) != "function"){
  130. if (typeof(v) != "object" || ( v && v.nodeName)){
  131. // _deep_walk.k.add(typeof(v) === undefined ? "_undefined" : typeof(v) )
  132. _deep_walk.stops.add( typeof(v) )
  133. // return
  134. continue
  135. }
  136. // _deep_walk.cnt += 1
  137. // new_obj = _deep_walk.m.has(o)
  138. new_obj = _deep_walk.m.setD(v,jc(_deep_walk_dflt))
  139. ometa = _deep_walk.m.get(v)
  140. ometa.names.push(k)
  141. ometa.paths.push([...path,k])
  142. _deep_walk.k.add(k === undefined ? "_undefined" : k )
  143. if (new_obj && typeof(v) == "object" && v){
  144. breadth_first.push(k)
  145. // kvt(v,[...path,k],d+1)
  146. }
  147. }
  148. for ([k,v] of keyVal(o)){
  149. clog("cntx2",_deep_walk.cnt)
  150. if(_deep_walk.cnt > _deep_walk.mx_) {
  151. clog("_deep_walk.cnt > _deep_walk.mx_ 2")
  152. return
  153. }
  154. if (breadth_first.includes(k)){
  155. kvt(v,[...path,k],d+1)
  156. }
  157. }
  158. if (!d){
  159. clog("FIN!")
  160. }
  161. }
  162. function kvt0(o,path=[],d=0) {
  163. // clog(":",d,path.join("."))
  164. if (o.skip_walk){
  165. clog("skip_walk")
  166. return
  167. } else if(_deep_walk.cnt > _deep_walk.mx_) {
  168. clog("_deep_walk.cnt > _deep_walk.mx_")
  169. return
  170. } else if (d > _deep_walk.mx_depth){
  171. clog("d > _deep_walk.mx_depth")
  172. return
  173. }
  174. // _deep_walk.cnt += 1
  175. var k,v
  176. var new_obj
  177. var ometa
  178. // var
  179. for ([k,v] of keyVal(o)){
  180. if (k.includes("handler")){
  181. clog(d,_deep_walk.cnt,[...path,k].join("."))
  182. }
  183. // clog(_deep_walk.cnt,k)
  184. // if (typeof(v) != "object" && typeof(v) != "function"){
  185. if (typeof(v) != "object" || ( v && v.nodeName)){
  186. // _deep_walk.k.add(typeof(v) === undefined ? "_undefined" : typeof(v) )
  187. _deep_walk.stops.add( typeof(v) )
  188. // return
  189. continue
  190. }
  191. _deep_walk.cnt += 1
  192. // new_obj = _deep_walk.m.has(o)
  193. new_obj = _deep_walk.m.setD(v,jc(_deep_walk_dflt))
  194. ometa = _deep_walk.m.get(v)
  195. ometa.names.push(k)
  196. ometa.paths.push([...path,k])
  197. _deep_walk.k.add(k === undefined ? "_undefined" : k )
  198. if (new_obj && typeof(v) == "object" && v){
  199. kvt0(v,[...path,k],d+1)
  200. }
  201. }
  202. if (!d){
  203. clog("FIN!")
  204. }
  205. }
  206. function lmap(m){
  207. var k,v
  208. var cnt
  209. var cnt_mx
  210. cnt_mx = 6000
  211. var ret = {
  212. types:new Set(),
  213. }
  214. cnt = 0
  215. for ([k,v] of m){
  216. cnt += 1
  217. // clog(cnt,k,v)
  218. ret.types.add(typeof(k))
  219. if (cnt > cnt_mx){
  220. clog("RET")
  221. return
  222. }
  223. }
  224. ret.cnt = cnt
  225. ret.cnt_mx = cnt_mx
  226. // clog()
  227. return ret
  228. }