@vertesia/json 1.2.0 → 1.3.0-dev.20260620.061059Z

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './walk.js';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
package/lib/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export * from './types.js';
2
+ export * from './walk.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,WAAW,CAAC"}
@@ -5,3 +5,4 @@ export type JSONObject = {
5
5
  };
6
6
  export type JSONComposite = JSONArray | JSONObject;
7
7
  export type JSONValue = JSONPrimitive | JSONComposite;
8
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC;AAC7D,MAAM,MAAM,SAAS,GAAG,SAAS,EAAE,CAAC;AACpC,MAAM,MAAM,UAAU,GAAG;IAAE,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,CAAC;AACtD,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,UAAU,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,aAAa,GAAG,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -1,2 +1,2 @@
1
- class t{supportIterators=!1;constructor(t=!1){this.supportIterators=t}walk(t,s){this._walk(void 0,t,s)}_walk(t,s,r){!s||"object"!==typeof s||s instanceof Date?r.onValue&&r.onValue(t,s):Array.isArray(s)||this.supportIterators&&"function"===s[Symbol.iterator]?this._walkIterable(t,s,r):s.constructor===Object?this._walkObject(t,s,r):r.onValue&&r.onValue(t,s)}_walkIterable(t,s,r){r.onStartIteration&&r.onStartIteration(t,s);let a=0;for(const t of s)this._walk(a++,t,r);r.onEndIteration&&r.onEndIteration(t,s)}_walkObject(t,s,r){r.onStartObject&&r.onStartObject(t,s);for(const t of Object.keys(s))this._walk(t,s[t],r);r.onEndObject&&r.onEndObject(t,s)}map(t,s){const a=new r(s);return this.walk(t,a),a.result}}class s{supportIterators=!1;constructor(t=!1){this.supportIterators=t}async walk(t,s){await this._walk(void 0,t,s)}async _walk(t,s,r){!s||"object"!==typeof s||s instanceof Date?r.onValue&&await r.onValue(t,s):Array.isArray(s)||this.supportIterators&&"function"===s[Symbol.iterator]?await this._walkIterable(t,s,r):s.constructor===Object?await this._walkObject(t,s,r):r.onValue&&await r.onValue(t,s)}async _walkIterable(t,s,r){r.onStartIteration&&await r.onStartIteration(t,s);let a=0;for(const t of s)await this._walk(a++,t,r);r.onEndIteration&&await r.onEndIteration(t,s)}async _walkObject(t,s,r){r.onStartObject&&await r.onStartObject(t,s);for(const t of Object.keys(s))await this._walk(t,s[t],r);r.onEndObject&&await r.onEndObject(t,s)}async map(t,s){const r=new a(s);return await this.walk(t,r),r.result}}class r{mapFn;result;current;stack=[];constructor(t){this.mapFn=t}onStartObject(t){if(void 0===t)this.result={},this.current=this.result;else{this.stack.push(this.current);const s={};this.current[t]=s,this.current=s}}onEndObject(){this.current=this.stack.pop()}onStartIteration(t){if(void 0===t)this.result=[],this.current=this.result;else{this.stack.push(this.current);const s=[];this.current[t]=s,this.current=s}}onEndIteration(){this.current=this.stack.pop()}onValue(t,s){const r=this.mapFn(t,s);void 0===t?this.result=r:void 0!==r&&(this.current[t]=r)}}class a{mapFn;result;current;stack=[];constructor(t){this.mapFn=t}async onStartObject(t){if(void 0===t)this.result={},this.current=this.result;else{this.stack.push(this.current);const s={};this.current[t]=s,this.current=s}}async onEndObject(){this.current=this.stack.pop()}async onStartIteration(t){if(void 0===t)this.result=[],this.current=this.result;else{this.stack.push(this.current);const s=[];this.current[t]=s,this.current=s}}async onEndIteration(){this.current=this.stack.pop()}async onValue(t,s){const r=await this.mapFn(t,s);void 0===t?this.result=r:void 0!==r&&(this.current[t]=r)}}export{s as AsyncObjectWalker,t as ObjectWalker};
1
+ function t(t){return null!==t&&"object"==typeof t&&Symbol.iterator in t}function r(t){return null!==t&&"object"==typeof t&&Object.getPrototypeOf(t)===Object.prototype}class s{supportIterators=!1;constructor(t=!1){this.supportIterators=t}walk(t,r){this._walk(void 0,t,r)}_walk(s,a,e){!a||"object"!==typeof a||a instanceof Date?e.onValue?.(s,a):Array.isArray(a)||this.supportIterators&&t(a)?this._walkIterable(s,a,e):r(a)?this._walkObject(s,a,e):e.onValue?.(s,a)}_walkIterable(t,r,s){s.onStartIteration?.(t,r);let a=0;for(const t of r)this._walk(a++,t,s);s.onEndIteration?.(t,r)}_walkObject(t,r,s){s.onStartObject?.(t,r);for(const t of Object.keys(r))this._walk(t,r[t],s);s.onEndObject?.(t,r)}map(t,r){const s=new e(r);return this.walk(t,s),s.result}}class a{supportIterators=!1;constructor(t=!1){this.supportIterators=t}async walk(t,r){await this._walk(void 0,t,r)}async _walk(s,a,e){!a||"object"!==typeof a||a instanceof Date?await(e.onValue?.(s,a)):Array.isArray(a)||this.supportIterators&&t(a)?await this._walkIterable(s,a,e):r(a)?await this._walkObject(s,a,e):await(e.onValue?.(s,a))}async _walkIterable(t,r,s){await(s.onStartIteration?.(t,r));let a=0;for(const t of r)await this._walk(a++,t,s);await(s.onEndIteration?.(t,r))}async _walkObject(t,r,s){await(s.onStartObject?.(t,r));for(const t of Object.keys(r))await this._walk(t,r[t],s);await(s.onEndObject?.(t,r))}async map(t,r){const s=new n(r);return await this.walk(t,s),s.result}}class e{mapFn;result;current;stack=[];constructor(t){this.mapFn=t}setValue(t,r){void 0===t?this.result=r:this.current&&(Array.isArray(this.current)&&"number"==typeof t?this.current[t]=r:Array.isArray(this.current)||(this.current[t]=r))}onStartObject(t){const r={};void 0===t?(this.result=r,this.current=r):(this.current&&this.stack.push(this.current),this.setValue(t,r),this.current=r)}onEndObject(){this.current=this.stack.pop()}onStartIteration(t){const r=[];void 0===t?(this.result=r,this.current=r):(this.current&&this.stack.push(this.current),this.setValue(t,r),this.current=r)}onEndIteration(){this.current=this.stack.pop()}onValue(t,r){const s=this.mapFn(t,r);void 0===t?this.result=s:void 0!==s&&this.setValue(t,s)}}class n{mapFn;result;current;stack=[];constructor(t){this.mapFn=t}setValue(t,r){void 0===t?this.result=r:this.current&&(Array.isArray(this.current)&&"number"==typeof t?this.current[t]=r:Array.isArray(this.current)||(this.current[t]=r))}async onStartObject(t){const r={};void 0===t?(this.result=r,this.current=r):(this.current&&this.stack.push(this.current),this.setValue(t,r),this.current=r)}async onEndObject(){this.current=this.stack.pop()}async onStartIteration(t){const r=[];void 0===t?(this.result=r,this.current=r):(this.current&&this.stack.push(this.current),this.setValue(t,r),this.current=r)}async onEndIteration(){this.current=this.stack.pop()}async onValue(t,r){const s=await this.mapFn(t,r);void 0===t?this.result=s:void 0!==s&&this.setValue(t,s)}}export{a as AsyncObjectWalker,s as ObjectWalker};
2
2
  //# sourceMappingURL=vertesia-json.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"vertesia-json.js","sources":["../src/walk.ts"],"sourcesContent":[null],"names":["ObjectWalker","supportIterators","constructor","this","walk","obj","visitor","_walk","undefined","key","Date","onValue","Array","isArray","Symbol","iterator","_walkIterable","Object","_walkObject","onStartIteration","i","value","onEndIteration","onStartObject","k","keys","onEndObject","map","mapFn","MapVisitor","result","AsyncObjectWalker","AsyncMapVisitor","current","stack","push","pop","ar","r"],"mappings":"MAkBaA,EACTC,kBAAmB,EACnB,WAAAC,CAAYD,GAAmB,GAC3BE,KAAKF,iBAAmBA,CAC5B,CACA,IAAAG,CAAKC,EAAUC,GACXH,KAAKI,WAAMC,EAAWH,EAAKC,EAC/B,CACA,KAAAC,CAAME,EAAgBJ,EAAUC,IAEvBD,GAAgB,kBADDA,GACaA,aAAeK,KAC5CJ,EAAQK,SAAWL,EAAQK,QAAQF,EAAKJ,GACjCO,MAAMC,QAAQR,IAEdF,KAAKF,kBAA6C,aAAzBI,EAAIS,OAAOC,UAD3CZ,KAAKa,cAAcP,EAAKJ,EAAKC,GAGtBD,EAAIH,cAAgBe,OAC3Bd,KAAKe,YAAYT,EAAKJ,EAAKC,GAE3BA,EAAQK,SAAWL,EAAQK,QAAQF,EAAKJ,EAEhD,CAEA,aAAAW,CAAcP,EAAgBJ,EAAUC,GACpCA,EAAQa,kBAAoBb,EAAQa,iBAAiBV,EAAKJ,GAC1D,IAAIe,EAAI,EACR,IAAK,MAAMC,KAAShB,EAChBF,KAAKI,MAAMa,IAAKC,EAAOf,GAE3BA,EAAQgB,gBAAkBhB,EAAQgB,eAAeb,EAAKJ,EAC1D,CAEA,WAAAa,CAAYT,EAAgBJ,EAAUC,GAClCA,EAAQiB,eAAiBjB,EAAQiB,cAAcd,EAAKJ,GACpD,IAAK,MAAMmB,KAAKP,OAAOQ,KAAKpB,GACxBF,KAAKI,MAAMiB,EAAGnB,EAAImB,GAAIlB,GAE1BA,EAAQoB,aAAepB,EAAQoB,YAAYjB,EAAKJ,EACpD,CAEA,GAAAsB,CAAItB,EAAUuB,GACV,MAAMtB,EAAU,IAAIuB,EAAWD,GAE/B,OADAzB,KAAKC,KAAKC,EAAKC,GACRA,EAAQwB,MACnB,QAISC,EACT9B,kBAAmB,EACnB,WAAAC,CAAYD,GAAmB,GAC3BE,KAAKF,iBAAmBA,CAC5B,CACA,UAAMG,CAAKC,EAAUC,SACXH,KAAKI,WAAMC,EAAWH,EAAKC,EACrC,CACA,WAAMC,CAAME,EAAgBJ,EAAUC,IAE7BD,GAAgB,kBADDA,GACaA,aAAeK,KAC5CJ,EAAQK,eAAkBL,EAAQK,QAAQF,EAAKJ,GACxCO,MAAMC,QAAQR,IAEdF,KAAKF,kBAA6C,aAAzBI,EAAIS,OAAOC,gBADrCZ,KAAKa,cAAcP,EAAKJ,EAAKC,GAG5BD,EAAIH,cAAgBe,aACrBd,KAAKe,YAAYT,EAAKJ,EAAKC,GAEjCA,EAAQK,eAAkBL,EAAQK,QAAQF,EAAKJ,EAEvD,CAEA,mBAAMW,CAAcP,EAAgBJ,EAAUC,GAC1CA,EAAQa,wBAA2Bb,EAAQa,iBAAiBV,EAAKJ,GACjE,IAAIe,EAAI,EACR,IAAK,MAAMC,KAAShB,QACVF,KAAKI,MAAMa,IAAKC,EAAOf,GAEjCA,EAAQgB,sBAAyBhB,EAAQgB,eAAeb,EAAKJ,EACjE,CAEA,iBAAMa,CAAYT,EAAgBJ,EAAUC,GACxCA,EAAQiB,qBAAwBjB,EAAQiB,cAAcd,EAAKJ,GAC3D,IAAK,MAAMmB,KAAKP,OAAOQ,KAAKpB,SAClBF,KAAKI,MAAMiB,EAAGnB,EAAImB,GAAIlB,GAEhCA,EAAQoB,mBAAsBpB,EAAQoB,YAAYjB,EAAKJ,EAC3D,CAEA,SAAMsB,CAAItB,EAAUuB,GAChB,MAAMtB,EAAU,IAAI0B,EAAgBJ,GAEpC,aADMzB,KAAKC,KAAKC,EAAKC,GACdA,EAAQwB,MACnB,EAGJ,MAAMD,EAIkBD,MAHpBE,OACAG,QACAC,MAAe,GACf,WAAAhC,CAAoB0B,GAAAzB,KAAAyB,MAAAA,CAA8C,CAElE,aAAAL,CAAcd,GACV,QAAYD,IAARC,EACAN,KAAK2B,OAAS,CAAA,EACd3B,KAAK8B,QAAU9B,KAAK2B,WACjB,CACH3B,KAAK+B,MAAMC,KAAKhC,KAAK8B,SACrB,MAAM5B,EAAM,CAAA,EACZF,KAAK8B,QAAQxB,GAAOJ,EACpBF,KAAK8B,QAAU5B,CACnB,CACJ,CACA,WAAAqB,GACIvB,KAAK8B,QAAU9B,KAAK+B,MAAME,KAC9B,CAEA,gBAAAjB,CAAiBV,GACb,QAAYD,IAARC,EACAN,KAAK2B,OAAS,GACd3B,KAAK8B,QAAU9B,KAAK2B,WACjB,CACH3B,KAAK+B,MAAMC,KAAKhC,KAAK8B,SACrB,MAAMI,EAAY,GAClBlC,KAAK8B,QAAQxB,GAAO4B,EACpBlC,KAAK8B,QAAUI,CACnB,CACJ,CAEA,cAAAf,GACInB,KAAK8B,QAAU9B,KAAK+B,MAAME,KAC9B,CAEA,OAAAzB,CAAQF,EAAgBY,GACpB,MAAMiB,EAAInC,KAAKyB,MAAMnB,EAAKY,QACdb,IAARC,EACAN,KAAK2B,OAASQ,OACD9B,IAAN8B,IACPnC,KAAK8B,QAAQxB,GAAO6B,EAE5B,EAGJ,MAAMN,EAIkBJ,MAHpBE,OACAG,QACAC,MAAe,GACf,WAAAhC,CAAoB0B,GAAAzB,KAAAyB,MAAAA,CAAuD,CAE3E,mBAAML,CAAcd,GAChB,QAAYD,IAARC,EACAN,KAAK2B,OAAS,CAAA,EACd3B,KAAK8B,QAAU9B,KAAK2B,WACjB,CACH3B,KAAK+B,MAAMC,KAAKhC,KAAK8B,SACrB,MAAM5B,EAAM,CAAA,EACZF,KAAK8B,QAAQxB,GAAOJ,EACpBF,KAAK8B,QAAU5B,CACnB,CACJ,CACA,iBAAMqB,GACFvB,KAAK8B,QAAU9B,KAAK+B,MAAME,KAC9B,CAEA,sBAAMjB,CAAiBV,GACnB,QAAYD,IAARC,EACAN,KAAK2B,OAAS,GACd3B,KAAK8B,QAAU9B,KAAK2B,WACjB,CACH3B,KAAK+B,MAAMC,KAAKhC,KAAK8B,SACrB,MAAMI,EAAY,GAClBlC,KAAK8B,QAAQxB,GAAO4B,EACpBlC,KAAK8B,QAAUI,CACnB,CACJ,CAEA,oBAAMf,GACFnB,KAAK8B,QAAU9B,KAAK+B,MAAME,KAC9B,CAEA,aAAMzB,CAAQF,EAAgBY,GAC1B,MAAMiB,QAAUnC,KAAKyB,MAAMnB,EAAKY,QACpBb,IAARC,EACAN,KAAK2B,OAASQ,OACD9B,IAAN8B,IACPnC,KAAK8B,QAAQxB,GAAO6B,EAE5B"}
