@pretable/stream-adapter 0.10.0 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/create-batcher.ts","../src/connect-element-stream.ts","../src/connect-partial-stream.ts","../src/parse-element-stream.ts","../src/parse-partial-stream.ts"],"sourcesContent":["import type { RowModelLike, TransactionBatcher } from \"./types\";\n\n/**\n * Create a `requestAnimationFrame`-batched mutator that coalesces\n * `add` / `update` / `remove` calls into a single `applyTransaction` per\n * frame. Use this when driving a row model from a stream that emits faster\n * than the browser can render.\n *\n * @example\n * ```ts\n * const batcher = createBatcher(rowModel);\n * batcher.add([{ id: \"1\", name: \"Ada\" }]);\n * batcher.update([{ id: \"1\", changes: { age: 36 } }]);\n * batcher.flush(); // optional — RAF will flush automatically\n * ```\n *\n * @public\n */\nexport function createBatcher<\n TRow extends object,\n TRowId extends string | number,\n>(rowModel: RowModelLike<TRow, TRowId>): TransactionBatcher<TRow, TRowId> {\n let addBuffer: TRow[] = [];\n let updateBuffer: Array<{\n id: TRowId;\n changes: Partial<TRow>;\n }> = [];\n let removeBuffer: TRowId[] = [];\n let rafId: number | null = null;\n let disposed = false;\n let rejectError!: (error: unknown) => void;\n const errorListeners = new Set<(error: unknown) => void>();\n let failed = false;\n let failure: unknown;\n const error = new Promise<never>((_resolve, reject) => {\n rejectError = reject;\n });\n // A connector may attach after the RAF callback fires. Keep that race from\n // surfacing as an unhandled rejection while preserving the rejection for\n // every consumer that awaits the public channel.\n error.catch(() => undefined);\n\n function fail(error: unknown): void {\n if (disposed) return;\n disposed = true;\n failed = true;\n failure = error;\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n addBuffer = [];\n updateBuffer = [];\n removeBuffer = [];\n const listeners = [...errorListeners];\n errorListeners.clear();\n for (const listener of listeners) {\n try {\n listener(error);\n } catch {\n // A hostile observer cannot replace the exact model failure.\n }\n }\n rejectError(error);\n }\n\n function scheduleFlush(): void {\n if (rafId !== null || disposed) return;\n rafId = requestAnimationFrame(() => {\n rafId = null;\n if (disposed) return;\n try {\n applyBuffered();\n } catch (error) {\n fail(error);\n }\n });\n }\n\n function applyBuffered(): void {\n if (\n addBuffer.length === 0 &&\n updateBuffer.length === 0 &&\n removeBuffer.length === 0\n ) {\n return;\n }\n\n const bufferedAdds = addBuffer;\n const bufferedUpdates = updateBuffer;\n const bufferedRemovals = removeBuffer;\n addBuffer = [];\n updateBuffer = [];\n removeBuffer = [];\n\n const transaction: {\n add?: TRow[];\n update?: Array<{ id: TRowId; changes: Partial<TRow> }>;\n remove?: TRowId[];\n } = {};\n\n if (bufferedAdds.length > 0) {\n transaction.add = bufferedAdds.map((row) => ({ ...row }));\n }\n if (bufferedUpdates.length > 0) {\n transaction.update = bufferedUpdates.map(({ id, changes }) => ({\n id,\n changes: { ...changes },\n }));\n }\n if (bufferedRemovals.length > 0) {\n transaction.remove = [...bufferedRemovals];\n }\n\n rowModel.applyTransaction(transaction);\n }\n\n return {\n error,\n subscribeError(listener) {\n if (failed) {\n try {\n listener(failure);\n } catch {\n // Keep the exact model failure on `error` observable.\n }\n return () => undefined;\n }\n if (disposed) return () => undefined;\n errorListeners.add(listener);\n return () => errorListeners.delete(listener);\n },\n add(rows) {\n if (disposed) return;\n addBuffer.push(...rows);\n scheduleFlush();\n },\n update(patches) {\n if (disposed) return;\n updateBuffer.push(...patches);\n scheduleFlush();\n },\n remove(ids) {\n if (disposed) return;\n removeBuffer.push(...ids);\n scheduleFlush();\n },\n flush() {\n if (disposed) return;\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n applyBuffered();\n },\n dispose() {\n if (disposed) return;\n disposed = true;\n if (rafId !== null) {\n cancelAnimationFrame(rafId);\n rafId = null;\n }\n addBuffer = [];\n updateBuffer = [];\n removeBuffer = [];\n errorListeners.clear();\n },\n };\n}\n","import type { RowModelLike, StreamConnection } from \"./types\";\nimport { createBatcher } from \"./create-batcher\";\n\n/**\n * Drive a row model from an `AsyncIterable<TRow>`. Each yielded row is added\n * via a {@link createBatcher | RAF batcher}; the returned\n * {@link StreamConnection} resolves `done` when the stream ends and\n * supports `dispose()` for early cancellation.\n *\n * Pair with {@link parseElementStream} to turn a raw UTF-8 string stream\n * (e.g., from `fetch().body`) into a row stream end-to-end.\n *\n * @public\n */\nexport function connectElementStream<\n TRow extends object,\n TRowId extends string | number,\n>(\n rowModel: RowModelLike<TRow, TRowId>,\n stream: AsyncIterable<TRow>,\n): StreamConnection {\n const iterator = stream[Symbol.asyncIterator]();\n const batcher = createBatcher(rowModel);\n let disposed = false;\n let sourceClosed = false;\n\n let resolveDone!: () => void;\n let rejectDone!: (err: unknown) => void;\n const done = new Promise<void>((resolve, reject) => {\n resolveDone = resolve;\n rejectDone = reject;\n });\n // Swallow unhandled-rejection warnings if the caller hasn't attached a\n // handler before the stream rejects. Consumers that await `done` still\n // observe the rejection — attaching `.catch` here doesn't consume it.\n done.catch(() => undefined);\n\n const closeSource = () => {\n if (sourceClosed) return;\n sourceClosed = true;\n try {\n const closing = iterator.return?.();\n if (closing !== undefined)\n void Promise.resolve(closing).catch(() => undefined);\n } catch {\n // Source closure is best-effort; the transaction/source failure remains\n // the exact public rejection.\n }\n };\n\n let settled = false;\n const settle = (\n failure?: { readonly error: unknown },\n flush = true,\n close = failure !== undefined,\n ) => {\n if (settled) return;\n settled = true;\n disposed = true;\n if (close) closeSource();\n let finalFailure = failure;\n if (flush) {\n try {\n batcher.flush();\n } catch (error) {\n finalFailure ??= { error };\n }\n }\n batcher.dispose();\n if (finalFailure === undefined) resolveDone();\n else rejectDone(finalFailure.error);\n };\n\n batcher.subscribeError((error: unknown) => {\n settle({ error }, false, true);\n });\n\n void (async () => {\n try {\n while (!disposed) {\n const result = await iterator.next();\n if (disposed) return;\n if (result.done) {\n settle();\n return;\n }\n batcher.add([result.value]);\n }\n } catch (err) {\n settle({ error: err }, true, true);\n }\n })().catch((error: unknown) => settle({ error }));\n\n return {\n done,\n dispose() {\n if (disposed) return;\n settle(undefined, true, true);\n },\n };\n}\n","import type { RowModelLike, StreamConnection } from \"./types\";\nimport { createBatcher } from \"./create-batcher\";\n\nfunction sameValueZero<T extends string | number>(left: T, right: T): boolean {\n return (\n left === right ||\n (typeof left === \"number\" &&\n typeof right === \"number\" &&\n Number.isNaN(left) &&\n Number.isNaN(right))\n );\n}\n\n/**\n * Options for {@link connectPartialStream}. `rowId` is the fixed target for\n * every partial update. Unknown targets are reported through `onIssue`; an\n * optional `createRow` factory may turn the partial into a complete row to add.\n *\n * @public\n */\nexport interface PartialStreamOptions<\n TRow extends object,\n TRowId extends string | number,\n> {\n readonly rowId: TRowId;\n readonly onIssue?: (issue: {\n readonly code: \"unknown-update-id\";\n readonly rowId: TRowId;\n }) => void;\n readonly createRow?: (partial: Partial<TRow>, id: TRowId) => TRow;\n}\n\n/**\n * Drive a row model from an `AsyncIterable<Partial<TRow>>`. Every yielded\n * partial updates the fixed `options.rowId` via a RAF-batched\n * `{ id, changes }` transaction. A missing target is reported instead of\n * fabricating a row; provide `createRow` when the stream is allowed to add one.\n *\n * Pair with {@link parsePartialStream} for end-to-end partial-update\n * streaming over UTF-8 strings.\n *\n * @public\n */\nexport function connectPartialStream<\n TRow extends object,\n TRowId extends string | number,\n>(\n rowModel: RowModelLike<TRow, TRowId>,\n stream: AsyncIterable<Partial<TRow>>,\n options: PartialStreamOptions<TRow, TRowId>,\n): StreamConnection {\n const iterator = stream[Symbol.asyncIterator]();\n const issueAwareRowModel: RowModelLike<TRow, TRowId> = {\n applyTransaction(transaction) {\n const result = rowModel.applyTransaction(transaction);\n if (result === undefined || result.issues === undefined) return result;\n\n let targetMissing = false;\n for (const issue of result.issues) {\n if (\n issue.code !== \"unknown-update-id\" ||\n issue.rowId === undefined ||\n !sameValueZero(issue.rowId, options.rowId)\n ) {\n continue;\n }\n targetMissing = true;\n options.onIssue?.({\n code: \"unknown-update-id\",\n rowId: options.rowId,\n });\n }\n\n if (targetMissing && options.createRow !== undefined) {\n const updates = transaction.update ?? [];\n const combinedChanges: Partial<TRow> = {};\n let hasTargetUpdate = false;\n for (const update of updates) {\n if (!sameValueZero(update.id, options.rowId)) continue;\n Object.assign(combinedChanges, update.changes);\n hasTargetUpdate = true;\n }\n if (hasTargetUpdate) {\n const row = options.createRow(combinedChanges, options.rowId);\n rowModel.applyTransaction({ add: [row] });\n }\n }\n\n return result;\n },\n };\n const batcher = createBatcher(issueAwareRowModel);\n let disposed = false;\n let sourceClosed = false;\n\n let resolveDone!: () => void;\n let rejectDone!: (err: unknown) => void;\n const done = new Promise<void>((resolve, reject) => {\n resolveDone = resolve;\n rejectDone = reject;\n });\n // Swallow unhandled-rejection warnings if the caller hasn't attached a\n // handler before the stream rejects. Consumers that await `done` still\n // observe the rejection — attaching `.catch` here doesn't consume it.\n done.catch(() => undefined);\n\n const closeSource = () => {\n if (sourceClosed) return;\n sourceClosed = true;\n try {\n const closing = iterator.return?.();\n if (closing !== undefined)\n void Promise.resolve(closing).catch(() => undefined);\n } catch {\n // Source closure is best-effort; preserve the exact primary failure.\n }\n };\n\n let settled = false;\n const settle = (\n failure?: { readonly error: unknown },\n flush = true,\n close = failure !== undefined,\n ) => {\n if (settled) return;\n settled = true;\n disposed = true;\n if (close) closeSource();\n let finalFailure = failure;\n if (flush) {\n try {\n batcher.flush();\n } catch (error) {\n finalFailure ??= { error };\n }\n }\n batcher.dispose();\n if (finalFailure === undefined) resolveDone();\n else rejectDone(finalFailure.error);\n };\n\n batcher.subscribeError((error: unknown) => {\n settle({ error }, false, true);\n });\n\n void (async () => {\n try {\n while (!disposed) {\n const result = await iterator.next();\n if (disposed) return;\n if (result.done) {\n settle();\n return;\n }\n batcher.update([{ id: options.rowId, changes: result.value }]);\n }\n } catch (err) {\n settle({ error: err }, true, true);\n }\n })().catch((error: unknown) => settle({ error }));\n\n return {\n done,\n dispose() {\n if (disposed) return;\n settle(undefined, true, true);\n },\n };\n}\n","import {\n create,\n push,\n finish,\n isArrayNode,\n isComplete,\n} from \"@cacheplane/json-stream\";\nimport type { StreamState } from \"@cacheplane/json-stream\";\n\n/**\n * Parse a UTF-8 string stream into an `AsyncIterable<TRow>`. Built on\n * `@cacheplane/json-stream`'s incremental JSON parser; emits each\n * complete top-level array element as a typed row.\n *\n * Pair with {@link connectElementStream} for end-to-end element-stream\n * → grid wiring.\n *\n * @public\n */\nexport async function* parseElementStream<TRow>(\n stream: AsyncIterable<string>,\n): AsyncIterable<TRow> {\n let state: StreamState = create();\n let yieldedCount = 0;\n\n for await (const chunk of stream) {\n state = push(state, chunk);\n\n if (state.error) {\n throw new Error(state.error.message);\n }\n\n if (state.rootId !== null) {\n const root = state.nodes[state.rootId];\n if (!isArrayNode(root)) {\n throw new Error(\n `parseElementStream expects root to be an array, got \"${root.kind}\"`,\n );\n }\n\n while (yieldedCount < root.children.length) {\n const childNode = state.nodes[root.children[yieldedCount]];\n if (!isComplete(childNode)) break;\n if (childNode.value !== undefined) {\n yield childNode.value as TRow;\n }\n yieldedCount++;\n }\n }\n }\n\n state = finish(state);\n\n if (state.error) {\n throw new Error(state.error.message);\n }\n\n if (state.rootId !== null) {\n const root = state.nodes[state.rootId];\n if (isArrayNode(root)) {\n while (yieldedCount < root.children.length) {\n const childNode = state.nodes[root.children[yieldedCount]];\n if (isComplete(childNode) && childNode.value !== undefined) {\n yield childNode.value as TRow;\n }\n yieldedCount++;\n }\n }\n }\n}\n","import { create, push, finish, isObjectNode } from \"@cacheplane/json-stream\";\nimport type { StreamState } from \"@cacheplane/json-stream\";\n\n/**\n * Parse a UTF-8 string stream into an `AsyncIterable<Partial<TRow>>`.\n *\n * The root must be a single JSON **object**, not an array — a non-object root\n * throws. Each yielded value is the cumulative snapshot of that object as more\n * keys resolve, not a delta, so the last value yielded is the complete row.\n * Useful when an LLM is streaming partial JSON for one row and you want\n * field-by-field updates instead of waiting for the object to close.\n *\n * For a stream of many complete rows, use {@link parseElementStream}, which\n * does take a top-level array.\n *\n * Pair with {@link connectPartialStream} for end-to-end partial-stream\n * → grid wiring.\n *\n * @public\n */\nexport async function* parsePartialStream<TRow>(\n stream: AsyncIterable<string>,\n): AsyncIterable<Partial<TRow>> {\n let state: StreamState = create();\n let lastValue: Record<string, unknown> | undefined;\n\n for await (const chunk of stream) {\n state = push(state, chunk);\n\n if (state.error) {\n throw new Error(state.error.message);\n }\n\n if (state.rootId !== null) {\n const root = state.nodes[state.rootId];\n if (!isObjectNode(root)) {\n throw new Error(\n `parsePartialStream expects root to be an object, got \"${root.kind}\"`,\n );\n }\n\n // Skip the initial empty-object state — only yield once at least one\n // key has fully resolved. Without this guard, the very first yield\n // would be `{}`, which translates to spurious no-op transactions\n // downstream in connectPartialStream.\n if (\n root.value !== undefined &&\n root.value !== lastValue &&\n Object.keys(root.value).length > 0\n ) {\n lastValue = root.value;\n yield root.value as Partial<TRow>;\n }\n }\n }\n\n state = finish(state);\n\n if (state.error) {\n throw new Error(state.error.message);\n }\n\n if (state.rootId !== null) {\n const root = state.nodes[state.rootId];\n if (\n isObjectNode(root) &&\n root.value !== undefined &&\n root.value !== lastValue &&\n Object.keys(root.value).length > 0\n ) {\n yield root.value as Partial<TRow>;\n }\n }\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pretable/stream-adapter",
3
- "version": "0.10.0",
3
+ "version": "0.11.0",
4
4
  "description": "Streaming row adapters for Pretable.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -18,11 +18,11 @@
18
18
  ],
19
19
  "main": "./dist/index.cjs",
20
20
  "module": "./dist/index.mjs",
21
- "types": "./dist/index.d.ts",
21
+ "types": "./dist/index.d.mts",
22
22
  "exports": {
23
23
  ".": {
24
24
  "import": {
25
- "types": "./dist/index.d.ts",
25
+ "types": "./dist/index.d.mts",
26
26
  "default": "./dist/index.mjs"
27
27
  },
28
28
  "require": {
@@ -34,10 +34,11 @@
34
34
  "dependencies": {
35
35
  "@cacheplane/json-stream": "~0.0.4"
36
36
  },
37
+ "sideEffects": false,
37
38
  "scripts": {
38
39
  "api": "api-extractor run --local --config api-extractor.json",
39
40
  "api:check": "api-extractor run --config api-extractor.json",
40
- "build": "tsup",
41
+ "build": "tsdown --config tsdown.config.ts",
41
42
  "lint": "eslint src --ext .ts",
42
43
  "lint:packaging": "publint --strict && attw --pack",
43
44
  "test": "vitest run --passWithNoTests",