@datastream/object
Advanced tools
+133
| // Copyright 2026 will Farrell, and datastream contributors. | ||
| // SPDX-License-Identifier: MIT | ||
| import type { StreamOptions, StreamResult } from "@datastream/core"; | ||
| export function objectReadableStream<T = Record<string, unknown>>( | ||
| input?: T[], | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectCountStream( | ||
| options?: { | ||
| resultKey?: string; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown & { | ||
| result: () => StreamResult<number>; | ||
| }; | ||
| export function objectBatchStream<_T = Record<string, unknown>>( | ||
| options: { | ||
| keys: string[]; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectPivotLongToWideStream( | ||
| options: { | ||
| keys: string[]; | ||
| valueParam: string; | ||
| delimiter?: string; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectPivotWideToLongStream( | ||
| options: { | ||
| keys: string[]; | ||
| keyParam?: string; | ||
| valueParam?: string; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectKeyValueStream( | ||
| options: { | ||
| key: string; | ||
| value: string; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectKeyValuesStream( | ||
| options: { | ||
| key: string; | ||
| values?: string[]; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectKeyJoinStream( | ||
| options: { | ||
| keys: Record<string, string[]>; | ||
| separator: string; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectKeyMapStream( | ||
| options: { | ||
| keys: Record<string, string>; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectValueMapStream( | ||
| options: { | ||
| key: string; | ||
| values: Record<string, unknown>; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectPickStream( | ||
| options: { | ||
| keys: string[]; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectOmitStream( | ||
| options: { | ||
| keys: string[]; | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectFromEntriesStream( | ||
| options: { | ||
| keys: string[] | (() => string[]); | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectToEntriesStream( | ||
| options: { | ||
| keys: string[] | (() => string[]); | ||
| }, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| export function objectSkipConsecutiveDuplicatesStream( | ||
| options?: Record<string, unknown>, | ||
| streamOptions?: StreamOptions, | ||
| ): unknown; | ||
| declare const _default: { | ||
| readableStream: typeof objectReadableStream; | ||
| countStream: typeof objectCountStream; | ||
| pickStream: typeof objectPickStream; | ||
| omitStream: typeof objectOmitStream; | ||
| batchStream: typeof objectBatchStream; | ||
| pivotLongToWideStream: typeof objectPivotLongToWideStream; | ||
| pivotWideToLongStream: typeof objectPivotWideToLongStream; | ||
| keyValueStream: typeof objectKeyValueStream; | ||
| keyValuesStream: typeof objectKeyValuesStream; | ||
| keyJoinStream: typeof objectKeyJoinStream; | ||
| keyMapStream: typeof objectKeyMapStream; | ||
| valueMapStream: typeof objectValueMapStream; | ||
| fromEntriesStream: typeof objectFromEntriesStream; | ||
| toEntriesStream: typeof objectToEntriesStream; | ||
| skipConsecutiveDuplicatesStream: typeof objectSkipConsecutiveDuplicatesStream; | ||
| }; | ||
| export default _default; |
+52
| <div align="center"> | ||
| <h1><datastream> `object`</h1> | ||
| <img alt="datastream logo" src="https://raw.githubusercontent.com/willfarrell/datastream/main/docs/img/datastream-logo.svg"/> | ||
| <p><strong>Object manipulation streams.</strong></p> | ||
| <p> | ||
| <a href="https://github.com/willfarrell/datastream/actions/workflows/test-unit.yml"><img src="https://github.com/willfarrell/datastream/actions/workflows/test-unit.yml/badge.svg" alt="GitHub Actions unit test status"></a> | ||
| <a href="https://github.com/willfarrell/datastream/actions/workflows/test-dast.yml"><img src="https://github.com/willfarrell/datastream/actions/workflows/test-dast.yml/badge.svg" alt="GitHub Actions dast test status"></a> | ||
| <a href="https://github.com/willfarrell/datastream/actions/workflows/test-perf.yml"><img src="https://github.com/willfarrell/datastream/actions/workflows/test-perf.yml/badge.svg" alt="GitHub Actions perf test status"></a> | ||
| <a href="https://github.com/willfarrell/datastream/actions/workflows/test-sast.yml"><img src="https://github.com/willfarrell/datastream/actions/workflows/test-sast.yml/badge.svg" alt="GitHub Actions SAST test status"></a> | ||
| <a href="https://github.com/willfarrell/datastream/actions/workflows/test-lint.yml"><img src="https://github.com/willfarrell/datastream/actions/workflows/test-lint.yml/badge.svg" alt="GitHub Actions lint test status"></a> | ||
| <br/> | ||
| <a href="https://www.npmjs.com/package/@datastream/object"><img alt="npm version" src="https://img.shields.io/npm/v/@datastream/object.svg"></a> | ||
| <a href="https://packagephobia.com/result?p=@datastream/object"><img src="https://packagephobia.com/badge?p=@datastream/object" alt="npm install size"></a> | ||
| <a href="https://www.npmjs.com/package/@datastream/object"> | ||
| <img alt="npm weekly downloads" src="https://img.shields.io/npm/dw/@datastream/object.svg"></a> | ||
| <a href="https://www.npmjs.com/package/@datastream/object#provenance"> | ||
| <img alt="npm provenance" src="https://img.shields.io/badge/provenance-Yes-brightgreen"></a> | ||
| <br/> | ||
| <a href="https://scorecard.dev/viewer/?uri=github.com/willfarrell/datastream"><img src="https://api.scorecard.dev/projects/github.com/willfarrell/datastream/badge" alt="Open Source Security Foundation (OpenSSF) Scorecard"></a> | ||
| <a href="https://slsa.dev"><img src="https://slsa.dev/images/gh-badge-level3.svg" alt="SLSA 3"></a> | ||
| <a href="https://github.com/willfarrell/datastream/blob/main/docs/CODE_OF_CONDUCT.md"><img src="https://img.shields.io/badge/Contributor%20Covenant-2.1-4baaaa.svg"></a> | ||
| <a href="https://biomejs.dev"><img alt="Checked with Biome" src="https://img.shields.io/badge/Checked_with-Biome-60a5fa?style=flat&logo=biome"></a> | ||
| <a href="https://conventionalcommits.org"><img alt="Conventional Commits" src="https://img.shields.io/badge/Conventional%20Commits-1.0.0-%23FE5196?logo=conventionalcommits&logoColor=white"></a> | ||
| <a href="https://github.com/willfarrell/datastream/blob/main/package.json#L32"> | ||
| <img alt="code coverage" src="https://img.shields.io/badge/code%20coverage-95%25-brightgreen"></a> | ||
| </p> | ||
| <p>You can read the documentation at: <a href="https://datastream.js.org">https://datastream.js.org</a></p> | ||
| </div> | ||
| ## Install | ||
| To install datastream you can use NPM: | ||
| ```bash | ||
| npm install --save @datastream/object | ||
| ``` | ||
| ## Documentation and examples | ||
| For documentation and examples, refer to the main [datastream monorepo on GitHub](https://github.com/willfarrell/datastream) or [datastream official website](https://datastream.js.org). | ||
| ## Contributing | ||
| Everyone is very welcome to contribute to this repository. Feel free to [raise issues](https://github.com/willfarrell/datastream/issues) or to [submit Pull Requests](https://github.com/willfarrell/datastream/pulls). | ||
| ## License | ||
| Licensed under [MIT License](LICENSE). Copyright (c) 2026 [will Farrell](https://github.com/willfarrell), and [datastream contributors](https://github.com/willfarrell/datastream/graphs/contributors). |
+64
-12
@@ -62,3 +62,10 @@ import { | ||
| const transform = (chunk, enqueue) => { | ||
| const value = structuredClone(chunk); | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| for (const key of keys) { | ||
@@ -97,4 +104,11 @@ delete value[key]; | ||
| const transform = (chunk, enqueue) => { | ||
| const value = structuredClone(chunk); | ||
| for (const newKey in keys) { | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| for (const newKey of Object.keys(keys)) { | ||
| value[newKey] = keys[newKey].map((oldKey) => { | ||
@@ -112,3 +126,3 @@ delete value[oldKey]; | ||
| const value = {}; | ||
| for (const key in chunk) { | ||
| for (const key of Object.keys(chunk)) { | ||
| const newKey = keys[key] ?? key; | ||
@@ -129,7 +143,7 @@ value[newKey] = chunk[key]; | ||
| const objectPickStream = ({ keys }, streamOptions = {}) => { | ||
| keys = keys.map((k) => ({ [k]: true })); | ||
| const keySet = Object.fromEntries(keys.map((k) => [k, true])); | ||
| const transform = (chunk, enqueue) => { | ||
| const value = {}; | ||
| for (const key in chunk) { | ||
| if (keys[key]) { | ||
| for (const key of Object.keys(chunk)) { | ||
| if (keySet[key]) { | ||
| value[key] = chunk[key]; | ||
@@ -143,7 +157,7 @@ } | ||
| const objectOmitStream = ({ keys }, streamOptions = {}) => { | ||
| keys = keys.map((k) => ({ [k]: true })); | ||
| const keySet = Object.fromEntries(keys.map((k) => [k, true])); | ||
| const transform = (chunk, enqueue) => { | ||
| const value = {}; | ||
| for (const key in chunk) { | ||
| if (!keys[key]) { | ||
| for (const key of Object.keys(chunk)) { | ||
| if (!keySet[key]) { | ||
| value[key] = chunk[key]; | ||
@@ -156,6 +170,40 @@ } | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (_options, streamOptions = {}) => { | ||
| const objectFromEntriesStream = ({ keys }, streamOptions = {}) => { | ||
| let resolvedKeys; | ||
| const transform = (chunk, enqueue) => { | ||
| resolvedKeys ??= typeof keys === "function" ? keys() : keys; | ||
| const value = {}; | ||
| for (let i = 0; i < resolvedKeys.length; i++) { | ||
| value[resolvedKeys[i]] = chunk[i]; | ||
| } | ||
| enqueue(value); | ||
| }; | ||
| return createTransformStream(transform, streamOptions); | ||
| }; | ||
| const objectToEntriesStream = ({ keys }, streamOptions = {}) => { | ||
| let resolvedKeys; | ||
| const transform = (chunk, enqueue) => { | ||
| resolvedKeys ??= typeof keys === "function" ? keys() : keys; | ||
| const value = []; | ||
| for (let i = 0; i < resolvedKeys.length; i++) { | ||
| value[i] = chunk[resolvedKeys[i]]; | ||
| } | ||
| enqueue(value); | ||
| }; | ||
| return createTransformStream(transform, streamOptions); | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (_options = {}, streamOptions = {}) => { | ||
| let previousChunk; | ||
| const transform = (chunk, enqueue) => { | ||
| const chunkStringified = JSON.stringify(chunk); | ||
| let chunkStringified; | ||
| try { | ||
| chunkStringified = JSON.stringify(chunk); | ||
| } catch (e) { | ||
| throw new Error( | ||
| "Failed to stringify chunk, possibly circular reference", | ||
| { | ||
| cause: e | ||
| } | ||
| ); | ||
| } | ||
| if (chunkStringified !== previousChunk) { | ||
@@ -181,2 +229,4 @@ enqueue(chunk); | ||
| valueMapStream: objectValueMapStream, | ||
| fromEntriesStream: objectFromEntriesStream, | ||
| toEntriesStream: objectToEntriesStream, | ||
| skipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream | ||
@@ -188,2 +238,3 @@ }; | ||
| objectCountStream, | ||
| objectFromEntriesStream, | ||
| objectKeyJoinStream, | ||
@@ -199,3 +250,4 @@ objectKeyMapStream, | ||
| objectSkipConsecutiveDuplicatesStream, | ||
| objectToEntriesStream, | ||
| objectValueMapStream | ||
| }; |
| { | ||
| "version": 3, | ||
| "sources": ["index.js"], | ||
| "sourcesContent": ["import {\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\t// if (!Array.isArray(keys)) keys = [keys]\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\tconst value = structuredClone(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 },\n\tstreamOptions = {},\n) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = structuredClone(chunk);\n\t\tfor (const newKey in 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 in 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\tkeys = keys.map((k) => ({ [k]: true }));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key in chunk) {\n\t\t\tif (keys[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\tkeys = keys.map((k) => ({ [k]: true }));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key in chunk) {\n\t\t\tif (!keys[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 objectSkipConsecutiveDuplicatesStream = (\n\t_options,\n\tstreamOptions = {},\n) => {\n\tlet previousChunk;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst chunkStringified = JSON.stringify(chunk);\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\tskipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream,\n};\n"], | ||
| "mappings": "AAAA;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;AAGd,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,UAAM,QAAQ,gBAAgB,KAAK;AACnC,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,UAAM,QAAQ,gBAAgB,KAAK;AACnC,eAAW,UAAU,MAAM;AAE1B,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;AACxB,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,SAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE;AACtC,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,OAAO;AACxB,UAAI,KAAK,GAAG,GAAG;AACd,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,SAAO,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,KAAK,EAAE;AACtC,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,OAAO;AACxB,UAAI,CAAC,KAAK,GAAG,GAAG;AACf,cAAM,GAAG,IAAI,MAAM,GAAG;AAAA,MACvB;AAAA,IACD;AACA,YAAQ,KAAK;AAAA,EACd;AACA,SAAO,sBAAsB,WAAW,aAAa;AACtD;AAGO,MAAM,wCAAwC,CACpD,UACA,gBAAgB,CAAC,MACb;AACJ,MAAI;AACJ,QAAM,YAAY,CAAC,OAAO,YAAY;AACrC,UAAM,mBAAmB,KAAK,UAAU,KAAK;AAC7C,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,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 },\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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", | ||
| "names": ["value", "key"] | ||
| } |
+64
-12
@@ -62,3 +62,10 @@ import { | ||
| const transform = (chunk, enqueue) => { | ||
| const value = structuredClone(chunk); | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| for (const key of keys) { | ||
@@ -97,4 +104,11 @@ delete value[key]; | ||
| const transform = (chunk, enqueue) => { | ||
| const value = structuredClone(chunk); | ||
| for (const newKey in keys) { | ||
| let value; | ||
| try { | ||
| value = structuredClone(chunk); | ||
| } catch (e) { | ||
| throw new Error("Failed to clone chunk, possibly circular reference", { | ||
| cause: e | ||
| }); | ||
| } | ||
| for (const newKey of Object.keys(keys)) { | ||
| value[newKey] = keys[newKey].map((oldKey) => { | ||
@@ -112,3 +126,3 @@ delete value[oldKey]; | ||
| const value = {}; | ||
| for (const key in chunk) { | ||
| for (const key of Object.keys(chunk)) { | ||
| const newKey = keys[key] ?? key; | ||
@@ -129,7 +143,7 @@ value[newKey] = chunk[key]; | ||
| const objectPickStream = ({ keys }, streamOptions = {}) => { | ||
| keys = keys.map((k) => ({ [k]: true })); | ||
| const keySet = Object.fromEntries(keys.map((k) => [k, true])); | ||
| const transform = (chunk, enqueue) => { | ||
| const value = {}; | ||
| for (const key in chunk) { | ||
| if (keys[key]) { | ||
| for (const key of Object.keys(chunk)) { | ||
| if (keySet[key]) { | ||
| value[key] = chunk[key]; | ||
@@ -143,7 +157,7 @@ } | ||
| const objectOmitStream = ({ keys }, streamOptions = {}) => { | ||
| keys = keys.map((k) => ({ [k]: true })); | ||
| const keySet = Object.fromEntries(keys.map((k) => [k, true])); | ||
| const transform = (chunk, enqueue) => { | ||
| const value = {}; | ||
| for (const key in chunk) { | ||
| if (!keys[key]) { | ||
| for (const key of Object.keys(chunk)) { | ||
| if (!keySet[key]) { | ||
| value[key] = chunk[key]; | ||
@@ -156,6 +170,40 @@ } | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (_options, streamOptions = {}) => { | ||
| const objectFromEntriesStream = ({ keys }, streamOptions = {}) => { | ||
| let resolvedKeys; | ||
| const transform = (chunk, enqueue) => { | ||
| resolvedKeys ??= typeof keys === "function" ? keys() : keys; | ||
| const value = {}; | ||
| for (let i = 0; i < resolvedKeys.length; i++) { | ||
| value[resolvedKeys[i]] = chunk[i]; | ||
| } | ||
| enqueue(value); | ||
| }; | ||
| return createTransformStream(transform, streamOptions); | ||
| }; | ||
| const objectToEntriesStream = ({ keys }, streamOptions = {}) => { | ||
| let resolvedKeys; | ||
| const transform = (chunk, enqueue) => { | ||
| resolvedKeys ??= typeof keys === "function" ? keys() : keys; | ||
| const value = []; | ||
| for (let i = 0; i < resolvedKeys.length; i++) { | ||
| value[i] = chunk[resolvedKeys[i]]; | ||
| } | ||
| enqueue(value); | ||
| }; | ||
| return createTransformStream(transform, streamOptions); | ||
| }; | ||
| const objectSkipConsecutiveDuplicatesStream = (_options = {}, streamOptions = {}) => { | ||
| let previousChunk; | ||
| const transform = (chunk, enqueue) => { | ||
| const chunkStringified = JSON.stringify(chunk); | ||
| let chunkStringified; | ||
| try { | ||
| chunkStringified = JSON.stringify(chunk); | ||
| } catch (e) { | ||
| throw new Error( | ||
| "Failed to stringify chunk, possibly circular reference", | ||
| { | ||
| cause: e | ||
| } | ||
| ); | ||
| } | ||
| if (chunkStringified !== previousChunk) { | ||
@@ -181,2 +229,4 @@ enqueue(chunk); | ||
| valueMapStream: objectValueMapStream, | ||
| fromEntriesStream: objectFromEntriesStream, | ||
| toEntriesStream: objectToEntriesStream, | ||
| skipConsecutiveDuplicatesStream: objectSkipConsecutiveDuplicatesStream | ||
@@ -188,2 +238,3 @@ }; | ||
| objectCountStream, | ||
| objectFromEntriesStream, | ||
| objectKeyJoinStream, | ||
@@ -199,3 +250,4 @@ objectKeyMapStream, | ||
| objectSkipConsecutiveDuplicatesStream, | ||
| objectToEntriesStream, | ||
| objectValueMapStream | ||
| }; |
| { | ||
| "version": 3, | ||
| "sources": ["index.js"], | ||
| "sourcesContent": ["import {\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\t// if (!Array.isArray(keys)) keys = [keys]\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\tconst value = structuredClone(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 },\n\tstreamOptions = {},\n) => {\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = structuredClone(chunk);\n\t\tfor (const newKey in 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 in 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\tkeys = keys.map((k) => ({ [k]: true }));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key in chunk) {\n\t\t\tif (keys[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\tkeys = keys.map((k) => ({ [k]: true }));\n\tconst transform = (chunk, enqueue) => {\n\t\tconst value = {};\n\t\tfor (const key in chunk) {\n\t\t\tif (!keys[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 objectSkipConsecutiveDuplicatesStream = (\n\t_options,\n\tstreamOptions = {},\n) => {\n\tlet previousChunk;\n\tconst transform = (chunk, enqueue) => {\n\t\tconst chunkStringified = JSON.stringify(chunk);\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\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 },\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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", | ||
| "names": ["value", "key"] | ||
| } |
+6
-15
| { | ||
| "name": "@datastream/object", | ||
| "version": "0.0.42", | ||
| "description": "", | ||
| "version": "0.1.4", | ||
| "description": "Object transform streams for picking, omitting, pivoting, batching, and key mapping", | ||
| "type": "module", | ||
@@ -13,3 +13,3 @@ "engines": { | ||
| }, | ||
| "main": "./index.web.mjs", | ||
| "main": "./index.node.mjs", | ||
| "module": "./index.web.mjs", | ||
@@ -22,6 +22,2 @@ "exports": { | ||
| "default": "./index.node.mjs" | ||
| }, | ||
| "__require": { | ||
| "types": "./index.d.ts", | ||
| "default": "./index.node.cjs" | ||
| } | ||
@@ -42,3 +38,2 @@ }, | ||
| "*.mjs", | ||
| "*.cjs", | ||
| "*.map", | ||
@@ -64,3 +59,3 @@ "*.d.ts" | ||
| "url": "github:willfarrell/datastream", | ||
| "directory": "packages/file-read" | ||
| "directory": "packages/object" | ||
| }, | ||
@@ -72,8 +67,4 @@ "bugs": { | ||
| "dependencies": { | ||
| "@datastream/core": "0.0.42" | ||
| }, | ||
| "devDependencies": { | ||
| "@datastream/object": "0.0.42" | ||
| }, | ||
| "gitHead": "6ddc0fadabf5f3702a51aebae1fc6b252c6ae8d4" | ||
| "@datastream/core": "0.1.4" | ||
| } | ||
| } |
No README
QualityPackage does not have a README. This may indicate a failed publish or a low quality package.
Found 1 instance in 1 package
48910
45.35%0
-100%7
40%605
57.55%1
-50%52
Infinity%+ Added
- Removed
Updated