@tabnas/transduce 0.1.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.
Files changed (63) hide show
  1. package/LICENSE +21 -0
  2. package/dist/capability.d.ts +6 -0
  3. package/dist/capability.js +52 -0
  4. package/dist/capability.js.map +1 -0
  5. package/dist/datum.d.ts +64 -0
  6. package/dist/datum.js +391 -0
  7. package/dist/datum.js.map +1 -0
  8. package/dist/error.d.ts +43 -0
  9. package/dist/error.js +169 -0
  10. package/dist/error.js.map +1 -0
  11. package/dist/event.d.ts +56 -0
  12. package/dist/event.js +101 -0
  13. package/dist/event.js.map +1 -0
  14. package/dist/guard.d.ts +20 -0
  15. package/dist/guard.js +90 -0
  16. package/dist/guard.js.map +1 -0
  17. package/dist/json.d.ts +4 -0
  18. package/dist/json.js +92 -0
  19. package/dist/json.js.map +1 -0
  20. package/dist/limits.d.ts +36 -0
  21. package/dist/limits.js +133 -0
  22. package/dist/limits.js.map +1 -0
  23. package/dist/lines.d.ts +39 -0
  24. package/dist/lines.js +1139 -0
  25. package/dist/lines.js.map +1 -0
  26. package/dist/matcher.d.ts +26 -0
  27. package/dist/matcher.js +245 -0
  28. package/dist/matcher.js.map +1 -0
  29. package/dist/parser-source.d.ts +27 -0
  30. package/dist/parser-source.js +194 -0
  31. package/dist/parser-source.js.map +1 -0
  32. package/dist/route.d.ts +61 -0
  33. package/dist/route.js +197 -0
  34. package/dist/route.js.map +1 -0
  35. package/dist/rule-events.d.ts +58 -0
  36. package/dist/rule-events.js +598 -0
  37. package/dist/rule-events.js.map +1 -0
  38. package/dist/scan.d.ts +19 -0
  39. package/dist/scan.js +70 -0
  40. package/dist/scan.js.map +1 -0
  41. package/dist/selector.d.ts +40 -0
  42. package/dist/selector.js +154 -0
  43. package/dist/selector.js.map +1 -0
  44. package/dist/sink.d.ts +29 -0
  45. package/dist/sink.js +184 -0
  46. package/dist/sink.js.map +1 -0
  47. package/dist/source.d.ts +37 -0
  48. package/dist/source.js +113 -0
  49. package/dist/source.js.map +1 -0
  50. package/dist/table-from-json.d.ts +12 -0
  51. package/dist/table-from-json.js +217 -0
  52. package/dist/table-from-json.js.map +1 -0
  53. package/dist/table.d.ts +81 -0
  54. package/dist/table.js +141 -0
  55. package/dist/table.js.map +1 -0
  56. package/dist/transduce.d.ts +28 -0
  57. package/dist/transduce.js +109 -0
  58. package/dist/transduce.js.map +1 -0
  59. package/dist/tsconfig.tsbuildinfo +1 -0
  60. package/dist/value.d.ts +16 -0
  61. package/dist/value.js +96 -0
  62. package/dist/value.js.map +1 -0
  63. package/package.json +65 -0
