@pumped-fn/lite 0.1.0 → 1.0.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,10 +1,58 @@
1
1
  # @pumped-fn/lite
2
2
 
3
+ ## 1.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - f5dc22f: **BREAKING**: `createScope()` now returns `Scope` synchronously instead of `Promise<Scope>`.
8
+
9
+ Migration:
10
+
11
+ ```typescript
12
+ // Before
13
+ const scope = await createScope();
14
+
15
+ // After
16
+ const scope = createScope();
17
+ // resolve() waits for ready internally, or use:
18
+ await scope.ready;
19
+ ```
20
+
21
+ **BREAKING**: `Controller.on()` now requires explicit event type.
22
+
23
+ Migration:
24
+
25
+ ```typescript
26
+ // Before
27
+ ctl.on(() => { ... })
28
+
29
+ // After
30
+ ctl.on('resolved', () => { ... }) // Most common: react to new values
31
+ ctl.on('resolving', () => { ... }) // Loading states
32
+ ctl.on('*', () => { ... }) // All state changes
33
+ ```
34
+
35
+ Other changes:
36
+
37
+ - Fix duplicate listener notifications (was 3x per invalidation, now 2x)
38
+ - On failed state, only `'*'` listeners are notified (not `'resolved'`)
39
+
40
+ ## 0.2.0
41
+
42
+ ### Minor Changes
43
+
44
+ - de1382f: Add `scope.select()` for fine-grained reactivity with selector and equality-based change detection.
45
+
46
+ - `SelectHandle<S>` provides `get()` and `subscribe()` for derived subscriptions
47
+ - Default reference equality (`===`) with optional custom `eq` function
48
+ - Auto-cleanup when last subscriber unsubscribes
49
+ - Designed for React 18+ `useSyncExternalStore` compatibility
50
+
3
51
  ## 0.1.0
4
52
 
5
53
  ### Minor Changes
6
54
 
7
- - bc2ce40: Add @pumped-fn/lite - lightweight DI with minimal reactivity
55
+ - 6dfd919: Add @pumped-fn/lite - lightweight DI with minimal reactivity
8
56
 
9
57
  Lightweight dependency injection for TypeScript with:
10
58
 
