@pumped-fn/lite 1.0.1 → 1.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @pumped-fn/lite
2
2
 
3
+ ## 1.1.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 2dd9ee9: Add parse functions for Tag and Flow with full type inference
8
+
9
+ - Add `parse` property to Tag for runtime validation (sync-only)
10
+ - Add `parse` property to Flow for input validation (async-supported)
11
+ - Add `ParseError` class with structured error context (phase, label, cause)
12
+ - Add optional `name` property to Flow for better error messages
13
+ - Type inference: `TInput` automatically inferred from parser return type
14
+
15
+ - ee381f5: Add sequential invalidation chain with loop detection
16
+
17
+ - Invalidations now execute sequentially in dependency order (A → B → C)
18
+ - Infinite loop detection throws with helpful error message showing chain path
19
+ - New `scope.flush()` method to await pending invalidations
20
+ - State transitions now happen AFTER cleanups complete (matching C3-201 docs)
21
+ - Self-invalidation during factory execution remains deferred (poll-and-refresh pattern)
22
+
3
23
  ## 1.0.1
4
24
 
5
25
  ### Patch Changes
package/README.md CHANGED
@@ -186,6 +186,27 @@ const createUserFlow = flow({
186
186
  })
187
187
  ```
188
188
 
189
+ ### Flow with Parse Validation
190
+
191
+ ```typescript
192
+ const createUserFlow = flow({
193
+ name: 'createUser',
194
+ parse: (raw) => {
195
+ const obj = raw as Record<string, unknown>
196
+ if (typeof obj.name !== 'string') throw new Error('name required')
197
+ if (typeof obj.email !== 'string') throw new Error('email required')
198
+ return { name: obj.name, email: obj.email }
199
+ },
200
+ deps: { repo: userRepoAtom },
201
+ factory: async (ctx, { repo }) => {
202
+ // ctx.input is typed as { name: string; email: string }
203
+ return repo.create(ctx.input)
204
+ }
205
+ })
206
+ ```
207
+
208
+ Parse runs before the factory, and `ctx.input` type is inferred from the parse return type. On validation failure, throws `ParseError` with phase `'flow-input'`.
209
+
189
210
  ### Executing Flows
190
211
 
191
212
  ```typescript
@@ -308,6 +329,18 @@ Tags pass contextual values through execution without explicit wiring.
308
329
  ```typescript
309
330
  const tenantIdTag = tag<string>({ label: 'tenantId' })
310
331
  const userRolesTag = tag<string[]>({ label: 'userRoles', default: [] })
332
+
333
+ // With parse validation
334
+ const userId = tag({
335
+ label: 'userId',
336
+ parse: (raw) => {
337
+ if (typeof raw !== 'string') throw new Error('Must be string')
338
+ return raw
339
+ }
340
+ })
341
+
342
+ userId('abc-123') // OK
343
+ userId(123) // Throws ParseError
311
344
  ```
312
345
 
313
346
  ### Using Tags as Dependencies
@@ -563,8 +596,8 @@ sequenceDiagram
563
596
  |----------|-------------|
564
597
  | `createScope(options?)` | Create DI container (returns Scope with `ready` promise) |
565
598
  | `atom(config)` | Define long-lived cached dependency |
566
- | `flow(config)` | Define short-lived operation template |
567
- | `tag(config)` | Define contextual value |
599
+ | `flow(config)` | Define short-lived operation template (optional `name`, `parse`) |
600
+ | `tag(config)` | Define contextual value (optional `parse` for validation) |
568
601
  | `controller(atom)` | Create controller dependency helper |
569
602
  | `preset(atom, value)` | Create value injection preset |
570
603
 
@@ -650,6 +683,7 @@ const myTag: Lite.Tag<string> = tag({ label: 'myTag' })
650
683
  | Controller reactivity | ✅ Built-in | No |
651
684
  | Self-invalidation | ✅ Built-in | No |
652
685
  | Fine-grained select() | ✅ Built-in | No |
686
+ | Tag/Flow parse functions | ✅ Built-in | No |
653
687
  | Bundle size | <17KB | ~75KB |
654
688
 
655
689
  **Choose `@pumped-fn/lite` when:**
package/dist/index.cjs CHANGED
@@ -9,17 +9,36 @@ const presetSymbol = Symbol.for("@pumped-fn/lite/preset");
9
9
  const controllerSymbol = Symbol.for("@pumped-fn/lite/controller");
10
10
  const tagExecutorSymbol = Symbol.for("@pumped-fn/lite/tag-executor");
11
11
 
12
+ //#endregion
13
+ //#region src/errors.ts
14
+ var ParseError = class extends Error {
15
+ name = "ParseError";
16
+ constructor(message, phase, label, cause) {
17
+ super(message);
18
+ this.phase = phase;
19
+ this.label = label;
20
+ this.cause = cause;
21
+ }
22
+ };
23
+
12
24
  //#endregion
13
25
  //#region src/tag.ts