@@ -0,0 +1,61 @@
1
+ import { Datum, Duplicates } from './datum';
2
+ import { JsonEvent } from './event';
3
+ import { Limits, Metrics } from './limits';
4
+ import { CaptureId } from './matcher';
5
+ import { Path, Selector } from './selector';
6
+ import { Flow, Sink } from './sink';
7
+ export type CaptureMode = 'materialize' | 'observe';
8
+ export type Budget = {
9
+ bytes: number;
10
+ name: string;
11
+ };
12
+ export declare class CaptureSpec {
13
+ readonly tag: string;
14
+ readonly selector: Selector;
15
+ readonly mode: CaptureMode;
16
+ budget: Budget | null;
17
+ constructor(tag: string, selector: Selector, mode: CaptureMode);
18
+ static materialize(tag: string, selector: Selector): CaptureSpec;
19
+ static observe(tag: string, selector: Selector): CaptureSpec;
20
+ withBudget(bytes: number, name: string): CaptureSpec;
21
+ }
22
+ export type Selected = {
23
+ id: CaptureId;
24
+ tag: string;
25
+ path: Path;
26
+ value: Datum | null;
27
+ };
28
+ export interface RouteSink {
29
+ began?(id: CaptureId, tag: string): void;
30
+ selected(selected: Selected): Flow;
31
+ end(): Flow;
32
+ }
33
+ export declare class SelectedRecorder implements RouteSink {
34
+ readonly selections: Selected[];
35
+ ended: boolean;
36
+ selected(selected: Selected): Flow;
37
+ end(): Flow;
38
+ }
39
+ export declare class FnRoute implements RouteSink {
40
+ private fn;
41
+ constructor(fn: (selected: Selected) => Flow | void);
42
+ selected(selected: Selected): Flow;
43
+ end(): Flow;
44
+ }
45
+ export declare class Router<D extends RouteSink> implements Sink {
46
+ readonly specs: readonly CaptureSpec[];
47
+ readonly downstream: D;
48
+ private matcher;
49
+ private active;
50
+ private observing;
51
+ private maxDepth;
52
+ private maxCaptureBytes;
53
+ private duplicates;
54
+ private metrics;
55
+ private isEnded;
56
+ constructor(specs: readonly CaptureSpec[], limits: Limits, duplicates: Duplicates, metrics: Metrics, downstream: D);
57
+ ended(): boolean;
58
+ private begin;
59
+ private deliver;
60
+ event(ev: JsonEvent): Flow;
61
+ }
package/dist/route.js ADDED
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /* Copyright (c) 2026 tabnas, MIT License */
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.Router = exports.FnRoute = exports.SelectedRecorder = exports.CaptureSpec = void 0;
5
+ // Captures: recognize selected scopes and deliver them, complete, in
6
+ // source order.
7
+ //
8
+ // A `Router` is a `Sink` that feeds every event through one `Matcher` for
9
+ // all of its `CaptureSpec`s and hands each completed match to a
10
+ // `RouteSink`. A `materialize` capture is built into a `Datum` under a
11
+ // byte budget and delivered when its value completes; an `observe` capture
12
+ // delivers only the path, at the value's end, and retains nothing.
13
+ // Materialized captures may not nest or coincide: the router holds at most
14
+ // one value at a time, which is what makes its retention one selected
15
+ // scope rather than a document. That is checked at construction,
16
+ // conservatively, with `Selector.mayOverlap`, and again at run time so a
17
+ // stream the check could not foresee still fails rather than mixing two
18
+ // values.
19
+ const datum_1 = require("./datum");
20
+ const error_1 = require("./error");
21
+ const matcher_1 = require("./matcher");
22
+ // One capture: a tag for the consumer, the selector to match, the mode,
23
+ // and for a `materialize` capture an optional budget (else the router's
24
+ // `max_capture_bytes`).
25
+ class CaptureSpec {
26
+ constructor(tag, selector, mode) {
27
+ this.budget = null;
28
+ this.tag = tag;
29
+ this.selector = selector;
30
+ this.mode = mode;
31
+ }
32
+ static materialize(tag, selector) {
33
+ return new CaptureSpec(tag, selector, 'materialize');
34
+ }
35
+ static observe(tag, selector) {
36
+ return new CaptureSpec(tag, selector, 'observe');
37
+ }
38
+ // This spec with its own budget, whose failure names `name`.
39
+ withBudget(bytes, name) {
40
+ this.budget = { bytes, name };
41
+ return this;
42
+ }
43
+ }
44
+ exports.CaptureSpec = CaptureSpec;
45
+ // A route sink that records every match.
46
+ class SelectedRecorder {
47
+ constructor() {
48
+ this.selections = [];
49
+ this.ended = false;
50
+ }
51
+ selected(selected) {
52
+ this.selections.push(selected);
53
+ return 'continue';
54
+ }
55
+ end() {
56
+ this.ended = true;
57
+ return 'continue';
58
+ }
59
+ }
60
+ exports.SelectedRecorder = SelectedRecorder;
61
+ // A route sink made of a function; `end` continues.
62
+ class FnRoute {
63
+ constructor(fn) {
64
+ this.fn = fn;
65
+ }
66
+ selected(selected) {
67
+ return this.fn(selected) || 'continue';
68
+ }
69
+ end() {
70
+ return 'continue';
71
+ }
72
+ }
73
+ exports.FnRoute = FnRoute;
74
+ // Recognizes every capture in one pass and delivers completed matches.
75
+ class Router {
76
+ // Build a router; two specs that may overlap are refused unless both
77
+ // observe (`CAPTURE_OVERLAP_UNSUPPORTED`).
78
+ constructor(specs, limits, duplicates, metrics, downstream) {
79
+ this.active = null;
80
+ // Observed values in progress: `[capture, depth]`, innermost last.
81
+ this.observing = [];
82
+ this.isEnded = false;
83
+ for (let i = 0; i < specs.length; i++) {
84
+ for (let j = i + 1; j < specs.length; j++) {
85
+ const a = specs[i];
86
+ const b = specs[j];
87
+ const bothObserve = 'observe' === a.mode && 'observe' === b.mode;
88
+ if (!bothObserve && a.selector.mayOverlap(b.selector)) {
89
+ throw new error_1.Fail('CAPTURE_OVERLAP_UNSUPPORTED', `captures ${JSON.stringify(a.tag)} (${a.selector}) and ` +
90
+ `${JSON.stringify(b.tag)} (${b.selector}) may select overlapping scopes; ` +
91
+ `only observed captures may overlap`);
92
+ }
93
+ }
94
+ }
95
+ this.specs = specs.slice();
96
+ this.matcher = new matcher_1.Matcher(specs.map((s) => s.selector));
97
+ this.downstream = downstream;
98
+ this.maxDepth = limits.max_depth;
99
+ this.maxCaptureBytes = limits.max_capture_bytes;
100
+ this.duplicates = duplicates;
101
+ this.metrics = metrics;
102
+ }
103
+ // Whether `end` has been delivered.
104
+ ended() {
105
+ return this.isEnded;
106
+ }
107
+ // Start the capture `id` at the value beginning at `depth`.
108
+ begin(id, depth) {
109
+ const spec = this.specs[id];
110
+ if (this.downstream.began) {
111
+ try {
112
+ this.downstream.began(id, spec.tag);
113
+ }
114
+ catch (err) {
115
+ if (err instanceof error_1.Fail && null == err.path) {
116
+ err.path = this.matcher.path(depth).toString();
117
+ }
118
+ throw err;
119
+ }
120
+ }
121
+ if ('observe' === spec.mode) {
122
+ this.observing.push([id, depth]);
123
+ return;
124
+ }
125
+ if (null !== this.active) {
126
+ const path = this.matcher.path(depth).toString();
127
+ throw new error_1.Fail('CAPTURE_OVERLAP_UNSUPPORTED', `capture ${JSON.stringify(spec.tag)} began at ${path} while capture ` +
128
+ `${JSON.stringify(this.specs[this.active.id].tag)} was still being materialized`).atPath(path);
129
+ }
130
+ const budget = spec.budget ?? { bytes: this.maxCaptureBytes, name: 'max_capture_bytes' };
131
+ this.active = {
132
+ id,
133
+ builder: new datum_1.DatumBuilder(budget.bytes, budget.name, this.duplicates),
134
+ depth,
135
+ };
136
+ }
137
+ deliver(id, path, value) {
138
+ return this.downstream.selected({ id, tag: this.specs[id].tag, path, value });
139
+ }
140
+ event(ev) {
141
+ const hit = this.matcher.event(ev);
142
+ if ('start' === hit.kind && hit.depth + 1 > this.maxDepth) {
143
+ const path = this.matcher.path(hit.depth).toString();
144
+ throw error_1.Fail.limit('max_depth', this.maxDepth, `a container at ${path} is nested deeper than ${this.maxDepth}`).atPath(path);
145
+ }
146
+ for (let k = 0; k < hit.begins; k++) {
147
+ this.begin(this.matcher.begins()[k], hit.depth);
148
+ }
149
+ const active = this.active;
150
+ if (null !== active) {
151
+ try {
152
+ active.builder.event(ev);
153
+ }
154
+ catch (err) {
155
+ // The builder reports no position; the value's path is spelled
156
+ // here, only now that something went wrong.
157
+ if (err instanceof error_1.Fail)
158
+ err.atPath(this.matcher.path(active.depth).toString());
159
+ throw err;
160
+ }
161
+ if (active.builder.finished()) {
162
+ const bytes = active.builder.bytes();
163
+ const value = active.builder.take();
164
+ this.active = null;
165
+ const path = this.matcher.path(hit.depth);
166
+ this.metrics.capture(bytes);
167
+ let flow;
168
+ try {
169
+ flow = this.deliver(active.id, path, value);
170
+ }
171
+ finally {
172
+ this.metrics.release(bytes);
173
+ }
174
+ if ('stop' === flow)
175
+ return 'stop';
176
+ }
177
+ }
178
+ if ('scalar' === hit.kind || 'close' === hit.kind) {
179
+ while (0 < this.observing.length) {
180
+ const [id, depth] = this.observing[this.observing.length - 1];
181
+ if (depth !== hit.depth)
182
+ break;
183
+ this.observing.pop();
184
+ if ('stop' === this.deliver(id, this.matcher.path(hit.depth), null)) {
185
+ return 'stop';
186
+ }
187
+ }
188
+ }
189
+ if ('end' === hit.kind) {
190
+ this.isEnded = true;
191
+ return this.downstream.end();
192
+ }
193
+ return 'continue';
194
+ }
195
+ }
196
+ exports.Router = Router;
197
+ //# sourceMappingURL=route.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../src/route.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ import { Fail } from './error';
2
+ import { JsonEvent } from './event';
3
+ import { Guarded } from './guard';
4
+ import { AbortFlag, Limits, Metrics } from './limits';
5
+ import { Flow, Sink } from './sink';
6
+ import { Prune } from './source';
7
+ export type Status = {
8
+ type: 'running';
9
+ } | {
10
+ type: 'stopped';
11
+ } | {
12
+ type: 'failed';
13
+ error: unknown;
14
+ };
15
+ export declare class Adapter<S extends Sink> {
16
+ private frames;
17
+ private lastCompleted;
18
+ private held;
19
+ private lexeme;
20
+ private lexemeValue;
21
+ private lexemeReady;
22
+ readonly sink: Guarded<S>;
23
+ status: Status;
24
+ private stop;
25
+ private prune;
26
+ private pruneHit;
27
+ private rootDone;
28
+ private emitted;
29
+ constructor(sink: S, limits: Limits, abort: AbortFlag, metrics: Metrics, prune: Prune, stop: AbortFlag);
30
+ reset(): void;
31
+ complete(): boolean;
32
+ idle(): boolean;
33
+ walkWhole(value: unknown): Flow;
34
+ send(ev: JsonEvent): Flow;
35
+ private fail;
36
+ private emit;
37
+ private scalar;
38
+ private walk;
39
+ private pushFrame;
40
+ onDone(rule: any, done: any): void;
41
+ private step;
42
+ private opened;
43
+ private closed;
44
+ private entry;
45
+ private settlePending;
46
+ private holdPending;
47
+ private flushHeld;
48
+ private settle;
49
+ private rememberLexeme;
50
+ }
51
+ export declare function prepare(parser: any, proceed: () => boolean, onDone?: (rule: any, done: any) => void): void;
52
+ export declare function notStreamable(): Fail;
53
+ export declare function wrappedRoot(): Fail;
54
+ export declare function rewrittenRoot(): Fail;
55
+ export declare function unstoredContainer(): Fail;
56
+ export declare function valueBeforeKey(): Fail;
57
+ export declare function rewrittenMap(): Fail;
58
+ export declare function mergedMember(key: string): Fail;