package/README.md CHANGED
@@ -171,9 +171,9 @@ const configAtom = atom({
171
171
  const appAtom = atom({
172
172
  deps: { config: controller(configAtom) }, // controller, not direct
173
173
  factory: (ctx, { config }) => {
174
- // Subscribe to config changes
175
- config.on(() => {
176
- console.log('config updated:', config.state)
174
+ // Subscribe to config changes (must specify event type)
175
+ config.on('resolved', () => {
176
+ console.log('config updated:', config.get())
177
177
  ctx.invalidate() // re-run this atom too
178
178
  })
179
179
 
@@ -182,6 +182,33 @@ const appAtom = atom({
182
182
  })
183
183
  ```
184
184
 
185
+ ## Per-Atom Private Storage
186
+
187
+ The `ctx.data` Map provides private storage that survives invalidation but clears on release. Useful for internal state that shouldn't be exposed:
188
+
189
+ ```typescript
190
+ const pollingAtom = atom({
191
+ factory: async (ctx) => {
192
+ const prev = ctx.data.get('prev') as Data | undefined
193
+ const current = await fetchData()
194
+
195
+ if (prev && current !== prev) {
196
+ console.log('Data changed!')
197
+ }
198
+ ctx.data.set('prev', current)
199
+
200
+ setTimeout(() => ctx.invalidate(), 5000)
201
+ return current
202
+ }
203
+ })
204
+ ```
205
+
206
+ | Event | `ctx.data` Behavior |
207
+ |-------|---------------------|
208
+ | First access | Map created lazily |
209
+ | `invalidate()` | Map preserved |
210
+ | `release()` | Map cleared |
211
+
185
212
  ## Tags (Contextual Values)
186
213
 
187
214
  Tags pass contextual values through execution without explicit wiring:
package/dist/index.cjs CHANGED
@@ -263,6 +263,43 @@ function isPreset(value) {
263
263
 
264
264
  //#endregion
265
265
  //#region src/scope.ts
266
+ var SelectHandleImpl = class {
267
+ listeners = /* @__PURE__ */ new Set();
268
+ currentValue;
269
+ ctrlUnsub = null;
270
+ constructor(ctrl, selector, eq) {
271
+ this.ctrl = ctrl;
272
+ this.selector = selector;
273
+ this.eq = eq;
274
+ if (ctrl.state !== "resolved") throw new Error("Cannot select from unresolved atom");
275
+ this.currentValue = selector(ctrl.get());
276
+ this.ctrlUnsub = ctrl.on("resolved", () => {
277
+ const nextValue = this.selector(this.ctrl.get());
278
+ if (!this.eq(this.currentValue, nextValue)) {
279
+ this.currentValue = nextValue;
280
+ this.notifyListeners();
281
+ }
282
+ });
283
+ }
284
+ get() {
285
+ return this.currentValue;
286
+ }
287
+ subscribe(listener) {
288
+ this.listeners.add(listener);
289
+ return () => {
290
+ this.listeners.delete(listener);
291
+ if (this.listeners.size === 0) this.cleanup();
292
+ };
293
+ }
294
+ notifyListeners() {
295
+ for (const listener of this.listeners) listener();
296
+ }
297
+ cleanup() {
298
+ this.ctrlUnsub?.();
299
+ this.ctrlUnsub = null;
300
+ this.listeners.clear();
301
+ }
302
+ };
266
303
  var ControllerImpl = class {
267
304
  [controllerSymbol] = true;
268
305
  constructor(atom$1, scope) {
@@ -289,8 +326,8 @@ var ControllerImpl = class {
289
326
  invalidate() {
290
327
  this.scope.invalidate(this.atom);
291
328
  }
292
- on(listener) {
293
- return this.scope.addListener(this.atom, listener);
329
+ on(event, listener) {
330
+ return this.scope.addListener(this.atom, event, listener);
294
331
  }
295
332
  };
296
333
  var ScopeImpl = class {
@@ -301,8 +338,10 @@ var ScopeImpl = class {
301
338
  stateListeners = /* @__PURE__ */ new Map();
302
339
  invalidationQueue = /* @__PURE__ */ new Set();
303
340
  invalidationScheduled = false;
341
+ initialized = false;
304
342
  extensions;
305
343
  tags;
344
+ ready;
306
345
  scheduleInvalidation(atom$1) {
307
346
  this.invalidationQueue.add(atom$1);
308
347
  if (!this.invalidationScheduled) {
@@ -320,9 +359,11 @@ var ScopeImpl = class {
320
359
  this.extensions = options?.extensions ?? [];
321
360
  this.tags = options?.tags ?? [];
322
361
  for (const p of options?.presets ?? []) this.presets.set(p.atom, p.value);
362
+ this.ready = this.init();
323
363
  }
324
364
  async init() {
325
365
  for (const ext of this.extensions) if (ext.init) await ext.init(this);
366
+ this.initialized = true;
326
367
  }
327
368
  getEntry(atom$1) {
328
369
  return this.cache.get(atom$1);
@@ -334,23 +375,37 @@ var ScopeImpl = class {
334
375
  state: "idle",
335
376
  hasValue: false,
336
377
  cleanups: [],
337
- listeners: /* @__PURE__ */ new Set(),
378
+ listeners: new Map([
379
+ ["resolving", /* @__PURE__ */ new Set()],
380
+ ["resolved", /* @__PURE__ */ new Set()],
381
+ ["*", /* @__PURE__ */ new Set()]
382
+ ]),
338
383
  pendingInvalidate: false
339
384
  };
340
385
  this.cache.set(atom$1, entry);
341
386
  }
342
387
  return entry;
343
388
  }
344
- addListener(atom$1, listener) {
345
- const entry = this.getOrCreateEntry(atom$1);
346
- entry.listeners.add(listener);
389
+ addListener(atom$1, event, listener) {
390
+ const listeners = this.getOrCreateEntry(atom$1).listeners.get(event);
391
+ listeners.add(listener);
347
392
  return () => {
348
- entry.listeners.delete(listener);
393
+ listeners.delete(listener);
349
394
  };
350
395
  }
351
- notifyListeners(atom$1) {
396
+ notifyListeners(atom$1, event) {
397
+ const entry = this.cache.get(atom$1);
398
+ if (!entry) return;
399
+ const eventListeners = entry.listeners.get(event);
400
+ if (eventListeners) for (const listener of eventListeners) listener();
401
+ const allListeners = entry.listeners.get("*");
402
+ if (allListeners) for (const listener of allListeners) listener();
403
+ }
404
+ notifyAllListeners(atom$1) {
352
405
  const entry = this.cache.get(atom$1);
353
- if (entry) for (const listener of entry.listeners) listener();
406
+ if (!entry) return;
407
+ const allListeners = entry.listeners.get("*");
408
+ if (allListeners) for (const listener of allListeners) listener();
354
409
  }
355
410
  emitStateChange(state, atom$1) {
356
411
  const stateMap = this.stateListeners.get(state);
@@ -382,6 +437,7 @@ var ScopeImpl = class {
382
437
  };
383
438
  }
384
439
  async resolve(atom$1) {
440
+ if (!this.initialized) await this.ready;
385
441
  const entry = this.cache.get(atom$1);
386
442
  if (entry?.state === "resolved") return entry.value;
387
443
  const pendingPromise = this.pending.get(atom$1);
@@ -395,7 +451,7 @@ var ScopeImpl = class {
395
451
  newEntry.value = presetValue;
396
452
  newEntry.hasValue = true;
397
453
  this.emitStateChange("resolved", atom$1);
398
- this.notifyListeners(atom$1);
454
+ this.notifyListeners(atom$1, "resolved");
399
455
  return newEntry.value;
400
456
  }
401
457
  this.resolving.add(atom$1);
@@ -410,16 +466,22 @@ var ScopeImpl = class {
410
466
  }
411
467
  async doResolve(atom$1) {
412
468
  const entry = this.getOrCreateEntry(atom$1);
413
- entry.state = "resolving";
414
- this.emitStateChange("resolving", atom$1);
415
- this.notifyListeners(atom$1);
469
+ if (!(entry.state === "resolving")) {
470
+ entry.state = "resolving";
471
+ this.emitStateChange("resolving", atom$1);
472
+ this.notifyListeners(atom$1, "resolving");
473
+ }
416
474
  const resolvedDeps = await this.resolveDeps(atom$1.deps);
417
475
  const ctx = {
418
476
  cleanup: (fn) => entry.cleanups.push(fn),
419
477
  invalidate: () => {
420
478
  this.scheduleInvalidation(atom$1);
421
479
  },
422
- scope: this
480
+ scope: this,
481
+ get data() {
482
+ if (!entry.data) entry.data = /* @__PURE__ */ new Map();
483
+ return entry.data;
484
+ }
423
485
  };
424
486
  const factory = atom$1.factory;
425
487
  const doResolve = async () => {
@@ -433,7 +495,7 @@ var ScopeImpl = class {
433
495
  entry.hasValue = true;
434
496
  entry.error = void 0;
435
497
  this.emitStateChange("resolved", atom$1);
436
- this.notifyListeners(atom$1);
498
+ this.notifyListeners(atom$1, "resolved");
437
499
  if (entry.pendingInvalidate) {
438
500
  entry.pendingInvalidate = false;
439
501
  this.scheduleInvalidation(atom$1);
@@ -445,7 +507,7 @@ var ScopeImpl = class {
445
507
  entry.value = void 0;
446
508
  entry.hasValue = false;
447
509
  this.emitStateChange("failed", atom$1);
448
- this.notifyListeners(atom$1);
510
+ this.notifyAllListeners(atom$1);
449
511
  if (entry.pendingInvalidate) {
450
512
  entry.pendingInvalidate = false;
451
513
  this.scheduleInvalidation(atom$1);
@@ -489,6 +551,9 @@ var ScopeImpl = class {
489
551
  controller(atom$1) {
490
552
  return new ControllerImpl(atom$1, this);
491
553
  }
554
+ select(atom$1, selector, options) {
555
+ return new SelectHandleImpl(this.controller(atom$1), selector, options?.eq ?? ((a, b) => a === b));
556
+ }
492
557
  invalidate(atom$1) {
493
558
  const entry = this.cache.get(atom$1);
494
559
  if (!entry) return;
@@ -513,7 +578,7 @@ var ScopeImpl = class {
513
578
  this.pending.delete(atom$1);
514
579
  this.resolving.delete(atom$1);
515
580
  this.emitStateChange("resolving", atom$1);
516
- this.notifyListeners(atom$1);
581
+ this.notifyListeners(atom$1, "resolving");
517
582
  this.resolve(atom$1).catch(() => {});
518
583
  }
519
584
  async release(atom$1) {
@@ -599,22 +664,30 @@ var ExecutionContextImpl = class {
599
664
  /**
600
665
  * Creates a DI container that manages Atom resolution, caching, and lifecycle.
601
666
  *
667
+ * The scope is returned synchronously, with a `ready` promise that resolves
668
+ * when all extensions have been initialized. Resolution methods automatically
669
+ * wait for `ready` before proceeding.
670
+ *
602
671
  * @param options - Optional configuration for extensions, presets, and tags
603
- * @returns A Promise that resolves to a Scope instance
672
+ * @returns A Scope instance with a `ready` promise for extension initialization
604
673
  *
605
674
  * @example
606
675
  * ```typescript
607
- * const scope = await createScope({
676
+ * const scope = createScope({
608
677
  * extensions: [loggingExtension],
609
678
  * presets: [preset(dbAtom, testDb)]
610
679
  * })
680
+ *
681
+ * // Option 1: resolve() waits for ready internally
682
+ * const db = await scope.resolve(dbAtom)
683
+ *
684
+ * // Option 2: explicit wait
685
+ * await scope.ready
611
686
  * const db = await scope.resolve(dbAtom)
612
687
  * ```
613
688
  */
614
- async function createScope(options) {
615
- const scope = new ScopeImpl(options);
616
- await scope.init();
617
- return scope;
689
+ function createScope(options) {
690
+ return new ScopeImpl(options);
618
691
  }
619
692
 
620
693
  //#endregion
package/dist/index.d.cts CHANGED
@@ -13,12 +13,14 @@ type MaybePromise<T> = T | Promise<T>;
13
13
  type AtomState = 'idle' | 'resolving' | 'resolved' | 'failed';
14
14
  declare namespace Lite {
15
15
  interface Scope {
16
+ readonly ready: Promise<void>;
16
17
  resolve<T>(atom: Atom<T>): Promise<T>;
17
18
  controller<T>(atom: Atom<T>): Controller<T>;
18
19
  release<T>(atom: Atom<T>): Promise<void>;
19
20
  dispose(): Promise<void>;
20
21
  createContext(options?: CreateContextOptions): ExecutionContext;
21
22
  on(event: AtomState, atom: Atom<unknown>, listener: () => void): () => void;
23
+ select<T, S>(atom: Atom<T>, selector: (value: T) => S, options?: SelectOptions<S>): SelectHandle<S>;
22
24
  }
23
25
  interface CreateContextOptions {
24
26
  tags?: Tagged<unknown>[];
@@ -44,6 +46,7 @@ declare namespace Lite {
44
46
  cleanup(fn: () => MaybePromise<void>): void;
45
47
  invalidate(): void;
46
48
  readonly scope: Scope;
49
+ readonly data: Map<string, unknown>;
47
50
  }
48
51
  interface ExecutionContext {
49
52
  readonly input: unknown;
@@ -63,6 +66,7 @@ declare namespace Lite {
63
66
  params: Args;
64
67
  tags?: Tagged<unknown>[];
65
68
  }
69
+ type ControllerEvent = 'resolving' | 'resolved' | '*';
66
70
  interface Controller<T> {
67
71
  readonly [controllerSymbol]: true;
68
72
  readonly state: AtomState;
@@ -70,7 +74,14 @@ declare namespace Lite {
70
74
  resolve(): Promise<T>;
71
75
  release(): Promise<void>;
72
76
  invalidate(): void;
73
- on(listener: () => void): () => void;
77
+ on(event: ControllerEvent, listener: () => void): () => void;
78
+ }
79
+ interface SelectOptions<S> {
80
+ eq?: (prev: S, next: S) => boolean;
81
+ }
82
+ interface SelectHandle<S> {
83
+ get(): S;
84
+ subscribe(listener: () => void): () => void;
74
85
  }
75
86
  interface Tag<T, HasDefault extends boolean = false> {
76
87
  readonly [tagSymbol]: true;
@@ -390,19 +401,29 @@ declare function isPreset(value: unknown): value is Lite.Preset<unknown>;
390
401
  /**
391
402
  * Creates a DI container that manages Atom resolution, caching, and lifecycle.
392
403
  *
404
+ * The scope is returned synchronously, with a `ready` promise that resolves
405
+ * when all extensions have been initialized. Resolution methods automatically
406
+ * wait for `ready` before proceeding.
407
+ *
393
408
  * @param options - Optional configuration for extensions, presets, and tags
394
- * @returns A Promise that resolves to a Scope instance
409
+ * @returns A Scope instance with a `ready` promise for extension initialization
395
410
  *
396
411
  * @example
397
412
  * ```typescript
398
- * const scope = await createScope({
413
+ * const scope = createScope({
399
414
  * extensions: [loggingExtension],
400
415
  * presets: [preset(dbAtom, testDb)]
401
416
  * })
417
+ *
418
+ * // Option 1: resolve() waits for ready internally
419
+ * const db = await scope.resolve(dbAtom)
420
+ *
421
+ * // Option 2: explicit wait
422
+ * await scope.ready
402
423
  * const db = await scope.resolve(dbAtom)
403
424
  * ```
404
425
  */
405
- declare function createScope(options?: Lite.ScopeOptions): Promise<Lite.Scope>;
426
+ declare function createScope(options?: Lite.ScopeOptions): Lite.Scope;
406
427
  //#endregion
407
428
  //#region src/index.d.ts
408
429
  declare const VERSION = "0.0.1";
@@ -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/index.ts"],"sourcesContent":[],"mappings":"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"}
package/dist/index.d.mts CHANGED
@@ -13,12 +13,14 @@ type MaybePromise<T> = T | Promise<T>;
13
13
  type AtomState = 'idle' | 'resolving' | 'resolved' | 'failed';
14
14
  declare namespace Lite {
15
15
  interface Scope {
16
+ readonly ready: Promise<void>;
16
17
  resolve<T>(atom: Atom<T>): Promise<T>;
17
18
  controller<T>(atom: Atom<T>): Controller<T>;
18
19
  release<T>(atom: Atom<T>): Promise<void>;
19
20
  dispose(): Promise<void>;
20
21
  createContext(options?: CreateContextOptions): ExecutionContext;
21
22
  on(event: AtomState, atom: Atom<unknown>, listener: () => void): () => void;
23
+ select<T, S>(atom: Atom<T>, selector: (value: T) => S, options?: SelectOptions<S>): SelectHandle<S>;
22
24
  }
23
25
  interface CreateContextOptions {
24
26
  tags?: Tagged<unknown>[];
@@ -44,6 +46,7 @@ declare namespace Lite {
44
46
  cleanup(fn: () => MaybePromise<void>): void;
45
47
  invalidate(): void;
46
48
  readonly scope: Scope;
49
+ readonly data: Map<string, unknown>;
47
50
  }
48
51
  interface ExecutionContext {
49
52
  readonly input: unknown;
@@ -63,6 +66,7 @@ declare namespace Lite {
63
66
  params: Args;
64
67
  tags?: Tagged<unknown>[];
65
68
  }
69
+ type ControllerEvent = 'resolving' | 'resolved' | '*';
66
70
  interface Controller<T> {
67
71
  readonly [controllerSymbol]: true;
68
72
  readonly state: AtomState;
@@ -70,7 +74,14 @@ declare namespace Lite {
70
74
  resolve(): Promise<T>;
71
75
  release(): Promise<void>;
72
76
  invalidate(): void;
73
- on(listener: () => void): () => void;
77
+ on(event: ControllerEvent, listener: () => void): () => void;
78
+ }
79
+ interface SelectOptions<S> {
80
+ eq?: (prev: S, next: S) => boolean;
81
+ }
82
+ interface SelectHandle<S> {
83
+ get(): S;
84
+ subscribe(listener: () => void): () => void;
74
85
  }
75
86
  interface Tag<T, HasDefault extends boolean = false> {
76
87
  readonly [tagSymbol]: true;
@@ -390,19 +401,29 @@ declare function isPreset(value: unknown): value is Lite.Preset<unknown>;
390
401
  /**
391
402
  * Creates a DI container that manages Atom resolution, caching, and lifecycle.
392
403
  *
404
+ * The scope is returned synchronously, with a `ready` promise that resolves
405
+ * when all extensions have been initialized. Resolution methods automatically
406
+ * wait for `ready` before proceeding.
407
+ *
393
408
  * @param options - Optional configuration for extensions, presets, and tags
394
- * @returns A Promise that resolves to a Scope instance
409
+ * @returns A Scope instance with a `ready` promise for extension initialization
395
410
  *
396
411
  * @example
397
412
  * ```typescript
398
- * const scope = await createScope({
413
+ * const scope = createScope({
399
414
  * extensions: [loggingExtension],
400
415
  * presets: [preset(dbAtom, testDb)]
401
416
  * })
417
+ *
418
+ * // Option 1: resolve() waits for ready internally
419
+ * const db = await scope.resolve(dbAtom)
420
+ *
421
+ * // Option 2: explicit wait
422
+ * await scope.ready
402
423
  * const db = await scope.resolve(dbAtom)
403
424
  * ```
404
425
  */
405
- declare function createScope(options?: Lite.ScopeOptions): Promise<Lite.Scope>;
426
+ declare function createScope(options?: Lite.ScopeOptions): Lite.Scope;
406
427
  //#endregion
407
428
  //#region src/index.d.ts
408
429
  declare const VERSION = "0.0.1";
@@ -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":";cAAa;AAAA,cACA,UAD8D,EAAA,OAAA,MAAA;AAC9D,cACA,SAD8D,EAAA,OAAA,MAAA;AAC9D,cACA,YAD4D,EAAA,OAAA,MAAA;AAC5D,cACA,mBADkE,EAAA,OAAA,MAAA;AAClE,cACA,YADiF,EAAA,OAAA,MAAA;AACjF,cACA,gBADkE,EAAA,OAAA,MAAA;AAClE,cACA,iBAD0E,EAAA,OAAA,MAAA;;;AAN1E,KCWD,YDX+D,CAAA,CAAA,CAAA,GCW7C,CDX6C,GCWzC,ODXyC,CCWjC,CDXiC,CAAA;AAC9D,KCYD,SAAA,GDZ+D,MAAA,GAAA,WAAA,GAAA,UAAA,GAAA,QAAA;AAC9D,kBCaI,IAAA,CDbwD;EAC5D,UAAA,KAAkE,CAAA;IAClE,OAAA,CAAA,CAAA,CAAA,CAAA,IAAA,ECaQ,IDbyE,CCapE,CDboE,CAAA,CAAA,ECa/D,ODb+D,CCavD,CDbuD,CAAA;IACjF,UAAA,CAAkE,CAAA,CAAA,CAAA,IAAA,ECavD,IDbuD,CCalD,CDbkD,CAAA,CAAA,ECa7C,UDb6C,CCalC,CDbkC,CAAA;IAClE,OAAA,CAAA,CAAA,CAAA,CAAA,IAA0E,ECalE,IDbkE,CCa7D,CDb6D,CAAA,CAAA,ECaxD,ODbwD,CAAA,IAAA,CAAA;IAC1E,OAAA,EAAA,ECaE,ODb2E,CAAA,IAAA,CAAA;4BCc9D,uBAAuB;cACrC,iBAAiB;;EAXnB,UAAA,oBAAY,CAAA;IAAM,IAAA,CAAA,EAenB,MAfmB,CAAA,OAAA,CAAA,EAAA;EAAY;EAAR,UAAA,YAAA,CAAA;IAAO,UAAA,CAAA,EAmBxB,SAnBwB,EAAA;IAE7B,IAAA,CAAA,EAkBD,MAlBU,CAAA,OAAA,CAAA,EAAA;IAEJ,OAAI,CAAA,EAiBP,MAjBO,CAAA,OAAA,CAAA,EAAA;EAEK;EAAL,UAAA,IAAA,CAAA,CAAA,CAAA,CAAA;IAAkB,UAmBzB,UAAA,CAnByB,EAAA,IAAA;IAAR,SAAA,OAAA,EAoBT,WApBS,CAoBG,CApBH,EAoBM,MApBN,CAAA,MAAA,EAoBqB,UApBrB,CAAA,CAAA;IACF,SAAA,IAAA,CAAA,EAoBT,MApBS,CAAA,MAAA,EAoBM,UApBN,CAAA;IAAL,SAAA,IAAA,CAAA,EAqBJ,MArBI,CAAA,OAAA,CAAA,EAAA;EAAqB;EAAX,UAAA,IAAA,CAAA,OAAA,EAAA,SAAA,OAAA,CAAA,CAAA;IACR,UAwBZ,UAAA,CAxBY,EAAA,IAAA;IAAL,SAAA,OAAA,EAyBC,WAzBD,CAyBa,OAzBb,EAyBsB,MAzBtB,EAyB8B,MAzB9B,CAAA,MAAA,EAyB6C,UAzB7C,CAAA,CAAA;IAAU,SAAA,IAAA,CAAA,EA0BX,MA1BW,CAAA,MAAA,EA0BI,UA1BJ,CAAA;IAChB,SAAA,IAAA,CAAA,EA0BK,MA1BL,CAAA,OAAA,CAAA,EAAA;EACa;EAAuB,UAAA,cAAA,CAAA;IACrC,OAAA,CAAA,EAAA,EAAA,GAAA,GA4BQ,YA5BR,CAAA,IAAA,CAAA,CAAA,EAAA,IAAA;IAAiB,UAAA,EAAA,EAAA,IAAA;IAIpB,SAAA,KAAA,EA0BS,KA1BT;EAIM;EACN,UAAA,gBAAA,CAAA;IACG,SAAA,KAAA,EAAA,OAAA;IAIA,SAAA,KAAA,EAqBM,KArBN;IACoB,IAAA,CAAA,CAAA,CAAA,CAAA,OAAA,EAqBb,eArBa,CAqBG,CArBH,CAAA,CAAA,EAqBQ,OArBR,CAqBgB,CArBhB,CAAA;IAAkB,IAAA,CAAA,CAAA,EAAA,aAAA,OAAA,EAAA,CAAA,CAAA,OAAA,EAsBP,aAtBO,CAsBO,CAtBP,EAsBU,IAtBV,CAAA,CAAA,EAsBkB,OAtBlB,CAsB0B,CAtB1B,CAAA;IAAf,OAAA,CAAA,EAAA,EAAA,GAAA,GAuBf,YAvBe,CAAA,IAAA,CAAA,CAAA,EAAA,IAAA;IAAf,KAAA,EAAA,EAwBT,OAxBS,CAAA,IAAA,CAAA;EACa;EAAf,UAAA,eAAA,CAAA,CAAA,CAAA,CAAA;IACA,IAAA,EA0BV,IA1BU,CA0BL,CA1BK,EAAA,OAAA,CAAA;IAIN,KAAA,EAAA,OAAA;IACoB,IAAA,CAAA,EAuBvB,MAvBuB,CAAA,OAAA,CAAA,EAAA;EAAS;EAAuB,UAAA,aAAA,CAAA,CAAA,EAAA,aAAA,OAAA,EAAA,GAAA,OAAA,EAAA,CAAA,CAAA;IAAf,EAAA,EAAA,CAAA,GAAA,IAAA,EA2BjC,IA3BiC,EAAA,GA2BxB,YA3BwB,CA2BX,CA3BW,CAAA;IAA7B,MAAA,EA4BV,IA5BU;IACa,IAAA,CAAA,EA4BxB,MA5BwB,CAAA,OAAA,CAAA,EAAA;EAAf;EACA,UAAA,UAAA,CAAA,CAAA,CAAA,CAAA;IAIE,UA2BR,gBAAA,CA3BQ,EAAA,IAAA;IAEF,SAAA,KAAA,EA0BA,SA1BA;IAKA,GAAA,EAAA,EAsBT,CAtBS;IACiB,OAAA,EAAA,EAsBtB,OAtBsB,CAsBd,CAtBc,CAAA;IAAhB,OAAA,EAAA,EAuBN,OAvBM,CAAA,IAAA,CAAA;IAA6B,UAAA,EAAA,EAAA,IAAA;IAAR,EAAA,CAAA,QAAA,EAAA,GAAA,GAAA,IAAA,CAAA,EAAA,GAAA,GAAA,IAAA;EACiB;EAAG,UAAA,GAAA,CAAA,CAAA,EAAA,mBAAA,OAAA,GAAA,KAAA,CAAA,CAAA;IAAjB,UA4B/B,SAAA,CA5B+B,EAAA,IAAA;IAAiC,SAAA,GAAA,EAAA,MAAA;IAAR,SAAA,KAAA,EAAA,MAAA;IAChD,SAAA,YAAA,EA8BK,UA9BL,SAAA,IAAA,GA8B+B,CA9B/B,GAAA,SAAA;IACT,SAAA,UAAA,EA8BY,UA9BZ;IAIE,CAAA,KAAA,EA2BH,CA3BG,CAAA,EA2BC,MA3BD,CA2BQ,CA3BR,CAAA;IAAL,GAAA,CAAA,MAAA,EA4BM,SA5BN,CAAA,EA4BkB,UA5BlB,SAAA,IAAA,GA4B4C,CA5B5C,GA4BgD,CA5BhD;IAEC,IAAA,CAAA,MAAA,EA2BM,SA3BN,CAAA,EA2BkB,UA3BlB,SAAA,IAAA,GA2B4C,CA3B5C,GA2BgD,CA3BhD,GAAA,SAAA;IAIO,OAAA,CAAA,MAAA,EAwBE,SAxBF,CAAA,EAwBc,CAxBd,EAAA;EAAsB;EAAb,UAAA,MAAA,CAAA,CAAA,CAAA,CAAA;IACf,UA2BE,YAAA,CA3BF,EAAA,IAAA;IACD,SAAA,GAAA,EAAA,MAAA;IAIG,SAAA,KAAA,EAwBM,CAxBN;EACM;EACT,KAAA,SAAA,GAyBe,MAzBf,CAAA,OAAA,CAAA,EAAA,GAAA;IACY,IAAA,CAAA,EAwBgC,MAxBhC,CAAA,OAAA,CAAA,EAAA;EAAR,CAAA;EACA,UAAA,WAAA,CAAA,OAAA,EAAA,OAyBgC,OAzBhC,CAAA,CAAA;IAMD,UAoBA,iBAAA,CApBA,EAAA,IAAA;IAGa,SAAA,GAAA,EAkBT,GAlBS,CAkBL,IAlBK,EAAA,OAAA,CAAA;IAA0B,SAAA,IAAA,EAAA,UAAA,GAAA,UAAA,GAAA,KAAA;EAC5B;EACb,UAAA,aAAA,CAAA,CAAA,CAAA,CAAA;IAAW,UAqBT,mBAAA,CArBS,EAAA,IAAA;IAAP,SAAA,IAAA,EAsBG,IAtBH,CAsBQ,CAtBR,CAAA;EACA;EAAY,UAAA,MAAA,CAAA,CAAA,CAAA,CAAA;IAA0B,UAyBxC,YAAA,CAzBwC,EAAA,IAAA;IAAI,SAAA,IAAA,EA0BvC,IA1BuC,CA0BlC,CA1BkC,CAAA;IACzC,SAAA,KAAA,EA0BG,CA1BH,GA0BO,IA1BP,CA0BY,CA1BZ,CAAA;EAAY;EAA0B,UAAA,SAAA,CAAA;IAAI,SAAA,IAAA,EAAA,MAAA;IACvC,IAAA,EAAA,KAAA,EA8BH,KA9BG,CAAA,EA8BK,YA9BL,CAAA,IAAA,CAAA;IAAY,WAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,GAAA,GAgCd,OAhCc,CAgCN,CAhCM,CAAA,EAAA,IAAA,EAiCpB,IAjCoB,CAiCf,CAjCe,CAAA,EAAA,KAAA,EAkCnB,KAlCmB,CAAA,EAmCzB,OAnCyB,CAmCjB,CAnCiB,CAAA;IAIlB,QAAA,CAAA,CAAA,CAAA,CAAA,CAAA,IAAA,EAAA,GAAA,GAiCI,OAjCJ,CAiCY,CAjCZ,CAAA,EAAA,MAAA,EAkCA,IAlCA,CAkCK,CAlCL,EAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA,EAAA,OAAA,EAAA,EAAA,GAkC4C,YAlC5C,CAkCyD,CAlCzD,CAAA,CAAA,EAAA,GAAA,EAmCH,gBAnCG,CAAA,EAoCP,OApCO,CAoCC,CApCD,CAAA;IAEM,OAAA,EAAA,KAAA,EAmCA,KAnCA,CAAA,EAmCQ,YAnCR,CAAA,IAAA,CAAA;EAGM;EAA6B,KAAA,UAAA,GAoCjD,IApCiD,CAAA,OAAA,CAAA,GAqCjD,aArCiD,CAAA,OAAA,CAAA,GAsCjD,WAtCiD,CAAA,OAAA,CAAA;EAER,KAAA,QAAA,CAAA,CAAA,CAAA,GAsCnB,CAtCmB,SAsCT,IAtCS,CAAA,KAAA,EAAA,CAAA,GAuCzC,CAvCyC,GAwCzC,CAxCyC,SAwC/B,aAxC+B,CAAA,KAAA,EAAA,CAAA,GAyCvC,UAzCuC,CAyC5B,CAzC4B,CAAA,GA0CvC,CA1CuC,SA0C7B,WA1C6B,CAAA,KAAA,QAAA,EAAA,KAAA,MAAA,CAAA,GA2CrC,OA3CqC,GAAA,KAAA;EACjC,KAAA,SAAA,CAAA,CAAA,CAAA,GAAA,QACQ,MA4CqB,CA5CrB,GA4CyB,QA5CzB,CA4CkC,CA5ClC,CA4CoC,CA5CpC,CAAA,CAAA,EAAJ;EAKJ,KAAA,WAAA,CAAA,CAAA,EAAA,UAyCyB,MAzCzB,CAAA,MAAA,EAyCwC,UAzCxC,CAAA,CAAA,GAAA,MA0CJ,CA1CI,SAAA,KAAA,GAAA,CAAA,GAAA,EA2CA,cA3CA,EAAA,GA2CmB,YA3CnB,CA2CgC,CA3ChC,CAAA,GAAA,CAAA,GAAA,EA4CA,cA5CA,EAAA,IAAA,EA4CsB,SA5CtB,CA4CgC,CA5ChC,CAAA,EAAA,GA4CuC,YA5CvC,CA4CoD,CA5CpD,CAAA;EACU,KAAA,WAAA,CAAA,OAAA,EAAA,MAAA,EAAA,UAgDV,MAhDU,CAAA,MAAA,EAgDK,UAhDL,CAAA,CAAA,GAAA,MAiDZ,CAjDY,SAAA,KAAA,GAAA,CAAA,GAAA,EAkDZ,gBAlDY,EAAA,GAkDS,YAlDT,CAkDsB,OAlDtB,CAAA,GAAA,CAAA,GAAA,EAmDZ,gBAnDY,EAAA,IAAA,EAmDY,SAnDZ,CAmDsB,CAnDtB,CAAA,EAAA,GAmD6B,YAnD7B,CAmD0C,OAnD1C,CAAA;;;;AD9GxB;AACA;AACA;AACA;;;;ACIA;;;;;AAEA;AAEA;;AAEqB,iBCML,GDNK,CAAA,CAAA,CAAA,CAAA,OAAA,EAAA;EAAkB,KAAA,EAAA,MAAA;CAAR,CAAA,ECMqB,IAAA,CAAK,GDN1B,CCM8B,CDN9B,EAAA,KAAA,CAAA;AACF,iBCMb,GDNa,CAAA,CAAA,CAAA,CAAA,OAAA,EAAA;EAAL,KAAA,EAAA,MAAA;EAAqB,OAAA,ECQlC,CDRkC;CAAX,CAAA,ECS9B,IAAA,CAAK,GDTyB,CCSrB,CDTqB,EAAA,IAAA,CAAA;;;;;;;;;;;;;;AAmBA,iBCwDlB,KAAA,CDxDkB,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,ICwDc,IAAA,CAAK,GDxDnB,CAAA,OAAA,EAAA,OAAA,CAAA;;;;;;;;;;;;;;AAQd,iBCoEJ,QAAA,CDpEI,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,ICoE+B,IAAA,CAAK,MDpEpC,CAAA,OAAA,CAAA;;;;AAYA,cCmEP,IDnEO,EAAA;EACiB;;;;;;;;;;;;;;EAanB,QAAA,CAAA,CAAA,CAAA,CAAA,GAAA,ECoEC,IAAA,CAAK,GDpEN,CCoEU,CDpEV,EAAA,OAAA,CAAA,CAAA,ECoEwB,IAAA,CAAK,WDpE7B,CCoEyC,CDpEzC,ECoE4C,CDpE5C,CAAA;EAAsB;;;;;;;;;;;;;;EAqB5B,QAAA,CAAA,CAAA,CAAA,CAAA,GAAA,ECiEO,IAAA,CAAK,GDjEZ,CCiEgB,CDjEhB,EAAA,OAAA,CAAA,CAAA,ECiE8B,IAAA,CAAK,WDjEnC,CCiE+C,CDjE/C,GAAA,SAAA,ECiE8D,CDjE9D,CAAA;EAAW;;;;;;;;;;;;;;EAYG,GAAA,CAAA,CAAA,CAAA,CAAA,GAAA,ECuEZ,IAAA,CAAK,GDvEO,CCuEH,CDvEG,EAAA,OAAA,CAAA,CAAA,ECuEW,IAAA,CAAK,WDvEhB,CCuE4B,CDvE5B,EAAA,ECuEiC,CDvEjC,CAAA;CAA6B;;;;;;;;;;;;;;AAqBtC,iBCoED,aAAA,CDpEC,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,ICoEuC,IAAA,CAAK,WDpE5C,CAAA,OAAA,CAAA;;;ADxHjB;AACA;AACA;;;;ACIA;;;;;AAEA;AAEA;AAE0B,iBEKV,IFLU,CAAA,CAAA,CAAA,CAAA,MAAA,EAAA;EAAL,IAAA,CAAA,EAAA,SAAA;EAAkB,OAAA,EAAA,CAAA,GAAA,EEOtB,IAAA,CAAK,cFPiB,EAAA,GEOE,YFPF,CEOe,CFPf,CAAA;EAAR,IAAA,CAAA,EEQtB,IAAA,CAAK,MFRiB,CAAA,OAAA,CAAA,EAAA;CACF,CAAA,EEQzB,IAAA,CAAK,IFRoB,CEQf,CFRe,CAAA;AAAL,iBEUR,IFVQ,CAAA,CAAA,EAAA,gBEYN,MFZM,CAAA,MAAA,EEYS,IAAA,CAAK,IFZd,CAAA,OAAA,CAAA,GEY8B,IAAA,CAAK,aFZnC,CAAA,OAAA,CAAA,GAAA;EAAqB,IAAA,EAAA,MAAA;CAAX,CAAA,CAAA,CAAA,MAAA,EAAA;EACR,IAAA,EEalB,CFbkB;EAAL,OAAA,EAAA,CAAA,GAAA,EEcJ,IAAA,CAAK,cFdD,EAAA,IAAA,EEcuB,IAAA,CAAK,SFd5B,CEcsC,CFdtC,CAAA,EAAA,GEc6C,YFd7C,CEc0D,CFd1D,CAAA;EAAU,IAAA,CAAA,EEetB,IAAA,CAAK,MFfiB,CAAA,OAAA,CAAA,EAAA;CAChB,CAAA,EEeX,IAAA,CAAK,IFfM,CEeD,CFfC,CAAA;;;;;;;;;;;;;;AAkBoB,iBEuBnB,MAAA,CFvBmB,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IEuBc,IAAA,CAAK,IFvBnB,CAAA,OAAA,CAAA;;;;;;;;;;;;;;;;;;;;;AAqBU,iBE8B7B,UF9B6B,CAAA,CAAA,CAAA,CAAA,IAAA,EE8BT,IAAA,CAAK,IF9BI,CE8BC,CF9BD,CAAA,CAAA,EE8BM,IAAA,CAAK,aF9BX,CE8ByB,CF9BzB,CAAA;;;;;;;;;;;;;;AAmBzB,iBE+BJ,eAAA,CF/BI,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IE+BsC,IAAA,CAAK,aF/B3C,CAAA,OAAA,CAAA;;;ADzEpB;AACA;AACA;;;;ACIA;;;;;AAEA;AAEA;;;;AAE+B,iBGYf,IHZe,CAAA,OAAA,EAAA,SAAA,OAAA,CAAA,CAAA,MAAA,EAAA;EACF,IAAA,CAAA,EAAA,SAAA;EAAL,OAAA,EAAA,CAAA,GAAA,EGaP,IAAA,CAAK,gBHbE,EAAA,GGamB,YHbnB,CGagC,OHbhC,CAAA;EAAqB,IAAA,CAAA,EGcpC,IAAA,CAAK,MHd+B,CAAA,OAAA,CAAA,EAAA;CAAX,CAAA,EGe9B,IAAA,CAAK,IHfyB,CGepB,OHfoB,EGeX,MHfW,CAAA;AACR,iBGgBV,IHhBU,CAAA,OAAA,EAAA,MAAA,EAAA,gBGmBR,MHnBQ,CAAA,MAAA,EGmBO,IAAA,CAAK,IHnBZ,CAAA,OAAA,CAAA,GGmB4B,IAAA,CAAK,aHnBjC,CAAA,OAAA,CAAA,GAAA;EAAL,IAAA,EAAA,MAAA;CAAU,CAAA,CAAA,CAAA,MAAA,EAAA;EAChB,IAAA,EGoBP,CHpBO;EACa,OAAA,EAAA,CAAA,GAAA,EGoBX,IAAA,CAAK,gBHpBM,EAAA,IAAA,EGoBkB,IAAA,CAAK,SHpBvB,CGoBiC,CHpBjC,CAAA,EAAA,GGoBwC,YHpBxC,CGoBqD,OHpBrD,CAAA;EAAuB,IAAA,CAAA,EGqB1C,IAAA,CAAK,MHrBqC,CAAA,OAAA,CAAA,EAAA;CACrC,CAAA,EGqBV,IAAA,CAAK,IHrBK,CGqBA,OHrBA,EGqBS,MHrBT,CAAA;;;;;;;;;;;;;;AAqBA,iBGgCE,MAAA,CHhCF,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IGgCmC,IAAA,CAAK,IHhCxC,CAAA,OAAA,EAAA,OAAA,CAAA;;;AD3Cd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACIA;;;AAAkC,iBIMlB,MJNkB,CAAA,CAAA,CAAA,CAAA,IAAA,EIO1B,IAAA,CAAK,IJPqB,CIOhB,CJPgB,CAAA,EAAA,KAAA,EIQzB,CJRyB,GIQrB,IAAA,CAAK,IJRgB,CIQX,CJRW,CAAA,CAAA,EIS/B,IAAA,CAAK,MJT0B,CISnB,CJTmB,CAAA;;AAElC;AAEA;;;;;;;;;;;AAI+B,iBIsBf,QAAA,CJtBe,KAAA,EAAA,OAAA,CAAA,EAAA,KAAA,IIsBoB,IAAA,CAAK,MJtBzB,CAAA,OAAA,CAAA;;;ADnB/B;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;ACIA;;;;AAAyC,iBKyfnB,WAAA,CLzfmB,OAAA,CAAA,EK0f7B,IAAA,CAAK,YL1fwB,CAAA,EK2ftC,OL3fsC,CK2f9B,IAAA,CAAK,KL3fyB,CAAA;;;ADL5B,cOWA,OAAA,GPX0E,OAAA"}
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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"}
package/dist/index.mjs CHANGED
@@ -262,6 +262,43 @@ function isPreset(value) {
262
262
 
263
263
  //#endregion
264
264
  //#region src/scope.ts
265
+ var SelectHandleImpl = class {
266
+ listeners = /* @__PURE__ */ new Set();
267
+ currentValue;
268
+ ctrlUnsub = null;
269
+ constructor(ctrl, selector, eq) {
270
+ this.ctrl = ctrl;
271
+ this.selector = selector;
272
+ this.eq = eq;
273
+ if (ctrl.state !== "resolved") throw new Error("Cannot select from unresolved atom");
274
+ this.currentValue = selector(ctrl.get());
275
+ this.ctrlUnsub = ctrl.on("resolved", () => {
276
+ const nextValue = this.selector(this.ctrl.get());
277
+ if (!this.eq(this.currentValue, nextValue)) {
278
+ this.currentValue = nextValue;
279
+ this.notifyListeners();
280
+ }
281
+ });
282
+ }
283
+ get() {
284
+ return this.currentValue;
285
+ }
286
+ subscribe(listener) {
287
+ this.listeners.add(listener);
288
+ return () => {
289
+ this.listeners.delete(listener);
290
+ if (this.listeners.size === 0) this.cleanup();
291
+ };
292
+ }
293
+ notifyListeners() {
294
+ for (const listener of this.listeners) listener();
295
+ }
296
+ cleanup() {
297
+ this.ctrlUnsub?.();
298
+ this.ctrlUnsub = null;
299
+ this.listeners.clear();
300
+ }
301
+ };
265
302
  var ControllerImpl = class {
266
303
  [controllerSymbol] = true;
267
304
  constructor(atom$1, scope) {
@@ -288,8 +325,8 @@ var ControllerImpl = class {
288
325
  invalidate() {
289
326
  this.scope.invalidate(this.atom);
290
327
  }
291
- on(listener) {
292
- return this.scope.addListener(this.atom, listener);
328
+ on(event, listener) {
329
+ return this.scope.addListener(this.atom, event, listener);
293
330
  }
294
331
  };
295
332
  var ScopeImpl = class {
@@ -300,8 +337,10 @@ var ScopeImpl = class {
300
337
  stateListeners = /* @__PURE__ */ new Map();
301
338
  invalidationQueue = /* @__PURE__ */ new Set();
302
339
  invalidationScheduled = false;
340
+ initialized = false;
303
341
  extensions;
304
342
  tags;
343
+ ready;
305
344
  scheduleInvalidation(atom$1) {
306
345
  this.invalidationQueue.add(atom$1);
307
346
  if (!this.invalidationScheduled) {
@@ -319,9 +358,11 @@ var ScopeImpl = class {
319
358
  this.extensions = options?.extensions ?? [];
320
359
  this.tags = options?.tags ?? [];
321
360
  for (const p of options?.presets ?? []) this.presets.set(p.atom, p.value);
361
+ this.ready = this.init();
322
362
  }
323
363
  async init() {
324
364
  for (const ext of this.extensions) if (ext.init) await ext.init(this);
365
+ this.initialized = true;
325
366
  }
326
367
  getEntry(atom$1) {
327
368
  return this.cache.get(atom$1);
@@ -333,23 +374,37 @@ var ScopeImpl = class {
333
374
  state: "idle",
334
375
  hasValue: false,
335
376
  cleanups: [],
336
- listeners: /* @__PURE__ */ new Set(),
377
+ listeners: new Map([
378
+ ["resolving", /* @__PURE__ */ new Set()],
379
+ ["resolved", /* @__PURE__ */ new Set()],
380
+ ["*", /* @__PURE__ */ new Set()]
381
+ ]),
337
382
  pendingInvalidate: false
338
383
  };
339
384
  this.cache.set(atom$1, entry);
340
385
  }
341
386
  return entry;
342
387
  }
343
- addListener(atom$1, listener) {
344
- const entry = this.getOrCreateEntry(atom$1);
345
- entry.listeners.add(listener);
388
+ addListener(atom$1, event, listener) {
389
+ const listeners = this.getOrCreateEntry(atom$1).listeners.get(event);
390
+ listeners.add(listener);
346
391
  return () => {
347
- entry.listeners.delete(listener);
392
+ listeners.delete(listener);
348
393
  };
349
394
  }
350
- notifyListeners(atom$1) {
395
+ notifyListeners(atom$1, event) {
396
+ const entry = this.cache.get(atom$1);
397
+ if (!entry) return;
398
+ const eventListeners = entry.listeners.get(event);
399
+ if (eventListeners) for (const listener of eventListeners) listener();
400
+ const allListeners = entry.listeners.get("*");
401
+ if (allListeners) for (const listener of allListeners) listener();
402
+ }
403
+ notifyAllListeners(atom$1) {
351
404
  const entry = this.cache.get(atom$1);
352
- if (entry) for (const listener of entry.listeners) listener();
405
+ if (!entry) return;
406
+ const allListeners = entry.listeners.get("*");
407
+ if (allListeners) for (const listener of allListeners) listener();
353
408
  }
354
409
  emitStateChange(state, atom$1) {
355
410
  const stateMap = this.stateListeners.get(state);
@@ -381,6 +436,7 @@ var ScopeImpl = class {
381
436
  };
382
437
  }
383
438
  async resolve(atom$1) {
439
+ if (!this.initialized) await this.ready;
384
440
  const entry = this.cache.get(atom$1);
385
441
  if (entry?.state === "resolved") return entry.value;
386
442
  const pendingPromise = this.pending.get(atom$1);
@@ -394,7 +450,7 @@ var ScopeImpl = class {
394
450
  newEntry.value = presetValue;
395
451
  newEntry.hasValue = true;
396
452
  this.emitStateChange("resolved", atom$1);
397
- this.notifyListeners(atom$1);
453
+ this.notifyListeners(atom$1, "resolved");
398
454
  return newEntry.value;
399
455
  }
400
456
  this.resolving.add(atom$1);
@@ -409,16 +465,22 @@ var ScopeImpl = class {
409
465
  }
410
466
  async doResolve(atom$1) {
411
467
  const entry = this.getOrCreateEntry(atom$1);
412
- entry.state = "resolving";
413
- this.emitStateChange("resolving", atom$1);
414
- this.notifyListeners(atom$1);
468
+ if (!(entry.state === "resolving")) {
469
+ entry.state = "resolving";
470
+ this.emitStateChange("resolving", atom$1);
471
+ this.notifyListeners(atom$1, "resolving");
472
+ }
415
473
  const resolvedDeps = await this.resolveDeps(atom$1.deps);
416
474
  const ctx = {
417
475
  cleanup: (fn) => entry.cleanups.push(fn),
418
476
  invalidate: () => {
419
477
  this.scheduleInvalidation(atom$1);
420
478
  },
421
- scope: this
479
+ scope: this,
480
+ get data() {
481
+ if (!entry.data) entry.data = /* @__PURE__ */ new Map();
482
+ return entry.data;
483
+ }
422
484
  };
423
485
  const factory = atom$1.factory;
424
486
  const doResolve = async () => {
@@ -432,7 +494,7 @@ var ScopeImpl = class {
432
494
  entry.hasValue = true;
433
495
  entry.error = void 0;
434
496
  this.emitStateChange("resolved", atom$1);
435
- this.notifyListeners(atom$1);
497
+ this.notifyListeners(atom$1, "resolved");
436
498
  if (entry.pendingInvalidate) {
437
499
  entry.pendingInvalidate = false;
438
500
  this.scheduleInvalidation(atom$1);
@@ -444,7 +506,7 @@ var ScopeImpl = class {
444
506
  entry.value = void 0;
445
507
  entry.hasValue = false;
446
508
  this.emitStateChange("failed", atom$1);
447
- this.notifyListeners(atom$1);
509
+ this.notifyAllListeners(atom$1);
448
510
  if (entry.pendingInvalidate) {
449
511
  entry.pendingInvalidate = false;
450
512
  this.scheduleInvalidation(atom$1);
@@ -488,6 +550,9 @@ var ScopeImpl = class {
488
550
  controller(atom$1) {
489
551
  return new ControllerImpl(atom$1, this);
490
552
  }
553
+ select(atom$1, selector, options) {
554
+ return new SelectHandleImpl(this.controller(atom$1), selector, options?.eq ?? ((a, b) => a === b));
555
+ }
491
556
  invalidate(atom$1) {
492
557
  const entry = this.cache.get(atom$1);
493
558
  if (!entry) return;
@@ -512,7 +577,7 @@ var ScopeImpl = class {
512
577
  this.pending.delete(atom$1);
513
578
  this.resolving.delete(atom$1);
514
579
  this.emitStateChange("resolving", atom$1);
515
- this.notifyListeners(atom$1);
580
+ this.notifyListeners(atom$1, "resolving");
516
581
  this.resolve(atom$1).catch(() => {});
517
582
  }
518
583
  async release(atom$1) {
@@ -598,22 +663,30 @@ var ExecutionContextImpl = class {
598
663
  /**
599
664
  * Creates a DI container that manages Atom resolution, caching, and lifecycle.
600
665
  *
666
+ * The scope is returned synchronously, with a `ready` promise that resolves
667
+ * when all extensions have been initialized. Resolution methods automatically
668
+ * wait for `ready` before proceeding.
669
+ *
601
670
  * @param options - Optional configuration for extensions, presets, and tags
602
- * @returns A Promise that resolves to a Scope instance
671
+ * @returns A Scope instance with a `ready` promise for extension initialization
603
672
  *
604
673
  * @example
605
674
  * ```typescript
606
- * const scope = await createScope({
675
+ * const scope = createScope({
607
676
  * extensions: [loggingExtension],
608
677
  * presets: [preset(dbAtom, testDb)]
609
678
  * })
679
+ *
680
+ * // Option 1: resolve() waits for ready internally
681
+ * const db = await scope.resolve(dbAtom)
682
+ *
683
+ * // Option 2: explicit wait
684
+ * await scope.ready
610
685
  * const db = await scope.resolve(dbAtom)
611
686
  * ```
612
687
  */
613
- async function createScope(options) {
614
- const scope = new ScopeImpl(options);
615
- await scope.init();
616
- return scope;
688
+ function createScope(options) {
689
+ return new ScopeImpl(options);
617
690
  }
618
691
 
619
692
  //#endregion
@@ -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[]","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\ninterface AtomEntry<T> {\n state: AtomState\n value?: T\n hasValue: boolean\n error?: Error\n cleanups: (() => MaybePromise<void>)[]\n listeners: Set<() => void>\n pendingInvalidate: boolean\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(listener: () => void): () => void {\n return this.scope.addListener(this.atom, 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 readonly extensions: Lite.Extension[]\n readonly tags: Lite.Tagged<unknown>[]\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\n async init(): Promise<void> {\n for (const ext of this.extensions) {\n if (ext.init) {\n await ext.init(this)\n }\n }\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 Set(),\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>, listener: () => void): () => void {\n const entry = this.getOrCreateEntry(atom)\n entry.listeners.add(listener)\n return () => {\n entry.listeners.delete(listener)\n }\n }\n\n private notifyListeners<T>(atom: Lite.Atom<T>): void {\n const entry = this.cache.get(atom)\n if (entry) {\n for (const listener of entry.listeners) {\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 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)\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 entry.state = 'resolving'\n this.emitStateChange('resolving', atom)\n this.notifyListeners(atom)\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 }\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)\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.notifyListeners(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 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)\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 * @param options - Optional configuration for extensions, presets, and tags\n * @returns A Promise that resolves to a Scope instance\n *\n * @example\n * ```typescript\n * const scope = await createScope({\n * extensions: [loggingExtension],\n * presets: [preset(dbAtom, testDb)]\n * })\n * const db = await scope.resolve(dbAtom)\n * ```\n */\nexport async function createScope(\n options?: Lite.ScopeOptions\n): Promise<Lite.Scope> {\n const scope = new ScopeImpl(options)\n await scope.init()\n return scope\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","tags","result: T[]","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\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?: Map<string, unknown>\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 Map()\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":";AAAA,MAAaA,aAA4B,OAAO,IAAI,uBAAuB;AAC3E,MAAaC,aAA4B,OAAO,IAAI,uBAAuB;AAC3E,MAAaC,YAA2B,OAAO,IAAI,sBAAsB;AACzE,MAAaC,eAA8B,OAAO,IAAI,yBAAyB;AAC/E,MAAaC,sBAAqC,OAAO,IAAI,iCAAiC;AAC9F,MAAaC,eAA8B,OAAO,IAAI,yBAAyB;AAC/E,MAAaC,mBAAkC,OAAO,IAAI,6BAA6B;AACvF,MAAaC,oBAAmC,OAAO,IAAI,+BAA+B;;;;ACqB1F,SAAgB,IAAO,SAAuD;CAC5E,MAAM,MAAM,OAAO,IAAI,uBAAuB,QAAQ,QAAQ;CAC9D,MAAM,aAAa,aAAa;CAChC,MAAM,eAAe,aAAa,QAAQ,UAAU;CAEpD,SAAS,aAAa,OAA0B;AAC9C,SAAO;IACJ,eAAe;GAChB;GACA;GACD;;CAGH,SAAS,IAAI,QAA2B;EACtC,MAAMC,SAAO,MAAM,QAAQ,OAAO,GAAG,SAAS,OAAO,QAAQ,EAAE;AAC/D,OAAK,IAAI,IAAI,GAAG,IAAIA,OAAK,QAAQ,IAC/B,KAAIA,OAAK,GAAI,QAAQ,IAAK,QAAOA,OAAK,GAAI;AAE5C,MAAI,WAAY,QAAO;AACvB,QAAM,IAAI,MAAM,QAAQ,QAAQ,MAAM,gCAAgC;;CAGxE,SAAS,KAAK,QAAuC;EACnD,MAAMA,SAAO,MAAM,QAAQ,OAAO,GAAG,SAAS,OAAO,QAAQ,EAAE;AAC/D,OAAK,IAAI,IAAI,GAAG,IAAIA,OAAK,QAAQ,IAC/B,KAAIA,OAAK,GAAI,QAAQ,IAAK,QAAOA,OAAK,GAAI;AAE5C,MAAI,WAAY,QAAO;;CAIzB,SAAS,QAAQ,QAA6B;EAC5C,MAAMA,SAAO,MAAM,QAAQ,OAAO,GAAG,SAAS,OAAO,QAAQ,EAAE;EAC/D,MAAMC,SAAc,EAAE;AACtB,OAAK,IAAI,IAAI,GAAG,IAAID,OAAK,QAAQ,IAC/B,KAAIA,OAAK,GAAI,QAAQ,IAAK,QAAO,KAAKA,OAAK,GAAI,MAAsB;AAEvE,SAAO;;AAGT,QAAO,OAAO,OAAO,cAAc;GAChC,YAAY;EACb;EACA,OAAO,QAAQ;EACf;EACA;EACA;EACA;EACA;EACD,CAAC;;;;;;;;;;;;;;;AAgBJ,SAAgB,MAAM,OAAqD;AACzE,QACE,OAAO,UAAU,cAChB,MAA6C,eAAe;;;;;;;;;;;;;;;AAiBjE,SAAgB,SAAS,OAA+C;AACtE,QACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,kBAAkB;;;;;AAOzD,MAAa,OAAO;CAelB,SAAY,OAAmD;AAC7D,SAAO;IAAG,oBAAoB;GAAM;GAAK,MAAM;GAAY;;CAiB7D,SAAY,OAA+D;AACzE,SAAO;IAAG,oBAAoB;GAAM;GAAK,MAAM;GAAY;;CAiB7D,IAAO,OAAqD;AAC1D,SAAO;IAAG,oBAAoB;GAAM;GAAK,MAAM;GAAO;;CAEzD;;;;;;;;;;;;;;AAeD,SAAgB,cAAc,OAAoD;AAChF,QACE,OAAO,UAAU,YACjB,UAAU,QACV,qBAAqB;;;;;AChKzB,SAAgB,KACd,QACc;AACd,QAAO;GACJ,aAAa;EACd,SAAS,OAAO;EAChB,MAAM,OAAO;EACb,MAAM,OAAO;EACd;;;;;;;;;;;;;;;AAgBH,SAAgB,OAAO,OAA6C;AAClE,QACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,gBAAgB;;;;;;;;;;;;;;;;;;;;;;AAwBvD,SAAgB,WAAc,QAA2C;AACvE,QAAO;GACJ,sBAAsB;EACvB;EACD;;;;;;;;;;;;;;;AAgBH,SAAgB,gBAAgB,OAAsD;AACpF,QACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,yBAAyB;;;;;ACpEhE,SAAgB,KAId,QAAoE;AACpE,QAAO;GACJ,aAAa;EACd,SAAS,OAAO;EAKhB,MAAM,OAAO;EACb,MAAM,OAAO;EACd;;;;;;;;;;;;;;;AAgBH,SAAgB,OAAO,OAAsD;AAC3E,QACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,gBAAgB;;;;;;;;;;;;;;;;;;;AC9DvD,SAAgB,OACd,QACA,OACgB;AAChB,QAAO;GACJ,eAAe;EAChB;EACA;EACD;;;;;;;;;;;;;;;AAgBH,SAAgB,SAAS,OAA+C;AACtE,QACE,OAAO,UAAU,YACjB,UAAU,QACT,MAAkC,kBAAkB;;;;;AC5BzD,IAAM,mBAAN,MAA6D;CAC3D,AAAQ,4BAAY,IAAI,KAAiB;CACzC,AAAQ;CACR,AAAQ,YAAiC;CAEzC,YACE,AAAQE,MACR,AAAQC,UACR,AAAQC,IACR;EAHQ;EACA;EACA;AAER,MAAI,KAAK,UAAU,WACjB,OAAM,IAAI,MAAM,qCAAqC;AAGvD,OAAK,eAAe,SAAS,KAAK,KAAK,CAAC;AAExC,OAAK,YAAY,KAAK,GAAG,kBAAkB;GACzC,MAAM,YAAY,KAAK,SAAS,KAAK,KAAK,KAAK,CAAC;AAChD,OAAI,CAAC,KAAK,GAAG,KAAK,cAAc,UAAU,EAAE;AAC1C,SAAK,eAAe;AACpB,SAAK,iBAAiB;;IAExB;;CAGJ,MAAS;AACP,SAAO,KAAK;;CAGd,UAAU,UAAkC;AAC1C,OAAK,UAAU,IAAI,SAAS;AAE5B,eAAa;AACX,QAAK,UAAU,OAAO,SAAS;AAC/B,OAAI,KAAK,UAAU,SAAS,EAC1B,MAAK,SAAS;;;CAKpB,AAAQ,kBAAwB;AAC9B,OAAK,MAAM,YAAY,KAAK,UAC1B,WAAU;;CAId,AAAQ,UAAgB;AACtB,OAAK,aAAa;AAClB,OAAK,YAAY;AACjB,OAAK,UAAU,OAAO;;;AAI1B,IAAM,iBAAN,MAAsD;CACpD,CAAU,oBAAoB;CAE9B,YACE,AAAQC,QACR,AAAQC,OACR;EAFQ;EACA;;CAGV,IAAI,QAAmB;AAErB,SADc,KAAK,MAAM,SAAS,KAAK,KAAK,EAC9B,SAAS;;CAGzB,MAAS;EACP,MAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,KAAK;AAC5C,MAAI,CAAC,SAAS,MAAM,UAAU,OAC5B,OAAM,IAAI,MAAM,oBAAoB;AAEtC,MAAI,MAAM,UAAU,YAAY,MAAM,MACpC,OAAM,MAAM;AAEd,MAAI,MAAM,UAAU,eAAe,MAAM,SACvC,QAAO,MAAM;AAEf,MAAI,MAAM,UAAU,cAAc,MAAM,SACtC,QAAO,MAAM;AAEf,QAAM,IAAI,MAAM,oBAAoB;;CAGtC,MAAM,UAAsB;AAC1B,SAAO,KAAK,MAAM,QAAQ,KAAK,KAAK;;CAGtC,MAAM,UAAyB;AAC7B,SAAO,KAAK,MAAM,QAAQ,KAAK,KAAK;;CAGtC,aAAmB;AACjB,OAAK,MAAM,WAAW,KAAK,KAAK;;CAGlC,GAAG,OAAsB,UAAkC;AACzD,SAAO,KAAK,MAAM,YAAY,KAAK,MAAM,OAAO,SAAS;;;AAI7D,IAAM,YAAN,MAAsC;CACpC,AAAQ,wBAAQ,IAAI,KAA6C;CACjE,AAAQ,0BAAU,IAAI,KAAuD;CAC7E,AAAQ,4BAAY,IAAI,KAAyB;CACjD,AAAQ,0BAAU,IAAI,KAA2C;CACjE,AAAQ,iCAAiB,IAAI,KAA0D;CACvF,AAAQ,oCAAoB,IAAI,KAAyB;CACzD,AAAQ,wBAAwB;CAChC,AAAQ,cAAc;CACtB,AAAS;CACT,AAAS;CACT,AAAS;CAET,AAAQ,qBAAwB,QAA0B;AACxD,OAAK,kBAAkB,IAAIC,OAAK;AAChC,MAAI,CAAC,KAAK,uBAAuB;AAC/B,QAAK,wBAAwB;AAC7B,wBAAqB,KAAK,oBAAoB,CAAC;;;CAInD,AAAQ,qBAA2B;AACjC,OAAK,wBAAwB;EAC7B,MAAM,QAAQ,CAAC,GAAG,KAAK,kBAAkB;AACzC,OAAK,kBAAkB,OAAO;AAC9B,OAAK,MAAMA,UAAQ,MACjB,MAAK,WAAWA,OAAK;;CAIzB,YAAY,SAA6B;AACvC,OAAK,aAAa,SAAS,cAAc,EAAE;AAC3C,OAAK,OAAO,SAAS,QAAQ,EAAE;AAE/B,OAAK,MAAM,KAAK,SAAS,WAAW,EAAE,CACpC,MAAK,QAAQ,IAAI,EAAE,MAAM,EAAE,MAAM;AAGnC,OAAK,QAAQ,KAAK,MAAM;;CAG1B,MAAc,OAAsB;AAClC,OAAK,MAAM,OAAO,KAAK,WACrB,KAAI,IAAI,KACN,OAAM,IAAI,KAAK,KAAK;AAGxB,OAAK,cAAc;;CAGrB,SAAY,QAA8C;AACxD,SAAO,KAAK,MAAM,IAAIA,OAAK;;CAG7B,AAAQ,iBAAoB,QAAkC;EAC5D,IAAI,QAAQ,KAAK,MAAM,IAAIA,OAAK;AAChC,MAAI,CAAC,OAAO;AACV,WAAQ;IACN,OAAO;IACP,UAAU;IACV,UAAU,EAAE;IACZ,WAAW,IAAI,IAAI;KACjB,CAAC,6BAAa,IAAI,KAAK,CAAC;KACxB,CAAC,4BAAY,IAAI,KAAK,CAAC;KACvB,CAAC,qBAAK,IAAI,KAAK,CAAC;KACjB,CAAC;IACF,mBAAmB;IACpB;AACD,QAAK,MAAM,IAAIA,QAAM,MAA4B;;AAEnD,SAAO;;CAGT,YAAe,QAAoB,OAAsB,UAAkC;EAEzF,MAAM,YADQ,KAAK,iBAAiBA,OAAK,CACjB,UAAU,IAAI,MAAM;AAC5C,YAAU,IAAI,SAAS;AACvB,eAAa;AACX,aAAU,OAAO,SAAS;;;CAI9B,AAAQ,gBAAmB,QAAoB,OAAuC;EACpF,MAAM,QAAQ,KAAK,MAAM,IAAIA,OAAK;AAClC,MAAI,CAAC,MAAO;EAEZ,MAAM,iBAAiB,MAAM,UAAU,IAAI,MAAM;AACjD,MAAI,eACF,MAAK,MAAM,YAAY,eACrB,WAAU;EAId,MAAM,eAAe,MAAM,UAAU,IAAI,IAAI;AAC7C,MAAI,aACF,MAAK,MAAM,YAAY,aACrB,WAAU;;CAKhB,AAAQ,mBAAsB,QAA0B;EACtD,MAAM,QAAQ,KAAK,MAAM,IAAIA,OAAK;AAClC,MAAI,CAAC,MAAO;EAEZ,MAAM,eAAe,MAAM,UAAU,IAAI,IAAI;AAC7C,MAAI,aACF,MAAK,MAAM,YAAY,aACrB,WAAU;;CAKhB,AAAQ,gBAAgB,OAAkB,QAAgC;EACxE,MAAM,WAAW,KAAK,eAAe,IAAI,MAAM;AAC/C,MAAI,UAAU;GACZ,MAAM,YAAY,SAAS,IAAIA,OAAK;AACpC,OAAI,UACF,MAAK,MAAM,YAAY,UACrB,WAAU;;;CAMlB,GAAG,OAAkB,QAA0B,UAAkC;EAC/E,IAAI,WAAW,KAAK,eAAe,IAAI,MAAM;AAC7C,MAAI,CAAC,UAAU;AACb,8BAAW,IAAI,KAAK;AACpB,QAAK,eAAe,IAAI,OAAO,SAAS;;EAE1C,IAAI,YAAY,SAAS,IAAIA,OAAK;AAClC,MAAI,CAAC,WAAW;AACd,+BAAY,IAAI,KAAK;AACrB,YAAS,IAAIA,QAAM,UAAU;;AAE/B,YAAU,IAAI,SAAS;EAEvB,MAAM,mBAAmB;EACzB,MAAM,oBAAoB;AAE1B,eAAa;AACX,qBAAkB,OAAO,SAAS;AAClC,OAAI,kBAAkB,SAAS,GAAG;AAChC,qBAAiB,OAAOA,OAAK;AAC7B,QAAI,iBAAiB,SAAS,EAC5B,MAAK,eAAe,OAAO,MAAM;;;;CAMzC,MAAM,QAAW,QAAgC;AAC/C,MAAI,CAAC,KAAK,YACR,OAAM,KAAK;EAGb,MAAM,QAAQ,KAAK,MAAM,IAAIA,OAAK;AAClC,MAAI,OAAO,UAAU,WACnB,QAAO,MAAM;EAGf,MAAM,iBAAiB,KAAK,QAAQ,IAAIA,OAAK;AAC7C,MAAI,eACF,QAAO;AAGT,MAAI,KAAK,UAAU,IAAIA,OAAK,CAC1B,OAAM,IAAI,MAAM,+BAA+B;EAGjD,MAAM,cAAc,KAAK,QAAQ,IAAIA,OAAK;AAC1C,MAAI,gBAAgB,QAAW;AAC7B,OAAI,OAAO,YAAY,CACrB,QAAO,KAAK,QAAQ,YAA4B;GAElD,MAAM,WAAW,KAAK,iBAAiBA,OAAK;AAC5C,YAAS,QAAQ;AACjB,YAAS,QAAQ;AACjB,YAAS,WAAW;AACpB,QAAK,gBAAgB,YAAYA,OAAK;AACtC,QAAK,gBAAgBA,QAAM,WAAW;AACtC,UAAO,SAAS;;AAGlB,OAAK,UAAU,IAAIA,OAAK;EAExB,MAAM,UAAU,KAAK,UAAUA,OAAK;AACpC,OAAK,QAAQ,IAAIA,QAAM,QAA4B;AAEnD,MAAI;AACF,UAAO,MAAM;YACL;AACR,QAAK,UAAU,OAAOA,OAAK;AAC3B,QAAK,QAAQ,OAAOA,OAAK;;;CAI7B,MAAc,UAAa,QAAgC;EACzD,MAAM,QAAQ,KAAK,iBAAiBA,OAAK;AAGzC,MAAI,EADiB,MAAM,UAAU,cAClB;AACjB,SAAM,QAAQ;AACd,QAAK,gBAAgB,aAAaA,OAAK;AACvC,QAAK,gBAAgBA,QAAM,YAAY;;EAGzC,MAAM,eAAe,MAAM,KAAK,YAAYA,OAAK,KAAK;EAEtD,MAAMC,MAA2B;GAC/B,UAAU,OAAO,MAAM,SAAS,KAAK,GAAG;GACxC,kBAAkB;AAChB,SAAK,qBAAqBD,OAAK;;GAEjC,OAAO;GACP,IAAI,OAAO;AACT,QAAI,CAAC,MAAM,KACT,OAAM,uBAAO,IAAI,KAAK;AAExB,WAAO,MAAM;;GAEhB;EAED,MAAM,UAAUA,OAAK;EAKrB,MAAM,YAAY,YAAY;AAC5B,OAAIA,OAAK,QAAQ,OAAO,KAAKA,OAAK,KAAK,CAAC,SAAS,EAC/C,QAAO,QAAQ,KAAK,aAAa;OAEjC,QAAO,QAAQ,IAAI;;AAIvB,MAAI;GACF,MAAM,QAAQ,MAAM,KAAK,uBAAuBA,QAAM,UAAU;AAChE,SAAM,QAAQ;AACd,SAAM,QAAQ;AACd,SAAM,WAAW;AACjB,SAAM,QAAQ;AACd,QAAK,gBAAgB,YAAYA,OAAK;AACtC,QAAK,gBAAgBA,QAAM,WAAW;AAEtC,OAAI,MAAM,mBAAmB;AAC3B,UAAM,oBAAoB;AAC1B,SAAK,qBAAqBA,OAAK;;AAGjC,UAAO;WACA,KAAK;AACZ,SAAM,QAAQ;AACd,SAAM,QAAQ,eAAe,QAAQ,MAAM,IAAI,MAAM,OAAO,IAAI,CAAC;AACjE,SAAM,QAAQ;AACd,SAAM,WAAW;AACjB,QAAK,gBAAgB,UAAUA,OAAK;AACpC,QAAK,mBAAmBA,OAAK;AAE7B,OAAI,MAAM,mBAAmB;AAC3B,UAAM,oBAAoB;AAC1B,SAAK,qBAAqBA,OAAK;;AAGjC,SAAM,MAAM;;;CAIhB,MAAc,uBACZ,QACA,WACY;EACZ,IAAI,OAAO;AAEX,OAAK,IAAI,IAAI,KAAK,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;GACpD,MAAM,MAAM,KAAK,WAAW;AAC5B,OAAI,KAAK,aAAa;IACpB,MAAM,cAAc;AACpB,WAAO,IAAI,YAAY,KAAK,KAAK,aAAaA,QAAM,KAAK;;;AAI7D,SAAO,MAAM;;CAGf,MAAM,YACJ,MACA,WACkC;AAClC,MAAI,CAAC,KAAM,QAAO,EAAE;EAEpB,MAAME,SAAkC,EAAE;EAC1C,MAAMC,SAAO,aAAa,KAAK;AAE/B,OAAK,MAAM,CAAC,KAAK,QAAQ,OAAO,QAAQ,KAAK,CAC3C,KAAI,OAAO,IAAI,CACb,QAAO,OAAO,MAAM,KAAK,QAAQ,IAAI;WAC5B,gBAAgB,IAAI,CAC7B,QAAO,OAAO,IAAI,eAAe,IAAI,MAAM,KAAK;WACvC,qBAAsB,KAAgB;GAC/C,MAAM,cAAc;AAEpB,WAAQ,YAAY,MAApB;IACE,KAAK;AACH,YAAO,OAAO,YAAY,IAAI,IAAIA,OAAK;AACvC;IACF,KAAK;AACH,YAAO,OAAO,YAAY,IAAI,KAAKA,OAAK;AACxC;IACF,KAAK;AACH,YAAO,OAAO,YAAY,IAAI,QAAQA,OAAK;AAC3C;;;AAKR,SAAO;;CAGT,WAAc,QAAwC;AACpD,SAAO,IAAI,eAAeH,QAAM,KAAK;;CAGvC,OACE,QACA,UACA,SACsB;AAGtB,SAAO,IAAI,iBAFE,KAAK,WAAWA,OAAK,EAEA,UADvB,SAAS,QAAQ,GAAG,MAAM,MAAM,GACI;;CAGjD,WAAc,QAA0B;EACtC,MAAM,QAAQ,KAAK,MAAM,IAAIA,OAAK;AAClC,MAAI,CAAC,MAAO;AAEZ,MAAI,MAAM,UAAU,OAAQ;AAE5B,MAAI,MAAM,UAAU,aAAa;AAC/B,SAAM,oBAAoB;AAC1B;;AAGF,OAAK,aAAaA,QAAM,MAAsB;;CAGhD,MAAc,aAAgB,QAAoB,OAAoC;EACpF,MAAM,gBAAgB,MAAM;AAC5B,OAAK,IAAI,IAAI,MAAM,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;GACnD,MAAM,UAAU,MAAM,SAAS;AAC/B,OAAI,QAAS,OAAM,SAAS;;AAE9B,QAAM,WAAW,EAAE;AACnB,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,oBAAoB;AAC1B,OAAK,QAAQ,OAAOA,OAAK;AACzB,OAAK,UAAU,OAAOA,OAAK;AAC3B,OAAK,gBAAgB,aAAaA,OAAK;AACvC,OAAK,gBAAgBA,QAAM,YAAY;AAEvC,OAAK,QAAQA,OAAK,CAAC,YAAY,GAAG;;CAGpC,MAAM,QAAW,QAAmC;EAClD,MAAM,QAAQ,KAAK,MAAM,IAAIA,OAAK;AAClC,MAAI,CAAC,MAAO;AAEZ,OAAK,IAAI,IAAI,MAAM,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;GACnD,MAAM,UAAU,MAAM,SAAS;AAC/B,OAAI,QAAS,OAAM,SAAS;;AAG9B,OAAK,MAAM,OAAOA,OAAK;;CAGzB,MAAM,UAAyB;AAC7B,OAAK,MAAM,OAAO,KAAK,WACrB,KAAI,IAAI,QACN,OAAM,IAAI,QAAQ,KAAK;EAI3B,MAAM,QAAQ,MAAM,KAAK,KAAK,MAAM,MAAM,CAAC;AAC3C,OAAK,MAAMA,UAAQ,MACjB,OAAM,KAAK,QAAQA,OAA2B;;CAIlD,cAAc,SAA4D;AACxE,SAAO,IAAI,qBAAqB,MAAM,QAAQ;;;AAIlD,IAAM,uBAAN,MAA4D;CAC1D,AAAQ,WAAyC,EAAE;CACnD,AAAQ,SAAS;CACjB,AAAQ,SAAkB;CAC1B,AAAiB;CAEjB,YACE,AAASD,OACT,SACA;EAFS;EAGT,MAAM,UAAU,SAAS;AACzB,OAAK,WAAW,SAAS,SACrB,CAAC,GAAG,SAAS,GAAG,MAAM,KAAK,GAC3B,MAAM;;CAGZ,IAAI,QAAiB;AACnB,SAAO,KAAK;;CAGd,MAAM,KAAQ,SAAsE;AAClF,MAAI,KAAK,OACP,OAAM,IAAI,MAAM,6BAA6B;AAG/C,MAAI,UAAU,QACZ,QAAO,KAAK,SAAS,QAAQ;MAE7B,QAAO,KAAK,OAAO,QAAQ;;CAI/B,MAAc,SAAY,SAA8C;EACtE,MAAM,EAAE,cAAM,OAAO,MAAM,aAAa;EAGxC,MAAM,WADgB,UAAU,UAAU,KAAK,MAAMK,OAAK,MAAM,UAAU,KAAK,IAE3E;GAAC,GAAI,YAAY,EAAE;GAAG,GAAG,KAAK;GAAU,GAAIA,OAAK,QAAQ,EAAE;GAAE,GAC7D,KAAK;EAET,MAAM,eAAe,MAAM,KAAK,MAAM,YAAYA,OAAK,MAAM,QAAQ;AAErE,OAAK,SAAS;EAEd,MAAM,UAAUA,OAAK;EAKrB,MAAM,SAAS,YAAwB;AACrC,OAAIA,OAAK,QAAQ,OAAO,KAAKA,OAAK,KAAK,CAAC,SAAS,EAC/C,QAAO,QAAQ,MAAM,aAAa;OAElC,QAAO,QAAQ,KAAK;;AAIxB,SAAO,KAAK,oBAAoBA,QAAM,OAAO;;CAG/C,AAAQ,OAAU,SAA4C;EAC5D,MAAM,EAAE,IAAI,WAAW;EACvB,MAAM,eAAe,QAAQ,QAAQ,GAAG,GAAG,OAAO,CAAC;AACnD,SAAO,KAAK,oBAAoB,IAAI,OAAO;;CAG7C,MAAc,oBACZ,QACA,QACY;EACZ,IAAI,OAAO;AAEX,OAAK,IAAI,IAAI,KAAK,MAAM,WAAW,SAAS,GAAG,KAAK,GAAG,KAAK;GAC1D,MAAM,MAAM,KAAK,MAAM,WAAW;AAClC,OAAI,KAAK,UAAU;IACjB,MAAM,cAAc;AACpB,WAAO,IAAI,SAAS,KAAK,KAAK,aAAa,QAAQ,KAAK;;;AAI5D,SAAO,MAAM;;CAGf,QAAQ,IAAoC;AAC1C,OAAK,SAAS,KAAK,GAAG;;CAGxB,MAAM,QAAuB;AAC3B,MAAI,KAAK,OAAQ;AAEjB,OAAK,SAAS;AAEd,OAAK,IAAI,IAAI,KAAK,SAAS,SAAS,GAAG,KAAK,GAAG,KAAK;GAClD,MAAM,UAAU,KAAK,SAAS;AAC9B,OAAI,QAAS,OAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA8BlC,SAAgB,YAAY,SAAyC;AACnE,QAAO,IAAI,UAAU,QAAQ;;;;;AC9mB/B,MAAa,UAAU"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pumped-fn/lite",
3
- "version": "0.1.0",
3
+ "version": "1.0.0",
4
4
  "description": "Lightweight dependency injection with minimal reactivity",
5
5
  "type": "module",
6
6
  "main": "./dist/index.cjs",