Big News: Socket raises $60M Series C at a $1B valuation to secure software supply chains for AI-driven development.Announcement
Sign In

@datastream/object

Package Overview
Dependencies
Maintainers
1
Versions
51
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@datastream/object - npm Package Compare versions

Comparing version
0.0.42
to
0.1.4
+133
index.d.ts
// 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;
<div align="center">
<h1>&lt;datastream&gt; `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
};
+2
-2
{
"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"]
}

@@ -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"]
}
{
"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"
}
}