@datastream/object
Advanced tools
+2
-0
@@ -40,2 +40,3 @@ // Copyright 2026 will Farrell, and datastream contributors. | ||
| valueParam?: string; | ||
| isNestedObject?: boolean; | ||
| }, | ||
@@ -65,2 +66,3 @@ streamOptions?: StreamOptions, | ||
| separator: string; | ||
| isNestedObject?: boolean; | ||
| }, | ||
@@ -67,0 +69,0 @@ streamOptions?: StreamOptions, |
+40
-32
@@ -58,14 +58,8 @@ import { | ||
| }; | ||
| const objectPivotWideToLongStream = ({ keys, keyParam, valueParam }, streamOptions = {}) => { | ||
| const objectPivotWideToLongStream = ({ keys, keyParam, valueParam, isNestedObject }, streamOptions = {}) => { | ||
| keyParam ??= "keyParam"; | ||
| valueParam ??= "valueParam"; | ||
| const clone = isNestedObject ? deepClone : shallowClone; | ||
| const transform = (chunk, enqueue) => { | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| const value = clone(chunk); | ||
| for (const key of keys) { | ||
@@ -102,12 +96,6 @@ delete value[key]; | ||
| }; | ||
| const objectKeyJoinStream = ({ keys, separator }, streamOptions = {}) => { | ||
| const objectKeyJoinStream = ({ keys, separator, isNestedObject }, streamOptions = {}) => { | ||
| const clone = isNestedObject ? deepClone : shallowClone; | ||
| const transform = (chunk, enqueue) => { | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| const value = clone(chunk); | ||
| for (const newKey of Object.keys(keys)) { | ||
@@ -191,19 +179,39 @@ value[newKey] = keys[newKey].map((oldKey) => { | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (_options = {}, streamOptions = {}) => { | ||
| const deepClone = (obj) => { | ||
| try { | ||
| return structuredClone(obj); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| }; | ||
| const shallowClone = (obj) => ({ ...obj }); | ||
| const shallowEqual = (a, b) => { | ||
| if (a === b) return true; | ||
| if (a == null || b == null) return false; | ||
| const keysA = Object.keys(a); | ||
| if (keysA.length !== Object.keys(b).length) return false; | ||
| for (const key of keysA) { | ||
| if (a[key] !== b[key]) return false; | ||
| } | ||
| return true; | ||
| }; | ||
| const deepEqual = (a, b) => { | ||
| try { | ||
| return JSON.stringify(a) === JSON.stringify(b); | ||
| } catch (e) { | ||
| throw new Error("Failed to stringify chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (options = {}, streamOptions = {}) => { | ||
| const { isNestedObject } = options; | ||
| const equal = isNestedObject ? deepEqual : shallowEqual; | ||
| let previousChunk; | ||
| const transform = (chunk, enqueue) => { | ||
| let chunkStringified; | ||
| try { | ||
| chunkStringified = JSON.stringify(chunk); | ||
| } catch (e) { | ||
| throw new Error( | ||
| "Failed to stringify chunk, possibly circular reference", | ||
| { | ||
| cause: e | ||
| } | ||
| ); | ||
| } | ||
| if (chunkStringified !== previousChunk) { | ||
| if (!equal(chunk, previousChunk)) { | ||
| enqueue(chunk); | ||
| previousChunk = chunkStringified; | ||
| previousChunk = isNestedObject ? deepClone(chunk) : chunk; | ||
| } | ||
@@ -210,0 +218,0 @@ }; |
| { | ||
| "version": 3, | ||
| "sources": ["index.js"], | ||
| "sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tcreatePassThroughStream,\n\tcreateReadableStream,\n\tcreateTransformStream,\n} from \"@datastream/core\";\n\nexport const objectReadableStream = (input = [], streamOptions = {}) => {\n\treturn createReadableStream(input, streamOptions);\n};\n\nexport const objectCountStream = ({ resultKey } = {}, streamOptions = {}) => {\n\tlet value = 0;\n\tconst passThrough = () => {\n\t\tvalue += 1;\n\t};\n\tconst stream = createPassThroughStream(passThrough, streamOptions);\n\tstream.result = () => ({ key: resultKey ?? \"count\", value });\n\treturn stream;\n};\n\nexport const objectBatchStream = ({ keys }, streamOptions = {}) => {\n\tlet previousId;\n\tlet batch;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst id = keys.map((key) => chunk[key]).join(\" \");\n\t\tif (previousId !== id) {\n\t\t\tif (batch) {\n\t\t\t\tenqueue(batch);\n\t\t\t}\n\t\t\tpreviousId = id;\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push(chunk);\n\t};\n\tconst flush = (enqueue) => {\n\t\tif (batch) {\n\t\t\tenqueue(batch);\n\t\t}\n\t};\n\treturn createTransformStream(transform, flush, streamOptions);\n};\n\nexport const objectPivotLongToWideStream = (\n\t{ keys, valueParam, delimiter },\n\tstreamOptions = {},\n) => {\n\tdelimiter ??= \" \";\n\n\tconst transform = (chunks, enqueue) => {\n\t\tif (!Array.isArray(chunks)) {\n\t\t\tthrow new Error(\"Expected chunk to be array, use with objectBatchStream\");\n\t\t}\n\t\tconst row = chunks[0];\n\n\t\tfor (const chunk of chunks) {\n\t\t\tconst keyParam = keys.map((key) => chunk[key]).join(delimiter);\n\t\t\trow[keyParam] = chunk[valueParam];\n\t\t}\n\n\t\tfor (const key of keys) {\n\t\t\tdelete row[key];\n\t\t}\n\t\tdelete row[valueParam];\n\n\t\tenqueue(row);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPivotWideToLongStream = (\n\t{ keys, keyParam, valueParam },\n\tstreamOptions = {},\n) => {\n\tkeyParam ??= \"keyParam\";\n\tvalueParam ??= \"valueParam\";\n\n\tconst transform = (chunk, enqueue) => {\n\t\tlet value;\n\t\ttry {\n\t\t\tvalue = structuredClone(chunk);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"Failed to clone chunk, possibly circular reference\", {\n\t\t\t\tcause: e,\n\t\t\t});\n\t\t}\n\t\tfor (const key of keys) {\n\t\t\tdelete value[key];\n\t\t}\n\t\tfor (const key of keys) {\n\t\t\t// skip if pivot key doesn't exist\n\t\t\tif (Object.hasOwn(chunk, key)) {\n\t\t\t\tenqueue({ ...value, [keyParam]: key, [valueParam]: chunk[key] });\n\t\t\t}\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValueStream = ({ key, value }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk = { [chunk[key]]: chunk[value] };\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValuesStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value =\n\t\t\ttypeof values === \"undefined\"\n\t\t\t\t? chunk\n\t\t\t\t: values.reduce((value, key) => {\n\t\t\t\t\t\tvalue[key] = chunk[key];\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}, {});\n\t\tchunk = {\n\t\t\t[chunk[key]]: value,\n\t\t};\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyJoinStream = (\n\t{ keys, separator },\n\tstreamOptions = {},\n) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tlet value;\n\t\ttry {\n\t\t\tvalue = structuredClone(chunk);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"Failed to clone chunk, possibly circular reference\", {\n\t\t\t\tcause: e,\n\t\t\t});\n\t\t}\n\t\tfor (const newKey of Object.keys(keys)) {\n\t\t\t// perf opportunity\n\t\t\tvalue[newKey] = keys[newKey]\n\t\t\t\t.map((oldKey) => {\n\t\t\t\t\tdelete value[oldKey];\n\t\t\t\t\treturn chunk[oldKey];\n\t\t\t\t})\n\t\t\t\t.join(separator);\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyMapStream = ({ keys }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tconst newKey = keys[key] ?? key;\n\t\t\tvalue[newKey] = chunk[key];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectValueMapStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk[key] = values[chunk[key]];\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPickStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectOmitStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (!keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n// objectKeySplit = ({keys: { oldKey: /^(?<newKey>.*)$/ }) => { }\n\nexport const objectFromEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = {};\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[resolvedKeys[i]] = chunk[i];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectToEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = [];\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[i] = chunk[resolvedKeys[i]];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectSkipConsecutiveDuplicatesStream = (\n\t_options = {},\n\tstreamOptions = {},\n) => {\n\tlet previousChunk;\n\tconst transform = (chunk, enqueue) => {\n\t\tlet chunkStringified;\n\t\ttry {\n\t\t\tchunkStringified = JSON.stringify(chunk);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Failed to stringify chunk, possibly circular reference\",\n\t\t\t\t{\n\t\t\t\t\tcause: e,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tif (chunkStringified !== previousChunk) {\n\t\t\tenqueue(chunk);\n\t\t\tpreviousChunk = chunkStringified;\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport default {\n\treadableStream: objectReadableStream,\n\tcountStream: objectCountStream,\n\tpickStream: objectPickStream,\n\tomitStream: objectOmitStream,\n\tbatchStream: objectBatchStream,\n\tpivotLongToWideStream: objectPivotLongToWideStream,\n\tpivotWideToLongStream: objectPivotWideToLongStream,\n\tkeyValueStream: objectKeyValueStream,\n\tkeyValuesStream: objectKeyValuesStream,\n\tkeyJoinStream: objectKeyJoinStream,\n\tkeyMapStream: objectKeyMapStream,\n\tvalueMapStream: objectValueMapStream,\n\tfromEntriesStream: objectFromEntriesStream,\n\ttoEntriesStream: objectToEntriesStream,\n\tskipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream,\n};\n"], | ||
| "mappings": "AAEA;AAAA,EACC;AAAA,EACA;AAAA,EACA;AAAA,OACM;AAEA,MAAM,uBAAuB,CAAC,QAAQ,CAAC,GAAG,gBAAgB,CAAC,MAAM;AACvE,SAAO,qBAAqB,OAAO,aAAa;AACjD;AAEO,MAAM,oBAAoB,CAAC,EAAE,UAAU,IAAI,CAAC,GAAG,gBAAgB,CAAC,MAAM;AAC5E,MAAI,QAAQ;AACZ,QAAM,cAAc,MAAM;AACzB,aAAS;AAAA,EACV;AACA,QAAM,SAAS,wBAAwB,aAAa,aAAa;AACjE,SAAO,SAAS,OAAO,EAAE,KAAK,aAAa,SAAS,MAAM;AAC1D,SAAO;AACR;AAEO,MAAM,oBAAoB,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM;AAClE,MAAI;AACJ,MAAI;AACJ,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,KAAK,KAAK,IAAI,CAAC,QAAQ,MAAM,GAAG,CAAC,EAAE,KAAK,GAAG;AACjD,QAAI,eAAe,IAAI;AACtB,UAAI,OAAO;AACV,gBAAQ,KAAK;AAAA,MACd;AACA,mBAAa;AACb,cAAQ,CAAC;AAAA,IACV;AACA,UAAM,KAAK,KAAK;AAAA,EACjB;AACA,QAAM,QAAQ,CAAC,YAAY;AAC1B,QAAI,OAAO;AACV,cAAQ,KAAK;AAAA,IACd;AAAA,EACD;AACA,SAAO,sBAAsB,WAAW,OAAO,aAAa;AAC7D;AAEO,MAAM,8BAA8B,CAC1C,EAAE,MAAM,YAAY,UAAU,GAC9B,gBAAgB,CAAC,MACb;AACJ,gBAAc;AAEd,QAAM,YAAY,CAAC,QAAQ,YAAY;AACtC,QAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC3B,YAAM,IAAI,MAAM,wDAAwD;AAAA,IACzE;AACA,UAAM,MAAM,OAAO,CAAC;AAEpB,eAAW,SAAS,QAAQ;AAC3B,YAAM,WAAW,KAAK,IAAI,CAAC,QAAQ,MAAM,GAAG,CAAC,EAAE,KAAK,SAAS;AAC7D,UAAI,QAAQ,IAAI,MAAM,UAAU;AAAA,IACjC;AAEA,eAAW,OAAO,MAAM;AACvB,aAAO,IAAI,GAAG;AAAA,IACf;AACA,WAAO,IAAI,UAAU;AAErB,YAAQ,GAAG;AAAA,EACZ;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,8BAA8B,CAC1C,EAAE,MAAM,UAAU,WAAW,GAC7B,gBAAgB,CAAC,MACb;AACJ,eAAa;AACb,iBAAe;AAEf,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,QAAI;AACJ,QAAI;AACH,cAAQ,gBAAgB,KAAK;AAAA,IAC9B,SAAS,GAAG;AACX,YAAM,IAAI,MAAM,sDAAsD;AAAA,QACrE,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,eAAW,OAAO,MAAM;AACvB,aAAO,MAAM,GAAG;AAAA,IACjB;AACA,eAAW,OAAO,MAAM;AAEvB,UAAI,OAAO,OAAO,OAAO,GAAG,GAAG;AAC9B,gBAAQ,EAAE,GAAG,OAAO,CAAC,QAAQ,GAAG,KAAK,CAAC,UAAU,GAAG,MAAM,GAAG,EAAE,CAAC;AAAA,MAChE;AAAA,IACD;AAAA,EACD;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,uBAAuB,CAAC,EAAE,KAAK,MAAM,GAAG,gBAAgB,CAAC,MAAM;AAC3E,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,YAAQ,EAAE,CAAC,MAAM,GAAG,CAAC,GAAG,MAAM,KAAK,EAAE;AACrC,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,wBAAwB,CAAC,EAAE,KAAK,OAAO,GAAG,gBAAgB,CAAC,MAAM;AAC7E,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,QACL,OAAO,WAAW,cACf,QACA,OAAO,OAAO,CAACA,QAAOC,SAAQ;AAC9B,MAAAD,OAAMC,IAAG,IAAI,MAAMA,IAAG;AACtB,aAAOD;AAAA,IACR,GAAG,CAAC,CAAC;AACR,YAAQ;AAAA,MACP,CAAC,MAAM,GAAG,CAAC,GAAG;AAAA,IACf;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,sBAAsB,CAClC,EAAE,MAAM,UAAU,GAClB,gBAAgB,CAAC,MACb;AACJ,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,QAAI;AACJ,QAAI;AACH,cAAQ,gBAAgB,KAAK;AAAA,IAC9B,SAAS,GAAG;AACX,YAAM,IAAI,MAAM,sDAAsD;AAAA,QACrE,OAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,eAAW,UAAU,OAAO,KAAK,IAAI,GAAG;AAEvC,YAAM,MAAM,IAAI,KAAK,MAAM,EACzB,IAAI,CAAC,WAAW;AAChB,eAAO,MAAM,MAAM;AACnB,eAAO,MAAM,MAAM;AAAA,MACpB,CAAC,EACA,KAAK,SAAS;AAAA,IACjB;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,qBAAqB,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM;AACnE,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACrC,YAAM,SAAS,KAAK,GAAG,KAAK;AAC5B,YAAM,MAAM,IAAI,MAAM,GAAG;AAAA,IAC1B;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,uBAAuB,CAAC,EAAE,KAAK,OAAO,GAAG,gBAAgB,CAAC,MAAM;AAC5E,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,GAAG,IAAI,OAAO,MAAM,GAAG,CAAC;AAC9B,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,mBAAmB,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM;AACjE,QAAM,SAAS,OAAO,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5D,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACrC,UAAI,OAAO,GAAG,GAAG;AAChB,cAAM,GAAG,IAAI,MAAM,GAAG;AAAA,MACvB;AAAA,IACD;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,mBAAmB,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM;AACjE,QAAM,SAAS,OAAO,YAAY,KAAK,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC;AAC5D,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACrC,UAAI,CAAC,OAAO,GAAG,GAAG;AACjB,cAAM,GAAG,IAAI,MAAM,GAAG;AAAA,MACvB;AAAA,IACD;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAGO,MAAM,0BAA0B,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM;AACxE,MAAI;AACJ,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,qBAAiB,OAAO,SAAS,aAAa,KAAK,IAAI;AACvD,UAAM,QAAQ,CAAC;AACf,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC7C,YAAM,aAAa,CAAC,CAAC,IAAI,MAAM,CAAC;AAAA,IACjC;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,wBAAwB,CAAC,EAAE,KAAK,GAAG,gBAAgB,CAAC,MAAM;AACtE,MAAI;AACJ,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,qBAAiB,OAAO,SAAS,aAAa,KAAK,IAAI;AACvD,UAAM,QAAQ,CAAC;AACf,aAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;AAC7C,YAAM,CAAC,IAAI,MAAM,aAAa,CAAC,CAAC;AAAA,IACjC;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEO,MAAM,wCAAwC,CACpD,WAAW,CAAC,GACZ,gBAAgB,CAAC,MACb;AACJ,MAAI;AACJ,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,QAAI;AACJ,QAAI;AACH,yBAAmB,KAAK,UAAU,KAAK;AAAA,IACxC,SAAS,GAAG;AACX,YAAM,IAAI;AAAA,QACT;AAAA,QACA;AAAA,UACC,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD;AACA,QAAI,qBAAqB,eAAe;AACvC,cAAQ,KAAK;AACb,sBAAgB;AAAA,IACjB;AAAA,EACD;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAEA,IAAO,gBAAQ;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,YAAY;AAAA,EACZ,YAAY;AAAA,EACZ,aAAa;AAAA,EACb,uBAAuB;AAAA,EACvB,uBAAuB;AAAA,EACvB,gBAAgB;AAAA,EAChB,iBAAiB;AAAA,EACjB,eAAe;AAAA,EACf,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,mBAAmB;AAAA,EACnB,iBAAiB;AAAA,EACjB,iCAAiC;AAClC;", | ||
| "sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tcreatePassThroughStream,\n\tcreateReadableStream,\n\tcreateTransformStream,\n} from \"@datastream/core\";\n\nexport const objectReadableStream = (input = [], streamOptions = {}) => {\n\treturn createReadableStream(input, streamOptions);\n};\n\nexport const objectCountStream = ({ resultKey } = {}, streamOptions = {}) => {\n\tlet value = 0;\n\tconst passThrough = () => {\n\t\tvalue += 1;\n\t};\n\tconst stream = createPassThroughStream(passThrough, streamOptions);\n\tstream.result = () => ({ key: resultKey ?? \"count\", value });\n\treturn stream;\n};\n\nexport const objectBatchStream = ({ keys }, streamOptions = {}) => {\n\tlet previousId;\n\tlet batch;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst id = keys.map((key) => chunk[key]).join(\" \");\n\t\tif (previousId !== id) {\n\t\t\tif (batch) {\n\t\t\t\tenqueue(batch);\n\t\t\t}\n\t\t\tpreviousId = id;\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push(chunk);\n\t};\n\tconst flush = (enqueue) => {\n\t\tif (batch) {\n\t\t\tenqueue(batch);\n\t\t}\n\t};\n\treturn createTransformStream(transform, flush, streamOptions);\n};\n\nexport const objectPivotLongToWideStream = (\n\t{ keys, valueParam, delimiter },\n\tstreamOptions = {},\n) => {\n\tdelimiter ??= \" \";\n\n\tconst transform = (chunks, enqueue) => {\n\t\tif (!Array.isArray(chunks)) {\n\t\t\tthrow new Error(\"Expected chunk to be array, use with objectBatchStream\");\n\t\t}\n\t\tconst row = chunks[0];\n\n\t\tfor (const chunk of chunks) {\n\t\t\tconst keyParam = keys.map((key) => chunk[key]).join(delimiter);\n\t\t\trow[keyParam] = chunk[valueParam];\n\t\t}\n\n\t\tfor (const key of keys) {\n\t\t\tdelete row[key];\n\t\t}\n\t\tdelete row[valueParam];\n\n\t\tenqueue(row);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPivotWideToLongStream = (\n\t{ keys, keyParam, valueParam, isNestedObject },\n\tstreamOptions = {},\n) => {\n\tkeyParam ??= \"keyParam\";\n\tvalueParam ??= \"valueParam\";\n\n\tconst clone = isNestedObject ? deepClone : shallowClone;\n\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = clone(chunk);\n\t\tfor (const key of keys) {\n\t\t\tdelete value[key];\n\t\t}\n\t\tfor (const key of keys) {\n\t\t\t// skip if pivot key doesn't exist\n\t\t\tif (Object.hasOwn(chunk, key)) {\n\t\t\t\tenqueue({ ...value, [keyParam]: key, [valueParam]: chunk[key] });\n\t\t\t}\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValueStream = ({ key, value }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk = { [chunk[key]]: chunk[value] };\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValuesStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value =\n\t\t\ttypeof values === \"undefined\"\n\t\t\t\t? chunk\n\t\t\t\t: values.reduce((value, key) => {\n\t\t\t\t\t\tvalue[key] = chunk[key];\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}, {});\n\t\tchunk = {\n\t\t\t[chunk[key]]: value,\n\t\t};\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyJoinStream = (\n\t{ keys, separator, isNestedObject },\n\tstreamOptions = {},\n) => {\n\tconst clone = isNestedObject ? deepClone : shallowClone;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = clone(chunk);\n\t\tfor (const newKey of Object.keys(keys)) {\n\t\t\tvalue[newKey] = keys[newKey]\n\t\t\t\t.map((oldKey) => {\n\t\t\t\t\tdelete value[oldKey];\n\t\t\t\t\treturn chunk[oldKey];\n\t\t\t\t})\n\t\t\t\t.join(separator);\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyMapStream = ({ keys }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tconst newKey = keys[key] ?? key;\n\t\t\tvalue[newKey] = chunk[key];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectValueMapStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk[key] = values[chunk[key]];\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPickStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectOmitStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (!keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n// objectKeySplit = ({keys: { oldKey: /^(?<newKey>.*)$/ }) => { }\n\nexport const objectFromEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = {};\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[resolvedKeys[i]] = chunk[i];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectToEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = [];\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[i] = chunk[resolvedKeys[i]];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nconst deepClone = (obj) => {\n\ttry {\n\t\treturn structuredClone(obj);\n\t} catch (e) {\n\t\tthrow new Error(\"Failed to clone chunk, possibly circular reference\", {\n\t\t\tcause: e,\n\t\t});\n\t}\n};\nconst shallowClone = (obj) => ({ ...obj });\n\nconst shallowEqual = (a, b) => {\n\tif (a === b) return true;\n\tif (a == null || b == null) return false;\n\tconst keysA = Object.keys(a);\n\tif (keysA.length !== Object.keys(b).length) return false;\n\tfor (const key of keysA) {\n\t\tif (a[key] !== b[key]) return false;\n\t}\n\treturn true;\n};\n\nconst deepEqual = (a, b) => {\n\ttry {\n\t\treturn JSON.stringify(a) === JSON.stringify(b);\n\t} catch (e) {\n\t\tthrow new Error(\"Failed to stringify chunk, possibly circular reference\", {\n\t\t\tcause: e,\n\t\t});\n\t}\n};\n\nexport const objectSkipConsecutiveDuplicatesStream = (\n\toptions = {},\n\tstreamOptions = {},\n) => {\n\tconst { isNestedObject } = options;\n\tconst equal = isNestedObject ? deepEqual : shallowEqual;\n\tlet previousChunk;\n\tconst transform = (chunk, enqueue) => {\n\t\tif (!equal(chunk, previousChunk)) {\n\t\t\tenqueue(chunk);\n\t\t\tpreviousChunk = isNestedObject ? deepClone(chunk) : chunk;\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport default {\n\treadableStream: objectReadableStream,\n\tcountStream: objectCountStream,\n\tpickStream: objectPickStream,\n\tomitStream: objectOmitStream,\n\tbatchStream: objectBatchStream,\n\tpivotLongToWideStream: objectPivotLongToWideStream,\n\tpivotWideToLongStream: objectPivotWideToLongStream,\n\tkeyValueStream: objectKeyValueStream,\n\tkeyValuesStream: objectKeyValuesStream,\n\tkeyJoinStream: objectKeyJoinStream,\n\tkeyMapStream: objectKeyMapStream,\n\tvalueMapStream: objectValueMapStream,\n\tfromEntriesStream: objectFromEntriesStream,\n\ttoEntriesStream: objectToEntriesStream,\n\tskipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream,\n};\n"], | ||
| "mappings": "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", | ||
| "names": ["value", "key"] | ||
| } |
+40
-32
@@ -58,14 +58,8 @@ import { | ||
| }; | ||
| const objectPivotWideToLongStream = ({ keys, keyParam, valueParam }, streamOptions = {}) => { | ||
| const objectPivotWideToLongStream = ({ keys, keyParam, valueParam, isNestedObject }, streamOptions = {}) => { | ||
| keyParam ??= "keyParam"; | ||
| valueParam ??= "valueParam"; | ||
| const clone = isNestedObject ? deepClone : shallowClone; | ||
| const transform = (chunk, enqueue) => { | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| const value = clone(chunk); | ||
| for (const key of keys) { | ||
@@ -102,12 +96,6 @@ delete value[key]; | ||
| }; | ||
| const objectKeyJoinStream = ({ keys, separator }, streamOptions = {}) => { | ||
| const objectKeyJoinStream = ({ keys, separator, isNestedObject }, streamOptions = {}) => { | ||
| const clone = isNestedObject ? deepClone : shallowClone; | ||
| const transform = (chunk, enqueue) => { | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| const value = clone(chunk); | ||
| for (const newKey of Object.keys(keys)) { | ||
@@ -191,19 +179,39 @@ value[newKey] = keys[newKey].map((oldKey) => { | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (_options = {}, streamOptions = {}) => { | ||
| const deepClone = (obj) => { | ||
| try { | ||
| return structuredClone(obj); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| }; | ||
| const shallowClone = (obj) => ({ ...obj }); | ||
| const shallowEqual = (a, b) => { | ||
| if (a === b) return true; | ||
| if (a == null || b == null) return false; | ||
| const keysA = Object.keys(a); | ||
| if (keysA.length !== Object.keys(b).length) return false; | ||
| for (const key of keysA) { | ||
| if (a[key] !== b[key]) return false; | ||
| } | ||
| return true; | ||
| }; | ||
| const deepEqual = (a, b) => { | ||
| try { | ||
| return JSON.stringify(a) === JSON.stringify(b); | ||
| } catch (e) { | ||
| throw new Error("Failed to stringify chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (options = {}, streamOptions = {}) => { | ||
| const { isNestedObject } = options; | ||
| const equal = isNestedObject ? deepEqual : shallowEqual; | ||
| let previousChunk; | ||
| const transform = (chunk, enqueue) => { | ||
| let chunkStringified; | ||
| try { | ||
| chunkStringified = JSON.stringify(chunk); | ||
| } catch (e) { | ||
| throw new Error( | ||
| "Failed to stringify chunk, possibly circular reference", | ||
| { | ||
| cause: e | ||
| } | ||
| ); | ||
| } | ||
| if (chunkStringified !== previousChunk) { | ||
| if (!equal(chunk, previousChunk)) { | ||
| enqueue(chunk); | ||
| previousChunk = chunkStringified; | ||
| previousChunk = isNestedObject ? deepClone(chunk) : chunk; | ||
| } | ||
@@ -210,0 +218,0 @@ }; |
| { | ||
| "version": 3, | ||
| "sources": ["index.js"], | ||
| "sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tcreatePassThroughStream,\n\tcreateReadableStream,\n\tcreateTransformStream,\n} from \"@datastream/core\";\n\nexport const objectReadableStream = (input = [], streamOptions = {}) => {\n\treturn createReadableStream(input, streamOptions);\n};\n\nexport const objectCountStream = ({ resultKey } = {}, streamOptions = {}) => {\n\tlet value = 0;\n\tconst passThrough = () => {\n\t\tvalue += 1;\n\t};\n\tconst stream = createPassThroughStream(passThrough, streamOptions);\n\tstream.result = () => ({ key: resultKey ?? \"count\", value });\n\treturn stream;\n};\n\nexport const objectBatchStream = ({ keys }, streamOptions = {}) => {\n\tlet previousId;\n\tlet batch;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst id = keys.map((key) => chunk[key]).join(\" \");\n\t\tif (previousId !== id) {\n\t\t\tif (batch) {\n\t\t\t\tenqueue(batch);\n\t\t\t}\n\t\t\tpreviousId = id;\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push(chunk);\n\t};\n\tconst flush = (enqueue) => {\n\t\tif (batch) {\n\t\t\tenqueue(batch);\n\t\t}\n\t};\n\treturn createTransformStream(transform, flush, streamOptions);\n};\n\nexport const objectPivotLongToWideStream = (\n\t{ keys, valueParam, delimiter },\n\tstreamOptions = {},\n) => {\n\tdelimiter ??= \" \";\n\n\tconst transform = (chunks, enqueue) => {\n\t\tif (!Array.isArray(chunks)) {\n\t\t\tthrow new Error(\"Expected chunk to be array, use with objectBatchStream\");\n\t\t}\n\t\tconst row = chunks[0];\n\n\t\tfor (const chunk of chunks) {\n\t\t\tconst keyParam = keys.map((key) => chunk[key]).join(delimiter);\n\t\t\trow[keyParam] = chunk[valueParam];\n\t\t}\n\n\t\tfor (const key of keys) {\n\t\t\tdelete row[key];\n\t\t}\n\t\tdelete row[valueParam];\n\n\t\tenqueue(row);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPivotWideToLongStream = (\n\t{ keys, keyParam, valueParam },\n\tstreamOptions = {},\n) => {\n\tkeyParam ??= \"keyParam\";\n\tvalueParam ??= \"valueParam\";\n\n\tconst transform = (chunk, enqueue) => {\n\t\tlet value;\n\t\ttry {\n\t\t\tvalue = structuredClone(chunk);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"Failed to clone chunk, possibly circular reference\", {\n\t\t\t\tcause: e,\n\t\t\t});\n\t\t}\n\t\tfor (const key of keys) {\n\t\t\tdelete value[key];\n\t\t}\n\t\tfor (const key of keys) {\n\t\t\t// skip if pivot key doesn't exist\n\t\t\tif (Object.hasOwn(chunk, key)) {\n\t\t\t\tenqueue({ ...value, [keyParam]: key, [valueParam]: chunk[key] });\n\t\t\t}\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValueStream = ({ key, value }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk = { [chunk[key]]: chunk[value] };\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValuesStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value =\n\t\t\ttypeof values === \"undefined\"\n\t\t\t\t? chunk\n\t\t\t\t: values.reduce((value, key) => {\n\t\t\t\t\t\tvalue[key] = chunk[key];\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}, {});\n\t\tchunk = {\n\t\t\t[chunk[key]]: value,\n\t\t};\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyJoinStream = (\n\t{ keys, separator },\n\tstreamOptions = {},\n) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tlet value;\n\t\ttry {\n\t\t\tvalue = structuredClone(chunk);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\"Failed to clone chunk, possibly circular reference\", {\n\t\t\t\tcause: e,\n\t\t\t});\n\t\t}\n\t\tfor (const newKey of Object.keys(keys)) {\n\t\t\t// perf opportunity\n\t\t\tvalue[newKey] = keys[newKey]\n\t\t\t\t.map((oldKey) => {\n\t\t\t\t\tdelete value[oldKey];\n\t\t\t\t\treturn chunk[oldKey];\n\t\t\t\t})\n\t\t\t\t.join(separator);\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyMapStream = ({ keys }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tconst newKey = keys[key] ?? key;\n\t\t\tvalue[newKey] = chunk[key];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectValueMapStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk[key] = values[chunk[key]];\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPickStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectOmitStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (!keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n// objectKeySplit = ({keys: { oldKey: /^(?<newKey>.*)$/ }) => { }\n\nexport const objectFromEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = {};\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[resolvedKeys[i]] = chunk[i];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectToEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = [];\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[i] = chunk[resolvedKeys[i]];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectSkipConsecutiveDuplicatesStream = (\n\t_options = {},\n\tstreamOptions = {},\n) => {\n\tlet previousChunk;\n\tconst transform = (chunk, enqueue) => {\n\t\tlet chunkStringified;\n\t\ttry {\n\t\t\tchunkStringified = JSON.stringify(chunk);\n\t\t} catch (e) {\n\t\t\tthrow new Error(\n\t\t\t\t\"Failed to stringify chunk, possibly circular reference\",\n\t\t\t\t{\n\t\t\t\t\tcause: e,\n\t\t\t\t},\n\t\t\t);\n\t\t}\n\t\tif (chunkStringified !== previousChunk) {\n\t\t\tenqueue(chunk);\n\t\t\tpreviousChunk = chunkStringified;\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport default {\n\treadableStream: objectReadableStream,\n\tcountStream: objectCountStream,\n\tpickStream: objectPickStream,\n\tomitStream: objectOmitStream,\n\tbatchStream: objectBatchStream,\n\tpivotLongToWideStream: objectPivotLongToWideStream,\n\tpivotWideToLongStream: objectPivotWideToLongStream,\n\tkeyValueStream: objectKeyValueStream,\n\tkeyValuesStream: objectKeyValuesStream,\n\tkeyJoinStream: objectKeyJoinStream,\n\tkeyMapStream: objectKeyMapStream,\n\tvalueMapStream: objectValueMapStream,\n\tfromEntriesStream: objectFromEntriesStream,\n\ttoEntriesStream: objectToEntriesStream,\n\tskipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream,\n};\n"], | ||
| "mappings": "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", | ||
| "sourcesContent": ["// Copyright 2026 will Farrell, and datastream contributors.\n// SPDX-License-Identifier: MIT\nimport {\n\tcreatePassThroughStream,\n\tcreateReadableStream,\n\tcreateTransformStream,\n} from \"@datastream/core\";\n\nexport const objectReadableStream = (input = [], streamOptions = {}) => {\n\treturn createReadableStream(input, streamOptions);\n};\n\nexport const objectCountStream = ({ resultKey } = {}, streamOptions = {}) => {\n\tlet value = 0;\n\tconst passThrough = () => {\n\t\tvalue += 1;\n\t};\n\tconst stream = createPassThroughStream(passThrough, streamOptions);\n\tstream.result = () => ({ key: resultKey ?? \"count\", value });\n\treturn stream;\n};\n\nexport const objectBatchStream = ({ keys }, streamOptions = {}) => {\n\tlet previousId;\n\tlet batch;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst id = keys.map((key) => chunk[key]).join(\" \");\n\t\tif (previousId !== id) {\n\t\t\tif (batch) {\n\t\t\t\tenqueue(batch);\n\t\t\t}\n\t\t\tpreviousId = id;\n\t\t\tbatch = [];\n\t\t}\n\t\tbatch.push(chunk);\n\t};\n\tconst flush = (enqueue) => {\n\t\tif (batch) {\n\t\t\tenqueue(batch);\n\t\t}\n\t};\n\treturn createTransformStream(transform, flush, streamOptions);\n};\n\nexport const objectPivotLongToWideStream = (\n\t{ keys, valueParam, delimiter },\n\tstreamOptions = {},\n) => {\n\tdelimiter ??= \" \";\n\n\tconst transform = (chunks, enqueue) => {\n\t\tif (!Array.isArray(chunks)) {\n\t\t\tthrow new Error(\"Expected chunk to be array, use with objectBatchStream\");\n\t\t}\n\t\tconst row = chunks[0];\n\n\t\tfor (const chunk of chunks) {\n\t\t\tconst keyParam = keys.map((key) => chunk[key]).join(delimiter);\n\t\t\trow[keyParam] = chunk[valueParam];\n\t\t}\n\n\t\tfor (const key of keys) {\n\t\t\tdelete row[key];\n\t\t}\n\t\tdelete row[valueParam];\n\n\t\tenqueue(row);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPivotWideToLongStream = (\n\t{ keys, keyParam, valueParam, isNestedObject },\n\tstreamOptions = {},\n) => {\n\tkeyParam ??= \"keyParam\";\n\tvalueParam ??= \"valueParam\";\n\n\tconst clone = isNestedObject ? deepClone : shallowClone;\n\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = clone(chunk);\n\t\tfor (const key of keys) {\n\t\t\tdelete value[key];\n\t\t}\n\t\tfor (const key of keys) {\n\t\t\t// skip if pivot key doesn't exist\n\t\t\tif (Object.hasOwn(chunk, key)) {\n\t\t\t\tenqueue({ ...value, [keyParam]: key, [valueParam]: chunk[key] });\n\t\t\t}\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValueStream = ({ key, value }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk = { [chunk[key]]: chunk[value] };\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyValuesStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value =\n\t\t\ttypeof values === \"undefined\"\n\t\t\t\t? chunk\n\t\t\t\t: values.reduce((value, key) => {\n\t\t\t\t\t\tvalue[key] = chunk[key];\n\t\t\t\t\t\treturn value;\n\t\t\t\t\t}, {});\n\t\tchunk = {\n\t\t\t[chunk[key]]: value,\n\t\t};\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyJoinStream = (\n\t{ keys, separator, isNestedObject },\n\tstreamOptions = {},\n) => {\n\tconst clone = isNestedObject ? deepClone : shallowClone;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = clone(chunk);\n\t\tfor (const newKey of Object.keys(keys)) {\n\t\t\tvalue[newKey] = keys[newKey]\n\t\t\t\t.map((oldKey) => {\n\t\t\t\t\tdelete value[oldKey];\n\t\t\t\t\treturn chunk[oldKey];\n\t\t\t\t})\n\t\t\t\t.join(separator);\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectKeyMapStream = ({ keys }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tconst newKey = keys[key] ?? key;\n\t\t\tvalue[newKey] = chunk[key];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectValueMapStream = ({ key, values }, streamOptions = {}) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tchunk[key] = values[chunk[key]];\n\t\tenqueue(chunk);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectPickStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectOmitStream = ({ keys }, streamOptions = {}) => {\n\tconst keySet = Object.fromEntries(keys.map((k) => [k, true]));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key of Object.keys(chunk)) {\n\t\t\tif (!keySet[key]) {\n\t\t\t\tvalue[key] = chunk[key];\n\t\t\t}\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n// objectKeySplit = ({keys: { oldKey: /^(?<newKey>.*)$/ }) => { }\n\nexport const objectFromEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = {};\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[resolvedKeys[i]] = chunk[i];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport const objectToEntriesStream = ({ keys }, streamOptions = {}) => {\n\tlet resolvedKeys;\n\tconst transform = (chunk, enqueue) => {\n\t\tresolvedKeys ??= typeof keys === \"function\" ? keys() : keys;\n\t\tconst value = [];\n\t\tfor (let i = 0; i < resolvedKeys.length; i++) {\n\t\t\tvalue[i] = chunk[resolvedKeys[i]];\n\t\t}\n\t\tenqueue(value);\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nconst deepClone = (obj) => {\n\ttry {\n\t\treturn structuredClone(obj);\n\t} catch (e) {\n\t\tthrow new Error(\"Failed to clone chunk, possibly circular reference\", {\n\t\t\tcause: e,\n\t\t});\n\t}\n};\nconst shallowClone = (obj) => ({ ...obj });\n\nconst shallowEqual = (a, b) => {\n\tif (a === b) return true;\n\tif (a == null || b == null) return false;\n\tconst keysA = Object.keys(a);\n\tif (keysA.length !== Object.keys(b).length) return false;\n\tfor (const key of keysA) {\n\t\tif (a[key] !== b[key]) return false;\n\t}\n\treturn true;\n};\n\nconst deepEqual = (a, b) => {\n\ttry {\n\t\treturn JSON.stringify(a) === JSON.stringify(b);\n\t} catch (e) {\n\t\tthrow new Error(\"Failed to stringify chunk, possibly circular reference\", {\n\t\t\tcause: e,\n\t\t});\n\t}\n};\n\nexport const objectSkipConsecutiveDuplicatesStream = (\n\toptions = {},\n\tstreamOptions = {},\n) => {\n\tconst { isNestedObject } = options;\n\tconst equal = isNestedObject ? deepEqual : shallowEqual;\n\tlet previousChunk;\n\tconst transform = (chunk, enqueue) => {\n\t\tif (!equal(chunk, previousChunk)) {\n\t\t\tenqueue(chunk);\n\t\t\tpreviousChunk = isNestedObject ? deepClone(chunk) : chunk;\n\t\t}\n\t};\n\treturn createTransformStream(transform, streamOptions);\n};\n\nexport default {\n\treadableStream: objectReadableStream,\n\tcountStream: objectCountStream,\n\tpickStream: objectPickStream,\n\tomitStream: objectOmitStream,\n\tbatchStream: objectBatchStream,\n\tpivotLongToWideStream: objectPivotLongToWideStream,\n\tpivotWideToLongStream: objectPivotWideToLongStream,\n\tkeyValueStream: objectKeyValueStream,\n\tkeyValuesStream: objectKeyValuesStream,\n\tkeyJoinStream: objectKeyJoinStream,\n\tkeyMapStream: objectKeyMapStream,\n\tvalueMapStream: objectValueMapStream,\n\tfromEntriesStream: objectFromEntriesStream,\n\ttoEntriesStream: objectToEntriesStream,\n\tskipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream,\n};\n"], | ||
| "mappings": "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", | ||
| "names": ["value", "key"] | ||
| } |
+2
-2
| { | ||
| "name": "@datastream/object", | ||
| "version": "0.1.6", | ||
| "version": "0.2.0", | ||
| "description": "Object transform streams for picking, omitting, pivoting, batching, and key mapping", | ||
@@ -63,4 +63,4 @@ "type": "module", | ||
| "dependencies": { | ||
| "@datastream/core": "0.1.6" | ||
| "@datastream/core": "0.2.0" | ||
| } | ||
| } |
51574
5.45%623
2.98%+ Added
- Removed
Updated