@effectionx/node 0.2.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.
package/README.md ADDED
@@ -0,0 +1,140 @@
1
+ # Node
2
+
3
+ Node.js-specific utilities for Effection programs. This package provides
4
+ adapters for working with Node.js streams and event emitters using structured
5
+ concurrency.
6
+
7
+ ---
8
+
9
+ ## Installation
10
+
11
+ ```bash
12
+ npm install @effectionx/node
13
+ ```
14
+
15
+ ## Modules
16
+
17
+ This package provides two sub-modules:
18
+
19
+ - `@effectionx/node/stream` - Stream utilities for Node.js
20
+ - `@effectionx/node/events` - Event utilities for Node.js EventEmitters
21
+
22
+ You can also import everything from the main module:
23
+
24
+ ```typescript
25
+ import { fromReadable, on, once } from "@effectionx/node";
26
+ ```
27
+
28
+ ## Stream Utilities
29
+
30
+ ### fromReadable()
31
+
32
+ Convert a Node.js Readable stream to an Effection Stream.
33
+
34
+ ```typescript
35
+ import fs from "node:fs";
36
+ import { each, main } from "effection";
37
+ import { fromReadable } from "@effectionx/node/stream";
38
+
39
+ await main(function* () {
40
+ const fileStream = fs.createReadStream("./data.txt");
41
+
42
+ for (const chunk of yield* each(fromReadable(fileStream))) {
43
+ console.log(new TextDecoder().decode(chunk));
44
+ yield* each.next();
45
+ }
46
+ });
47
+ ```
48
+
49
+ The returned stream emits `Uint8Array` chunks and automatically cleans up
50
+ event listeners when the stream is closed or the operation is shut down.
51
+
52
+ ## Event Utilities
53
+
54
+ ### on()
55
+
56
+ Create a Stream of events from any EventEmitter or EventTarget-like object.
57
+
58
+ This works with:
59
+ - Node.js EventEmitters (using `on`/`off`)
60
+ - DOM EventTargets (using `addEventListener`/`removeEventListener`)
61
+ - Web Worker's global `self` object
62
+
63
+ ```typescript
64
+ import { each, main } from "effection";
65
+ import { on } from "@effectionx/node/events";
66
+
67
+ await main(function* () {
68
+ // With Node.js EventEmitter
69
+ for (const [chunk] of yield* each(on(stream, "data"))) {
70
+ console.log("data:", chunk);
71
+ yield* each.next();
72
+ }
73
+
74
+ // In a worker thread (EventTarget style)
75
+ for (const [event] of yield* each(on(self, "message"))) {
76
+ console.log("received:", event.data);
77
+ yield* each.next();
78
+ }
79
+ });
80
+ ```
81
+
82
+ For EventEmitters, events are emitted as arrays of arguments.
83
+ For EventTargets, events are emitted as single-element arrays containing the
84
+ event object.
85
+
86
+ ### once()
87
+
88
+ Create an Operation that yields the next event to be emitted by an EventEmitter
89
+ or EventTarget-like object.
90
+
91
+ ```typescript
92
+ import { main } from "effection";
93
+ import { once } from "@effectionx/node/events";
94
+
95
+ await main(function* () {
96
+ // Wait for a single message (EventTarget style)
97
+ const [event] = yield* once(self, "message");
98
+ console.log(event.data);
99
+
100
+ // Wait for a single event (EventEmitter style)
101
+ const [code] = yield* once(process, "exit");
102
+ console.log("Process exited with code:", code);
103
+ });
104
+ ```
105
+
106
+ ## TypeScript Support
107
+
108
+ All exports include TypeScript type definitions. The event functions support
109
+ generic type parameters for type-safe event handling:
110
+
111
+ ```typescript
112
+ import { once, on } from "@effectionx/node/events";
113
+
114
+ // Type the event arguments
115
+ const [code] = yield* once<[number]>(process, "exit");
116
+
117
+ // Type the stream events
118
+ for (const [data] of yield* each(on<[Buffer]>(stream, "data"))) {
119
+ // data is typed as Buffer
120
+ yield* each.next();
121
+ }
122
+ ```
123
+
124
+ ## Interfaces
125
+
126
+ The event utilities work with any object that implements these interfaces:
127
+
128
+ ```typescript
129
+ // Node.js EventEmitter style
130
+ interface EventEmitterLike {
131
+ on(event: string, listener: (...args: unknown[]) => void): void;
132
+ off(event: string, listener: (...args: unknown[]) => void): void;
133
+ }
134
+
135
+ // DOM EventTarget style
136
+ interface EventTargetLike {
137
+ addEventListener(event: string, listener: (event: unknown) => void): void;
138
+ removeEventListener(event: string, listener: (event: unknown) => void): void;
139
+ }
140
+ ```
@@ -0,0 +1,84 @@
1
+ import type { Operation, Stream } from "effection";
2
+ /**
3
+ * Interface for objects that support Node.js EventEmitter-style event handling.
4
+ * This includes Node.js EventEmitter and worker_threads MessagePort.
5
+ */
6
+ export interface EventEmitterLike {
7
+ on(event: string, listener: (...args: unknown[]) => void): void;
8
+ off(event: string, listener: (...args: unknown[]) => void): void;
9
+ }
10
+ /**
11
+ * Interface for objects that support DOM EventTarget-style event handling.
12
+ * This includes browser EventTarget and web-worker's global `self`.
13
+ */
14
+ export interface EventTargetLike {
15
+ addEventListener(event: string, listener: (event: unknown) => void): void;
16
+ removeEventListener(event: string, listener: (event: unknown) => void): void;
17
+ }
18
+ /**
19
+ * Union type for objects that support either EventEmitter or EventTarget style.
20
+ */
21
+ export type EventSourceLike = EventEmitterLike | EventTargetLike;
22
+ /**
23
+ * Create a {@link Stream} of events from any EventEmitter or EventTarget-like object.
24
+ *
25
+ * This works with:
26
+ * - Node.js EventEmitters (using `on`/`off`)
27
+ * - DOM EventTargets (using `addEventListener`/`removeEventListener`)
28
+ * - web-worker's global `self` object
29
+ *
30
+ * For EventEmitters, events are emitted as arrays of arguments.
31
+ * For EventTargets, events are emitted as single-element arrays containing the event object.
32
+ *
33
+ * See the guide on [Streams and Subscriptions](https://frontside.com/effection/docs/collections)
34
+ * for details on how to use streams.
35
+ *
36
+ * @example
37
+ * ```ts
38
+ * import { on } from "@effectionx/node/events";
39
+ * import { each } from "effection";
40
+ *
41
+ * // In a worker thread (EventTarget style)
42
+ * for (const [event] of yield* each(on(self, "message"))) {
43
+ * console.log("received:", event.data);
44
+ * yield* each.next();
45
+ * }
46
+ *
47
+ * // With Node.js EventEmitter
48
+ * for (const [chunk] of yield* each(on(stream, "data"))) {
49
+ * console.log("data:", chunk);
50
+ * yield* each.next();
51
+ * }
52
+ * ```
53
+ *
54
+ * @param target - the event source whose events will be streamed
55
+ * @param eventName - the name of the event to stream. E.g. "message", "data"
56
+ * @returns a stream that will see one item for each event
57
+ */
58
+ export declare function on<T extends unknown[]>(target: EventSourceLike | null, eventName: string): Stream<T, never>;
59
+ /**
60
+ * Create an {@link Operation} that yields the next event to be emitted by an EventEmitter or EventTarget-like object.
61
+ *
62
+ * This works with:
63
+ * - Node.js EventEmitters (using `on`/`off`)
64
+ * - DOM EventTargets (using `addEventListener`/`removeEventListener`)
65
+ * - web-worker's global `self` object
66
+ *
67
+ * For EventEmitters, returns an array of arguments.
68
+ * For EventTargets, returns a single-element array containing the event object.
69
+ *
70
+ * @example
71
+ * ```ts
72
+ * import { once } from "@effectionx/node/events";
73
+ *
74
+ * // Wait for a single message (EventTarget style)
75
+ * const [event] = yield* once(self, "message");
76
+ * console.log(event.data);
77
+ * ```
78
+ *
79
+ * @param target - the event source to be watched
80
+ * @param eventName - the name of the event to watch. E.g. "message", "close"
81
+ * @returns an Operation that yields the next emitted event
82
+ */
83
+ export declare function once<TArgs extends unknown[] = unknown[]>(target: EventSourceLike | null, eventName: string): Operation<TArgs>;
84
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../events.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAgB,MAAM,WAAW,CAAC;AAEjE;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAChE,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;CAClE;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;IAC1E,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI,CAAC;CAC9E;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,gBAAgB,GAAG,eAAe,CAAC;AAMjE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,wBAAgB,EAAE,CAAC,CAAC,SAAS,OAAO,EAAE,EACpC,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CA6BlB;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,IAAI,CAAC,KAAK,SAAS,OAAO,EAAE,GAAG,OAAO,EAAE,EACtD,MAAM,EAAE,eAAe,GAAG,IAAI,EAC9B,SAAS,EAAE,MAAM,GAChB,SAAS,CAAC,KAAK,CAAC,CAsBlB"}
package/dist/events.js ADDED
@@ -0,0 +1,119 @@
1
+ import { createSignal, resource, withResolvers } from "effection";
2
+ function isEventTarget(target) {
3
+ return "addEventListener" in target;
4
+ }
5
+ /**
6
+ * Create a {@link Stream} of events from any EventEmitter or EventTarget-like object.
7
+ *
8
+ * This works with:
9
+ * - Node.js EventEmitters (using `on`/`off`)
10
+ * - DOM EventTargets (using `addEventListener`/`removeEventListener`)
11
+ * - web-worker's global `self` object
12
+ *
13
+ * For EventEmitters, events are emitted as arrays of arguments.
14
+ * For EventTargets, events are emitted as single-element arrays containing the event object.
15
+ *
16
+ * See the guide on [Streams and Subscriptions](https://frontside.com/effection/docs/collections)
17
+ * for details on how to use streams.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * import { on } from "@effectionx/node/events";
22
+ * import { each } from "effection";
23
+ *
24
+ * // In a worker thread (EventTarget style)
25
+ * for (const [event] of yield* each(on(self, "message"))) {
26
+ * console.log("received:", event.data);
27
+ * yield* each.next();
28
+ * }
29
+ *
30
+ * // With Node.js EventEmitter
31
+ * for (const [chunk] of yield* each(on(stream, "data"))) {
32
+ * console.log("data:", chunk);
33
+ * yield* each.next();
34
+ * }
35
+ * ```
36
+ *
37
+ * @param target - the event source whose events will be streamed
38
+ * @param eventName - the name of the event to stream. E.g. "message", "data"
39
+ * @returns a stream that will see one item for each event
40
+ */
41
+ export function on(target, eventName) {
42
+ return resource(function* (provide) {
43
+ let signal = createSignal();
44
+ if (target) {
45
+ if (isEventTarget(target)) {
46
+ // EventTarget style (DOM, web-worker self)
47
+ const listener = (event) => signal.send([event]);
48
+ target.addEventListener(eventName, listener);
49
+ try {
50
+ yield* provide(yield* signal);
51
+ }
52
+ finally {
53
+ target.removeEventListener(eventName, listener);
54
+ }
55
+ }
56
+ else {
57
+ // EventEmitter style (Node.js)
58
+ const listener = (...args) => signal.send(args);
59
+ target.on(eventName, listener);
60
+ try {
61
+ yield* provide(yield* signal);
62
+ }
63
+ finally {
64
+ target.off(eventName, listener);
65
+ }
66
+ }
67
+ }
68
+ else {
69
+ // null target - just provide an empty subscription
70
+ yield* provide(yield* signal);
71
+ }
72
+ });
73
+ }
74
+ /**
75
+ * Create an {@link Operation} that yields the next event to be emitted by an EventEmitter or EventTarget-like object.
76
+ *
77
+ * This works with:
78
+ * - Node.js EventEmitters (using `on`/`off`)
79
+ * - DOM EventTargets (using `addEventListener`/`removeEventListener`)
80
+ * - web-worker's global `self` object
81
+ *
82
+ * For EventEmitters, returns an array of arguments.
83
+ * For EventTargets, returns a single-element array containing the event object.
84
+ *
85
+ * @example
86
+ * ```ts
87
+ * import { once } from "@effectionx/node/events";
88
+ *
89
+ * // Wait for a single message (EventTarget style)
90
+ * const [event] = yield* once(self, "message");
91
+ * console.log(event.data);
92
+ * ```
93
+ *
94
+ * @param target - the event source to be watched
95
+ * @param eventName - the name of the event to watch. E.g. "message", "close"
96
+ * @returns an Operation that yields the next emitted event
97
+ */
98
+ export function once(target, eventName) {
99
+ const result = withResolvers();
100
+ if (target) {
101
+ if (isEventTarget(target)) {
102
+ // EventTarget style (DOM, web-worker self)
103
+ const listener = (event) => {
104
+ result.resolve([event]);
105
+ target.removeEventListener(eventName, listener);
106
+ };
107
+ target.addEventListener(eventName, listener);
108
+ }
109
+ else {
110
+ // EventEmitter style (Node.js)
111
+ const listener = (...args) => {
112
+ result.resolve(args);
113
+ target.off(eventName, listener);
114
+ };
115
+ target.on(eventName, listener);
116
+ }
117
+ }
118
+ return result.operation;
119
+ }
package/dist/mod.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ export * from "./stream.ts";
2
+ export * from "./events.ts";
3
+ //# sourceMappingURL=mod.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mod.d.ts","sourceRoot":"","sources":["../mod.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
package/dist/mod.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./stream.js";
2
+ export * from "./events.js";
@@ -0,0 +1,21 @@
1
+ import type { Readable } from "node:stream";
2
+ import type { Stream } from "effection";
3
+ /**
4
+ * Convert a Node.js Readable stream to an Effection Stream.
5
+ *
6
+ * @example
7
+ * ```ts
8
+ * import fs from "node:fs";
9
+ * import { fromReadable } from "@effectionx/node/stream";
10
+ * import { each } from "effection";
11
+ *
12
+ * const fileStream = fs.createReadStream("./data.txt");
13
+ *
14
+ * for (const chunk of yield* each(fromReadable(fileStream))) {
15
+ * console.log(new TextDecoder().decode(chunk));
16
+ * yield* each.next();
17
+ * }
18
+ * ```
19
+ */
20
+ export declare function fromReadable(target: Readable): Stream<Uint8Array, void>;
21
+ //# sourceMappingURL=stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream.d.ts","sourceRoot":"","sources":["../stream.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAGxC;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CA8BvE"}
package/dist/stream.js ADDED
@@ -0,0 +1,46 @@
1
+ import { createSignal, resource } from "effection";
2
+ /**
3
+ * Convert a Node.js Readable stream to an Effection Stream.
4
+ *
5
+ * @example
6
+ * ```ts
7
+ * import fs from "node:fs";
8
+ * import { fromReadable } from "@effectionx/node/stream";
9
+ * import { each } from "effection";
10
+ *
11
+ * const fileStream = fs.createReadStream("./data.txt");
12
+ *
13
+ * for (const chunk of yield* each(fromReadable(fileStream))) {
14
+ * console.log(new TextDecoder().decode(chunk));
15
+ * yield* each.next();
16
+ * }
17
+ * ```
18
+ */
19
+ export function fromReadable(target) {
20
+ return resource(function* (provide) {
21
+ const signal = createSignal();
22
+ const listener = (chunk) => {
23
+ signal.send(chunk);
24
+ };
25
+ // On Windows, when a process is killed, the stream may emit an 'error' event
26
+ // with EPIPE before 'end'. We treat this as a normal close since the process
27
+ // was intentionally terminated.
28
+ const errorHandler = (error) => {
29
+ if (error.code === "EPIPE") {
30
+ signal.close();
31
+ }
32
+ };
33
+ target.on("data", listener);
34
+ target.on("end", signal.close);
35
+ target.on("error", errorHandler);
36
+ try {
37
+ yield* provide(yield* signal);
38
+ }
39
+ finally {
40
+ target.off("data", listener);
41
+ target.off("end", signal.close);
42
+ target.off("error", errorHandler);
43
+ signal.close();
44
+ }
45
+ });
46
+ }
@@ -0,0 +1 @@
1
+ {"fileNames":["../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.webworker.importscripts.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.scripthost.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.promise.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.weakref.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2021.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.array.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.error.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.intl.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.object.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.string.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.regexp.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2022.full.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/result.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/types.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/action.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/context.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/scope.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/suspend.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/sleep.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/interval.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/run.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/spawn.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/resource.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/call.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/race.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/all.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/lift.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/queue.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/signal.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/channel.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/each.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/ensure.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/events.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/abort-signal.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/main.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/with-resolvers.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/async.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/scoped.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/until.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/lib/mod.d.ts","../../node_modules/.pnpm/effection@4.0.0/node_modules/effection/esm/mod.d.ts","../events.ts","../stream.ts","../mod.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/compatibility/disposable.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/compatibility/indexable.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/compatibility/iterators.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/compatibility/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/globals.typedarray.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/buffer.buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/globals.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/web-globals/domexception.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/web-globals/events.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/web-globals/fetch.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/web-globals/navigator.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/web-globals/storage.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/assert.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/assert/strict.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/async_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/buffer.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/child_process.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/cluster.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/console.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/constants.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/crypto.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/dgram.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/diagnostics_channel.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/dns.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/dns/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/domain.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/events.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/fs.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/fs/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/http.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/http2.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/https.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/inspector.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/inspector.generated.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/module.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/net.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/os.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/path.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/perf_hooks.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/process.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/punycode.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/querystring.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/readline.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/readline/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/repl.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/sea.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/sqlite.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/stream.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/stream/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/stream/consumers.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/stream/web.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/string_decoder.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/test.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/timers.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/timers/promises.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/tls.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/trace_events.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/tty.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/url.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/util.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/v8.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/vm.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/wasi.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/worker_threads.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/zlib.d.ts","../../node_modules/.pnpm/@types+node@22.19.7/node_modules/@types/node/index.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/inc.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/semver.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/parse.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/valid.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/clean.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/diff.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/major.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/minor.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/patch.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/prerelease.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rcompare.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-loose.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/compare-build.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/sort.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/rsort.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gt.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lt.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/eq.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/neq.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/gte.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/lte.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/cmp.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/coerce.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/comparator.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/classes/range.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/functions/satisfies.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/max-satisfying.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-satisfying.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/to-comparators.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/min-version.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/valid.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/outside.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/gtr.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/ltr.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/intersects.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/simplify.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/ranges/subset.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/internals/identifiers.d.ts","../../node_modules/.pnpm/@types+semver@7.7.1/node_modules/@types/semver/index.d.ts"],"fileIdsList":[[92,101,149,166,167],[93,94,101,149,166,167],[92,101,149,166,167,181],[101,146,147,149,166,167],[101,148,149,166,167],[149,166,167],[101,149,154,166,167,184],[101,149,150,155,160,166,167,169,181,192],[101,149,150,151,160,166,167,169],[101,149,166,167],[96,97,98,101,149,166,167],[101,149,152,166,167,193],[101,149,153,154,161,166,167,170],[101,149,154,166,167,181,189],[101,149,155,157,160,166,167,169],[101,148,149,156,166,167],[101,149,157,158,166,167],[101,149,159,160,166,167],[101,148,149,160,166,167],[101,149,160,161,162,166,167,181,192],[101,149,160,161,162,166,167,176,181,184],[101,142,149,157,160,163,166,167,169,181,192],[101,149,160,161,163,164,166,167,169,181,189,192],[101,149,163,165,166,167,181,189,192],[99,100,101,102,103,104,105,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[101,149,160,166,167],[101,149,166,167,168,192],[101,149,157,160,166,167,169,181],[101,149,166,167,170],[101,149,166,167,171],[101,148,149,166,167,172],[101,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198],[101,149,166,167,174],[101,149,166,167,175],[101,149,160,166,167,176,177],[101,149,166,167,176,178,193,195],[101,149,161,166,167],[101,149,160,166,167,181,182,184],[101,149,166,167,183,184],[101,149,166,167,181,182],[101,149,166,167,184],[101,149,166,167,185],[101,146,149,166,167,181,186],[101,149,160,166,167,187,188],[101,149,166,167,187,188],[101,149,154,166,167,169,181,189],[101,149,166,167,190],[101,149,166,167,169,191],[101,149,163,166,167,175,192],[101,149,154,166,167,193],[101,149,166,167,181,194],[101,149,166,167,168,195],[101,149,166,167,196],[101,142,149,166,167],[101,142,149,160,162,166,167,172,181,184,192,194,195,197],[101,149,166,167,181,198],[101,149,166,167,201,239],[101,149,166,167,201,224,239],[101,149,166,167,200,239],[101,149,166,167,239],[101,149,166,167,201],[101,149,166,167,201,225,239],[101,149,166,167,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,234,235,236,237,238],[101,149,166,167,225,239],[65,101,149,166,167],[64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,101,149,166,167],[65,79,101,149,166,167],[64,101,149,166,167],[91,101,149,166,167],[101,114,118,149,166,167,192],[101,114,149,166,167,181,192],[101,109,149,166,167],[101,111,114,149,166,167,189,192],[101,149,166,167,169,189],[101,149,166,167,199],[101,109,149,166,167,199],[101,111,114,149,166,167,169,192],[101,106,107,110,113,149,160,166,167,181,192],[101,114,121,149,166,167],[101,106,112,149,166,167],[101,114,135,136,149,166,167],[101,110,114,149,166,167,184,192,199],[101,135,149,166,167,199],[101,108,109,149,166,167,199],[101,114,149,166,167],[101,108,109,110,111,112,113,114,115,116,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,136,137,138,139,140,141,149,166,167],[101,114,129,149,166,167],[101,114,121,122,149,166,167],[101,112,114,122,123,149,166,167],[101,113,149,166,167],[101,106,109,114,149,166,167],[101,114,118,122,123,149,166,167],[101,118,149,166,167],[101,112,114,117,149,166,167,192],[101,106,111,114,121,149,166,167],[101,149,166,167,181],[101,109,114,135,149,166,167,197,199]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","impliedFormat":1},{"version":"ee7bad0c15b58988daa84371e0b89d313b762ab83cb5b31b8a2d1162e8eb41c2","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7a3c8b952931daebdfc7a2897c53c0a1c73624593fa070e46bd537e64dcd20a","affectsGlobalScope":true,"impliedFormat":1},{"version":"80e18897e5884b6723488d4f5652167e7bb5024f946743134ecc4aa4ee731f89","affectsGlobalScope":true,"impliedFormat":1},{"version":"cd034f499c6cdca722b60c04b5b1b78e058487a7085a8e0d6fb50809947ee573","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true,"impliedFormat":1},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true,"impliedFormat":1},{"version":"959d36cddf5e7d572a65045b876f2956c973a586da58e5d26cde519184fd9b8a","affectsGlobalScope":true,"impliedFormat":1},{"version":"965f36eae237dd74e6cca203a43e9ca801ce38824ead814728a2807b1910117d","affectsGlobalScope":true,"impliedFormat":1},{"version":"3925a6c820dcb1a06506c90b1577db1fdbf7705d65b62b99dce4be75c637e26b","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a3d63ef2b853447ec4f749d3f368ce642264246e02911fcb1590d8c161b8005","affectsGlobalScope":true,"impliedFormat":1},{"version":"8cdf8847677ac7d20486e54dd3fcf09eda95812ac8ace44b4418da1bbbab6eb8","affectsGlobalScope":true,"impliedFormat":1},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true,"impliedFormat":1},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true,"impliedFormat":1},{"version":"b4b67b1a91182421f5df999988c690f14d813b9850b40acd06ed44691f6727ad","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"3cbad9a1ba4453443026ed38e4b8be018abb26565fa7c944376463ad9df07c41","impliedFormat":1},{"version":"e32de52f3ffc3f0215daff1a7659206129d27ff9ad6d9d238d8690f617320ae1","impliedFormat":99},{"version":"3576d56b68bbb031b5b3272df4ad1dd8c4dcabcf74a8adb7c991aab25f791e9c","impliedFormat":99},{"version":"fab327816ac28cf1416dc55d8a7a11379cf3389d041feab1705a45fa32833d37","impliedFormat":99},{"version":"ca457ee0d78324892b4c8620c0f9b98997f82b8961f001839666a0d517f05f9d","impliedFormat":99},{"version":"70300a19bf0d810196c877fc850b877f7f76c35ac0f833bd27faf1099c43a70b","impliedFormat":99},{"version":"5876b0820db56ccac866e3cdc65fc1831b45adfa4cf60a96ac241a0033b9e5f9","impliedFormat":99},{"version":"384c14dba2c101c16907a016718c5810d803141f7e387016944ff097b724f772","impliedFormat":99},{"version":"138f9e90609b865bc32a00ef663515f5cf1f99194b108fc6e7457ff9ea2c67ba","impliedFormat":99},{"version":"9b3df5b39bd7b05de2bad2de1705d91751de4bf890dc89e49907fda39b5e3985","impliedFormat":99},{"version":"681e219477b42f2d28a448385579ebade44f2c69eec101560f504a01f44caf77","impliedFormat":99},{"version":"fc2f142af29f7c4579af8767a1a042ef9a8f8ee3c7f4de4129709017c3e4d37b","impliedFormat":99},{"version":"263698308657a3a163a3902f15c649fec9d1f3a0149b3788d86e85470b37d528","impliedFormat":99},{"version":"cc597920aca8d41fa235c5b6e740c493736cedcc6018da86e4cff58f1cc07013","impliedFormat":99},{"version":"4d80236469a38bda46fca261abb6e1b1280f46a60627bdfc28bf01281fc1108c","impliedFormat":99},{"version":"0a6fd4f2fc2a8f8859b9684aefef052bdd16ac4578491de39683a17afaa92921","impliedFormat":99},{"version":"07e3a5afd9c77935503c00a777665c9da5f7c507bbd22ef9d15f58373d6d815c","impliedFormat":99},{"version":"dbf0ec15156f1f18a94cfcbe0e5ff132bf5cddd3d3715705acd92b5405e94b56","impliedFormat":99},{"version":"adac9de93c7bbb078d85defc6a14f801fabeefce49121ef57c98d57b7140047f","impliedFormat":99},{"version":"f144ec90d6d2cc4799dd69bd651102816a62445b196c302d64f3c9af780a93b8","impliedFormat":99},{"version":"ad9eb36e4ec484a4111649db56daeeb926b1ab0d10104efdedd9197f7073809f","impliedFormat":99},{"version":"e9dcace6b450961972ed1ae9737be0aa3d6e72b49301536d7fe2a39b01224730","impliedFormat":99},{"version":"83b0cc7dad96cdc9591d57b858e4af4ecacac33d55dff4b92ea6f91baa356e4d","impliedFormat":99},{"version":"cd2952ebecad4d1eaab1150ff561064bff40e4e25903ddffbdedd3643415228b","impliedFormat":99},{"version":"76e3eccb2104ea0b8aa63ab70a00c1a74a5c6aa02cb475f05dadb85fb7d237af","impliedFormat":99},{"version":"02c6ee8bad964f26fc1397aa3172aae0c17a12ba921b045811ed2ce24c3fcc41","impliedFormat":99},{"version":"997863a7254d8eadb6b9993b9c50ba196aa7510a50585dc61bcb64acad68097d","impliedFormat":99},{"version":"54ba5885d706c6cf1c98a3856a9894919cca7d38aa23839f5e76a128ea723004","impliedFormat":99},{"version":"68fda81abab3797d5e1c5ea465e621995ef711a9c0939afdb923e1b8c421e407","impliedFormat":99},{"version":"009ac8daf7b0e45eecc7856ff1302ecc1d52d9cc63e8396129e1baabf967e1a8","impliedFormat":99},{"version":"01303c38ec5e43a9f9606f862e58d73d16112d4fa7f2b050d238ba33dca9b8f6","signature":"0025f68b2c22b3f99fa0fe28855e6346a18375686abcfad375a54f7ef5d27459","impliedFormat":99},{"version":"6169d26ed24773363fee73fdeb27e3181dec18b0da50db326139b855191dbe78","signature":"abe5cb6df69138889f6fc390768eccb78746ef216b8d0e0e50eb20197f4fee75","impliedFormat":99},{"version":"6a90db50a628434589677c4deba6f19645f78e8c64efb285c677b91993ba4776","impliedFormat":99},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"2cbe0621042e2a68c7cbce5dfed3906a1862a16a7d496010636cdbdb91341c0f","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"9855e02d837744303391e5623a531734443a5f8e6e8755e018c41d63ad797db2","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"c906fb15bd2aabc9ed1e3f44eb6a8661199d6c320b3aa196b826121552cb3695","impliedFormat":1},{"version":"22295e8103f1d6d8ea4b5d6211e43421fe4564e34d0dd8e09e520e452d89e659","impliedFormat":1},{"version":"bb45cd435da536500f1d9692a9b49d0c570b763ccbf00473248b777f5c1f353b","impliedFormat":1},{"version":"6b4e081d55ac24fc8a4631d5dd77fe249fa25900abd7d046abb87d90e3b45645","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"83e63d6ccf8ec004a3bb6d58b9bb0104f60e002754b1e968024b320730cc5311","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"d2bc7425ef40526650d6db7e072c1ff4a51101c3ac2cc4b666623b19496a6e27","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"814118df420c4e38fe5ae1b9a3bafb6e9c2aa40838e528cde908381867be6466","impliedFormat":1},{"version":"a3fc63c0d7b031693f665f5494412ba4b551fe644ededccc0ab5922401079c95","impliedFormat":1},{"version":"f27524f4bef4b6519c604bdb23bf4465bddcccbf3f003abb901acbd0d7404d99","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"dba28a419aec76ed864ef43e5f577a5c99a010c32e5949fe4e17a4d57c58dd11","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"c959a391a75be9789b43c8468f71e3fa06488b4d691d5729dde1416dcd38225b","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"0dba70b3fb0dcd713fda33c2df64fa6751fff6460e536971cee917260fb17882","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"47613031a5a31510831304405af561b0ffaedb734437c595256bb61a90f9311b","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"8a1a0d0a4a06a8d278947fcb66bf684f117bf147f89b06e50662d79a53be3e9f","affectsGlobalScope":true,"impliedFormat":1},{"version":"9f663c2f91127ef7024e8ca4b3b4383ff2770e5f826696005de382282794b127","impliedFormat":1},{"version":"9f55299850d4f0921e79b6bf344b47c420ce0f507b9dcf593e532b09ea7eeea1","impliedFormat":1},{"version":"ce6a3f09b8db73a7e9701aca91a04b4fabaf77436dd35b24482f9ee816016b17","impliedFormat":1},{"version":"20e086e5b64fdd52396de67761cc0e94693494deadb731264aac122adf08de3f","impliedFormat":1},{"version":"6e78f75403b3ec65efb41c70d392aeda94360f11cedc9fb2c039c9ea23b30962","impliedFormat":1},{"version":"c863198dae89420f3c552b5a03da6ed6d0acfa3807a64772b895db624b0de707","impliedFormat":1},{"version":"8b03a5e327d7db67112ebbc93b4f744133eda2c1743dbb0a990c61a8007823ef","impliedFormat":1},{"version":"42fad1f540271e35ca37cecda12c4ce2eef27f0f5cf0f8dd761d723c744d3159","impliedFormat":1},{"version":"ff3743a5de32bee10906aff63d1de726f6a7fd6ee2da4b8229054dfa69de2c34","impliedFormat":1},{"version":"83acd370f7f84f203e71ebba33ba61b7f1291ca027d7f9a662c6307d74e4ac22","impliedFormat":1},{"version":"1445cec898f90bdd18b2949b9590b3c012f5b7e1804e6e329fb0fe053946d5ec","impliedFormat":1},{"version":"0e5318ec2275d8da858b541920d9306650ae6ac8012f0e872fe66eb50321a669","impliedFormat":1},{"version":"cf530297c3fb3a92ec9591dd4fa229d58b5981e45fe6702a0bd2bea53a5e59be","impliedFormat":1},{"version":"c1f6f7d08d42148ddfe164d36d7aba91f467dbcb3caa715966ff95f55048b3a4","impliedFormat":1},{"version":"eefd2bbc8edb14c3bd1246794e5c070a80f9b8f3730bd42efb80df3cc50b9039","impliedFormat":1},{"version":"0c1ee27b8f6a00097c2d6d91a21ee4d096ab52c1e28350f6362542b55380059a","impliedFormat":1},{"version":"7677d5b0db9e020d3017720f853ba18f415219fb3a9597343b1b1012cfd699f7","impliedFormat":1},{"version":"bc1c6bc119c1784b1a2be6d9c47addec0d83ef0d52c8fbe1f14a51b4dfffc675","impliedFormat":1},{"version":"52cf2ce99c2a23de70225e252e9822a22b4e0adb82643ab0b710858810e00bf1","impliedFormat":1},{"version":"770625067bb27a20b9826255a8d47b6b5b0a2d3dfcbd21f89904c731f671ba77","impliedFormat":1},{"version":"d1ed6765f4d7906a05968fb5cd6d1db8afa14dbe512a4884e8ea5c0f5e142c80","impliedFormat":1},{"version":"799c0f1b07c092626cf1efd71d459997635911bb5f7fc1196efe449bba87e965","impliedFormat":1},{"version":"2a184e4462b9914a30b1b5c41cf80c6d3428f17b20d3afb711fff3f0644001fd","impliedFormat":1},{"version":"9eabde32a3aa5d80de34af2c2206cdc3ee094c6504a8d0c2d6d20c7c179503cc","impliedFormat":1},{"version":"397c8051b6cfcb48aa22656f0faca2553c5f56187262135162ee79d2b2f6c966","impliedFormat":1},{"version":"a8ead142e0c87dcd5dc130eba1f8eeed506b08952d905c47621dc2f583b1bff9","impliedFormat":1},{"version":"a02f10ea5f73130efca046429254a4e3c06b5475baecc8f7b99a0014731be8b3","impliedFormat":1},{"version":"c2576a4083232b0e2d9bd06875dd43d371dee2e090325a9eac0133fd5650c1cb","impliedFormat":1},{"version":"4c9a0564bb317349de6a24eb4efea8bb79898fa72ad63a1809165f5bd42970dd","impliedFormat":1},{"version":"f40ac11d8859092d20f953aae14ba967282c3bb056431a37fced1866ec7a2681","impliedFormat":1},{"version":"cc11e9e79d4746cc59e0e17473a59d6f104692fd0eeea1bdb2e206eabed83b03","impliedFormat":1},{"version":"b444a410d34fb5e98aa5ee2b381362044f4884652e8bc8a11c8fe14bbd85518e","impliedFormat":1},{"version":"c35808c1f5e16d2c571aa65067e3cb95afeff843b259ecfa2fc107a9519b5392","impliedFormat":1},{"version":"14d5dc055143e941c8743c6a21fa459f961cbc3deedf1bfe47b11587ca4b3ef5","impliedFormat":1},{"version":"a3ad4e1fc542751005267d50a6298e6765928c0c3a8dce1572f2ba6ca518661c","impliedFormat":1},{"version":"f237e7c97a3a89f4591afd49ecb3bd8d14f51a1c4adc8fcae3430febedff5eb6","impliedFormat":1},{"version":"3ffdfbec93b7aed71082af62b8c3e0cc71261cc68d796665faa1e91604fbae8f","impliedFormat":1},{"version":"662201f943ed45b1ad600d03a90dffe20841e725203ced8b708c91fcd7f9379a","impliedFormat":1},{"version":"c9ef74c64ed051ea5b958621e7fb853fe3b56e8787c1587aefc6ea988b3c7e79","impliedFormat":1},{"version":"2462ccfac5f3375794b861abaa81da380f1bbd9401de59ffa43119a0b644253d","impliedFormat":1},{"version":"34baf65cfee92f110d6653322e2120c2d368ee64b3c7981dff08ed105c4f19b0","impliedFormat":1},{"version":"a56fe175741cc8841835eb72e61fa5a34adcbc249ede0e3494c229f0750f6b85","impliedFormat":1}],"root":[[93,95]],"options":{"composite":true,"declaration":true,"declarationMap":true,"module":199,"outDir":"./","rewriteRelativeImportExtensions":true,"rootDir":"..","skipLibCheck":true,"strict":true,"target":9},"referencedMap":[[93,1],[95,2],[94,3],[146,4],[147,4],[148,5],[101,6],[149,7],[150,8],[151,9],[96,10],[99,11],[97,10],[98,10],[152,12],[153,13],[154,14],[155,15],[156,16],[157,17],[158,17],[159,18],[160,19],[161,20],[162,21],[102,10],[100,10],[163,22],[164,23],[165,24],[199,25],[166,26],[167,10],[168,27],[169,28],[170,29],[171,30],[172,31],[173,32],[174,33],[175,34],[176,35],[177,35],[178,36],[179,10],[180,37],[181,38],[183,39],[182,40],[184,41],[185,42],[186,43],[187,44],[188,45],[189,46],[190,47],[191,48],[192,49],[193,50],[194,51],[195,52],[196,53],[103,10],[104,10],[105,10],[143,54],[144,10],[145,10],[197,55],[198,56],[224,57],[225,58],[201,59],[204,60],[222,57],[223,57],[213,57],[212,61],[210,57],[205,57],[218,57],[216,57],[220,57],[200,57],[217,57],[221,57],[206,57],[207,57],[219,57],[202,57],[208,57],[209,57],[211,57],[215,57],[226,62],[214,57],[203,57],[239,63],[238,10],[233,62],[235,64],[234,62],[227,62],[228,62],[230,62],[232,62],[236,64],[237,64],[229,64],[231,64],[85,65],[66,65],[77,65],[88,65],[75,65],[81,65],[67,65],[82,65],[83,65],[84,65],[71,65],[78,65],[86,65],[91,66],[79,65],[76,65],[74,65],[64,10],[72,65],[68,65],[89,65],[80,67],[70,65],[73,65],[69,65],[65,68],[90,65],[87,65],[92,69],[61,10],[62,10],[12,10],[10,10],[11,10],[16,10],[15,10],[2,10],[17,10],[18,10],[19,10],[20,10],[21,10],[22,10],[23,10],[24,10],[3,10],[25,10],[26,10],[4,10],[27,10],[31,10],[28,10],[29,10],[30,10],[32,10],[33,10],[34,10],[5,10],[35,10],[36,10],[37,10],[38,10],[6,10],[42,10],[39,10],[40,10],[41,10],[43,10],[7,10],[44,10],[49,10],[50,10],[45,10],[46,10],[47,10],[48,10],[8,10],[54,10],[51,10],[52,10],[53,10],[55,10],[9,10],[56,10],[63,10],[57,10],[58,10],[60,10],[59,10],[1,10],[14,10],[13,10],[121,70],[131,71],[120,70],[141,72],[112,73],[111,74],[140,75],[134,76],[139,77],[114,78],[128,79],[113,80],[137,81],[109,82],[108,75],[138,83],[110,84],[115,85],[116,10],[119,85],[106,10],[142,86],[132,87],[123,88],[124,89],[126,90],[122,91],[125,92],[135,75],[117,93],[118,94],[127,95],[107,96],[130,87],[129,85],[133,10],[136,97]],"latestChangedDtsFile":"./mod.d.ts","version":"5.9.3"}
package/events.ts ADDED
@@ -0,0 +1,150 @@
1
+ import { createSignal, resource, withResolvers } from "effection";
2
+ import type { Operation, Stream, Subscription } from "effection";
3
+
4
+ /**
5
+ * Interface for objects that support Node.js EventEmitter-style event handling.
6
+ * This includes Node.js EventEmitter and worker_threads MessagePort.
7
+ */
8
+ export interface EventEmitterLike {
9
+ on(event: string, listener: (...args: unknown[]) => void): void;
10
+ off(event: string, listener: (...args: unknown[]) => void): void;
11
+ }
12
+
13
+ /**
14
+ * Interface for objects that support DOM EventTarget-style event handling.
15
+ * This includes browser EventTarget and web-worker's global `self`.
16
+ */
17
+ export interface EventTargetLike {
18
+ addEventListener(event: string, listener: (event: unknown) => void): void;
19
+ removeEventListener(event: string, listener: (event: unknown) => void): void;
20
+ }
21
+
22
+ /**
23
+ * Union type for objects that support either EventEmitter or EventTarget style.
24
+ */
25
+ export type EventSourceLike = EventEmitterLike | EventTargetLike;
26
+
27
+ function isEventTarget(target: EventSourceLike): target is EventTargetLike {
28
+ return "addEventListener" in target;
29
+ }
30
+
31
+ /**
32
+ * Create a {@link Stream} of events from any EventEmitter or EventTarget-like object.
33
+ *
34
+ * This works with:
35
+ * - Node.js EventEmitters (using `on`/`off`)
36
+ * - DOM EventTargets (using `addEventListener`/`removeEventListener`)
37
+ * - web-worker's global `self` object
38
+ *
39
+ * For EventEmitters, events are emitted as arrays of arguments.
40
+ * For EventTargets, events are emitted as single-element arrays containing the event object.
41
+ *
42
+ * See the guide on [Streams and Subscriptions](https://frontside.com/effection/docs/collections)
43
+ * for details on how to use streams.
44
+ *
45
+ * @example
46
+ * ```ts
47
+ * import { on } from "@effectionx/node/events";
48
+ * import { each } from "effection";
49
+ *
50
+ * // In a worker thread (EventTarget style)
51
+ * for (const [event] of yield* each(on(self, "message"))) {
52
+ * console.log("received:", event.data);
53
+ * yield* each.next();
54
+ * }
55
+ *
56
+ * // With Node.js EventEmitter
57
+ * for (const [chunk] of yield* each(on(stream, "data"))) {
58
+ * console.log("data:", chunk);
59
+ * yield* each.next();
60
+ * }
61
+ * ```
62
+ *
63
+ * @param target - the event source whose events will be streamed
64
+ * @param eventName - the name of the event to stream. E.g. "message", "data"
65
+ * @returns a stream that will see one item for each event
66
+ */
67
+ export function on<T extends unknown[]>(
68
+ target: EventSourceLike | null,
69
+ eventName: string,
70
+ ): Stream<T, never> {
71
+ return resource(function* (provide) {
72
+ let signal = createSignal<T, never>();
73
+
74
+ if (target) {
75
+ if (isEventTarget(target)) {
76
+ // EventTarget style (DOM, web-worker self)
77
+ const listener = (event: unknown) => signal.send([event] as T);
78
+ target.addEventListener(eventName, listener);
79
+ try {
80
+ yield* provide(yield* signal as Operation<Subscription<T, never>>);
81
+ } finally {
82
+ target.removeEventListener(eventName, listener);
83
+ }
84
+ } else {
85
+ // EventEmitter style (Node.js)
86
+ const listener = (...args: unknown[]) => signal.send(args as T);
87
+ target.on(eventName, listener);
88
+ try {
89
+ yield* provide(yield* signal as Operation<Subscription<T, never>>);
90
+ } finally {
91
+ target.off(eventName, listener);
92
+ }
93
+ }
94
+ } else {
95
+ // null target - just provide an empty subscription
96
+ yield* provide(yield* signal as Operation<Subscription<T, never>>);
97
+ }
98
+ });
99
+ }
100
+
101
+ /**
102
+ * Create an {@link Operation} that yields the next event to be emitted by an EventEmitter or EventTarget-like object.
103
+ *
104
+ * This works with:
105
+ * - Node.js EventEmitters (using `on`/`off`)
106
+ * - DOM EventTargets (using `addEventListener`/`removeEventListener`)
107
+ * - web-worker's global `self` object
108
+ *
109
+ * For EventEmitters, returns an array of arguments.
110
+ * For EventTargets, returns a single-element array containing the event object.
111
+ *
112
+ * @example
113
+ * ```ts
114
+ * import { once } from "@effectionx/node/events";
115
+ *
116
+ * // Wait for a single message (EventTarget style)
117
+ * const [event] = yield* once(self, "message");
118
+ * console.log(event.data);
119
+ * ```
120
+ *
121
+ * @param target - the event source to be watched
122
+ * @param eventName - the name of the event to watch. E.g. "message", "close"
123
+ * @returns an Operation that yields the next emitted event
124
+ */
125
+ export function once<TArgs extends unknown[] = unknown[]>(
126
+ target: EventSourceLike | null,
127
+ eventName: string,
128
+ ): Operation<TArgs> {
129
+ const result = withResolvers<TArgs>();
130
+
131
+ if (target) {
132
+ if (isEventTarget(target)) {
133
+ // EventTarget style (DOM, web-worker self)
134
+ const listener = (event: unknown) => {
135
+ result.resolve([event] as TArgs);
136
+ target.removeEventListener(eventName, listener);
137
+ };
138
+ target.addEventListener(eventName, listener);
139
+ } else {
140
+ // EventEmitter style (Node.js)
141
+ const listener = (...args: unknown[]) => {
142
+ result.resolve(args as TArgs);
143
+ target.off(eventName, listener);
144
+ };
145
+ target.on(eventName, listener);
146
+ }
147
+ }
148
+
149
+ return result.operation;
150
+ }
package/mod.ts ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./stream.ts";
2
+ export * from "./events.ts";
package/package.json ADDED
@@ -0,0 +1,40 @@
1
+ {
2
+ "name": "@effectionx/node",
3
+ "version": "0.2.0",
4
+ "type": "module",
5
+ "main": "./dist/mod.js",
6
+ "types": "./dist/mod.d.ts",
7
+ "exports": {
8
+ ".": {
9
+ "development": "./mod.ts",
10
+ "default": "./dist/mod.js"
11
+ },
12
+ "./stream": {
13
+ "development": "./stream.ts",
14
+ "default": "./dist/stream.js"
15
+ },
16
+ "./events": {
17
+ "development": "./events.ts",
18
+ "default": "./dist/events.js"
19
+ }
20
+ },
21
+ "peerDependencies": {
22
+ "effection": "^3 || ^4"
23
+ },
24
+ "license": "MIT",
25
+ "author": "engineering@frontside.com",
26
+ "repository": {
27
+ "type": "git",
28
+ "url": "git+https://github.com/thefrontside/effectionx.git"
29
+ },
30
+ "bugs": {
31
+ "url": "https://github.com/thefrontside/effectionx/issues"
32
+ },
33
+ "engines": {
34
+ "node": ">= 22"
35
+ },
36
+ "sideEffects": false,
37
+ "devDependencies": {
38
+ "@effectionx/bdd": "workspace:*"
39
+ }
40
+ }
package/stream.test.ts ADDED
@@ -0,0 +1,49 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { fileURLToPath } from "node:url";
4
+ import { describe, it } from "@effectionx/bdd";
5
+ import { each } from "effection";
6
+ import { expect } from "expect";
7
+
8
+ import { fromReadable } from "./stream.ts";
9
+
10
+ describe("fromReadable", () => {
11
+ it("reads a file stream", function* () {
12
+ const fixturePath = path.join(
13
+ path.dirname(fileURLToPath(import.meta.url)),
14
+ "test/fixtures/sample.txt",
15
+ );
16
+ const fileStream = fs.createReadStream(fixturePath);
17
+ const stream = fromReadable(fileStream);
18
+
19
+ const chunks: Uint8Array[] = [];
20
+ for (const chunk of yield* each(stream)) {
21
+ chunks.push(chunk);
22
+ yield* each.next();
23
+ }
24
+
25
+ const content = new TextDecoder().decode(
26
+ new Uint8Array(chunks.flatMap((c) => [...c])),
27
+ );
28
+ expect(content).toBe("hello world\n");
29
+ });
30
+
31
+ it("handles stream end", function* () {
32
+ const fixturePath = path.join(
33
+ path.dirname(fileURLToPath(import.meta.url)),
34
+ "test/fixtures/sample.txt",
35
+ );
36
+ const fileStream = fs.createReadStream(fixturePath);
37
+ const stream = fromReadable(fileStream);
38
+ const subscription = yield* stream;
39
+
40
+ // Read until done
41
+ let result = yield* subscription.next();
42
+ while (!result.done) {
43
+ result = yield* subscription.next();
44
+ }
45
+
46
+ expect(result.done).toBe(true);
47
+ expect(result.value).toBeUndefined();
48
+ });
49
+ });
package/stream.ts ADDED
@@ -0,0 +1,52 @@
1
+ import type { Readable } from "node:stream";
2
+ import type { Stream } from "effection";
3
+ import { createSignal, resource } from "effection";
4
+
5
+ /**
6
+ * Convert a Node.js Readable stream to an Effection Stream.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import fs from "node:fs";
11
+ * import { fromReadable } from "@effectionx/node/stream";
12
+ * import { each } from "effection";
13
+ *
14
+ * const fileStream = fs.createReadStream("./data.txt");
15
+ *
16
+ * for (const chunk of yield* each(fromReadable(fileStream))) {
17
+ * console.log(new TextDecoder().decode(chunk));
18
+ * yield* each.next();
19
+ * }
20
+ * ```
21
+ */
22
+ export function fromReadable(target: Readable): Stream<Uint8Array, void> {
23
+ return resource(function* (provide) {
24
+ const signal = createSignal<Uint8Array, void>();
25
+
26
+ const listener = (chunk: Uint8Array) => {
27
+ signal.send(chunk);
28
+ };
29
+
30
+ // On Windows, when a process is killed, the stream may emit an 'error' event
31
+ // with EPIPE before 'end'. We treat this as a normal close since the process
32
+ // was intentionally terminated.
33
+ const errorHandler = (error: Error & { code?: string }) => {
34
+ if (error.code === "EPIPE") {
35
+ signal.close();
36
+ }
37
+ };
38
+
39
+ target.on("data", listener);
40
+ target.on("end", signal.close);
41
+ target.on("error", errorHandler);
42
+
43
+ try {
44
+ yield* provide(yield* signal);
45
+ } finally {
46
+ target.off("data", listener);
47
+ target.off("end", signal.close);
48
+ target.off("error", errorHandler);
49
+ signal.close();
50
+ }
51
+ });
52
+ }
@@ -0,0 +1 @@
1
+ hello world
package/tsconfig.json ADDED
@@ -0,0 +1,14 @@
1
+ {
2
+ "extends": "../tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "dist",
5
+ "rootDir": "."
6
+ },
7
+ "include": ["**/*.ts"],
8
+ "exclude": ["**/*.test.ts", "dist"],
9
+ "references": [
10
+ {
11
+ "path": "../bdd"
12
+ }
13
+ ]
14
+ }