1
+ {"version":3,"file":"vertesia-json.js","sources":["walk.js"],"sourcesContent":["function isIterable(value) {\n return value !== null && typeof value === 'object' && Symbol.iterator in value;\n}\nfunction isPlainRecord(value) {\n return value !== null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;\n}\nexport class ObjectWalker {\n supportIterators = false; // only array are supported by default\n constructor(supportIterators = false) {\n this.supportIterators = supportIterators;\n }\n walk(obj, visitor) {\n this._walk(undefined, obj, visitor);\n }\n _walk(key, obj, visitor) {\n const type = typeof obj;\n if (!obj || type !== 'object' || obj instanceof Date) {\n visitor.onValue?.(key, obj);\n }\n else if (Array.isArray(obj)) {\n this._walkIterable(key, obj, visitor);\n }\n else if (this.supportIterators && isIterable(obj)) {\n this._walkIterable(key, obj, visitor);\n }\n else if (isPlainRecord(obj)) {\n // a plain object\n this._walkObject(key, obj, visitor);\n }\n else {\n // a random object - we treat it as a value\n visitor.onValue?.(key, obj);\n }\n }\n _walkIterable(key, obj, visitor) {\n visitor.onStartIteration?.(key, obj);\n let i = 0;\n for (const value of obj) {\n this._walk(i++, value, visitor);\n }\n visitor.onEndIteration?.(key, obj);\n }\n _walkObject(key, obj, visitor) {\n visitor.onStartObject?.(key, obj);\n for (const k of Object.keys(obj)) {\n this._walk(k, obj[k], visitor);\n }\n visitor.onEndObject?.(key, obj);\n }\n map(obj, mapFn) {\n const visitor = new MapVisitor(mapFn);\n this.walk(obj, visitor);\n return visitor.result;\n }\n}\nexport class AsyncObjectWalker {\n supportIterators = false; // only array are supported by default\n constructor(supportIterators = false) {\n this.supportIterators = supportIterators;\n }\n async walk(obj, visitor) {\n await this._walk(undefined, obj, visitor);\n }\n async _walk(key, obj, visitor) {\n const type = typeof obj;\n if (!obj || type !== 'object' || obj instanceof Date) {\n await visitor.onValue?.(key, obj);\n }\n else if (Array.isArray(obj)) {\n await this._walkIterable(key, obj, visitor);\n }\n else if (this.supportIterators && isIterable(obj)) {\n await this._walkIterable(key, obj, visitor);\n }\n else if (isPlainRecord(obj)) {\n // a plain object\n await this._walkObject(key, obj, visitor);\n }\n else {\n // a random object - we treat it as a value\n await visitor.onValue?.(key, obj);\n }\n }\n async _walkIterable(key, obj, visitor) {\n await visitor.onStartIteration?.(key, obj);\n let i = 0;\n for (const value of obj) {\n await this._walk(i++, value, visitor);\n }\n await visitor.onEndIteration?.(key, obj);\n }\n async _walkObject(key, obj, visitor) {\n await visitor.onStartObject?.(key, obj);\n for (const k of Object.keys(obj)) {\n await this._walk(k, obj[k], visitor);\n }\n await visitor.onEndObject?.(key, obj);\n }\n async map(obj, mapFn) {\n const visitor = new AsyncMapVisitor(mapFn);\n await this.walk(obj, visitor);\n return visitor.result;\n }\n}\nclass MapVisitor {\n mapFn;\n result;\n current;\n stack = [];\n constructor(mapFn) {\n this.mapFn = mapFn;\n }\n setValue(key, value) {\n if (key === undefined) {\n this.result = value;\n }\n else if (this.current) {\n if (Array.isArray(this.current) && typeof key === 'number') {\n this.current[key] = value;\n }\n else if (!Array.isArray(this.current)) {\n this.current[key] = value;\n }\n }\n }\n onStartObject(key) {\n const obj = {};\n if (key === undefined) {\n this.result = obj;\n this.current = obj;\n }\n else {\n if (this.current) {\n this.stack.push(this.current);\n }\n this.setValue(key, obj);\n this.current = obj;\n }\n }\n onEndObject() {\n this.current = this.stack.pop();\n }\n onStartIteration(key) {\n const ar = [];\n if (key === undefined) {\n this.result = ar;\n this.current = ar;\n }\n else {\n if (this.current) {\n this.stack.push(this.current);\n }\n this.setValue(key, ar);\n this.current = ar;\n }\n }\n onEndIteration() {\n this.current = this.stack.pop();\n }\n onValue(key, value) {\n const r = this.mapFn(key, value);\n if (key === undefined) {\n this.result = r;\n }\n else if (r !== undefined) {\n this.setValue(key, r);\n }\n }\n}\nclass AsyncMapVisitor {\n mapFn;\n result;\n current;\n stack = [];\n constructor(mapFn) {\n this.mapFn = mapFn;\n }\n setValue(key, value) {\n if (key === undefined) {\n this.result = value;\n }\n else if (this.current) {\n if (Array.isArray(this.current) && typeof key === 'number') {\n this.current[key] = value;\n }\n else if (!Array.isArray(this.current)) {\n this.current[key] = value;\n }\n }\n }\n async onStartObject(key) {\n const obj = {};\n if (key === undefined) {\n this.result = obj;\n this.current = obj;\n }\n else {\n if (this.current) {\n this.stack.push(this.current);\n }\n this.setValue(key, obj);\n this.current = obj;\n }\n }\n async onEndObject() {\n this.current = this.stack.pop();\n }\n async onStartIteration(key) {\n const ar = [];\n if (key === undefined) {\n this.result = ar;\n this.current = ar;\n }\n else {\n if (this.current) {\n this.stack.push(this.current);\n }\n this.setValue(key, ar);\n this.current = ar;\n }\n }\n async onEndIteration() {\n this.current = this.stack.pop();\n }\n async onValue(key, value) {\n const r = await this.mapFn(key, value);\n if (key === undefined) {\n this.result = r;\n }\n else if (r !== undefined) {\n this.setValue(key, r);\n }\n }\n}\n//# sourceMappingURL=walk.js.map"],"names":["isIterable","value","Symbol","iterator","isPlainRecord","Object","getPrototypeOf","prototype","ObjectWalker","supportIterators","constructor","this","walk","obj","visitor","_walk","undefined","key","Date","onValue","Array","isArray","_walkIterable","_walkObject","onStartIteration","i","onEndIteration","onStartObject","k","keys","onEndObject","map","mapFn","MapVisitor","result","AsyncObjectWalker","AsyncMapVisitor","current","stack","setValue","push","pop","ar","r"],"mappings":"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"}
package/lib/walk.d.ts ADDED
@@ -0,0 +1,34 @@
1
+ export type ObjectKey = string | number | undefined;
2
+ export interface ObjectVisitor {
3
+ onStartObject?: (key: ObjectKey, value: Record<string, unknown>) => void;
4
+ onEndObject?: (key: ObjectKey, value: Record<string, unknown>) => void;
5
+ onStartIteration?: (key: ObjectKey, value: Iterable<unknown>) => void;
6
+ onEndIteration?: (key: ObjectKey, value: Iterable<unknown>) => void;
7
+ onValue?: (key: ObjectKey, value: unknown) => void;
8
+ }
9
+ export interface AsyncObjectVisitor {
10
+ onStartObject?: (key: ObjectKey, value: Record<string, unknown>) => Promise<void>;
11
+ onEndObject?: (key: ObjectKey, value: Record<string, unknown>) => Promise<void>;
12
+ onStartIteration?: (key: ObjectKey, value: Iterable<unknown>) => Promise<void>;
13
+ onEndIteration?: (key: ObjectKey, value: Iterable<unknown>) => Promise<void>;
14
+ onValue?: (key: ObjectKey, value: unknown) => Promise<void>;
15
+ }
16
+ export declare class ObjectWalker {
17
+ supportIterators: boolean;
18
+ constructor(supportIterators?: boolean);
19
+ walk(obj: unknown, visitor: ObjectVisitor): void;
20
+ _walk(key: ObjectKey, obj: unknown, visitor: ObjectVisitor): void;
21
+ _walkIterable(key: ObjectKey, obj: Iterable<unknown>, visitor: ObjectVisitor): void;
22
+ _walkObject(key: ObjectKey, obj: Record<string, unknown>, visitor: ObjectVisitor): void;
23
+ map(obj: unknown, mapFn: (key: ObjectKey, value: unknown) => unknown): unknown;
24
+ }
25
+ export declare class AsyncObjectWalker {
26
+ supportIterators: boolean;
27
+ constructor(supportIterators?: boolean);
28
+ walk(obj: unknown, visitor: AsyncObjectVisitor): Promise<void>;
29
+ _walk(key: ObjectKey, obj: unknown, visitor: AsyncObjectVisitor): Promise<void>;
30
+ _walkIterable(key: ObjectKey, obj: Iterable<unknown>, visitor: AsyncObjectVisitor): Promise<void>;
31
+ _walkObject(key: ObjectKey, obj: Record<string, unknown>, visitor: AsyncObjectVisitor): Promise<void>;
32
+ map(obj: unknown, mapFn: (key: ObjectKey, value: unknown) => Promise<unknown>): Promise<unknown>;
33
+ }
34
+ //# sourceMappingURL=walk.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,9 @@
1
+ function isIterable(value) {
2
+ return value !== null && typeof value === 'object' && Symbol.iterator in value;
3
+ }
4
+ function isPlainRecord(value) {
5
+ return value !== null && typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;
6
+ }
1
7
  export class ObjectWalker {
2
8
  supportIterators = false; // only array are supported by default
3
9
  constructor(supportIterators = false) {
@@ -9,35 +15,37 @@ export class ObjectWalker {
9
15
  _walk(key, obj, visitor) {
10
16
  const type = typeof obj;
11
17
  if (!obj || type !== 'object' || obj instanceof Date) {
12
- visitor.onValue && visitor.onValue(key, obj);
18
+ visitor.onValue?.(key, obj);
13
19
  }
14
20
  else if (Array.isArray(obj)) {
15
21
  this._walkIterable(key, obj, visitor);
16
22
  }
17
- else if (this.supportIterators && obj[Symbol.iterator] === 'function') {
23
+ else if (this.supportIterators && isIterable(obj)) {
18
24
  this._walkIterable(key, obj, visitor);
19
25
  }
20
- else if (obj.constructor === Object) { // a plain object
26
+ else if (isPlainRecord(obj)) {
27
+ // a plain object
21
28
  this._walkObject(key, obj, visitor);
22
29
  }
23
- else { // a random object - we treat it as a value
24
- visitor.onValue && visitor.onValue(key, obj);
30
+ else {
31
+ // a random object - we treat it as a value
32
+ visitor.onValue?.(key, obj);
25
33
  }
26
34
  }
27
35
  _walkIterable(key, obj, visitor) {
28
- visitor.onStartIteration && visitor.onStartIteration(key, obj);
36
+ visitor.onStartIteration?.(key, obj);
29
37
  let i = 0;
30
38
  for (const value of obj) {
31
39
  this._walk(i++, value, visitor);
32
40
  }
33
- visitor.onEndIteration && visitor.onEndIteration(key, obj);
41
+ visitor.onEndIteration?.(key, obj);
34
42
  }
35
43
  _walkObject(key, obj, visitor) {
36
- visitor.onStartObject && visitor.onStartObject(key, obj);
44
+ visitor.onStartObject?.(key, obj);
37
45
  for (const k of Object.keys(obj)) {
38
46
  this._walk(k, obj[k], visitor);
39
47
  }
40
- visitor.onEndObject && visitor.onEndObject(key, obj);
48
+ visitor.onEndObject?.(key, obj);
41
49
  }
42
50
  map(obj, mapFn) {
43
51
  const visitor = new MapVisitor(mapFn);
@@ -56,35 +64,37 @@ export class AsyncObjectWalker {
56
64
  async _walk(key, obj, visitor) {
57
65
  const type = typeof obj;
58
66
  if (!obj || type !== 'object' || obj instanceof Date) {
59
- visitor.onValue && (await visitor.onValue(key, obj));
67
+ await visitor.onValue?.(key, obj);
60
68
  }
61
69
  else if (Array.isArray(obj)) {
62
70
  await this._walkIterable(key, obj, visitor);
63
71
  }
64
- else if (this.supportIterators && obj[Symbol.iterator] === 'function') {
72
+ else if (this.supportIterators && isIterable(obj)) {
65
73
  await this._walkIterable(key, obj, visitor);
66
74
  }
67
- else if (obj.constructor === Object) { // a plain object
75
+ else if (isPlainRecord(obj)) {
76
+ // a plain object
68
77
  await this._walkObject(key, obj, visitor);
69
78
  }
70
- else { // a random object - we treat it as a value
71
- visitor.onValue && (await visitor.onValue(key, obj));
79
+ else {
80
+ // a random object - we treat it as a value
81
+ await visitor.onValue?.(key, obj);
72
82
  }
73
83
  }
74
84
  async _walkIterable(key, obj, visitor) {
75
- visitor.onStartIteration && (await visitor.onStartIteration(key, obj));
85
+ await visitor.onStartIteration?.(key, obj);
76
86
  let i = 0;
77
87
  for (const value of obj) {
78
88
  await this._walk(i++, value, visitor);
79
89
  }
80
- visitor.onEndIteration && (await visitor.onEndIteration(key, obj));
90
+ await visitor.onEndIteration?.(key, obj);
81
91
  }
82
92
  async _walkObject(key, obj, visitor) {
83
- visitor.onStartObject && (await visitor.onStartObject(key, obj));
93
+ await visitor.onStartObject?.(key, obj);
84
94
  for (const k of Object.keys(obj)) {
85
95
  await this._walk(k, obj[k], visitor);
86
96
  }
87
- visitor.onEndObject && (await visitor.onEndObject(key, obj));
97
+ await visitor.onEndObject?.(key, obj);
88
98
  }
89
99
  async map(obj, mapFn) {
90
100
  const visitor = new AsyncMapVisitor(mapFn);
@@ -100,15 +110,30 @@ class MapVisitor {
100
110
  constructor(mapFn) {
101
111
  this.mapFn = mapFn;
102
112
  }
113
+ setValue(key, value) {
114
+ if (key === undefined) {
115
+ this.result = value;
116
+ }
117
+ else if (this.current) {
118
+ if (Array.isArray(this.current) && typeof key === 'number') {
119
+ this.current[key] = value;
120
+ }
121
+ else if (!Array.isArray(this.current)) {
122
+ this.current[key] = value;
123
+ }
124
+ }
125
+ }
103
126
  onStartObject(key) {
127
+ const obj = {};
104
128
  if (key === undefined) {
105
- this.result = {};
106
- this.current = this.result;
129
+ this.result = obj;
130
+ this.current = obj;
107
131
  }
108
132
  else {
109
- this.stack.push(this.current);
110
- const obj = {};
111
- this.current[key] = obj;
133
+ if (this.current) {
134
+ this.stack.push(this.current);
135
+ }
136
+ this.setValue(key, obj);
112
137
  this.current = obj;
113
138
  }
114
139
  }
@@ -116,14 +141,16 @@ class MapVisitor {
116
141
  this.current = this.stack.pop();
117
142
  }
118
143
  onStartIteration(key) {
144
+ const ar = [];
119
145
  if (key === undefined) {
120
- this.result = [];
121
- this.current = this.result;
146
+ this.result = ar;
147
+ this.current = ar;
122
148
  }
123
149
  else {
124
- this.stack.push(this.current);
125
- const ar = [];
126
- this.current[key] = ar;
150
+ if (this.current) {
151
+ this.stack.push(this.current);
152
+ }
153
+ this.setValue(key, ar);
127
154
  this.current = ar;
128
155
  }
129
156
  }
@@ -136,7 +163,7 @@ class MapVisitor {
136
163
  this.result = r;
137
164
  }
138
165
  else if (r !== undefined) {
139
- this.current[key] = r;
166
+ this.setValue(key, r);
140
167
  }
141
168
  }
142
169
  }
@@ -148,15 +175,30 @@ class AsyncMapVisitor {
148
175
  constructor(mapFn) {
149
176
  this.mapFn = mapFn;
150
177
  }
178
+ setValue(key, value) {
179
+ if (key === undefined) {
180
+ this.result = value;
181
+ }
182
+ else if (this.current) {
183
+ if (Array.isArray(this.current) && typeof key === 'number') {
184
+ this.current[key] = value;
185
+ }
186
+ else if (!Array.isArray(this.current)) {
187
+ this.current[key] = value;
188
+ }
189
+ }
190
+ }
151
191
  async onStartObject(key) {
192
+ const obj = {};
152
193
  if (key === undefined) {
153
- this.result = {};
154
- this.current = this.result;
194
+ this.result = obj;
195
+ this.current = obj;
155
196
  }
156
197
  else {
157
- this.stack.push(this.current);
158
- const obj = {};
159
- this.current[key] = obj;
198
+ if (this.current) {
199
+ this.stack.push(this.current);
200
+ }
201
+ this.setValue(key, obj);
160
202
  this.current = obj;
161
203
  }
162
204
  }
@@ -164,14 +206,16 @@ class AsyncMapVisitor {
164
206
  this.current = this.stack.pop();
165
207
  }
166
208
  async onStartIteration(key) {
209
+ const ar = [];
167
210
  if (key === undefined) {
168
- this.result = [];
169
- this.current = this.result;
211
+ this.result = ar;
212
+ this.current = ar;
170
213
  }
171
214
  else {
172
- this.stack.push(this.current);
173
- const ar = [];
174
- this.current[key] = ar;
215
+ if (this.current) {
216
+ this.stack.push(this.current);
217
+ }
218
+ this.setValue(key, ar);
175
219
  this.current = ar;
176
220
  }
177
221
  }
@@ -184,7 +228,7 @@ class AsyncMapVisitor {
184
228
  this.result = r;
185
229
  }
186
230
  else if (r !== undefined) {
187
- this.current[key] = r;
231
+ this.setValue(key, r);
188
232
  }
189
233
  }
190
234
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"walk.js","sourceRoot":"","sources":["../src/walk.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,31 +1,29 @@
1
1
  {
2
2
  "name": "@vertesia/json",
3
- "version": "1.2.0",
3
+ "version": "1.3.0-dev.20260620.061059Z",
4
4
  "description": "JSON utlities",
5
5
  "type": "module",
6
- "types": "./lib/types/index.d.ts",
6
+ "main": "./lib/index.js",
7
+ "types": "./lib/index.d.ts",
7
8
  "files": [
8
9
  "lib",
9
10
  "src"
10
11
  ],
11
12
  "license": "Apache-2.0",
12
13
  "exports": {
13
- "types": "./lib/types/index.d.ts",
14
- "import": "./lib/esm/index.js",
15
- "require": "./lib/cjs/index.js"
14
+ ".": {
15
+ "types": "./lib/index.d.ts",
16
+ "default": "./lib/index.js"
17
+ }
16
18
  },
17
19
  "devDependencies": {
18
- "@rollup/plugin-commonjs": "^28.0.3",
19
- "@rollup/plugin-node-resolve": "^16.0.1",
20
- "@rollup/plugin-terser": "^0.4.4",
21
- "@rollup/plugin-typescript": "^12.1.2",
22
- "rollup": "^4.59.0",
23
- "ts-dual-module": "^0.6.3",
24
- "typescript": "^6.0.2",
25
- "vitest": "^4.0.16"
26
- },
27
- "ts_dual_module": {
28
- "outDir": "lib"
20
+ "@rollup/plugin-commonjs": "^29.0.3",
21
+ "@rollup/plugin-node-resolve": "^16.0.3",
22
+ "@rollup/plugin-terser": "^1.0.0",
23
+ "rollup": "^4.61.1",
24
+ "typescript": "^6.0.3",
25
+ "vitest": "^4.1.8",
26
+ "@vertesia/tsconfig": "0.1.0"
29
27
  },
30
28
  "repository": {
31
29
  "type": "git",
@@ -41,9 +39,12 @@
41
39
  "traverse",
42
40
  "typescript"
43
41
  ],
42
+ "gitHead": "126bce3719b6720fab33aa150fc28c7ea7d6b083",
44
43
  "scripts": {
44
+ "lint": "biome lint src",
45
45
  "test": "vitest run",
46
- "build": "pnpm exec tsmod build && pnpm exec rollup -c",
47
- "clean": "rimraf ./node_modules ./lib ./tsconfig.tsbuildinfo"
46
+ "typecheck:test": "tsc -p tsconfig.test.json --noEmit",
47
+ "build": "rm -rf ./lib ./tsconfig.tsbuildinfo && tsc --build && pnpm exec rollup -c",
48
+ "clean": "rm -rf ./node_modules ./lib ./tsconfig.tsbuildinfo"
48
49
  }
49
50
  }
package/src/index.ts CHANGED
@@ -1,2 +1,2 @@
1
- export * from "./types.js"
2
- export * from "./walk.js"
1
+ export * from './types.js';
2
+ export * from './walk.js';
package/src/walk.test.ts CHANGED
@@ -1,87 +1,93 @@
1
- import { describe, expect, test } from "vitest";
2
- import { ObjectWalker, AsyncObjectWalker } from "./walk.js";
1
+ import { describe, expect, test } from 'vitest';
2
+ import { AsyncObjectWalker, ObjectWalker } from './walk.js';
3
3
 
4
- describe('walk object', () => {
4
+ /** Permissive recursive type for navigating untyped walker results in test assertions. */
5
+ type Tree = { readonly [key: string]: Tree };
5
6
 
7
+ describe('walk object', () => {
6
8
  test('find string values', () => {
7
9
  const obj = {
8
- name: "foo",
10
+ name: 'foo',
9
11
  age: 42,
10
- children: [{
11
- name: "bar",
12
- age: 12,
13
- },
14
- {
15
- name: "baz",
16
- age: 15,
17
- }],
12
+ children: [
13
+ {
14
+ name: 'bar',
15
+ age: 12,
16
+ },
17
+ {
18
+ name: 'baz',
19
+ age: 15,
20
+ },
21
+ ],
18
22
  folder: {
19
23
  subfolder: {
20
- name: "file",
21
- }
22
- }
23
- }
24
- const values = ["foo", "bar", "baz", "file"].sort().join(',');
24
+ name: 'file',
25
+ },
26
+ },
27
+ };
28
+ const values = ['foo', 'bar', 'baz', 'file'].sort().join(',');
25
29
  const found: string[] = [];
26
30
  new ObjectWalker().walk(obj, {
27
- onValue(key, value) {
28
- if (typeof value === "string") {
31
+ onValue(_key, value) {
32
+ if (typeof value === 'string') {
29
33
  found.push(value);
30
34
  }
31
- }
32
- })
35
+ },
36
+ });
33
37
  expect(found.sort().join(',')).toBe(values);
34
- })
38
+ });
35
39
 
36
40
  test('map numbers to string values', () => {
37
41
  const obj = {
38
- name: "foo",
42
+ name: 'foo',
39
43
  age: 42,
40
- children: [{
41
- name: "bar",
42
- age: 12,
43
- },
44
- {
45
- name: "baz",
46
- age: 15,
47
- }],
44
+ children: [
45
+ {
46
+ name: 'bar',
47
+ age: 12,
48
+ },
49
+ {
50
+ name: 'baz',
51
+ age: 15,
52
+ },
53
+ ],
48
54
  folder: {
49
55
  subfolder: {
50
56
  name: 123,
51
- }
52
- }
53
- }
57
+ },
58
+ },
59
+ };
54
60
  const r = new ObjectWalker().map(obj, (_key, value) => {
55
- if (typeof value === "number") {
56
- return String(value)
61
+ if (typeof value === 'number') {
62
+ return String(value);
57
63
  }
58
64
  return value;
59
- });
60
- expect(r.age).toBe("42");
61
- expect(r.children[0].age).toBe("12");
62
- expect(r.children[1].age).toBe("15");
63
- expect(r.folder.subfolder.name).toBe("123");
64
- })
65
+ }) as Tree;
66
+ expect(r.age).toBe('42');
67
+ expect(r.children[0].age).toBe('12');
68
+ expect(r.children[1].age).toBe('15');
69
+ expect(r.folder.subfolder.name).toBe('123');
70
+ });
65
71
 
66
72
  test('map numbers in an array to string values', () => {
67
- const obj = [123, { x: 1 }, { y: 2 }, { z: 3 }]
73
+ const obj = [123, { x: 1 }, { y: 2 }, { z: 3 }];
68
74
  const r = new ObjectWalker().map(obj, (_key, value) => {
69
- if (typeof value === "number") {
70
- return String(value)
75
+ if (typeof value === 'number') {
76
+ return String(value);
71
77
  }
72
78
  return value;
73
- });
79
+ }) as unknown as Tree;
74
80
  expect(r.length).toBe(4);
75
- expect(r[0]).toBe("123");
76
- expect(r[1].x).toBe("1");
77
- expect(r[2].y).toBe("2");
78
- expect(r[3].z).toBe("3");
79
- })
81
+ expect(r[0]).toBe('123');
82
+ expect(r[1].x).toBe('1');
83
+ expect(r[2].y).toBe('2');
84
+ expect(r[3].z).toBe('3');
85
+ });
80
86
 
81
87
  test('async map', async () => {
82
88
  const obj = { ar: [123, { x: 1 }, { y: { a: 1, b: [2] } }] };
83
- const r: any = await new AsyncObjectWalker().map(obj, async (_key, value) => {
84
- if (typeof value === "number") {
89
+ const r = (await new AsyncObjectWalker().map(obj, async (_key, value) => {
90
+ if (typeof value === 'number') {
85
91
  return new Promise((resolve) => {
86
92
  return setTimeout(() => {
87
93
  resolve(String(value));
@@ -89,17 +95,16 @@ describe('walk object', () => {
89
95
  });
90
96
  }
91
97
  return value;
92
- });
98
+ })) as Tree;
93
99
  expect(Array.isArray(r.ar)).toBe(true);
94
100
  expect(r.ar.length).toBe(obj.ar.length);
95
- expect(r.ar[0]).toBe("123");
96
- expect(r.ar[1].x).toBe("1");
97
- const y: any = r.ar[2].y;
98
- expect(y.a).toBe("1");
101
+ expect(r.ar[0]).toBe('123');
102
+ expect(r.ar[1].x).toBe('1');
103
+ const y = r.ar[2].y;
104
+ expect(y.a).toBe('1');
99
105
  console.log(y.b);
100
106
  expect(Array.isArray(y.b)).toBe(true);
101
107
  expect(y.b.length).toBe(1);
102
- expect(y.b[0]).toBe("2");
103
- })
104
-
105
- })
108
+ expect(y.b[0]).toBe('2');
109
+ });
110
+ });