14
26
  function tag(options) {
15
27
  const key = Symbol.for(`@pumped-fn/lite/tag/${options.label}`);
16
28
  const hasDefault = "default" in options;
17
29
  const defaultValue = hasDefault ? options.default : void 0;
30
+ const parse = options.parse;
18
31
  function createTagged(value) {
32
+ let validatedValue = value;
33
+ if (parse) try {
34
+ validatedValue = parse(value);
35
+ } catch (err) {
36
+ throw new ParseError(`Failed to parse tag "${options.label}"`, "tag", options.label, err);
37
+ }
19
38
  return {
20
39
  [taggedSymbol]: true,
21
40
  key,
22
- value
41
+ value: validatedValue
23
42
  };
24
43
  }
25
44
  function get(source) {
@@ -45,6 +64,7 @@ function tag(options) {
45
64
  label: options.label,
46
65
  hasDefault,
47
66
  defaultValue,
67
+ parse,
48
68
  get,
49
69
  find,
50
70
  collect
@@ -199,6 +219,8 @@ function isControllerDep(value) {
199
219
  function flow(config) {
200
220
  return {
201
221
  [flowSymbol]: true,
222
+ name: config.name,
223
+ parse: config.parse,
202
224
  factory: config.factory,
203
225
  deps: config.deps,
204
226
  tags: config.tags
@@ -357,22 +379,49 @@ var ScopeImpl = class {
357
379
  stateListeners = /* @__PURE__ */ new Map();
358
380
  invalidationQueue = /* @__PURE__ */ new Set();
359
381
  invalidationScheduled = false;
382
+ invalidationChain = null;
383
+ chainPromise = null;
360
384
  initialized = false;
361
385
  extensions;
362
386
  tags;
363
387
  ready;
364
388
  scheduleInvalidation(atom$1) {
389
+ const entry = this.cache.get(atom$1);
390
+ if (!entry || entry.state === "idle") return;
391
+ if (entry.state === "resolving") {
392
+ entry.pendingInvalidate = true;
393
+ return;
394
+ }
365
395
  this.invalidationQueue.add(atom$1);
366
- if (!this.invalidationScheduled) {
396
+ if (!this.chainPromise) {
397
+ this.invalidationChain = /* @__PURE__ */ new Set();
367
398
  this.invalidationScheduled = true;
368
- queueMicrotask(() => this.flushInvalidations());
399
+ this.chainPromise = new Promise((resolve, reject) => {
400
+ queueMicrotask(() => {
401
+ this.processInvalidationChain().then(resolve).catch(reject);
402
+ });
403
+ });
369
404
  }
370
405
  }
371
- flushInvalidations() {
372
- this.invalidationScheduled = false;
373
- const atoms = [...this.invalidationQueue];
374
- this.invalidationQueue.clear();
375
- for (const atom$1 of atoms) this.invalidate(atom$1);
406
+ async processInvalidationChain() {
407
+ try {
408
+ while (this.invalidationQueue.size > 0) {
409
+ const atom$1 = this.invalidationQueue.values().next().value;
410
+ this.invalidationQueue.delete(atom$1);
411
+ if (this.invalidationChain.has(atom$1)) {
412
+ const chainAtoms = Array.from(this.invalidationChain);
413
+ chainAtoms.push(atom$1);
414
+ const path = chainAtoms.map((a) => a.factory?.name || "<anonymous>").join(" → ");
415
+ throw new Error(`Infinite invalidation loop detected: ${path}`);
416
+ }
417
+ this.invalidationChain.add(atom$1);
418
+ await this.doInvalidateSequential(atom$1);
419
+ }
420
+ } finally {
421
+ this.invalidationChain = null;
422
+ this.chainPromise = null;
423
+ this.invalidationScheduled = false;
424
+ }
376
425
  }
377
426
  constructor(options) {
378
427
  this.extensions = options?.extensions ?? [];
@@ -517,6 +566,7 @@ var ScopeImpl = class {
517
566
  this.notifyListeners(atom$1, "resolved");
518
567
  if (entry.pendingInvalidate) {
519
568
  entry.pendingInvalidate = false;
569
+ this.invalidationChain?.delete(atom$1);
520
570
  this.scheduleInvalidation(atom$1);
521
571
  }
522
572
  return value;
@@ -529,6 +579,7 @@ var ScopeImpl = class {
529
579
  this.notifyAllListeners(atom$1);
530
580
  if (entry.pendingInvalidate) {
531
581
  entry.pendingInvalidate = false;
582
+ this.invalidationChain?.delete(atom$1);
532
583
  this.scheduleInvalidation(atom$1);
533
584
  }
534
585
  throw entry.error;
@@ -581,9 +632,12 @@ var ScopeImpl = class {
581
632
  entry.pendingInvalidate = true;
582
633
  return;
583
634
  }
584
- this.doInvalidate(atom$1, entry);
635
+ this.scheduleInvalidation(atom$1);
585
636
  }
586
- async doInvalidate(atom$1, entry) {
637
+ async doInvalidateSequential(atom$1) {
638
+ const entry = this.cache.get(atom$1);
639
+ if (!entry) return;
640
+ if (entry.state === "idle") return;
587
641
  const previousValue = entry.value;
588
642
  for (let i = entry.cleanups.length - 1; i >= 0; i--) {
589
643
  const cleanup = entry.cleanups[i];
@@ -598,7 +652,7 @@ var ScopeImpl = class {
598
652
  this.resolving.delete(atom$1);
599
653
  this.emitStateChange("resolving", atom$1);
600
654
  this.notifyListeners(atom$1, "resolving");
601
- this.resolve(atom$1).catch(() => {});
655
+ await this.resolve(atom$1);
602
656
  }
603
657
  async release(atom$1) {
604
658
  const entry = this.cache.get(atom$1);
@@ -614,6 +668,9 @@ var ScopeImpl = class {
614
668
  const atoms = Array.from(this.cache.keys());
615
669
  for (const atom$1 of atoms) await this.release(atom$1);
616
670
  }
671
+ async flush() {
672
+ if (this.chainPromise) await this.chainPromise;
673
+ }
617
674
  createContext(options) {
618
675
  return new ExecutionContextImpl(this, options);
619
676
  }
@@ -637,14 +694,23 @@ var ExecutionContextImpl = class {
637
694
  else return this.execFn(options);
638
695
  }
639
696
  async execFlow(options) {
640
- const { flow: flow$1, input, tags: execTags } = options;
697
+ const { flow: flow$1, input, tags: execTags, name: execName } = options;
641
698
  const allTags = (execTags?.length ?? 0) > 0 || (flow$1.tags?.length ?? 0) > 0 ? [
642
699
  ...execTags ?? [],
643
700
  ...this.baseTags,
644
701
  ...flow$1.tags ?? []
645
702
  ] : this.baseTags;
646
703
  const resolvedDeps = await this.scope.resolveDeps(flow$1.deps, allTags);
647
- this._input = input;
704
+ let parsedInput = input;
705
+ if (flow$1.parse) {
706
+ const label = execName ?? flow$1.name ?? "anonymous";
707
+ try {
708
+ parsedInput = await flow$1.parse(input);
709
+ } catch (err) {
710
+ throw new ParseError(`Failed to parse flow input "${label}"`, "flow-input", label, err);
711
+ }
712
+ }
713
+ this._input = parsedInput;
648
714
  const factory = flow$1.factory;
649
715
  const doExec = async () => {
650
716
  if (flow$1.deps && Object.keys(flow$1.deps).length > 0) return factory(this, resolvedDeps);
@@ -714,6 +780,7 @@ function createScope(options) {
714
780
  const VERSION = "0.0.1";
715
781
 
716
782
  //#endregion
783
+ exports.ParseError = ParseError;
717
784
  exports.VERSION = VERSION;
718
785
  exports.atom = atom;
719
786
  exports.atomSymbol = atomSymbol;
package/dist/index.d.cts CHANGED
@@ -18,6 +18,7 @@ declare namespace Lite {
18
18
  controller<T>(atom: Atom<T>): Controller<T>;
19
19
  release<T>(atom: Atom<T>): Promise<void>;
20
20
  dispose(): Promise<void>;
21
+ flush(): Promise<void>;
21
22
  createContext(options?: CreateContextOptions): ExecutionContext;
22
23
  on(event: AtomState, atom: Atom<unknown>, listener: () => void): () => void;
23
24
  select<T, S>(atom: Atom<T>, selector: (value: T) => S, options?: SelectOptions<S>): SelectHandle<S>;
@@ -38,6 +39,8 @@ declare namespace Lite {
38
39
  }
39
40
  interface Flow<TOutput, TInput = unknown> {
40
41
  readonly [flowSymbol]: true;
42
+ readonly name?: string;
43
+ readonly parse?: (raw: unknown) => MaybePromise<TInput>;
41
44
  readonly factory: FlowFactory<TOutput, TInput, Record<string, Dependency>>;
42
45
  readonly deps?: Record<string, Dependency>;
43
46
  readonly tags?: Tagged<unknown>[];
@@ -55,8 +58,8 @@ declare namespace Lite {
55
58
  readonly scope: Scope;
56
59
  readonly data: DataStore;
57
60
  }
58
- interface ExecutionContext {
59
- readonly input: unknown;
61
+ interface ExecutionContext<TInput = unknown> {
62
+ readonly input: TInput;
60
63
  readonly scope: Scope;
61
64
  exec<T>(options: ExecFlowOptions<T>): Promise<T>;
62
65
  exec<T, Args extends unknown[]>(options: ExecFnOptions<T, Args>): Promise<T>;
@@ -66,6 +69,7 @@ declare namespace Lite {
66
69
  interface ExecFlowOptions<T> {
67
70
  flow: Flow<T, unknown>;
68
71
  input: unknown;
72
+ name?: string;
69
73
  tags?: Tagged<unknown>[];
70
74
  }
71
75
  interface ExecFnOptions<T, Args extends unknown[] = unknown[]> {
@@ -96,6 +100,7 @@ declare namespace Lite {
96
100
  readonly label: string;
97
101
  readonly defaultValue: HasDefault extends true ? T : undefined;
98
102
  readonly hasDefault: HasDefault;
103
+ readonly parse?: (raw: unknown) => T;
99
104
  (value: T): Tagged<T>;
100
105
  get(source: TagSource): HasDefault extends true ? T : T;
101
106
  find(source: TagSource): HasDefault extends true ? T : T | undefined;
@@ -134,7 +139,7 @@ declare namespace Lite {
134
139
  type InferDep<D> = D extends Atom<infer T> ? T : D extends ControllerDep<infer T> ? Controller<T> : D extends TagExecutor<infer TOutput, infer _TTag> ? TOutput : never;
135
140
  type InferDeps<D> = { [K in keyof D]: InferDep<D[K]> };
136
141
  type AtomFactory<T, D extends Record<string, Dependency>> = keyof D extends never ? (ctx: ResolveContext) => MaybePromise<T> : (ctx: ResolveContext, deps: InferDeps<D>) => MaybePromise<T>;
137
- type FlowFactory<TOutput, TInput, D extends Record<string, Dependency>> = keyof D extends never ? (ctx: ExecutionContext) => MaybePromise<TOutput> : (ctx: ExecutionContext, deps: InferDeps<D>) => MaybePromise<TOutput>;
142
+ type FlowFactory<TOutput, TInput, D extends Record<string, Dependency>> = keyof D extends never ? (ctx: ExecutionContext<TInput>) => MaybePromise<TOutput> : (ctx: ExecutionContext<TInput>, deps: InferDeps<D>) => MaybePromise<TOutput>;
138
143
  }
139
144
  //#endregion
140
145
  //#region src/tag.d.ts
@@ -160,6 +165,15 @@ declare function tag<T>(options: {
160
165
  label: string;
161
166
  default: T;
162
167
  }): Lite.Tag<T, true>;
168
+ declare function tag<T>(options: {
169
+ label: string;
170
+ parse: (raw: unknown) => T;
171
+ }): Lite.Tag<T, false>;
172
+ declare function tag<T>(options: {
173
+ label: string;
174
+ parse: (raw: unknown) => T;
175
+ default: T;
176
+ }): Lite.Tag<T, true>;
163
177
  /**
164
178
  * Type guard to check if a value is a Tag.
165
179
  *
@@ -346,17 +360,35 @@ declare function isControllerDep(value: unknown): value is Lite.ControllerDep<un
346
360
  * })
347
361
  * ```
348
362
  */
349
- declare function flow<TOutput, TInput = unknown>(config: {
363
+ declare function flow<TOutput>(config: {
364
+ name?: string;
350
365
  deps?: undefined;
351
366
  factory: (ctx: Lite.ExecutionContext) => MaybePromise<TOutput>;
352
367
  tags?: Lite.Tagged<unknown>[];
368
+ }): Lite.Flow<TOutput, unknown>;
369
+ declare function flow<TOutput, TInput>(config: {
370
+ name?: string;
371
+ parse: (raw: unknown) => MaybePromise<TInput>;
372
+ deps?: undefined;
373
+ factory: (ctx: Lite.ExecutionContext<TInput>) => MaybePromise<TOutput>;
374
+ tags?: Lite.Tagged<unknown>[];
353
375
  }): Lite.Flow<TOutput, TInput>;
354
- declare function flow<TOutput, TInput, const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | {
376
+ declare function flow<TOutput, const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | {
355
377
  mode: string;
356
378
  }>>(config: {
379
+ name?: string;
357
380
  deps: D;
358
381
  factory: (ctx: Lite.ExecutionContext, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>;
359
382
  tags?: Lite.Tagged<unknown>[];
383
+ }): Lite.Flow<TOutput, unknown>;
384
+ declare function flow<TOutput, TInput, const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | {
385
+ mode: string;
386
+ }>>(config: {
387
+ name?: string;
388
+ parse: (raw: unknown) => MaybePromise<TInput>;
389
+ deps: D;
390
+ factory: (ctx: Lite.ExecutionContext<TInput>, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>;
391
+ tags?: Lite.Tagged<unknown>[];
360
392
  }): Lite.Flow<TOutput, TInput>;
361
393
  /**
362
394
  * Type guard to check if a value is a Flow.
@@ -432,8 +464,17 @@ declare function isPreset(value: unknown): value is Lite.Preset<unknown>;
432
464
  */
433
465
  declare function createScope(options?: Lite.ScopeOptions): Lite.Scope;
434
466
  //#endregion
467
+ //#region src/errors.d.ts
468
+ declare class ParseError extends Error {
469
+ readonly phase: "tag" | "flow-input";
470
+ readonly label: string;
471
+ readonly cause: unknown;
472
+ readonly name = "ParseError";
473
+ constructor(message: string, phase: "tag" | "flow-input", label: string, cause: unknown);
474
+ }
475
+ //#endregion
435
476
  //#region src/index.d.ts
436
477
  declare const VERSION = "0.0.1";
437
478
  //#endregion
438
- export { type AtomState, type Lite, VERSION, atom, atomSymbol, controller, controllerDepSymbol, controllerSymbol, createScope, flow, flowSymbol, isAtom, isControllerDep, isFlow, isPreset, isTag, isTagExecutor, isTagged, preset, presetSymbol, tag, tagExecutorSymbol, tagSymbol, taggedSymbol, tags };
479
+ export { type AtomState, type Lite, ParseError, VERSION, atom, atomSymbol, controller, controllerDepSymbol, controllerSymbol, createScope, flow, flowSymbol, isAtom, isControllerDep, isFlow, isPreset, isTag, isTagExecutor, isTagged, preset, presetSymbol, tag, tagExecutorSymbol, tagSymbol, taggedSymbol, tags };
439
480
  //# sourceMappingURL=index.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.cts","names":[],"sources":["../src/symbols.ts","../src/types.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/symbols.ts","../src/types.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/errors.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -18,6 +18,7 @@ declare namespace Lite {
18
18
  controller<T>(atom: Atom<T>): Controller<T>;
19
19
  release<T>(atom: Atom<T>): Promise<void>;
20
20
  dispose(): Promise<void>;
21
+ flush(): Promise<void>;
21
22
  createContext(options?: CreateContextOptions): ExecutionContext;
22
23
  on(event: AtomState, atom: Atom<unknown>, listener: () => void): () => void;
23
24
  select<T, S>(atom: Atom<T>, selector: (value: T) => S, options?: SelectOptions<S>): SelectHandle<S>;
@@ -38,6 +39,8 @@ declare namespace Lite {
38
39
  }
39
40
  interface Flow<TOutput, TInput = unknown> {
40
41
  readonly [flowSymbol]: true;
42
+ readonly name?: string;
43
+ readonly parse?: (raw: unknown) => MaybePromise<TInput>;
41
44
  readonly factory: FlowFactory<TOutput, TInput, Record<string, Dependency>>;
42
45
  readonly deps?: Record<string, Dependency>;
43
46
  readonly tags?: Tagged<unknown>[];
@@ -55,8 +58,8 @@ declare namespace Lite {
55
58
  readonly scope: Scope;
56
59
  readonly data: DataStore;
57
60
  }
58
- interface ExecutionContext {
59
- readonly input: unknown;
61
+ interface ExecutionContext<TInput = unknown> {
62
+ readonly input: TInput;
60
63
  readonly scope: Scope;
61
64
  exec<T>(options: ExecFlowOptions<T>): Promise<T>;
62
65
  exec<T, Args extends unknown[]>(options: ExecFnOptions<T, Args>): Promise<T>;
@@ -66,6 +69,7 @@ declare namespace Lite {
66
69
  interface ExecFlowOptions<T> {
67
70
  flow: Flow<T, unknown>;
68
71
  input: unknown;
72
+ name?: string;
69
73
  tags?: Tagged<unknown>[];
70
74
  }
71
75
  interface ExecFnOptions<T, Args extends unknown[] = unknown[]> {
@@ -96,6 +100,7 @@ declare namespace Lite {
96
100
  readonly label: string;
97
101
  readonly defaultValue: HasDefault extends true ? T : undefined;
98
102
  readonly hasDefault: HasDefault;
103
+ readonly parse?: (raw: unknown) => T;
99
104
  (value: T): Tagged<T>;
100
105
  get(source: TagSource): HasDefault extends true ? T : T;
101
106
  find(source: TagSource): HasDefault extends true ? T : T | undefined;
@@ -134,7 +139,7 @@ declare namespace Lite {
134
139
  type InferDep<D> = D extends Atom<infer T> ? T : D extends ControllerDep<infer T> ? Controller<T> : D extends TagExecutor<infer TOutput, infer _TTag> ? TOutput : never;
135
140
  type InferDeps<D> = { [K in keyof D]: InferDep<D[K]> };
136
141
  type AtomFactory<T, D extends Record<string, Dependency>> = keyof D extends never ? (ctx: ResolveContext) => MaybePromise<T> : (ctx: ResolveContext, deps: InferDeps<D>) => MaybePromise<T>;
137
- type FlowFactory<TOutput, TInput, D extends Record<string, Dependency>> = keyof D extends never ? (ctx: ExecutionContext) => MaybePromise<TOutput> : (ctx: ExecutionContext, deps: InferDeps<D>) => MaybePromise<TOutput>;
142
+ type FlowFactory<TOutput, TInput, D extends Record<string, Dependency>> = keyof D extends never ? (ctx: ExecutionContext<TInput>) => MaybePromise<TOutput> : (ctx: ExecutionContext<TInput>, deps: InferDeps<D>) => MaybePromise<TOutput>;
138
143
  }
139
144
  //#endregion
140
145
  //#region src/tag.d.ts
@@ -160,6 +165,15 @@ declare function tag<T>(options: {
160
165
  label: string;
161
166
  default: T;
162
167
  }): Lite.Tag<T, true>;
168
+ declare function tag<T>(options: {
169
+ label: string;
170
+ parse: (raw: unknown) => T;
171
+ }): Lite.Tag<T, false>;
172
+ declare function tag<T>(options: {
173
+ label: string;
174
+ parse: (raw: unknown) => T;
175
+ default: T;
176
+ }): Lite.Tag<T, true>;
163
177
  /**
164
178
  * Type guard to check if a value is a Tag.
165
179
  *
@@ -346,17 +360,35 @@ declare function isControllerDep(value: unknown): value is Lite.ControllerDep<un
346
360
  * })
347
361
  * ```
348
362
  */
349
- declare function flow<TOutput, TInput = unknown>(config: {
363
+ declare function flow<TOutput>(config: {
364
+ name?: string;
350
365
  deps?: undefined;
351
366
  factory: (ctx: Lite.ExecutionContext) => MaybePromise<TOutput>;
352
367
  tags?: Lite.Tagged<unknown>[];
368
+ }): Lite.Flow<TOutput, unknown>;
369
+ declare function flow<TOutput, TInput>(config: {
370
+ name?: string;
371
+ parse: (raw: unknown) => MaybePromise<TInput>;
372
+ deps?: undefined;
373
+ factory: (ctx: Lite.ExecutionContext<TInput>) => MaybePromise<TOutput>;
374
+ tags?: Lite.Tagged<unknown>[];
353
375
  }): Lite.Flow<TOutput, TInput>;
354
- declare function flow<TOutput, TInput, const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | {
376
+ declare function flow<TOutput, const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | {
355
377
  mode: string;
356
378
  }>>(config: {
379
+ name?: string;
357
380
  deps: D;
358
381
  factory: (ctx: Lite.ExecutionContext, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>;
359
382
  tags?: Lite.Tagged<unknown>[];
383
+ }): Lite.Flow<TOutput, unknown>;
384
+ declare function flow<TOutput, TInput, const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | {
385
+ mode: string;
386
+ }>>(config: {
387
+ name?: string;
388
+ parse: (raw: unknown) => MaybePromise<TInput>;
389
+ deps: D;
390
+ factory: (ctx: Lite.ExecutionContext<TInput>, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>;
391
+ tags?: Lite.Tagged<unknown>[];
360
392
  }): Lite.Flow<TOutput, TInput>;
361
393
  /**
362
394
  * Type guard to check if a value is a Flow.
@@ -432,8 +464,17 @@ declare function isPreset(value: unknown): value is Lite.Preset<unknown>;
432
464
  */
433
465
  declare function createScope(options?: Lite.ScopeOptions): Lite.Scope;
434
466
  //#endregion
467
+ //#region src/errors.d.ts
468
+ declare class ParseError extends Error {
469
+ readonly phase: "tag" | "flow-input";
470
+ readonly label: string;
471
+ readonly cause: unknown;
472
+ readonly name = "ParseError";
473
+ constructor(message: string, phase: "tag" | "flow-input", label: string, cause: unknown);
474
+ }
475
+ //#endregion
435
476
  //#region src/index.d.ts
436
477
  declare const VERSION = "0.0.1";
437
478
  //#endregion
438
- export { type AtomState, type Lite, VERSION, atom, atomSymbol, controller, controllerDepSymbol, controllerSymbol, createScope, flow, flowSymbol, isAtom, isControllerDep, isFlow, isPreset, isTag, isTagExecutor, isTagged, preset, presetSymbol, tag, tagExecutorSymbol, tagSymbol, taggedSymbol, tags };
479
+ export { type AtomState, type Lite, ParseError, VERSION, atom, atomSymbol, controller, controllerDepSymbol, controllerSymbol, createScope, flow, flowSymbol, isAtom, isControllerDep, isFlow, isPreset, isTag, isTagExecutor, isTagged, preset, presetSymbol, tag, tagExecutorSymbol, tagSymbol, taggedSymbol, tags };
439
480
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/symbols.ts","../src/types.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/symbols.ts","../src/types.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/errors.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -8,17 +8,36 @@ const presetSymbol = Symbol.for("@pumped-fn/lite/preset");
8
8
  const controllerSymbol = Symbol.for("@pumped-fn/lite/controller");
9
9
  const tagExecutorSymbol = Symbol.for("@pumped-fn/lite/tag-executor");
10
10
 
11
+ //#endregion
12
+ //#region src/errors.ts
13
+ var ParseError = class extends Error {
14
+ name = "ParseError";
15
+ constructor(message, phase, label, cause) {
16
+ super(message);
17
+ this.phase = phase;
18
+ this.label = label;
19
+ this.cause = cause;
20
+ }
21
+ };
22
+
11
23
  //#endregion
12
24
  //#region src/tag.ts
13
25
  function tag(options) {
14
26
  const key = Symbol.for(`@pumped-fn/lite/tag/${options.label}`);
15
27
  const hasDefault = "default" in options;
16
28
  const defaultValue = hasDefault ? options.default : void 0;
29
+ const parse = options.parse;
17
30
  function createTagged(value) {
31
+ let validatedValue = value;
32
+ if (parse) try {
33
+ validatedValue = parse(value);
34
+ } catch (err) {
35
+ throw new ParseError(`Failed to parse tag "${options.label}"`, "tag", options.label, err);
36
+ }
18
37
  return {
19
38
  [taggedSymbol]: true,
20
39
  key,
21
- value
40
+ value: validatedValue
22
41
  };
23
42
  }
24
43
  function get(source) {
@@ -44,6 +63,7 @@ function tag(options) {
44
63
  label: options.label,
45
64
  hasDefault,
46
65
  defaultValue,
66
+ parse,
47
67
  get,
48
68
  find,
49
69
  collect
@@ -198,6 +218,8 @@ function isControllerDep(value) {
198
218
  function flow(config) {
199
219
  return {
200
220
  [flowSymbol]: true,
221
+ name: config.name,
222
+ parse: config.parse,
201
223
  factory: config.factory,
202
224
  deps: config.deps,
203
225
  tags: config.tags
@@ -356,22 +378,49 @@ var ScopeImpl = class {
356
378
  stateListeners = /* @__PURE__ */ new Map();
357
379
  invalidationQueue = /* @__PURE__ */ new Set();
358
380
  invalidationScheduled = false;
381
+ invalidationChain = null;
382
+ chainPromise = null;
359
383
  initialized = false;
360
384
  extensions;
361
385
  tags;
362
386
  ready;
363
387
  scheduleInvalidation(atom$1) {
388
+ const entry = this.cache.get(atom$1);
389
+ if (!entry || entry.state === "idle") return;
390
+ if (entry.state === "resolving") {
391
+ entry.pendingInvalidate = true;
392
+ return;
393
+ }
364
394
  this.invalidationQueue.add(atom$1);
365
- if (!this.invalidationScheduled) {
395
+ if (!this.chainPromise) {
396
+ this.invalidationChain = /* @__PURE__ */ new Set();
366
397
  this.invalidationScheduled = true;
367
- queueMicrotask(() => this.flushInvalidations());
398
+ this.chainPromise = new Promise((resolve, reject) => {
399
+ queueMicrotask(() => {
400
+ this.processInvalidationChain().then(resolve).catch(reject);
401
+ });
402
+ });
368
403
  }
369
404
  }
370
- flushInvalidations() {
371
- this.invalidationScheduled = false;
372
- const atoms = [...this.invalidationQueue];
373
- this.invalidationQueue.clear();
374
- for (const atom$1 of atoms) this.invalidate(atom$1);
405
+ async processInvalidationChain() {
406
+ try {
407
+ while (this.invalidationQueue.size > 0) {
408
+ const atom$1 = this.invalidationQueue.values().next().value;
409
+ this.invalidationQueue.delete(atom$1);
410
+ if (this.invalidationChain.has(atom$1)) {
411
+ const chainAtoms = Array.from(this.invalidationChain);
412
+ chainAtoms.push(atom$1);
413
+ const path = chainAtoms.map((a) => a.factory?.name || "<anonymous>").join(" → ");
414
+ throw new Error(`Infinite invalidation loop detected: ${path}`);
415
+ }
416
+ this.invalidationChain.add(atom$1);
417
+ await this.doInvalidateSequential(atom$1);
418
+ }
419
+ } finally {
420
+ this.invalidationChain = null;
421
+ this.chainPromise = null;
422
+ this.invalidationScheduled = false;
423
+ }
375
424
  }
376
425
  constructor(options) {
377
426
  this.extensions = options?.extensions ?? [];
@@ -516,6 +565,7 @@ var ScopeImpl = class {
516
565
  this.notifyListeners(atom$1, "resolved");
517
566
  if (entry.pendingInvalidate) {
518
567
  entry.pendingInvalidate = false;
568
+ this.invalidationChain?.delete(atom$1);
519
569
  this.scheduleInvalidation(atom$1);
520
570
  }
521
571
  return value;
@@ -528,6 +578,7 @@ var ScopeImpl = class {
528
578
  this.notifyAllListeners(atom$1);
529
579
  if (entry.pendingInvalidate) {
530
580
  entry.pendingInvalidate = false;
581
+ this.invalidationChain?.delete(atom$1);
531
582
  this.scheduleInvalidation(atom$1);
532
583
  }
533
584
  throw entry.error;
@@ -580,9 +631,12 @@ var ScopeImpl = class {
580
631
  entry.pendingInvalidate = true;
581
632
  return;
582
633
  }
583
- this.doInvalidate(atom$1, entry);
634
+ this.scheduleInvalidation(atom$1);
584
635
  }
585
- async doInvalidate(atom$1, entry) {
636
+ async doInvalidateSequential(atom$1) {
637
+ const entry = this.cache.get(atom$1);
638
+ if (!entry) return;
639
+ if (entry.state === "idle") return;
586
640
  const previousValue = entry.value;
587
641
  for (let i = entry.cleanups.length - 1; i >= 0; i--) {
588
642
  const cleanup = entry.cleanups[i];
@@ -597,7 +651,7 @@ var ScopeImpl = class {
597
651
  this.resolving.delete(atom$1);
598
652
  this.emitStateChange("resolving", atom$1);
599
653
  this.notifyListeners(atom$1, "resolving");
600
- this.resolve(atom$1).catch(() => {});
654
+ await this.resolve(atom$1);
601
655
  }
602
656
  async release(atom$1) {
603
657
  const entry = this.cache.get(atom$1);
@@ -613,6 +667,9 @@ var ScopeImpl = class {
613
667
  const atoms = Array.from(this.cache.keys());
614
668
  for (const atom$1 of atoms) await this.release(atom$1);
615
669
  }
670
+ async flush() {
671
+ if (this.chainPromise) await this.chainPromise;
672
+ }
616
673
  createContext(options) {
617
674
  return new ExecutionContextImpl(this, options);
618
675
  }
@@ -636,14 +693,23 @@ var ExecutionContextImpl = class {
636
693
  else return this.execFn(options);
637
694
  }
638
695
  async execFlow(options) {
639
- const { flow: flow$1, input, tags: execTags } = options;
696
+ const { flow: flow$1, input, tags: execTags, name: execName } = options;
640
697
  const allTags = (execTags?.length ?? 0) > 0 || (flow$1.tags?.length ?? 0) > 0 ? [
641
698
  ...execTags ?? [],
642
699
  ...this.baseTags,
643
700
  ...flow$1.tags ?? []
644
701
  ] : this.baseTags;
645
702
  const resolvedDeps = await this.scope.resolveDeps(flow$1.deps, allTags);
646
- this._input = input;
703
+ let parsedInput = input;
704
+ if (flow$1.parse) {
705
+ const label = execName ?? flow$1.name ?? "anonymous";
706
+ try {
707
+ parsedInput = await flow$1.parse(input);
708
+ } catch (err) {
709
+ throw new ParseError(`Failed to parse flow input "${label}"`, "flow-input", label, err);
710
+ }
711
+ }
712
+ this._input = parsedInput;
647
713
  const factory = flow$1.factory;
648
714
  const doExec = async () => {
649
715
  if (flow$1.deps && Object.keys(flow$1.deps).length > 0) return factory(this, resolvedDeps);
@@ -713,5 +779,5 @@ function createScope(options) {
713
779
  const VERSION = "0.0.1";
714
780
 
715
781
  //#endregion
716
- export { VERSION, atom, atomSymbol, controller, controllerDepSymbol, controllerSymbol, createScope, flow, flowSymbol, isAtom, isControllerDep, isFlow, isPreset, isTag, isTagExecutor, isTagged, preset, presetSymbol, tag, tagExecutorSymbol, tagSymbol, taggedSymbol, tags };
782
+ export { ParseError, VERSION, atom, atomSymbol, controller, controllerDepSymbol, controllerSymbol, createScope, flow, flowSymbol, isAtom, isControllerDep, isFlow, isPreset, isTag, isTagExecutor, isTagged, preset, presetSymbol, tag, tagExecutorSymbol, tagSymbol, taggedSymbol, tags };
717
783
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["atomSymbol: unique symbol","flowSymbol: unique symbol","tagSymbol: unique symbol","taggedSymbol: unique symbol","controllerDepSymbol: unique symbol","presetSymbol: unique symbol","controllerSymbol: unique symbol","tagExecutorSymbol: unique symbol","tags","result: T[]","tag","ctrl: Lite.Controller<T>","selector: (value: T) => S","eq: (prev: S, next: S) => boolean","atom: Lite.Atom<T>","scope: ScopeImpl","atom","ctx: Lite.ResolveContext","result: Record<string, unknown>","tags","flow"],"sources":["../src/symbols.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/index.ts"],"sourcesContent":["export const atomSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/atom\")\nexport const flowSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/flow\")\nexport const tagSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/tag\")\nexport const taggedSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/tagged\")\nexport const controllerDepSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/controller-dep\")\nexport const presetSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/preset\")\nexport const controllerSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/controller\")\nexport const tagExecutorSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/tag-executor\")\n","import { tagSymbol, taggedSymbol, tagExecutorSymbol } from \"./symbols\"\nimport type { Lite } from \"./types\"\n\nexport interface TagOptions<T, HasDefault extends boolean> {\n label: string\n default?: HasDefault extends true ? T : never\n}\n\n/**\n * Creates a metadata tag for attaching and retrieving typed values from Atoms and Flows.\n *\n * @param options - Configuration object with label and optional default value\n * @returns A Tag instance that can create tagged values and query them from sources\n *\n * @example\n * ```typescript\n * const nameTag = tag<string>({ label: \"name\" })\n * const myAtom = atom({\n * factory: (ctx) => \"value\",\n * tags: [nameTag(\"MyAtom\")]\n * })\n * ```\n */\nexport function tag<T>(options: { label: string }): Lite.Tag<T, false>\nexport function tag<T>(options: {\n label: string\n default: T\n}): Lite.Tag<T, true>\nexport function tag<T>(options: TagOptions<T, boolean>): Lite.Tag<T, boolean> {\n const key = Symbol.for(`@pumped-fn/lite/tag/${options.label}`)\n const hasDefault = \"default\" in options\n const defaultValue = hasDefault ? options.default : undefined\n\n function createTagged(value: T): Lite.Tagged<T> {\n return {\n [taggedSymbol]: true,\n key,\n value,\n }\n }\n\n function get(source: Lite.TagSource): T {\n const tags = Array.isArray(source) ? source : source.tags ?? []\n for (let i = 0; i < tags.length; i++) {\n if (tags[i]!.key === key) return tags[i]!.value as unknown as T\n }\n if (hasDefault) return defaultValue as unknown as T\n throw new Error(`Tag \"${options.label}\" not found and has no default`)\n }\n\n function find(source: Lite.TagSource): T | undefined {\n const tags = Array.isArray(source) ? source : source.tags ?? []\n for (let i = 0; i < tags.length; i++) {\n if (tags[i]!.key === key) return tags[i]!.value as unknown as T\n }\n if (hasDefault) return defaultValue as unknown as T\n return undefined\n }\n\n function collect(source: Lite.TagSource): T[] {\n const tags = Array.isArray(source) ? source : source.tags ?? []\n const result: T[] = []\n for (let i = 0; i < tags.length; i++) {\n if (tags[i]!.key === key) result.push(tags[i]!.value as unknown as T)\n }\n return result\n }\n\n return Object.assign(createTagged, {\n [tagSymbol]: true as const,\n key,\n label: options.label,\n hasDefault,\n defaultValue,\n get,\n find,\n collect,\n }) as unknown as Lite.Tag<T, boolean>\n}\n\n/**\n * Type guard to check if a value is a Tag.\n *\n * @param value - The value to check\n * @returns True if the value is a Tag, false otherwise\n *\n * @example\n * ```typescript\n * if (isTag(value)) {\n * const tagged = value(\"myValue\")\n * }\n * ```\n */\nexport function isTag(value: unknown): value is Lite.Tag<unknown, boolean> {\n return (\n typeof value === \"function\" &&\n (value as unknown as Record<symbol, unknown>)[tagSymbol] === true\n )\n}\n\n/**\n * Type guard to check if a value is a Tagged value.\n *\n * @param value - The value to check\n * @returns True if the value is a Tagged value, false otherwise\n *\n * @example\n * ```typescript\n * if (isTagged(value)) {\n * console.log(value.key, value.value)\n * }\n * ```\n */\nexport function isTagged(value: unknown): value is Lite.Tagged<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[taggedSymbol] === true\n )\n}\n\n/**\n * Tag execution helpers for declaring how tags should be resolved from dependency sources.\n */\nexport const tags = {\n /**\n * Creates a required tag executor that throws if the tag is not found.\n *\n * @param tag - The tag to execute\n * @returns A tag executor that requires the tag to be present\n *\n * @example\n * ```typescript\n * const myAtom = atom({\n * deps: { name: tags.required(nameTag) },\n * factory: (ctx, { name }) => `Hello ${name}`\n * })\n * ```\n */\n required<T>(tag: Lite.Tag<T, boolean>): Lite.TagExecutor<T, T> {\n return { [tagExecutorSymbol]: true, tag, mode: \"required\" }\n },\n\n /**\n * Creates an optional tag executor that returns undefined if the tag is not found.\n *\n * @param tag - The tag to execute\n * @returns A tag executor that allows the tag to be absent\n *\n * @example\n * ```typescript\n * const myAtom = atom({\n * deps: { name: tags.optional(nameTag) },\n * factory: (ctx, { name }) => name ?? \"Anonymous\"\n * })\n * ```\n */\n optional<T>(tag: Lite.Tag<T, boolean>): Lite.TagExecutor<T | undefined, T> {\n return { [tagExecutorSymbol]: true, tag, mode: \"optional\" }\n },\n\n /**\n * Creates a tag executor that collects all values for the given tag.\n *\n * @param tag - The tag to execute\n * @returns A tag executor that returns an array of all matching tag values\n *\n * @example\n * ```typescript\n * const myAtom = atom({\n * deps: { names: tags.all(nameTag) },\n * factory: (ctx, { names }) => names.join(\", \")\n * })\n * ```\n */\n all<T>(tag: Lite.Tag<T, boolean>): Lite.TagExecutor<T[], T> {\n return { [tagExecutorSymbol]: true, tag, mode: \"all\" }\n },\n}\n\n/**\n * Type guard to check if a value is a TagExecutor.\n *\n * @param value - The value to check\n * @returns True if the value is a TagExecutor, false otherwise\n *\n * @example\n * ```typescript\n * if (isTagExecutor(value)) {\n * console.log(value.mode, value.tag)\n * }\n * ```\n */\nexport function isTagExecutor(value: unknown): value is Lite.TagExecutor<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n tagExecutorSymbol in value\n )\n}\n","import { atomSymbol, controllerDepSymbol } from \"./symbols\"\nimport type { Lite, MaybePromise } from \"./types\"\n\nexport interface AtomConfig<T, D extends Record<string, Lite.Dependency>> {\n deps?: D\n factory: Lite.AtomFactory<T, D>\n tags?: Lite.Tagged<unknown>[]\n}\n\n/**\n * Creates a long-lived dependency that can be resolved and reused within a scope.\n *\n * @param config - Configuration object containing factory function, optional dependencies, and tags\n * @returns An Atom instance that can be resolved to produce a value of type T\n *\n * @example\n * ```typescript\n * const dbAtom = atom({\n * factory: async (ctx) => createDatabase()\n * })\n * ```\n */\nexport function atom<T>(config: {\n deps?: undefined\n factory: (ctx: Lite.ResolveContext) => MaybePromise<T>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Atom<T>\n\nexport function atom<\n T,\n const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | { mode: string }>,\n>(config: {\n deps: D\n factory: (ctx: Lite.ResolveContext, deps: Lite.InferDeps<D>) => MaybePromise<T>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Atom<T>\n\nexport function atom<T, D extends Record<string, Lite.Dependency>>(\n config: AtomConfig<T, D>\n): Lite.Atom<T> {\n return {\n [atomSymbol]: true,\n factory: config.factory as unknown as Lite.AtomFactory<T, Record<string, Lite.Dependency>>,\n deps: config.deps as unknown as Record<string, Lite.Dependency> | undefined,\n tags: config.tags,\n }\n}\n\n/**\n * Type guard to check if a value is an Atom.\n *\n * @param value - The value to check\n * @returns True if the value is an Atom, false otherwise\n *\n * @example\n * ```typescript\n * if (isAtom(value)) {\n * await scope.resolve(value)\n * }\n * ```\n */\nexport function isAtom(value: unknown): value is Lite.Atom<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[atomSymbol] === true\n )\n}\n\n/**\n * Wraps an Atom to receive a Controller instead of the resolved value.\n * The Controller provides full lifecycle control: get, resolve, release, invalidate, and subscribe.\n *\n * @param atom - The Atom to wrap\n * @returns A ControllerDep that resolves to a Controller for the Atom\n *\n * @example\n * ```typescript\n * const configAtom = atom({ factory: () => fetchConfig() })\n * const serverAtom = atom({\n * deps: { config: controller(configAtom) },\n * factory: (ctx, { config }) => {\n * const unsub = config.on(() => ctx.invalidate())\n * ctx.cleanup(unsub)\n * return createServer(config.get().port)\n * }\n * })\n * ```\n */\nexport function controller<T>(atom: Lite.Atom<T>): Lite.ControllerDep<T> {\n return {\n [controllerDepSymbol]: true,\n atom,\n }\n}\n\n/**\n * Type guard to check if a value is a ControllerDep wrapper.\n *\n * @param value - The value to check\n * @returns True if the value is a ControllerDep wrapper, false otherwise\n *\n * @example\n * ```typescript\n * if (isControllerDep(dep)) {\n * const ctrl = scope.controller(dep.atom)\n * }\n * ```\n */\nexport function isControllerDep(value: unknown): value is Lite.ControllerDep<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[controllerDepSymbol] === true\n )\n}\n","import { flowSymbol } from \"./symbols\"\nimport type { Lite, MaybePromise } from \"./types\"\n\nexport interface FlowConfig<\n TOutput,\n TInput,\n D extends Record<string, Lite.Dependency>,\n> {\n deps?: D\n factory: Lite.FlowFactory<TOutput, TInput, D>\n tags?: Lite.Tagged<unknown>[]\n}\n\n/**\n * Creates a short-lived execution unit that processes input and produces output.\n *\n * @param config - Configuration object containing factory function, optional dependencies, and tags\n * @returns A Flow instance that can be executed within an execution context\n *\n * @example\n * ```typescript\n * const processUser = flow({\n * factory: async (ctx) => {\n * const userId = ctx.input\n * return await fetchUser(userId)\n * }\n * })\n * ```\n */\nexport function flow<TOutput, TInput = unknown>(config: {\n deps?: undefined\n factory: (ctx: Lite.ExecutionContext) => MaybePromise<TOutput>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Flow<TOutput, TInput>\n\nexport function flow<\n TOutput,\n TInput,\n const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | { mode: string }>,\n>(config: {\n deps: D\n factory: (ctx: Lite.ExecutionContext, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Flow<TOutput, TInput>\n\nexport function flow<\n TOutput,\n TInput,\n D extends Record<string, Lite.Dependency>,\n>(config: FlowConfig<TOutput, TInput, D>): Lite.Flow<TOutput, TInput> {\n return {\n [flowSymbol]: true,\n factory: config.factory as unknown as Lite.FlowFactory<\n TOutput,\n TInput,\n Record<string, Lite.Dependency>\n >,\n deps: config.deps as unknown as Record<string, Lite.Dependency> | undefined,\n tags: config.tags,\n }\n}\n\n/**\n * Type guard to check if a value is a Flow.\n *\n * @param value - The value to check\n * @returns True if the value is a Flow, false otherwise\n *\n * @example\n * ```typescript\n * if (isFlow(value)) {\n * await ctx.exec({ flow: value, input: data })\n * }\n * ```\n */\nexport function isFlow(value: unknown): value is Lite.Flow<unknown, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[flowSymbol] === true\n )\n}\n","import { presetSymbol } from \"./symbols\"\nimport type { Lite } from \"./types\"\n\n/**\n * Creates a preset value for an Atom, overriding its factory within a scope.\n *\n * @param atom - The Atom to preset\n * @param value - The preset value (can be a direct value or another Atom)\n * @returns A Preset instance to be used in scope configuration\n *\n * @example\n * ```typescript\n * const scope = await createScope({\n * presets: [preset(dbAtom, mockDatabase)]\n * })\n * ```\n */\nexport function preset<T>(\n atom: Lite.Atom<T>,\n value: T | Lite.Atom<T>\n): Lite.Preset<T> {\n return {\n [presetSymbol]: true,\n atom,\n value,\n }\n}\n\n/**\n * Type guard to check if a value is a Preset.\n *\n * @param value - The value to check\n * @returns True if the value is a Preset, false otherwise\n *\n * @example\n * ```typescript\n * if (isPreset(value)) {\n * console.log(value.atom, value.value)\n * }\n * ```\n */\nexport function isPreset(value: unknown): value is Lite.Preset<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[presetSymbol] === true\n )\n}\n","import { controllerSymbol, tagExecutorSymbol } from \"./symbols\"\nimport type { Lite, MaybePromise, AtomState } from \"./types\"\nimport { isAtom, isControllerDep } from \"./atom\"\n\ntype ListenerEvent = 'resolving' | 'resolved' | '*'\n\nclass DataStoreImpl implements Lite.DataStore {\n private readonly map = new Map<symbol, unknown>()\n\n get<T, H extends boolean>(tag: Lite.Tag<T, H>): H extends true ? T : T | undefined {\n if (this.map.has(tag.key)) {\n return this.map.get(tag.key) as T\n }\n if (tag.hasDefault) {\n return tag.defaultValue as T\n }\n return undefined as H extends true ? T : T | undefined\n }\n\n set<T>(tag: Lite.Tag<T, boolean>, value: T): void {\n this.map.set(tag.key, value)\n }\n\n has(tag: Lite.Tag<unknown, boolean>): boolean {\n return this.map.has(tag.key)\n }\n\n delete(tag: Lite.Tag<unknown, boolean>): boolean {\n return this.map.delete(tag.key)\n }\n\n clear(): void {\n this.map.clear()\n }\n}\n\ninterface AtomEntry<T> {\n state: AtomState\n value?: T\n hasValue: boolean\n error?: Error\n cleanups: (() => MaybePromise<void>)[]\n listeners: Map<ListenerEvent, Set<() => void>>\n pendingInvalidate: boolean\n data?: Lite.DataStore\n}\n\nclass SelectHandleImpl<T, S> implements Lite.SelectHandle<S> {\n private listeners = new Set<() => void>()\n private currentValue: S\n private ctrlUnsub: (() => void) | null = null\n\n constructor(\n private ctrl: Lite.Controller<T>,\n private selector: (value: T) => S,\n private eq: (prev: S, next: S) => boolean\n ) {\n if (ctrl.state !== 'resolved') {\n throw new Error(\"Cannot select from unresolved atom\")\n }\n\n this.currentValue = selector(ctrl.get())\n\n this.ctrlUnsub = ctrl.on('resolved', () => {\n const nextValue = this.selector(this.ctrl.get())\n if (!this.eq(this.currentValue, nextValue)) {\n this.currentValue = nextValue\n this.notifyListeners()\n }\n })\n }\n\n get(): S {\n return this.currentValue\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener)\n\n return () => {\n this.listeners.delete(listener)\n if (this.listeners.size === 0) {\n this.cleanup()\n }\n }\n }\n\n private notifyListeners(): void {\n for (const listener of this.listeners) {\n listener()\n }\n }\n\n private cleanup(): void {\n this.ctrlUnsub?.()\n this.ctrlUnsub = null\n this.listeners.clear()\n }\n}\n\nclass ControllerImpl<T> implements Lite.Controller<T> {\n readonly [controllerSymbol] = true\n\n constructor(\n private atom: Lite.Atom<T>,\n private scope: ScopeImpl\n ) {}\n\n get state(): AtomState {\n const entry = this.scope.getEntry(this.atom)\n return entry?.state ?? 'idle'\n }\n\n get(): T {\n const entry = this.scope.getEntry(this.atom)\n if (!entry || entry.state === 'idle') {\n throw new Error(\"Atom not resolved\")\n }\n if (entry.state === 'failed' && entry.error) {\n throw entry.error\n }\n if (entry.state === 'resolving' && entry.hasValue) {\n return entry.value as T\n }\n if (entry.state === 'resolved' && entry.hasValue) {\n return entry.value as T\n }\n throw new Error(\"Atom not resolved\")\n }\n\n async resolve(): Promise<T> {\n return this.scope.resolve(this.atom)\n }\n\n async release(): Promise<void> {\n return this.scope.release(this.atom)\n }\n\n invalidate(): void {\n this.scope.invalidate(this.atom)\n }\n\n on(event: ListenerEvent, listener: () => void): () => void {\n return this.scope.addListener(this.atom, event, listener)\n }\n}\n\nclass ScopeImpl implements Lite.Scope {\n private cache = new Map<Lite.Atom<unknown>, AtomEntry<unknown>>()\n private presets = new Map<Lite.Atom<unknown>, unknown | Lite.Atom<unknown>>()\n private resolving = new Set<Lite.Atom<unknown>>()\n private pending = new Map<Lite.Atom<unknown>, Promise<unknown>>()\n private stateListeners = new Map<AtomState, Map<Lite.Atom<unknown>, Set<() => void>>>()\n private invalidationQueue = new Set<Lite.Atom<unknown>>()\n private invalidationScheduled = false\n private initialized = false\n readonly extensions: Lite.Extension[]\n readonly tags: Lite.Tagged<unknown>[]\n readonly ready: Promise<void>\n\n private scheduleInvalidation<T>(atom: Lite.Atom<T>): void {\n this.invalidationQueue.add(atom)\n if (!this.invalidationScheduled) {\n this.invalidationScheduled = true\n queueMicrotask(() => this.flushInvalidations())\n }\n }\n\n private flushInvalidations(): void {\n this.invalidationScheduled = false\n const atoms = [...this.invalidationQueue]\n this.invalidationQueue.clear()\n for (const atom of atoms) {\n this.invalidate(atom)\n }\n }\n\n constructor(options?: Lite.ScopeOptions) {\n this.extensions = options?.extensions ?? []\n this.tags = options?.tags ?? []\n\n for (const p of options?.presets ?? []) {\n this.presets.set(p.atom, p.value)\n }\n\n this.ready = this.init()\n }\n\n private async init(): Promise<void> {\n for (const ext of this.extensions) {\n if (ext.init) {\n await ext.init(this)\n }\n }\n this.initialized = true\n }\n\n getEntry<T>(atom: Lite.Atom<T>): AtomEntry<T> | undefined {\n return this.cache.get(atom) as AtomEntry<T> | undefined\n }\n\n private getOrCreateEntry<T>(atom: Lite.Atom<T>): AtomEntry<T> {\n let entry = this.cache.get(atom) as AtomEntry<T> | undefined\n if (!entry) {\n entry = {\n state: 'idle',\n hasValue: false,\n cleanups: [],\n listeners: new Map([\n ['resolving', new Set()],\n ['resolved', new Set()],\n ['*', new Set()],\n ]),\n pendingInvalidate: false,\n }\n this.cache.set(atom, entry as AtomEntry<unknown>)\n }\n return entry\n }\n\n addListener<T>(atom: Lite.Atom<T>, event: ListenerEvent, listener: () => void): () => void {\n const entry = this.getOrCreateEntry(atom)\n const listeners = entry.listeners.get(event)!\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n }\n\n private notifyListeners<T>(atom: Lite.Atom<T>, event: 'resolving' | 'resolved'): void {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n const eventListeners = entry.listeners.get(event)\n if (eventListeners) {\n for (const listener of eventListeners) {\n listener()\n }\n }\n\n const allListeners = entry.listeners.get('*')\n if (allListeners) {\n for (const listener of allListeners) {\n listener()\n }\n }\n }\n\n private notifyAllListeners<T>(atom: Lite.Atom<T>): void {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n const allListeners = entry.listeners.get('*')\n if (allListeners) {\n for (const listener of allListeners) {\n listener()\n }\n }\n }\n\n private emitStateChange(state: AtomState, atom: Lite.Atom<unknown>): void {\n const stateMap = this.stateListeners.get(state)\n if (stateMap) {\n const listeners = stateMap.get(atom)\n if (listeners) {\n for (const listener of listeners) {\n listener()\n }\n }\n }\n }\n\n on(event: AtomState, atom: Lite.Atom<unknown>, listener: () => void): () => void {\n let stateMap = this.stateListeners.get(event)\n if (!stateMap) {\n stateMap = new Map()\n this.stateListeners.set(event, stateMap)\n }\n let listeners = stateMap.get(atom)\n if (!listeners) {\n listeners = new Set()\n stateMap.set(atom, listeners)\n }\n listeners.add(listener)\n\n const capturedStateMap = stateMap\n const capturedListeners = listeners\n\n return () => {\n capturedListeners.delete(listener)\n if (capturedListeners.size === 0) {\n capturedStateMap.delete(atom)\n if (capturedStateMap.size === 0) {\n this.stateListeners.delete(event)\n }\n }\n }\n }\n\n async resolve<T>(atom: Lite.Atom<T>): Promise<T> {\n if (!this.initialized) {\n await this.ready\n }\n\n const entry = this.cache.get(atom) as AtomEntry<T> | undefined\n if (entry?.state === 'resolved') {\n return entry.value as T\n }\n\n const pendingPromise = this.pending.get(atom)\n if (pendingPromise) {\n return pendingPromise as Promise<T>\n }\n\n if (this.resolving.has(atom)) {\n throw new Error(\"Circular dependency detected\")\n }\n\n const presetValue = this.presets.get(atom)\n if (presetValue !== undefined) {\n if (isAtom(presetValue)) {\n return this.resolve(presetValue as Lite.Atom<T>)\n }\n const newEntry = this.getOrCreateEntry(atom)\n newEntry.state = 'resolved'\n newEntry.value = presetValue as T\n newEntry.hasValue = true\n this.emitStateChange('resolved', atom)\n this.notifyListeners(atom, 'resolved')\n return newEntry.value\n }\n\n this.resolving.add(atom)\n\n const promise = this.doResolve(atom)\n this.pending.set(atom, promise as Promise<unknown>)\n\n try {\n return await promise\n } finally {\n this.resolving.delete(atom)\n this.pending.delete(atom)\n }\n }\n\n private async doResolve<T>(atom: Lite.Atom<T>): Promise<T> {\n const entry = this.getOrCreateEntry(atom)\n\n const wasResolving = entry.state === 'resolving'\n if (!wasResolving) {\n entry.state = 'resolving'\n this.emitStateChange('resolving', atom)\n this.notifyListeners(atom, 'resolving')\n }\n\n const resolvedDeps = await this.resolveDeps(atom.deps)\n\n const ctx: Lite.ResolveContext = {\n cleanup: (fn) => entry.cleanups.push(fn),\n invalidate: () => {\n this.scheduleInvalidation(atom)\n },\n scope: this,\n get data() {\n if (!entry.data) {\n entry.data = new DataStoreImpl()\n }\n return entry.data\n },\n }\n\n const factory = atom.factory as (\n ctx: Lite.ResolveContext,\n deps?: Record<string, unknown>\n ) => MaybePromise<T>\n\n const doResolve = async () => {\n if (atom.deps && Object.keys(atom.deps).length > 0) {\n return factory(ctx, resolvedDeps)\n } else {\n return factory(ctx)\n }\n }\n\n try {\n const value = await this.applyResolveExtensions(atom, doResolve)\n entry.state = 'resolved'\n entry.value = value\n entry.hasValue = true\n entry.error = undefined\n this.emitStateChange('resolved', atom)\n this.notifyListeners(atom, 'resolved')\n\n if (entry.pendingInvalidate) {\n entry.pendingInvalidate = false\n this.scheduleInvalidation(atom)\n }\n\n return value\n } catch (err) {\n entry.state = 'failed'\n entry.error = err instanceof Error ? err : new Error(String(err))\n entry.value = undefined\n entry.hasValue = false\n this.emitStateChange('failed', atom)\n this.notifyAllListeners(atom)\n\n if (entry.pendingInvalidate) {\n entry.pendingInvalidate = false\n this.scheduleInvalidation(atom)\n }\n\n throw entry.error\n }\n }\n\n private async applyResolveExtensions<T>(\n atom: Lite.Atom<T>,\n doResolve: () => Promise<T>\n ): Promise<T> {\n let next = doResolve\n\n for (let i = this.extensions.length - 1; i >= 0; i--) {\n const ext = this.extensions[i]\n if (ext?.wrapResolve) {\n const currentNext = next\n next = ext.wrapResolve.bind(ext, currentNext, atom, this) as () => Promise<T>\n }\n }\n\n return next()\n }\n\n async resolveDeps(\n deps: Record<string, Lite.Dependency> | undefined,\n tagSource?: Lite.Tagged<unknown>[]\n ): Promise<Record<string, unknown>> {\n if (!deps) return {}\n\n const result: Record<string, unknown> = {}\n const tags = tagSource ?? this.tags\n\n for (const [key, dep] of Object.entries(deps)) {\n if (isAtom(dep)) {\n result[key] = await this.resolve(dep)\n } else if (isControllerDep(dep)) {\n result[key] = new ControllerImpl(dep.atom, this)\n } else if (tagExecutorSymbol in (dep as object)) {\n const tagExecutor = dep as Lite.TagExecutor<unknown, boolean>\n\n switch (tagExecutor.mode) {\n case \"required\":\n result[key] = tagExecutor.tag.get(tags)\n break\n case \"optional\":\n result[key] = tagExecutor.tag.find(tags)\n break\n case \"all\":\n result[key] = tagExecutor.tag.collect(tags)\n break\n }\n }\n }\n\n return result\n }\n\n controller<T>(atom: Lite.Atom<T>): Lite.Controller<T> {\n return new ControllerImpl(atom, this)\n }\n\n select<T, S>(\n atom: Lite.Atom<T>,\n selector: (value: T) => S,\n options?: Lite.SelectOptions<S>\n ): Lite.SelectHandle<S> {\n const ctrl = this.controller(atom)\n const eq = options?.eq ?? ((a, b) => a === b)\n return new SelectHandleImpl(ctrl, selector, eq)\n }\n\n invalidate<T>(atom: Lite.Atom<T>): void {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n if (entry.state === 'idle') return\n\n if (entry.state === 'resolving') {\n entry.pendingInvalidate = true\n return\n }\n\n this.doInvalidate(atom, entry as AtomEntry<T>)\n }\n\n private async doInvalidate<T>(atom: Lite.Atom<T>, entry: AtomEntry<T>): Promise<void> {\n const previousValue = entry.value\n for (let i = entry.cleanups.length - 1; i >= 0; i--) {\n const cleanup = entry.cleanups[i]\n if (cleanup) await cleanup()\n }\n entry.cleanups = []\n entry.state = 'resolving'\n entry.value = previousValue\n entry.error = undefined\n entry.pendingInvalidate = false\n this.pending.delete(atom)\n this.resolving.delete(atom)\n this.emitStateChange('resolving', atom)\n this.notifyListeners(atom, 'resolving')\n\n this.resolve(atom).catch(() => {})\n }\n\n async release<T>(atom: Lite.Atom<T>): Promise<void> {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n for (let i = entry.cleanups.length - 1; i >= 0; i--) {\n const cleanup = entry.cleanups[i]\n if (cleanup) await cleanup()\n }\n\n this.cache.delete(atom)\n }\n\n async dispose(): Promise<void> {\n for (const ext of this.extensions) {\n if (ext.dispose) {\n await ext.dispose(this)\n }\n }\n\n const atoms = Array.from(this.cache.keys())\n for (const atom of atoms) {\n await this.release(atom as Lite.Atom<unknown>)\n }\n }\n\n createContext(options?: Lite.CreateContextOptions): Lite.ExecutionContext {\n return new ExecutionContextImpl(this, options)\n }\n}\n\nclass ExecutionContextImpl implements Lite.ExecutionContext {\n private cleanups: (() => MaybePromise<void>)[] = []\n private closed = false\n private _input: unknown = undefined\n private readonly baseTags: Lite.Tagged<unknown>[]\n\n constructor(\n readonly scope: ScopeImpl,\n options?: Lite.CreateContextOptions\n ) {\n const ctxTags = options?.tags\n this.baseTags = ctxTags?.length\n ? [...ctxTags, ...scope.tags]\n : scope.tags\n }\n\n get input(): unknown {\n return this._input\n }\n\n async exec<T>(options: Lite.ExecFlowOptions<T> | Lite.ExecFnOptions<T>): Promise<T> {\n if (this.closed) {\n throw new Error(\"ExecutionContext is closed\")\n }\n\n if (\"flow\" in options) {\n return this.execFlow(options)\n } else {\n return this.execFn(options)\n }\n }\n\n private async execFlow<T>(options: Lite.ExecFlowOptions<T>): Promise<T> {\n const { flow, input, tags: execTags } = options\n\n const hasExtraTags = (execTags?.length ?? 0) > 0 || (flow.tags?.length ?? 0) > 0\n const allTags = hasExtraTags\n ? [...(execTags ?? []), ...this.baseTags, ...(flow.tags ?? [])]\n : this.baseTags\n\n const resolvedDeps = await this.scope.resolveDeps(flow.deps, allTags)\n\n this._input = input\n\n const factory = flow.factory as unknown as (\n ctx: Lite.ExecutionContext,\n deps?: Record<string, unknown>\n ) => MaybePromise<T>\n\n const doExec = async (): Promise<T> => {\n if (flow.deps && Object.keys(flow.deps).length > 0) {\n return factory(this, resolvedDeps)\n } else {\n return factory(this)\n }\n }\n\n return this.applyExecExtensions(flow, doExec)\n }\n\n private execFn<T>(options: Lite.ExecFnOptions<T>): Promise<T> {\n const { fn, params } = options\n const doExec = () => Promise.resolve(fn(...params))\n return this.applyExecExtensions(fn, doExec)\n }\n\n private async applyExecExtensions<T>(\n target: Lite.Flow<T, unknown> | ((...args: unknown[]) => MaybePromise<T>),\n doExec: () => Promise<T>\n ): Promise<T> {\n let next = doExec\n\n for (let i = this.scope.extensions.length - 1; i >= 0; i--) {\n const ext = this.scope.extensions[i]\n if (ext?.wrapExec) {\n const currentNext = next\n next = ext.wrapExec.bind(ext, currentNext, target, this) as () => Promise<T>\n }\n }\n\n return next()\n }\n\n onClose(fn: () => MaybePromise<void>): void {\n this.cleanups.push(fn)\n }\n\n async close(): Promise<void> {\n if (this.closed) return\n\n this.closed = true\n\n for (let i = this.cleanups.length - 1; i >= 0; i--) {\n const cleanup = this.cleanups[i]\n if (cleanup) await cleanup()\n }\n }\n}\n\n/**\n * Creates a DI container that manages Atom resolution, caching, and lifecycle.\n *\n * The scope is returned synchronously, with a `ready` promise that resolves\n * when all extensions have been initialized. Resolution methods automatically\n * wait for `ready` before proceeding.\n *\n * @param options - Optional configuration for extensions, presets, and tags\n * @returns A Scope instance with a `ready` promise for extension initialization\n *\n * @example\n * ```typescript\n * const scope = createScope({\n * extensions: [loggingExtension],\n * presets: [preset(dbAtom, testDb)]\n * })\n *\n * // Option 1: resolve() waits for ready internally\n * const db = await scope.resolve(dbAtom)\n *\n * // Option 2: explicit wait\n * await scope.ready\n * const db = await scope.resolve(dbAtom)\n * ```\n */\nexport function createScope(options?: Lite.ScopeOptions): Lite.Scope {\n return new ScopeImpl(options)\n}\n","export type { Lite, AtomState } from \"./types\"\nexport {\n atomSymbol,\n flowSymbol,\n tagSymbol,\n taggedSymbol,\n controllerDepSymbol,\n presetSymbol,\n controllerSymbol,\n tagExecutorSymbol,\n} from \"./symbols\"\nexport { tag, tags, isTag, isTagged, isTagExecutor } from \"./tag\"\nexport { atom, isAtom, controller, isControllerDep } from \"./atom\"\nexport { flow, isFlow } from \"./flow\"\nexport { preset, isPreset } from \"./preset\"\nexport { createScope } from \"./scope\"\n\nexport const VERSION = \"0.0.1\"\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["atomSymbol: unique symbol","flowSymbol: unique symbol","tagSymbol: unique symbol","taggedSymbol: unique symbol","controllerDepSymbol: unique symbol","presetSymbol: unique symbol","controllerSymbol: unique symbol","tagExecutorSymbol: unique symbol","phase: \"tag\" | \"flow-input\"","label: string","cause: unknown","tags","result: T[]","tag","ctrl: Lite.Controller<T>","selector: (value: T) => S","eq: (prev: S, next: S) => boolean","atom: Lite.Atom<T>","scope: ScopeImpl","atom","ctx: Lite.ResolveContext","result: Record<string, unknown>","tags","flow","parsedInput: unknown"],"sources":["../src/symbols.ts","../src/errors.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/index.ts"],"sourcesContent":["export const atomSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/atom\")\nexport const flowSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/flow\")\nexport const tagSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/tag\")\nexport const taggedSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/tagged\")\nexport const controllerDepSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/controller-dep\")\nexport const presetSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/preset\")\nexport const controllerSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/controller\")\nexport const tagExecutorSymbol: unique symbol = Symbol.for(\"@pumped-fn/lite/tag-executor\")\n","export class ParseError extends Error {\n override readonly name = \"ParseError\"\n\n constructor(\n message: string,\n readonly phase: \"tag\" | \"flow-input\",\n readonly label: string,\n override readonly cause: unknown\n ) {\n super(message)\n }\n}\n","import { tagSymbol, taggedSymbol, tagExecutorSymbol } from \"./symbols\"\nimport { ParseError } from \"./errors\"\nimport type { Lite } from \"./types\"\n\nexport interface TagOptions<T, HasDefault extends boolean> {\n label: string\n default?: HasDefault extends true ? T : never\n parse?: (raw: unknown) => T\n}\n\n/**\n * Creates a metadata tag for attaching and retrieving typed values from Atoms and Flows.\n *\n * @param options - Configuration object with label and optional default value\n * @returns A Tag instance that can create tagged values and query them from sources\n *\n * @example\n * ```typescript\n * const nameTag = tag<string>({ label: \"name\" })\n * const myAtom = atom({\n * factory: (ctx) => \"value\",\n * tags: [nameTag(\"MyAtom\")]\n * })\n * ```\n */\nexport function tag<T>(options: { label: string }): Lite.Tag<T, false>\nexport function tag<T>(options: {\n label: string\n default: T\n}): Lite.Tag<T, true>\nexport function tag<T>(options: {\n label: string\n parse: (raw: unknown) => T\n}): Lite.Tag<T, false>\nexport function tag<T>(options: {\n label: string\n parse: (raw: unknown) => T\n default: T\n}): Lite.Tag<T, true>\nexport function tag<T>(options: TagOptions<T, boolean>): Lite.Tag<T, boolean> {\n const key = Symbol.for(`@pumped-fn/lite/tag/${options.label}`)\n const hasDefault = \"default\" in options\n const defaultValue = hasDefault ? options.default : undefined\n const parse = options.parse\n\n function createTagged(value: T): Lite.Tagged<T> {\n let validatedValue = value\n if (parse) {\n try {\n validatedValue = parse(value)\n } catch (err) {\n throw new ParseError(\n `Failed to parse tag \"${options.label}\"`,\n \"tag\",\n options.label,\n err\n )\n }\n }\n return {\n [taggedSymbol]: true,\n key,\n value: validatedValue,\n }\n }\n\n function get(source: Lite.TagSource): T {\n const tags = Array.isArray(source) ? source : source.tags ?? []\n for (let i = 0; i < tags.length; i++) {\n if (tags[i]!.key === key) return tags[i]!.value as unknown as T\n }\n if (hasDefault) return defaultValue as unknown as T\n throw new Error(`Tag \"${options.label}\" not found and has no default`)\n }\n\n function find(source: Lite.TagSource): T | undefined {\n const tags = Array.isArray(source) ? source : source.tags ?? []\n for (let i = 0; i < tags.length; i++) {\n if (tags[i]!.key === key) return tags[i]!.value as unknown as T\n }\n if (hasDefault) return defaultValue as unknown as T\n return undefined\n }\n\n function collect(source: Lite.TagSource): T[] {\n const tags = Array.isArray(source) ? source : source.tags ?? []\n const result: T[] = []\n for (let i = 0; i < tags.length; i++) {\n if (tags[i]!.key === key) result.push(tags[i]!.value as unknown as T)\n }\n return result\n }\n\n return Object.assign(createTagged, {\n [tagSymbol]: true as const,\n key,\n label: options.label,\n hasDefault,\n defaultValue,\n parse,\n get,\n find,\n collect,\n }) as unknown as Lite.Tag<T, boolean>\n}\n\n/**\n * Type guard to check if a value is a Tag.\n *\n * @param value - The value to check\n * @returns True if the value is a Tag, false otherwise\n *\n * @example\n * ```typescript\n * if (isTag(value)) {\n * const tagged = value(\"myValue\")\n * }\n * ```\n */\nexport function isTag(value: unknown): value is Lite.Tag<unknown, boolean> {\n return (\n typeof value === \"function\" &&\n (value as unknown as Record<symbol, unknown>)[tagSymbol] === true\n )\n}\n\n/**\n * Type guard to check if a value is a Tagged value.\n *\n * @param value - The value to check\n * @returns True if the value is a Tagged value, false otherwise\n *\n * @example\n * ```typescript\n * if (isTagged(value)) {\n * console.log(value.key, value.value)\n * }\n * ```\n */\nexport function isTagged(value: unknown): value is Lite.Tagged<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[taggedSymbol] === true\n )\n}\n\n/**\n * Tag execution helpers for declaring how tags should be resolved from dependency sources.\n */\nexport const tags = {\n /**\n * Creates a required tag executor that throws if the tag is not found.\n *\n * @param tag - The tag to execute\n * @returns A tag executor that requires the tag to be present\n *\n * @example\n * ```typescript\n * const myAtom = atom({\n * deps: { name: tags.required(nameTag) },\n * factory: (ctx, { name }) => `Hello ${name}`\n * })\n * ```\n */\n required<T>(tag: Lite.Tag<T, boolean>): Lite.TagExecutor<T, T> {\n return { [tagExecutorSymbol]: true, tag, mode: \"required\" }\n },\n\n /**\n * Creates an optional tag executor that returns undefined if the tag is not found.\n *\n * @param tag - The tag to execute\n * @returns A tag executor that allows the tag to be absent\n *\n * @example\n * ```typescript\n * const myAtom = atom({\n * deps: { name: tags.optional(nameTag) },\n * factory: (ctx, { name }) => name ?? \"Anonymous\"\n * })\n * ```\n */\n optional<T>(tag: Lite.Tag<T, boolean>): Lite.TagExecutor<T | undefined, T> {\n return { [tagExecutorSymbol]: true, tag, mode: \"optional\" }\n },\n\n /**\n * Creates a tag executor that collects all values for the given tag.\n *\n * @param tag - The tag to execute\n * @returns A tag executor that returns an array of all matching tag values\n *\n * @example\n * ```typescript\n * const myAtom = atom({\n * deps: { names: tags.all(nameTag) },\n * factory: (ctx, { names }) => names.join(\", \")\n * })\n * ```\n */\n all<T>(tag: Lite.Tag<T, boolean>): Lite.TagExecutor<T[], T> {\n return { [tagExecutorSymbol]: true, tag, mode: \"all\" }\n },\n}\n\n/**\n * Type guard to check if a value is a TagExecutor.\n *\n * @param value - The value to check\n * @returns True if the value is a TagExecutor, false otherwise\n *\n * @example\n * ```typescript\n * if (isTagExecutor(value)) {\n * console.log(value.mode, value.tag)\n * }\n * ```\n */\nexport function isTagExecutor(value: unknown): value is Lite.TagExecutor<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n tagExecutorSymbol in value\n )\n}\n","import { atomSymbol, controllerDepSymbol } from \"./symbols\"\nimport type { Lite, MaybePromise } from \"./types\"\n\nexport interface AtomConfig<T, D extends Record<string, Lite.Dependency>> {\n deps?: D\n factory: Lite.AtomFactory<T, D>\n tags?: Lite.Tagged<unknown>[]\n}\n\n/**\n * Creates a long-lived dependency that can be resolved and reused within a scope.\n *\n * @param config - Configuration object containing factory function, optional dependencies, and tags\n * @returns An Atom instance that can be resolved to produce a value of type T\n *\n * @example\n * ```typescript\n * const dbAtom = atom({\n * factory: async (ctx) => createDatabase()\n * })\n * ```\n */\nexport function atom<T>(config: {\n deps?: undefined\n factory: (ctx: Lite.ResolveContext) => MaybePromise<T>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Atom<T>\n\nexport function atom<\n T,\n const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | { mode: string }>,\n>(config: {\n deps: D\n factory: (ctx: Lite.ResolveContext, deps: Lite.InferDeps<D>) => MaybePromise<T>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Atom<T>\n\nexport function atom<T, D extends Record<string, Lite.Dependency>>(\n config: AtomConfig<T, D>\n): Lite.Atom<T> {\n return {\n [atomSymbol]: true,\n factory: config.factory as unknown as Lite.AtomFactory<T, Record<string, Lite.Dependency>>,\n deps: config.deps as unknown as Record<string, Lite.Dependency> | undefined,\n tags: config.tags,\n }\n}\n\n/**\n * Type guard to check if a value is an Atom.\n *\n * @param value - The value to check\n * @returns True if the value is an Atom, false otherwise\n *\n * @example\n * ```typescript\n * if (isAtom(value)) {\n * await scope.resolve(value)\n * }\n * ```\n */\nexport function isAtom(value: unknown): value is Lite.Atom<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[atomSymbol] === true\n )\n}\n\n/**\n * Wraps an Atom to receive a Controller instead of the resolved value.\n * The Controller provides full lifecycle control: get, resolve, release, invalidate, and subscribe.\n *\n * @param atom - The Atom to wrap\n * @returns A ControllerDep that resolves to a Controller for the Atom\n *\n * @example\n * ```typescript\n * const configAtom = atom({ factory: () => fetchConfig() })\n * const serverAtom = atom({\n * deps: { config: controller(configAtom) },\n * factory: (ctx, { config }) => {\n * const unsub = config.on(() => ctx.invalidate())\n * ctx.cleanup(unsub)\n * return createServer(config.get().port)\n * }\n * })\n * ```\n */\nexport function controller<T>(atom: Lite.Atom<T>): Lite.ControllerDep<T> {\n return {\n [controllerDepSymbol]: true,\n atom,\n }\n}\n\n/**\n * Type guard to check if a value is a ControllerDep wrapper.\n *\n * @param value - The value to check\n * @returns True if the value is a ControllerDep wrapper, false otherwise\n *\n * @example\n * ```typescript\n * if (isControllerDep(dep)) {\n * const ctrl = scope.controller(dep.atom)\n * }\n * ```\n */\nexport function isControllerDep(value: unknown): value is Lite.ControllerDep<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[controllerDepSymbol] === true\n )\n}\n","import { flowSymbol } from \"./symbols\"\nimport type { Lite, MaybePromise } from \"./types\"\n\nexport interface FlowConfig<\n TOutput,\n TInput,\n D extends Record<string, Lite.Dependency>,\n> {\n name?: string\n parse?: (raw: unknown) => MaybePromise<TInput>\n deps?: D\n factory: Lite.FlowFactory<TOutput, TInput, D>\n tags?: Lite.Tagged<unknown>[]\n}\n\n/**\n * Creates a short-lived execution unit that processes input and produces output.\n *\n * @param config - Configuration object containing factory function, optional dependencies, and tags\n * @returns A Flow instance that can be executed within an execution context\n *\n * @example\n * ```typescript\n * const processUser = flow({\n * factory: async (ctx) => {\n * const userId = ctx.input\n * return await fetchUser(userId)\n * }\n * })\n * ```\n */\nexport function flow<TOutput>(config: {\n name?: string\n deps?: undefined\n factory: (ctx: Lite.ExecutionContext) => MaybePromise<TOutput>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Flow<TOutput, unknown>\n\nexport function flow<TOutput, TInput>(config: {\n name?: string\n parse: (raw: unknown) => MaybePromise<TInput>\n deps?: undefined\n factory: (ctx: Lite.ExecutionContext<TInput>) => MaybePromise<TOutput>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Flow<TOutput, TInput>\n\nexport function flow<\n TOutput,\n const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | { mode: string }>,\n>(config: {\n name?: string\n deps: D\n factory: (ctx: Lite.ExecutionContext, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Flow<TOutput, unknown>\n\nexport function flow<\n TOutput,\n TInput,\n const D extends Record<string, Lite.Atom<unknown> | Lite.ControllerDep<unknown> | { mode: string }>,\n>(config: {\n name?: string\n parse: (raw: unknown) => MaybePromise<TInput>\n deps: D\n factory: (ctx: Lite.ExecutionContext<TInput>, deps: Lite.InferDeps<D>) => MaybePromise<TOutput>\n tags?: Lite.Tagged<unknown>[]\n}): Lite.Flow<TOutput, TInput>\n\nexport function flow<\n TOutput,\n TInput,\n D extends Record<string, Lite.Dependency>,\n>(config: FlowConfig<TOutput, TInput, D>): Lite.Flow<TOutput, TInput> {\n return {\n [flowSymbol]: true,\n name: config.name,\n parse: config.parse,\n factory: config.factory as unknown as Lite.FlowFactory<\n TOutput,\n TInput,\n Record<string, Lite.Dependency>\n >,\n deps: config.deps as unknown as Record<string, Lite.Dependency> | undefined,\n tags: config.tags,\n }\n}\n\n/**\n * Type guard to check if a value is a Flow.\n *\n * @param value - The value to check\n * @returns True if the value is a Flow, false otherwise\n *\n * @example\n * ```typescript\n * if (isFlow(value)) {\n * await ctx.exec({ flow: value, input: data })\n * }\n * ```\n */\nexport function isFlow(value: unknown): value is Lite.Flow<unknown, unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[flowSymbol] === true\n )\n}\n","import { presetSymbol } from \"./symbols\"\nimport type { Lite } from \"./types\"\n\n/**\n * Creates a preset value for an Atom, overriding its factory within a scope.\n *\n * @param atom - The Atom to preset\n * @param value - The preset value (can be a direct value or another Atom)\n * @returns A Preset instance to be used in scope configuration\n *\n * @example\n * ```typescript\n * const scope = await createScope({\n * presets: [preset(dbAtom, mockDatabase)]\n * })\n * ```\n */\nexport function preset<T>(\n atom: Lite.Atom<T>,\n value: T | Lite.Atom<T>\n): Lite.Preset<T> {\n return {\n [presetSymbol]: true,\n atom,\n value,\n }\n}\n\n/**\n * Type guard to check if a value is a Preset.\n *\n * @param value - The value to check\n * @returns True if the value is a Preset, false otherwise\n *\n * @example\n * ```typescript\n * if (isPreset(value)) {\n * console.log(value.atom, value.value)\n * }\n * ```\n */\nexport function isPreset(value: unknown): value is Lite.Preset<unknown> {\n return (\n typeof value === \"object\" &&\n value !== null &&\n (value as Record<symbol, unknown>)[presetSymbol] === true\n )\n}\n","import { controllerSymbol, tagExecutorSymbol } from \"./symbols\"\nimport type { Lite, MaybePromise, AtomState } from \"./types\"\nimport { isAtom, isControllerDep } from \"./atom\"\nimport { ParseError } from \"./errors\"\n\ntype ListenerEvent = 'resolving' | 'resolved' | '*'\n\nclass DataStoreImpl implements Lite.DataStore {\n private readonly map = new Map<symbol, unknown>()\n\n get<T, H extends boolean>(tag: Lite.Tag<T, H>): H extends true ? T : T | undefined {\n if (this.map.has(tag.key)) {\n return this.map.get(tag.key) as T\n }\n if (tag.hasDefault) {\n return tag.defaultValue as T\n }\n return undefined as H extends true ? T : T | undefined\n }\n\n set<T>(tag: Lite.Tag<T, boolean>, value: T): void {\n this.map.set(tag.key, value)\n }\n\n has(tag: Lite.Tag<unknown, boolean>): boolean {\n return this.map.has(tag.key)\n }\n\n delete(tag: Lite.Tag<unknown, boolean>): boolean {\n return this.map.delete(tag.key)\n }\n\n clear(): void {\n this.map.clear()\n }\n}\n\ninterface AtomEntry<T> {\n state: AtomState\n value?: T\n hasValue: boolean\n error?: Error\n cleanups: (() => MaybePromise<void>)[]\n listeners: Map<ListenerEvent, Set<() => void>>\n pendingInvalidate: boolean\n data?: Lite.DataStore\n}\n\nclass SelectHandleImpl<T, S> implements Lite.SelectHandle<S> {\n private listeners = new Set<() => void>()\n private currentValue: S\n private ctrlUnsub: (() => void) | null = null\n\n constructor(\n private ctrl: Lite.Controller<T>,\n private selector: (value: T) => S,\n private eq: (prev: S, next: S) => boolean\n ) {\n if (ctrl.state !== 'resolved') {\n throw new Error(\"Cannot select from unresolved atom\")\n }\n\n this.currentValue = selector(ctrl.get())\n\n this.ctrlUnsub = ctrl.on('resolved', () => {\n const nextValue = this.selector(this.ctrl.get())\n if (!this.eq(this.currentValue, nextValue)) {\n this.currentValue = nextValue\n this.notifyListeners()\n }\n })\n }\n\n get(): S {\n return this.currentValue\n }\n\n subscribe(listener: () => void): () => void {\n this.listeners.add(listener)\n\n return () => {\n this.listeners.delete(listener)\n if (this.listeners.size === 0) {\n this.cleanup()\n }\n }\n }\n\n private notifyListeners(): void {\n for (const listener of this.listeners) {\n listener()\n }\n }\n\n private cleanup(): void {\n this.ctrlUnsub?.()\n this.ctrlUnsub = null\n this.listeners.clear()\n }\n}\n\nclass ControllerImpl<T> implements Lite.Controller<T> {\n readonly [controllerSymbol] = true\n\n constructor(\n private atom: Lite.Atom<T>,\n private scope: ScopeImpl\n ) {}\n\n get state(): AtomState {\n const entry = this.scope.getEntry(this.atom)\n return entry?.state ?? 'idle'\n }\n\n get(): T {\n const entry = this.scope.getEntry(this.atom)\n if (!entry || entry.state === 'idle') {\n throw new Error(\"Atom not resolved\")\n }\n if (entry.state === 'failed' && entry.error) {\n throw entry.error\n }\n if (entry.state === 'resolving' && entry.hasValue) {\n return entry.value as T\n }\n if (entry.state === 'resolved' && entry.hasValue) {\n return entry.value as T\n }\n throw new Error(\"Atom not resolved\")\n }\n\n async resolve(): Promise<T> {\n return this.scope.resolve(this.atom)\n }\n\n async release(): Promise<void> {\n return this.scope.release(this.atom)\n }\n\n invalidate(): void {\n this.scope.invalidate(this.atom)\n }\n\n on(event: ListenerEvent, listener: () => void): () => void {\n return this.scope.addListener(this.atom, event, listener)\n }\n}\n\nclass ScopeImpl implements Lite.Scope {\n private cache = new Map<Lite.Atom<unknown>, AtomEntry<unknown>>()\n private presets = new Map<Lite.Atom<unknown>, unknown | Lite.Atom<unknown>>()\n private resolving = new Set<Lite.Atom<unknown>>()\n private pending = new Map<Lite.Atom<unknown>, Promise<unknown>>()\n private stateListeners = new Map<AtomState, Map<Lite.Atom<unknown>, Set<() => void>>>()\n private invalidationQueue = new Set<Lite.Atom<unknown>>()\n private invalidationScheduled = false\n private invalidationChain: Set<Lite.Atom<unknown>> | null = null\n private chainPromise: Promise<void> | null = null\n private initialized = false\n readonly extensions: Lite.Extension[]\n readonly tags: Lite.Tagged<unknown>[]\n readonly ready: Promise<void>\n\n private scheduleInvalidation<T>(atom: Lite.Atom<T>): void {\n const entry = this.cache.get(atom) as AtomEntry<T> | undefined\n if (!entry || entry.state === \"idle\") return\n\n if (entry.state === \"resolving\") {\n entry.pendingInvalidate = true\n return\n }\n\n this.invalidationQueue.add(atom)\n\n if (!this.chainPromise) {\n this.invalidationChain = new Set()\n this.invalidationScheduled = true\n this.chainPromise = new Promise<void>((resolve, reject) => {\n queueMicrotask(() => {\n this.processInvalidationChain().then(resolve).catch(reject)\n })\n })\n }\n }\n\n private async processInvalidationChain(): Promise<void> {\n try {\n while (this.invalidationQueue.size > 0) {\n const atom = this.invalidationQueue.values().next().value as Lite.Atom<unknown>\n this.invalidationQueue.delete(atom)\n\n if (this.invalidationChain!.has(atom)) {\n const chainAtoms = Array.from(this.invalidationChain!)\n chainAtoms.push(atom)\n const path = chainAtoms\n .map(a => a.factory?.name || \"<anonymous>\")\n .join(\" → \")\n throw new Error(`Infinite invalidation loop detected: ${path}`)\n }\n\n this.invalidationChain!.add(atom)\n await this.doInvalidateSequential(atom)\n }\n } finally {\n this.invalidationChain = null\n this.chainPromise = null\n this.invalidationScheduled = false\n }\n }\n\n constructor(options?: Lite.ScopeOptions) {\n this.extensions = options?.extensions ?? []\n this.tags = options?.tags ?? []\n\n for (const p of options?.presets ?? []) {\n this.presets.set(p.atom, p.value)\n }\n\n this.ready = this.init()\n }\n\n private async init(): Promise<void> {\n for (const ext of this.extensions) {\n if (ext.init) {\n await ext.init(this)\n }\n }\n this.initialized = true\n }\n\n getEntry<T>(atom: Lite.Atom<T>): AtomEntry<T> | undefined {\n return this.cache.get(atom) as AtomEntry<T> | undefined\n }\n\n private getOrCreateEntry<T>(atom: Lite.Atom<T>): AtomEntry<T> {\n let entry = this.cache.get(atom) as AtomEntry<T> | undefined\n if (!entry) {\n entry = {\n state: 'idle',\n hasValue: false,\n cleanups: [],\n listeners: new Map([\n ['resolving', new Set()],\n ['resolved', new Set()],\n ['*', new Set()],\n ]),\n pendingInvalidate: false,\n }\n this.cache.set(atom, entry as AtomEntry<unknown>)\n }\n return entry\n }\n\n addListener<T>(atom: Lite.Atom<T>, event: ListenerEvent, listener: () => void): () => void {\n const entry = this.getOrCreateEntry(atom)\n const listeners = entry.listeners.get(event)!\n listeners.add(listener)\n return () => {\n listeners.delete(listener)\n }\n }\n\n private notifyListeners<T>(atom: Lite.Atom<T>, event: 'resolving' | 'resolved'): void {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n const eventListeners = entry.listeners.get(event)\n if (eventListeners) {\n for (const listener of eventListeners) {\n listener()\n }\n }\n\n const allListeners = entry.listeners.get('*')\n if (allListeners) {\n for (const listener of allListeners) {\n listener()\n }\n }\n }\n\n private notifyAllListeners<T>(atom: Lite.Atom<T>): void {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n const allListeners = entry.listeners.get('*')\n if (allListeners) {\n for (const listener of allListeners) {\n listener()\n }\n }\n }\n\n private emitStateChange(state: AtomState, atom: Lite.Atom<unknown>): void {\n const stateMap = this.stateListeners.get(state)\n if (stateMap) {\n const listeners = stateMap.get(atom)\n if (listeners) {\n for (const listener of listeners) {\n listener()\n }\n }\n }\n }\n\n on(event: AtomState, atom: Lite.Atom<unknown>, listener: () => void): () => void {\n let stateMap = this.stateListeners.get(event)\n if (!stateMap) {\n stateMap = new Map()\n this.stateListeners.set(event, stateMap)\n }\n let listeners = stateMap.get(atom)\n if (!listeners) {\n listeners = new Set()\n stateMap.set(atom, listeners)\n }\n listeners.add(listener)\n\n const capturedStateMap = stateMap\n const capturedListeners = listeners\n\n return () => {\n capturedListeners.delete(listener)\n if (capturedListeners.size === 0) {\n capturedStateMap.delete(atom)\n if (capturedStateMap.size === 0) {\n this.stateListeners.delete(event)\n }\n }\n }\n }\n\n async resolve<T>(atom: Lite.Atom<T>): Promise<T> {\n if (!this.initialized) {\n await this.ready\n }\n\n const entry = this.cache.get(atom) as AtomEntry<T> | undefined\n if (entry?.state === 'resolved') {\n return entry.value as T\n }\n\n const pendingPromise = this.pending.get(atom)\n if (pendingPromise) {\n return pendingPromise as Promise<T>\n }\n\n if (this.resolving.has(atom)) {\n throw new Error(\"Circular dependency detected\")\n }\n\n const presetValue = this.presets.get(atom)\n if (presetValue !== undefined) {\n if (isAtom(presetValue)) {\n return this.resolve(presetValue as Lite.Atom<T>)\n }\n const newEntry = this.getOrCreateEntry(atom)\n newEntry.state = 'resolved'\n newEntry.value = presetValue as T\n newEntry.hasValue = true\n this.emitStateChange('resolved', atom)\n this.notifyListeners(atom, 'resolved')\n return newEntry.value\n }\n\n this.resolving.add(atom)\n\n const promise = this.doResolve(atom)\n this.pending.set(atom, promise as Promise<unknown>)\n\n try {\n return await promise\n } finally {\n this.resolving.delete(atom)\n this.pending.delete(atom)\n }\n }\n\n private async doResolve<T>(atom: Lite.Atom<T>): Promise<T> {\n const entry = this.getOrCreateEntry(atom)\n\n const wasResolving = entry.state === 'resolving'\n if (!wasResolving) {\n entry.state = 'resolving'\n this.emitStateChange('resolving', atom)\n this.notifyListeners(atom, 'resolving')\n }\n\n const resolvedDeps = await this.resolveDeps(atom.deps)\n\n const ctx: Lite.ResolveContext = {\n cleanup: (fn) => entry.cleanups.push(fn),\n invalidate: () => {\n this.scheduleInvalidation(atom)\n },\n scope: this,\n get data() {\n if (!entry.data) {\n entry.data = new DataStoreImpl()\n }\n return entry.data\n },\n }\n\n const factory = atom.factory as (\n ctx: Lite.ResolveContext,\n deps?: Record<string, unknown>\n ) => MaybePromise<T>\n\n const doResolve = async () => {\n if (atom.deps && Object.keys(atom.deps).length > 0) {\n return factory(ctx, resolvedDeps)\n } else {\n return factory(ctx)\n }\n }\n\n try {\n const value = await this.applyResolveExtensions(atom, doResolve)\n entry.state = 'resolved'\n entry.value = value\n entry.hasValue = true\n entry.error = undefined\n this.emitStateChange('resolved', atom)\n this.notifyListeners(atom, 'resolved')\n\n if (entry.pendingInvalidate) {\n entry.pendingInvalidate = false\n this.invalidationChain?.delete(atom)\n this.scheduleInvalidation(atom)\n }\n\n return value\n } catch (err) {\n entry.state = 'failed'\n entry.error = err instanceof Error ? err : new Error(String(err))\n entry.value = undefined\n entry.hasValue = false\n this.emitStateChange('failed', atom)\n this.notifyAllListeners(atom)\n\n if (entry.pendingInvalidate) {\n entry.pendingInvalidate = false\n this.invalidationChain?.delete(atom)\n this.scheduleInvalidation(atom)\n }\n\n throw entry.error\n }\n }\n\n private async applyResolveExtensions<T>(\n atom: Lite.Atom<T>,\n doResolve: () => Promise<T>\n ): Promise<T> {\n let next = doResolve\n\n for (let i = this.extensions.length - 1; i >= 0; i--) {\n const ext = this.extensions[i]\n if (ext?.wrapResolve) {\n const currentNext = next\n next = ext.wrapResolve.bind(ext, currentNext, atom, this) as () => Promise<T>\n }\n }\n\n return next()\n }\n\n async resolveDeps(\n deps: Record<string, Lite.Dependency> | undefined,\n tagSource?: Lite.Tagged<unknown>[]\n ): Promise<Record<string, unknown>> {\n if (!deps) return {}\n\n const result: Record<string, unknown> = {}\n const tags = tagSource ?? this.tags\n\n for (const [key, dep] of Object.entries(deps)) {\n if (isAtom(dep)) {\n result[key] = await this.resolve(dep)\n } else if (isControllerDep(dep)) {\n result[key] = new ControllerImpl(dep.atom, this)\n } else if (tagExecutorSymbol in (dep as object)) {\n const tagExecutor = dep as Lite.TagExecutor<unknown, boolean>\n\n switch (tagExecutor.mode) {\n case \"required\":\n result[key] = tagExecutor.tag.get(tags)\n break\n case \"optional\":\n result[key] = tagExecutor.tag.find(tags)\n break\n case \"all\":\n result[key] = tagExecutor.tag.collect(tags)\n break\n }\n }\n }\n\n return result\n }\n\n controller<T>(atom: Lite.Atom<T>): Lite.Controller<T> {\n return new ControllerImpl(atom, this)\n }\n\n select<T, S>(\n atom: Lite.Atom<T>,\n selector: (value: T) => S,\n options?: Lite.SelectOptions<S>\n ): Lite.SelectHandle<S> {\n const ctrl = this.controller(atom)\n const eq = options?.eq ?? ((a, b) => a === b)\n return new SelectHandleImpl(ctrl, selector, eq)\n }\n\n invalidate<T>(atom: Lite.Atom<T>): void {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n if (entry.state === 'idle') return\n\n if (entry.state === 'resolving') {\n entry.pendingInvalidate = true\n return\n }\n\n this.scheduleInvalidation(atom)\n }\n\n private async doInvalidateSequential<T>(atom: Lite.Atom<T>): Promise<void> {\n const entry = this.cache.get(atom) as AtomEntry<T> | undefined\n if (!entry) return\n if (entry.state === \"idle\") return\n\n const previousValue = entry.value\n\n for (let i = entry.cleanups.length - 1; i >= 0; i--) {\n const cleanup = entry.cleanups[i]\n if (cleanup) await cleanup()\n }\n entry.cleanups = []\n\n entry.state = \"resolving\"\n entry.value = previousValue\n entry.error = undefined\n entry.pendingInvalidate = false\n this.pending.delete(atom)\n this.resolving.delete(atom)\n this.emitStateChange(\"resolving\", atom)\n this.notifyListeners(atom, \"resolving\")\n\n await this.resolve(atom)\n }\n\n async release<T>(atom: Lite.Atom<T>): Promise<void> {\n const entry = this.cache.get(atom)\n if (!entry) return\n\n for (let i = entry.cleanups.length - 1; i >= 0; i--) {\n const cleanup = entry.cleanups[i]\n if (cleanup) await cleanup()\n }\n\n this.cache.delete(atom)\n }\n\n async dispose(): Promise<void> {\n for (const ext of this.extensions) {\n if (ext.dispose) {\n await ext.dispose(this)\n }\n }\n\n const atoms = Array.from(this.cache.keys())\n for (const atom of atoms) {\n await this.release(atom as Lite.Atom<unknown>)\n }\n }\n\n async flush(): Promise<void> {\n if (this.chainPromise) {\n await this.chainPromise\n }\n }\n\n createContext(options?: Lite.CreateContextOptions): Lite.ExecutionContext {\n return new ExecutionContextImpl(this, options)\n }\n}\n\nclass ExecutionContextImpl implements Lite.ExecutionContext {\n private cleanups: (() => MaybePromise<void>)[] = []\n private closed = false\n private _input: unknown = undefined\n private readonly baseTags: Lite.Tagged<unknown>[]\n\n constructor(\n readonly scope: ScopeImpl,\n options?: Lite.CreateContextOptions\n ) {\n const ctxTags = options?.tags\n this.baseTags = ctxTags?.length\n ? [...ctxTags, ...scope.tags]\n : scope.tags\n }\n\n get input(): unknown {\n return this._input\n }\n\n async exec<T>(options: Lite.ExecFlowOptions<T> | Lite.ExecFnOptions<T>): Promise<T> {\n if (this.closed) {\n throw new Error(\"ExecutionContext is closed\")\n }\n\n if (\"flow\" in options) {\n return this.execFlow(options)\n } else {\n return this.execFn(options)\n }\n }\n\n private async execFlow<T>(options: Lite.ExecFlowOptions<T>): Promise<T> {\n const { flow, input, tags: execTags, name: execName } = options\n\n const hasExtraTags = (execTags?.length ?? 0) > 0 || (flow.tags?.length ?? 0) > 0\n const allTags = hasExtraTags\n ? [...(execTags ?? []), ...this.baseTags, ...(flow.tags ?? [])]\n : this.baseTags\n\n const resolvedDeps = await this.scope.resolveDeps(flow.deps, allTags)\n\n let parsedInput: unknown = input\n if (flow.parse) {\n const label = execName ?? flow.name ?? \"anonymous\"\n try {\n parsedInput = await flow.parse(input)\n } catch (err) {\n throw new ParseError(\n `Failed to parse flow input \"${label}\"`,\n \"flow-input\",\n label,\n err\n )\n }\n }\n\n this._input = parsedInput\n\n const factory = flow.factory as unknown as (\n ctx: Lite.ExecutionContext,\n deps?: Record<string, unknown>\n ) => MaybePromise<T>\n\n const doExec = async (): Promise<T> => {\n if (flow.deps && Object.keys(flow.deps).length > 0) {\n return factory(this, resolvedDeps)\n } else {\n return factory(this)\n }\n }\n\n return this.applyExecExtensions(flow, doExec)\n }\n\n private execFn<T>(options: Lite.ExecFnOptions<T>): Promise<T> {\n const { fn, params } = options\n const doExec = () => Promise.resolve(fn(...params))\n return this.applyExecExtensions(fn, doExec)\n }\n\n private async applyExecExtensions<T>(\n target: Lite.Flow<T, unknown> | ((...args: unknown[]) => MaybePromise<T>),\n doExec: () => Promise<T>\n ): Promise<T> {\n let next = doExec\n\n for (let i = this.scope.extensions.length - 1; i >= 0; i--) {\n const ext = this.scope.extensions[i]\n if (ext?.wrapExec) {\n const currentNext = next\n next = ext.wrapExec.bind(ext, currentNext, target, this) as () => Promise<T>\n }\n }\n\n return next()\n }\n\n onClose(fn: () => MaybePromise<void>): void {\n this.cleanups.push(fn)\n }\n\n async close(): Promise<void> {\n if (this.closed) return\n\n this.closed = true\n\n for (let i = this.cleanups.length - 1; i >= 0; i--) {\n const cleanup = this.cleanups[i]\n if (cleanup) await cleanup()\n }\n }\n}\n\n/**\n * Creates a DI container that manages Atom resolution, caching, and lifecycle.\n *\n * The scope is returned synchronously, with a `ready` promise that resolves\n * when all extensions have been initialized. Resolution methods automatically\n * wait for `ready` before proceeding.\n *\n * @param options - Optional configuration for extensions, presets, and tags\n * @returns A Scope instance with a `ready` promise for extension initialization\n *\n * @example\n * ```typescript\n * const scope = createScope({\n * extensions: [loggingExtension],\n * presets: [preset(dbAtom, testDb)]\n * })\n *\n * // Option 1: resolve() waits for ready internally\n * const db = await scope.resolve(dbAtom)\n *\n * // Option 2: explicit wait\n * await scope.ready\n * const db = await scope.resolve(dbAtom)\n * ```\n */\nexport function createScope(options?: Lite.ScopeOptions): Lite.Scope {\n return new ScopeImpl(options)\n}\n","export type { Lite, AtomState } from \"./types\"\nexport {\n atomSymbol,\n flowSymbol,\n tagSymbol,\n taggedSymbol,\n controllerDepSymbol,\n presetSymbol,\n controllerSymbol,\n tagExecutorSymbol,\n} from \"./symbols\"\nexport { tag, tags, isTag, isTagged, isTagExecutor } from \"./tag\"\nexport { atom, isAtom, controller, isControllerDep } from \"./atom\"\nexport { flow, isFlow } from \"./flow\"\nexport { preset, isPreset } from \"./preset\"\nexport { createScope } from \"./scope\"\nexport { ParseError } from \"./errors\"\n\nexport const VERSION = \"0.0.1\"\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pumped-fn/lite",
3
- "version": "1.0.1",
3
+ "version": "1.1.0",
4
4
  "description": "Lightweight dependency injection with minimal reactivity",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",