@vielzeug/flux 1.0.3
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 +50 -0
- package/dist/_dev.cjs +2 -0
- package/dist/_dev.cjs.map +1 -0
- package/dist/_dev.d.ts +2 -0
- package/dist/_dev.d.ts.map +1 -0
- package/dist/_dev.js +12 -0
- package/dist/_dev.js.map +1 -0
- package/dist/_iterator.cjs +2 -0
- package/dist/_iterator.cjs.map +1 -0
- package/dist/_iterator.d.ts +2 -0
- package/dist/_iterator.d.ts.map +1 -0
- package/dist/_iterator.js +53 -0
- package/dist/_iterator.js.map +1 -0
- package/dist/_numeric.cjs +2 -0
- package/dist/_numeric.cjs.map +1 -0
- package/dist/_numeric.d.ts +2 -0
- package/dist/_numeric.d.ts.map +1 -0
- package/dist/_numeric.js +12 -0
- package/dist/_numeric.js.map +1 -0
- package/dist/_pipe.cjs +2 -0
- package/dist/_pipe.cjs.map +1 -0
- package/dist/_pipe.d.ts +2 -0
- package/dist/_pipe.d.ts.map +1 -0
- package/dist/_pipe.js +8 -0
- package/dist/_pipe.js.map +1 -0
- package/dist/_safe.cjs +2 -0
- package/dist/_safe.cjs.map +1 -0
- package/dist/_safe.d.ts +2 -0
- package/dist/_safe.d.ts.map +1 -0
- package/dist/_safe.js +12 -0
- package/dist/_safe.js.map +1 -0
- package/dist/_scheduler.cjs +2 -0
- package/dist/_scheduler.cjs.map +1 -0
- package/dist/_scheduler.d.ts +3 -0
- package/dist/_scheduler.d.ts.map +1 -0
- package/dist/_scheduler.js +15 -0
- package/dist/_scheduler.js.map +1 -0
- package/dist/adapters/courier.cjs +2 -0
- package/dist/adapters/courier.cjs.map +1 -0
- package/dist/adapters/courier.d.ts +22 -0
- package/dist/adapters/courier.d.ts.map +1 -0
- package/dist/adapters/courier.js +14 -0
- package/dist/adapters/courier.js.map +1 -0
- package/dist/adapters/herald.cjs +2 -0
- package/dist/adapters/herald.cjs.map +1 -0
- package/dist/adapters/herald.d.ts +19 -0
- package/dist/adapters/herald.d.ts.map +1 -0
- package/dist/adapters/herald.js +18 -0
- package/dist/adapters/herald.js.map +1 -0
- package/dist/adapters/pulse.cjs +2 -0
- package/dist/adapters/pulse.cjs.map +1 -0
- package/dist/adapters/pulse.d.ts +22 -0
- package/dist/adapters/pulse.d.ts.map +1 -0
- package/dist/adapters/pulse.js +22 -0
- package/dist/adapters/pulse.js.map +1 -0
- package/dist/adapters/ripple.cjs +2 -0
- package/dist/adapters/ripple.cjs.map +1 -0
- package/dist/adapters/ripple.d.ts +53 -0
- package/dist/adapters/ripple.d.ts.map +1 -0
- package/dist/adapters/ripple.js +47 -0
- package/dist/adapters/ripple.js.map +1 -0
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.d.ts +17 -0
- package/dist/core.d.ts.map +1 -0
- package/dist/core.js +87 -0
- package/dist/core.js.map +1 -0
- package/dist/errors.cjs +2 -0
- package/dist/errors.cjs.map +1 -0
- package/dist/errors.d.ts +10 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +18 -0
- package/dist/errors.js.map +1 -0
- package/dist/flux.cjs +2 -0
- package/dist/flux.cjs.map +1 -0
- package/dist/flux.iife.js +2 -0
- package/dist/flux.iife.js.map +1 -0
- package/dist/flux.js +2 -0
- package/dist/flux.js.map +1 -0
- package/dist/index.cjs +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/operators/combination.cjs +2 -0
- package/dist/operators/combination.cjs.map +1 -0
- package/dist/operators/combination.d.ts +65 -0
- package/dist/operators/combination.d.ts.map +1 -0
- package/dist/operators/combination.js +187 -0
- package/dist/operators/combination.js.map +1 -0
- package/dist/operators/creation.cjs +2 -0
- package/dist/operators/creation.cjs.map +1 -0
- package/dist/operators/creation.d.ts +50 -0
- package/dist/operators/creation.d.ts.map +1 -0
- package/dist/operators/creation.js +90 -0
- package/dist/operators/creation.js.map +1 -0
- package/dist/operators/filtering.cjs +2 -0
- package/dist/operators/filtering.cjs.map +1 -0
- package/dist/operators/filtering.d.ts +62 -0
- package/dist/operators/filtering.d.ts.map +1 -0
- package/dist/operators/filtering.js +140 -0
- package/dist/operators/filtering.js.map +1 -0
- package/dist/operators/transformation.cjs +2 -0
- package/dist/operators/transformation.cjs.map +1 -0
- package/dist/operators/transformation.d.ts +64 -0
- package/dist/operators/transformation.d.ts.map +1 -0
- package/dist/operators/transformation.js +185 -0
- package/dist/operators/transformation.js.map +1 -0
- package/dist/operators/utility.cjs +2 -0
- package/dist/operators/utility.cjs.map +1 -0
- package/dist/operators/utility.d.ts +98 -0
- package/dist/operators/utility.d.ts.map +1 -0
- package/dist/operators/utility.js +226 -0
- package/dist/operators/utility.js.map +1 -0
- package/dist/subject.cjs +2 -0
- package/dist/subject.cjs.map +1 -0
- package/dist/subject.d.ts +67 -0
- package/dist/subject.d.ts.map +1 -0
- package/dist/subject.js +181 -0
- package/dist/subject.js.map +1 -0
- package/dist/types.d.ts +86 -0
- package/dist/types.d.ts.map +1 -0
- package/package.json +61 -0
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/** Cleanup / unsubscribe function returned by `subscribe()`. */
|
|
2
|
+
export type Unsubscribe = () => void;
|
|
3
|
+
/**
|
|
4
|
+
* Minimal time-scheduling abstraction for operators that depend on timers.
|
|
5
|
+
* Inject a custom implementation in tests to control time without relying on
|
|
6
|
+
* global fake-timer mechanisms (`vi.useFakeTimers()`).
|
|
7
|
+
*
|
|
8
|
+
* @example
|
|
9
|
+
* const testScheduler: Scheduler = {
|
|
10
|
+
* delay(fn, ms) { ... },
|
|
11
|
+
* repeat(fn, ms) { ... },
|
|
12
|
+
* };
|
|
13
|
+
* debounce(300, testScheduler);
|
|
14
|
+
*/
|
|
15
|
+
export type Scheduler = {
|
|
16
|
+
/** Schedule `fn` to run once after `ms` milliseconds. Returns a cancel function. */
|
|
17
|
+
delay(fn: () => void, ms: number): () => void;
|
|
18
|
+
/** Schedule `fn` to run repeatedly every `ms` milliseconds. Returns a cancel function. */
|
|
19
|
+
repeat(fn: () => void, ms: number): () => void;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Observer passed to a producer or `subscribe()`.
|
|
23
|
+
* `error` and `complete` are optional — omit them to ignore those signals.
|
|
24
|
+
*/
|
|
25
|
+
export type Observer<T> = {
|
|
26
|
+
complete?: () => void;
|
|
27
|
+
error?: (err: unknown) => void;
|
|
28
|
+
next: (value: T) => void;
|
|
29
|
+
};
|
|
30
|
+
/**
|
|
31
|
+
* Producer function passed to `flux()`.
|
|
32
|
+
* Called once per `subscribe()` invocation (cold by default).
|
|
33
|
+
* Return a cleanup function (or nothing) — it is called on unsubscribe.
|
|
34
|
+
*/
|
|
35
|
+
export type Producer<T> = (observer: Observer<T>) => Unsubscribe | void;
|
|
36
|
+
/**
|
|
37
|
+
* A pipeable operator: a function that takes a source `Flux<A>` and returns a new `Flux<B>`.
|
|
38
|
+
*
|
|
39
|
+
* @example
|
|
40
|
+
* const double: Operator<number, number> = (source) =>
|
|
41
|
+
* source.pipe(map((n) => n * 2));
|
|
42
|
+
*/
|
|
43
|
+
export type Operator<A = unknown, B = unknown> = (source: Flux<A>) => Flux<B>;
|
|
44
|
+
/**
|
|
45
|
+
* The core stream primitive. Lazy (cold) by default — each `subscribe()` invocation
|
|
46
|
+
* starts its own producer. Use `.pipe(share())` to multicast to many subscribers.
|
|
47
|
+
*/
|
|
48
|
+
export interface Flux<T> {
|
|
49
|
+
/** `true` after `dispose()` is called. New subscriptions receive an immediate `complete` notification. */
|
|
50
|
+
readonly disposed: boolean;
|
|
51
|
+
/** AbortSignal that aborts when `dispose()` is called. */
|
|
52
|
+
readonly disposalSignal: AbortSignal;
|
|
53
|
+
/** Permanently terminates this stream. All active subscribers receive a `complete` notification. */
|
|
54
|
+
dispose(): void;
|
|
55
|
+
/**
|
|
56
|
+
* Apply one or more operators in sequence. Each operator receives the output
|
|
57
|
+
* of the previous one as its input, forming a pipeline.
|
|
58
|
+
*/
|
|
59
|
+
pipe<B>(op1: Operator<T, B>): Flux<B>;
|
|
60
|
+
pipe<B, C>(op1: Operator<T, B>, op2: Operator<B, C>): Flux<C>;
|
|
61
|
+
pipe<B, C, D>(op1: Operator<T, B>, op2: Operator<B, C>, op3: Operator<C, D>): Flux<D>;
|
|
62
|
+
pipe<B, C, D, E>(op1: Operator<T, B>, op2: Operator<B, C>, op3: Operator<C, D>, op4: Operator<D, E>): Flux<E>;
|
|
63
|
+
pipe(...operators: Operator[]): Flux<unknown>;
|
|
64
|
+
/**
|
|
65
|
+
* Subscribe to values emitted by this stream.
|
|
66
|
+
* Accepts either a full `Observer<T>` object or a plain `next` function.
|
|
67
|
+
* Returns an unsubscribe function — call it to stop receiving values.
|
|
68
|
+
* Pass an optional `AbortSignal` to unsubscribe automatically when the signal aborts.
|
|
69
|
+
* If the stream is already disposed, the observer receives an immediate `complete` notification.
|
|
70
|
+
*/
|
|
71
|
+
subscribe(observerOrNext: Observer<T> | ((value: T) => void), signal?: AbortSignal): Unsubscribe;
|
|
72
|
+
/**
|
|
73
|
+
* Consume the stream as an async iterator.
|
|
74
|
+
* Buffers incoming values until consumed.
|
|
75
|
+
* Calling `return()` on the iterator (or exiting a `for await` loop early) unsubscribes from the source.
|
|
76
|
+
*
|
|
77
|
+
* @example
|
|
78
|
+
* for await (const value of source$) {
|
|
79
|
+
* console.log(value);
|
|
80
|
+
* }
|
|
81
|
+
*/
|
|
82
|
+
[Symbol.asyncIterator](): AsyncIterableIterator<T>;
|
|
83
|
+
/** ES2026 `using` compatible disposal. Delegates to `dispose()`. */
|
|
84
|
+
[Symbol.dispose](): void;
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vielzeug/flux",
|
|
3
|
+
"version": "1.0.3",
|
|
4
|
+
"description": "Composable stream primitive with hot/cold semantics, backpressure, and ecosystem adapters",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"files": [
|
|
7
|
+
"dist"
|
|
8
|
+
],
|
|
9
|
+
"main": "./dist/index.cjs",
|
|
10
|
+
"module": "./dist/index.js",
|
|
11
|
+
"types": "dist/index.d.ts",
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"source": "./src/index.ts",
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"require": "./dist/index.cjs"
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"scripts": {
|
|
21
|
+
"build": "vite build && pnpm run build:bundle && pnpm run build:types",
|
|
22
|
+
"build:bundle": "vite build --config vite.bundle.config.ts",
|
|
23
|
+
"build:types": "tsc -p tsconfig.declarations.json",
|
|
24
|
+
"fix": "eslint --fix src",
|
|
25
|
+
"lint": "eslint src",
|
|
26
|
+
"prepublishOnly": "pnpm run build",
|
|
27
|
+
"test": "vitest"
|
|
28
|
+
},
|
|
29
|
+
"publishConfig": {
|
|
30
|
+
"access": "public",
|
|
31
|
+
"registry": "https://registry.npmjs.org/"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"@vielzeug/ripple": "workspace:*"
|
|
35
|
+
},
|
|
36
|
+
"peerDependencies": {
|
|
37
|
+
"@vielzeug/courier": "workspace:*",
|
|
38
|
+
"@vielzeug/herald": "workspace:*",
|
|
39
|
+
"@vielzeug/pulse": "workspace:*"
|
|
40
|
+
},
|
|
41
|
+
"peerDependenciesMeta": {
|
|
42
|
+
"@vielzeug/courier": {
|
|
43
|
+
"optional": true
|
|
44
|
+
},
|
|
45
|
+
"@vielzeug/herald": {
|
|
46
|
+
"optional": true
|
|
47
|
+
},
|
|
48
|
+
"@vielzeug/pulse": {
|
|
49
|
+
"optional": true
|
|
50
|
+
}
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^26.1.0",
|
|
54
|
+
"@vielzeug/courier": "workspace:*",
|
|
55
|
+
"@vielzeug/herald": "workspace:*",
|
|
56
|
+
"@vielzeug/pulse": "workspace:*",
|
|
57
|
+
"typescript": "~6.0.3",
|
|
58
|
+
"vite": "^8.1.3",
|
|
59
|
+
"vitest": "^4.1.9"
|
|
60
|
+
}
|
|
61
|
+
}
|