@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 +49 -1
- package/README.md +30 -3
- package/dist/index.cjs +96 -23
- package/dist/index.d.cts +25 -4
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +25 -4
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +96 -23
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
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
|
-
-
|
|
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.
|
|
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:
|
|
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
|
|
346
|
-
|
|
389
|
+
addListener(atom$1, event, listener) {
|
|
390
|
+
const listeners = this.getOrCreateEntry(atom$1).listeners.get(event);
|
|
391
|
+
listeners.add(listener);
|
|
347
392
|
return () => {
|
|
348
|
-
|
|
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)
|
|
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
|
|
414
|
-
|
|
415
|
-
|
|
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.
|
|
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
|
|
672
|
+
* @returns A Scope instance with a `ready` promise for extension initialization
|
|
604
673
|
*
|
|
605
674
|
* @example
|
|
606
675
|
* ```typescript
|
|
607
|
-
* const scope =
|
|
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
|
-
|
|
615
|
-
|
|
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
|
|
409
|
+
* @returns A Scope instance with a `ready` promise for extension initialization
|
|
395
410
|
*
|
|
396
411
|
* @example
|
|
397
412
|
* ```typescript
|
|
398
|
-
* const scope =
|
|
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):
|
|
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";
|
package/dist/index.d.cts.map
CHANGED
|
@@ -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
|
|
409
|
+
* @returns A Scope instance with a `ready` promise for extension initialization
|
|
395
410
|
*
|
|
396
411
|
* @example
|
|
397
412
|
* ```typescript
|
|
398
|
-
* const scope =
|
|
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):
|
|
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";
|
package/dist/index.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/symbols.ts","../src/types.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/index.ts"],"sourcesContent":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.mts","names":[],"sources":["../src/symbols.ts","../src/types.ts","../src/tag.ts","../src/atom.ts","../src/flow.ts","../src/preset.ts","../src/scope.ts","../src/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:
|
|
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
|
|
345
|
-
|
|
388
|
+
addListener(atom$1, event, listener) {
|
|
389
|
+
const listeners = this.getOrCreateEntry(atom$1).listeners.get(event);
|
|
390
|
+
listeners.add(listener);
|
|
346
391
|
return () => {
|
|
347
|
-
|
|
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)
|
|
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
|
|
413
|
-
|
|
414
|
-
|
|
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.
|
|
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
|
|
671
|
+
* @returns A Scope instance with a `ready` promise for extension initialization
|
|
603
672
|
*
|
|
604
673
|
* @example
|
|
605
674
|
* ```typescript
|
|
606
|
-
* const scope =
|
|
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
|
-
|
|
614
|
-
|
|
615
|
-
await scope.init();
|
|
616
|
-
return scope;
|
|
688
|
+
function createScope(options) {
|
|
689
|
+
return new ScopeImpl(options);
|
|
617
690
|
}
|
|
618
691
|
|
|
619
692
|
//#endregion
|
package/dist/index.mjs.map
CHANGED
|
@@ -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":"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"}
|