ast-monkey-traverse
Version:
Utility library to traverse AST
11 lines (9 loc) • 1.06 kB
JavaScript
/**
* @name ast-monkey-traverse
* @fileoverview Utility library to traverse AST
* @version 4.0.20
* @author Roy Revelt, Codsen Ltd
* @license MIT
* {@link https://codsen.com/os/ast-monkey-traverse/}
*/
import f from"rfdc";import{isPlainObject as h}from"codsen-utils";import{parent as m}from"ast-monkey-util";var u="4.0.20";var a=f(),D=u;function k(c,$){let d={now:!1};function i(b,l,y,r){let n=a(b),s,t={depth:-1,path:"",...y};if(t.depth+=1,Array.isArray(n))for(let e=0,o=n.length;e<o&&!r.now;e++){let p=t.path?`${t.path}.${e}`:`${e}`;n[e]!==void 0?(t.parent=a(n),t.parentType="array",t.parentKey=m(p),s=i(l(n[e],void 0,{...t,path:p},r),l,{...t,path:p},r),Number.isNaN(s)&&e<n.length?(n.splice(e,1),e-=1):n[e]=s):n.splice(e,1)}else if(h(n))for(let e in n){if(r.now&&e!=null)break;let o=t.path?`${t.path}.${e}`:e;t.depth===0&&e!=null&&(t.topmostKey=e),t.parent=a(n),t.parentType="object",t.parentKey=m(o),s=i(l(e,n[e],{...t,path:o},r),l,{...t,path:o},r),Number.isNaN(s)?delete n[e]:n[e]=s}return n}return i(c,$,{},d)}export{k as traverse,D as version};