bansa 0.0.34 → 0.0.37

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -56,7 +56,7 @@ const $signalExample = $((_, { signal }) => {
56
56
 
57
57
  ##### 활성 상태로 유지하기
58
58
 
59
- `$`의 두 번째 파라미터로 옵션을 전달할 수 있습니다. 옵션 객체에서 `persist`가 `true`로 설정되어 있다면, 해당 객체는 한 번 활성화되면 다시 비활성화되지 않습니다. 활성 상태를 유지하려고 무의미한 구독을 추가하는 대신 사용할 수 있습니다.
59
+ `$`의 두 번째 파라미터로 옵션을 전달할 수 있습니다. 옵션 객체에서 `global`가 `true`로 설정되어 있다면, 해당 객체는 한 번 활성화되면 다시 비활성화되지 않습니다. 추가로 스코프에서도 새로 만들어지지 않는데, 자세한 설명은 생략합니다. 활성 상태를 유지하려고 무의미한 구독을 추가하는 대신 사용할 수 있습니다.
60
60
 
61
61
  값이 거의 바뀌지 않고, 언제든 다시 쓸 수 있게 준비해둬야 하는 경우 유용합니다. 대표적으론 정적인 에셋을 `fetch` 또는 `import`하는 상황이 있습니다.
62
62
 
package/dist/atom.d.mts CHANGED
@@ -19,13 +19,13 @@ type AtomInit<Value> = Value | AtomGetter<Value>;
19
19
  type AtomUpdater<Value> = Value | AtomReducer<Value>;
20
20
  type AtomInactiveState<Value> = {
21
21
  active: false;
22
- error: any;
22
+ error: unknown;
23
23
  promise: undefined;
24
24
  value?: Value;
25
25
  };
26
26
  type AtomPromiseState<Value> = {
27
27
  active: true;
28
- error: any;
28
+ error: unknown;
29
29
  promise: PromiseLike<Value>;
30
30
  value?: Value;
31
31
  };
@@ -37,7 +37,7 @@ type AtomSuccessState<Value> = {
37
37
  };
38
38
  type AtomErrorState<Value> = {
39
39
  active: true;
40
- error: any;
40
+ error: unknown;
41
41
  promise: undefined;
42
42
  value?: Value;
43
43
  };
@@ -48,6 +48,7 @@ type AtomSubscriberOptions = {
48
48
  type AtomGetter<Value> = (get: GetAtom, options: AtomGetOptions) => Value | PromiseLike<Value>;
49
49
  type AtomReducer<Value> = (value: Value) => Value;
50
50
  type AtomGetOptions = {
51
+ readonly $: CreateAtom;
51
52
  readonly signal: ThenableSignal;
52
53
  };
53
54
  type ThenableSignal = AbortSignal & {
@@ -64,7 +65,7 @@ type CreateAtom = {
64
65
  };
65
66
  type AtomOptions<Value> = {
66
67
  equals?: AtomEquals<Value>;
67
- persist?: boolean;
68
+ global?: boolean;
68
69
  eager?: boolean;
69
70
  gcDelay?: number;
70
71
  };
@@ -80,10 +81,10 @@ type AtomScope = {
80
81
  type SetLike<Key> = Key[] | Set<Key> | (Key extends object ? WeakSet<Key> : never);
81
82
  type MapLike<Key, Value> = Map<Key, Value> | (Key extends object ? WeakMap<Key, Value> : never) | (Key extends string | number | symbol ? Record<Key, Value> : never);
82
83
  declare const $: CreateAtom;
83
- declare const isAtom: (x: unknown) => x is Atom<any>;
84
- declare const isPrimitiveAtom: (x: unknown) => x is PrimitiveAtom<any>;
84
+ declare const isAtom: (x: unknown) => x is Atom<unknown>;
85
+ declare const isPrimitiveAtom: (x: unknown) => x is PrimitiveAtom<unknown>;
85
86
  type AtomValuePair<Value> = [Atom<Value>, Value | PrimitiveAtom<Value>] | [DerivedAtom<Value>, Value | Atom<Value>];
86
- declare const createScope: <T extends AtomValuePair<any>[]>(parentScope?: AtomScope | null, atomValuePairs?: T) => AtomScope;
87
+ declare const createScope: (parentScope?: AtomScope | null, atomValuePairs?: AtomValuePair<any>[]) => AtomScope;
87
88
  //#endregion
88
89
  export { $, Atom, AtomEquals, AtomErrorState, AtomGetOptions, AtomGetter, AtomInactiveState, AtomInit, AtomOptions, AtomPromiseState, AtomReducer, AtomScope, AtomState, AtomSubscribe, AtomSubscriberOptions, AtomSuccessState, AtomUpdater, AtomValuePair, AtomWatcher, CommonAtom, DerivedAtom, GetAtom, MapLike, PrimitiveAtom, SetLike, ThenableSignal, createScope, isAtom, isPrimitiveAtom };
89
90
  //# sourceMappingURL=atom.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"atom.d.mts","names":[],"sources":["../src/atom.ts"],"mappings":";KAAY,IAAA,UAAc,aAAA,CAAc,KAAA,IAAS,WAAA,CAAY,KAAA;AAAA,KACjD,UAAA;EAAA,SACD,GAAA,QAAW,KAAA;EAAA,SACX,KAAA,GAAQ,OAAA,EAAS,WAAA;EAAA,SACjB,SAAA,GAAY,UAAA,EAAY,aAAA,CAAc,KAAA;EAAA,SACtC,KAAA,EAAO,SAAA,CAAU,KAAA;AAAA;AAAA,KAEhB,aAAA,UAAuB,UAAA,CAAW,KAAA;EAAA,SACnC,GAAA,GAAM,KAAA,EAAO,WAAA,CAAY,KAAA;EAAA,SACzB,KAAA,EAAO,gBAAA,CAAiB,KAAA;AAAA;AAAA,KAEvB,WAAA,UAAqB,UAAA,CAAW,KAAA;EAAA,SACjC,OAAA;AAAA;AAAA,KAGC,WAAA;AAAA,KACA,aAAA,WAAwB,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,qBAAA;AAAA,KAC/C,QAAA,UAAkB,KAAA,GAAQ,UAAA,CAAW,KAAA;AAAA,KACrC,WAAA,UAAqB,KAAA,GAAQ,WAAA,CAAY,KAAA;AAAA,KAEzC,iBAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,KAAA;AAAA;AAAA,KAEE,gBAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA,EAAS,WAAA,CAAY,KAAA;EACrB,KAAA,GAAQ,KAAA;AAAA;AAAA,KAEE,gBAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA,EAAO,KAAA;AAAA;AAAA,KAEG,cAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,KAAA;AAAA;AAAA,KAEE,SAAA,UACR,iBAAA,CAAkB,KAAA,IAClB,gBAAA,CAAiB,KAAA,IACjB,cAAA,CAAe,KAAA,IACf,gBAAA,CAAiB,KAAA;AAAA,KAET,qBAAA;EAAA,SAAmC,MAAA,EAAQ,cAAA;AAAA;AAAA,KAC3C,UAAA,WACV,GAAA,EAAK,OAAA,EACL,OAAA,EAAS,cAAA,KACN,KAAA,GAAQ,WAAA,CAAY,KAAA;AAAA,KACb,WAAA,WAAsB,KAAA,EAAO,KAAA,KAAU,KAAA;AAAA,KAEvC,cAAA;EAAA,SAA4B,MAAA,EAAQ,cAAA;AAAA;AAAA,KACpC,cAAA,GAAiB,WAAA;EAAgB,IAAA,GAAO,CAAA;AAAA;AAAA,KAMxC,OAAA;EAAA,QACF,WAAA,EAAa,IAAA,CAAK,KAAA,GAAQ,KAAA,WAAgB,KAAA;EAAA,QAEhD,WAAA,EAAa,IAAA,CAAK,KAAA,GAClB,KAAA,SACC,gBAAA,CAAiB,KAAA,IAAS,cAAA,CAAe,KAAA,IAAS,gBAAA,CAAiB,KAAA;AAAA;AAAA,KAGnE,UAAA;EAAA,QACK,IAAA,EAAM,UAAA,CAAW,KAAA,GAAQ,OAAA,GAAU,WAAA,CAAY,KAAA,IAAS,WAAA,CAAY,KAAA;EAAA,QACpE,IAAA,EAAM,KAAA,EAAO,OAAA,GAAU,WAAA,CAAY,KAAA,IAAS,aAAA,CAAc,KAAA;EAAA,QAC1D,IAAA,EAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,GAAQ,OAAA,GAAU,WAAA,CAAY,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA;AAAA,KAEnE,WAAA;EACV,MAAA,GAAS,UAAA,CAAW,KAAA;EACpB,OAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,UAAA,WAAqB,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,KAAA;AAAA,KAC9C,SAAA;EAAA,QACF,QAAA,EAAU,aAAA,CAAc,KAAA,IAAS,aAAA,CAAc,KAAA;EAAA,QAC/C,QAAA,EAAU,WAAA,CAAY,KAAA,IAAS,WAAA,CAAY,KAAA;EAAA,QAC3C,QAAA,EAAU,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA;EAAA,QAC7B,QAAA,EAAU,aAAA,CAAc,KAAA,GAAQ,MAAA,SAAe,aAAA,CAAc,KAAA;EAAA,QAC7D,QAAA,EAAU,WAAA,CAAY,KAAA,GAAQ,MAAA,SAAe,WAAA,CAAY,KAAA;EAAA,QACzD,QAAA,EAAU,IAAA,CAAK,KAAA,GAAQ,MAAA,SAAe,IAAA,CAAK,KAAA;AAAA;AAAA,KAGzC,OAAA,QAAe,GAAA,KAAQ,GAAA,CAAI,GAAA,KAAQ,GAAA,kBAAqB,OAAA,CAAQ,GAAA;AAAA,KAChE,OAAA,eACR,GAAA,CAAI,GAAA,EAAK,KAAA,KACR,GAAA,kBAAqB,OAAA,CAAQ,GAAA,EAAK,KAAA,cAClC,GAAA,oCAAuC,MAAA,CAAO,GAAA,EAAK,KAAA;AAAA,cA+L3C,CAAA,EAAG,UAAA;AAAA,cAQH,MAAA,GAAU,CAAA,cAAa,CAAA,IAAK,IAAA;AAAA,cAE5B,eAAA,GAAmB,CAAA,cAAa,CAAA,IAAK,aAAA;AAAA,KAGtC,aAAA,WACP,IAAA,CAAK,KAAA,GAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA,MACnC,WAAA,CAAY,KAAA,GAAQ,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,cACzB,WAAA,aAAyB,aAAA,SACpC,WAAA,GAAc,SAAA,SACd,cAAA,GAAiB,CAAA,KAChB,SAAA"}
1
+ {"version":3,"file":"atom.d.mts","names":[],"sources":["../src/atom.ts"],"mappings":"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"}
package/dist/atom.mjs CHANGED
@@ -93,11 +93,14 @@ var DerivedAtomInternal = class extends CommonAtomInternal {
93
93
  this._init = init;
94
94
  this._equals = options?.equals;
95
95
  this._gcDelay = options?.gcDelay;
96
- this._persist = !!options?.persist;
96
+ this._global = !!options?.global;
97
97
  const self = this;
98
- this._options = { get signal() {
99
- return (self._ctrl ||= createThenableSignal()).signal;
100
- } };
98
+ this._options = {
99
+ $,
100
+ get signal() {
101
+ return (self._ctrl ||= createThenableSignal()).signal;
102
+ }
103
+ };
101
104
  this.state = {
102
105
  active: false,
103
106
  promise: void 0,
@@ -120,16 +123,22 @@ const isPrimitiveAtom = (x) => x instanceof PrimitiveAtomInternal;
120
123
  const createScope = (parentScope, atomValuePairs) => {
121
124
  const scopeMap = /* @__PURE__ */ new WeakMap();
122
125
  const atomMap = parentScope ? /* @__PURE__ */ new WeakMap() : scopeMap;
126
+ const inner$ = ((init, options) => scope($(init, options)));
123
127
  const scope = ((baseAtom, strict = false) => {
124
128
  let scopedAtom = scopeMap.get(baseAtom);
125
- if (!strict) scopedAtom ||= atomMap.get(baseAtom);
129
+ const scopedDerivedAtom = atomMap.get(baseAtom);
130
+ if (!strict || scopedDerivedAtom?._global) scopedAtom ||= scopedDerivedAtom;
126
131
  if (!scopedAtom) {
127
132
  const parentAtom = parentScope?.(baseAtom, true);
128
133
  if (strict) return parentAtom;
129
134
  const realBaseAtom = parentAtom || baseAtom;
130
- atomMap.set(baseAtom, scopedAtom = realBaseAtom._init instanceof Function ? $((get, options) => realBaseAtom._init((atom, watch) => get(scope(atom), watch), options), {
135
+ atomMap.set(baseAtom, scopedAtom = realBaseAtom._init instanceof Function ? $((get, options) => realBaseAtom._init((atom, watch) => get(scope(atom), watch), {
136
+ ...options,
137
+ $: inner$
138
+ }), {
131
139
  equals: realBaseAtom._equals,
132
- persist: realBaseAtom._persist
140
+ global: realBaseAtom._global,
141
+ gcDelay: realBaseAtom._gcDelay
133
142
  }) : parentAtom || $(realBaseAtom._init));
134
143
  }
135
144
  return scopedAtom;
@@ -352,7 +361,7 @@ const execute = (atom) => {
352
361
  let runningGc = false;
353
362
  let gcCandidates = /* @__PURE__ */ new Set();
354
363
  const disableAtom = (atom) => {
355
- if (!atom._source && !atom._persist && !atom._children?.size && !atom._watchers?.size && !atom._subscribers?.size) if (atom._gcDelay) setTimeout(() => {
364
+ if (!atom._source && !atom._global && !atom._children?.size && !atom._watchers?.size && !atom._subscribers?.size) if (atom._gcDelay) setTimeout(() => {
356
365
  gcCandidates.add(atom);
357
366
  gc();
358
367
  }, atom._gcDelay);
@@ -365,7 +374,7 @@ const disableAtom = (atom) => {
365
374
  }
366
375
  };
367
376
  const gc = () => {
368
- for (const atom of gcCandidates) if (!atom._source && !atom._persist && !atom._children?.size && !atom._watchers?.size && !atom._subscribers?.size) {
377
+ for (const atom of gcCandidates) if (!atom._source && !atom._global && !atom._children?.size && !atom._watchers?.size && !atom._subscribers?.size) {
369
378
  atom._ctrl?.abort();
370
379
  ++atom._counter;
371
380
  atom._nextValue = atom._nextError = atom.state.error = atom.state.value = atom.state.promise = atom._resolve = atom._reject = atom._ctrl = void 0;
package/dist/atom.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"atom.mjs","names":[],"sources":["../src/atom.ts"],"sourcesContent":["export type Atom<Value> = PrimitiveAtom<Value> | DerivedAtom<Value>;\nexport type CommonAtom<Value> = {\n readonly get: () => Value;\n readonly watch: (watcher: AtomWatcher) => () => void;\n readonly subscribe: (subscriber: AtomSubscribe<Value>) => () => void;\n readonly state: AtomState<Value>;\n};\nexport type PrimitiveAtom<Value> = CommonAtom<Value> & {\n readonly set: (value: AtomUpdater<Value>) => void;\n readonly state: AtomSuccessState<Value>;\n};\nexport type DerivedAtom<Value> = CommonAtom<Value> & {\n readonly refresh: () => void;\n};\n\nexport type AtomWatcher = () => void;\nexport type AtomSubscribe<Value> = (value: Value, options: AtomSubscriberOptions) => void;\nexport type AtomInit<Value> = Value | AtomGetter<Value>;\nexport type AtomUpdater<Value> = Value | AtomReducer<Value>;\n// TODO: readonly\nexport type AtomInactiveState<Value> = {\n active: false;\n error: any;\n promise: undefined;\n value?: Value;\n};\nexport type AtomPromiseState<Value> = {\n active: true;\n error: any;\n promise: PromiseLike<Value>;\n value?: Value;\n};\nexport type AtomSuccessState<Value> = {\n active: true;\n error: undefined;\n promise: undefined;\n value: Value;\n};\nexport type AtomErrorState<Value> = {\n active: true;\n error: any;\n promise: undefined;\n value?: Value;\n};\nexport type AtomState<Value> =\n | AtomInactiveState<Value>\n | AtomPromiseState<Value>\n | AtomErrorState<Value>\n | AtomSuccessState<Value>;\n\nexport type AtomSubscriberOptions = { readonly signal: ThenableSignal };\nexport type AtomGetter<Value> = (\n get: GetAtom,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\nexport type AtomReducer<Value> = (value: Value) => Value;\n\nexport type AtomGetOptions = { readonly signal: ThenableSignal };\nexport type ThenableSignal = AbortSignal & { then: (f: () => void) => void };\ntype ThenableSignalController = {\n abort: () => void;\n signal: ThenableSignal;\n};\n\nexport type GetAtom = {\n <Value>(anotherAtom: Atom<Value>, watch?: false): Value;\n <Value>(\n anotherAtom: Atom<Value>,\n watch: true,\n ): AtomPromiseState<Value> | AtomErrorState<Value> | AtomSuccessState<Value>;\n};\n\ntype CreateAtom = {\n <Value>(init: AtomGetter<Value>, options?: AtomOptions<Value>): DerivedAtom<Value>;\n <Value>(init: Value, options?: AtomOptions<Value>): PrimitiveAtom<Value>;\n <Value>(init: Value | AtomGetter<Value>, options?: AtomOptions<Value>): Atom<Value>;\n};\nexport type AtomOptions<Value> = {\n equals?: AtomEquals<Value>;\n persist?: boolean;\n eager?: boolean;\n gcDelay?: number;\n};\n\nexport type AtomEquals<Value> = (value: Value, prevValue: Value) => boolean;\nexport type AtomScope = {\n <Value>(baseAtom: PrimitiveAtom<Value>): PrimitiveAtom<Value>;\n <Value>(baseAtom: DerivedAtom<Value>): DerivedAtom<Value>;\n <Value>(baseAtom: Atom<Value>): Atom<Value>;\n <Value>(baseAtom: PrimitiveAtom<Value>, strict: true): PrimitiveAtom<Value> | undefined;\n <Value>(baseAtom: DerivedAtom<Value>, strict: true): DerivedAtom<Value> | undefined;\n <Value>(baseAtom: Atom<Value>, strict: true): Atom<Value> | undefined;\n};\n\nexport type SetLike<Key> = Key[] | Set<Key> | (Key extends object ? WeakSet<Key> : never);\nexport type MapLike<Key, Value> =\n | Map<Key, Value>\n | (Key extends object ? WeakMap<Key, Value> : never)\n | (Key extends string | number | symbol ? Record<Key, Value> : never);\n\ntype GetAtomInternal = <Value>(anotherAtom: AtomInternal<Value>) => Value;\ntype AtomGetterInternal<Value> = (\n get: GetAtomInternal,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\ntype AtomSubscribeInternal<Value> = {\n _subscriber: AtomSubscribe<Value>;\n _options: AtomSubscriberOptions;\n _ctrl?: ThenableSignalController;\n};\n\ntype AtomInternal<Value> = PrimitiveAtomInternal<Value> | DerivedAtomInternal<Value>;\n\nabstract class CommonAtomInternal<Value> {\n _nextValue: Value | undefined;\n _nextError: any | undefined;\n _children: Set<DerivedAtomInternal<any>> | undefined;\n _wchildren: Set<DerivedAtomInternal<any>> | undefined;\n _watchers: Set<AtomWatcher> | undefined;\n _subscribers: Set<AtomSubscribeInternal<Value>> | undefined;\n _valueChanged = true;\n\n abstract readonly _source: boolean;\n abstract _needExecute: boolean;\n abstract _needPropagate: boolean;\n abstract _marked: boolean;\n abstract _resolve: ((value: Value) => void) | undefined;\n abstract _reject: ((reason: any) => void) | undefined;\n\n abstract readonly _init: Value | AtomGetterInternal<Value>;\n abstract readonly _equals: AtomEquals<Value> | undefined;\n\n abstract readonly state: AtomState<Value>;\n\n get(): Value {\n if (!this.state.active) {\n execute(this as unknown as DerivedAtomInternal<Value>);\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n if (this.state.promise) throw this.state.promise;\n if (this.state.error) throw this.state.error;\n return this.state.value!;\n }\n\n watch(watcher: AtomWatcher): () => void {\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n }\n (this._watchers ||= new Set()).add(watcher);\n return () => {\n this._watchers!.delete(watcher);\n if (!this._watchers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n subscribe(subscriber: AtomSubscribe<Value>): () => void {\n const atomSubscriber: AtomSubscribeInternal<Value> = {\n _subscriber: subscriber,\n _options: {\n get signal() {\n return (atomSubscriber._ctrl ||= createThenableSignal()).signal;\n },\n },\n };\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n } else if (!this.state.error && !this.state.promise) {\n try {\n subscriber(this.state.value!, atomSubscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n (this._subscribers ||= new Set()).add(atomSubscriber);\n return () => {\n this._subscribers!.delete(atomSubscriber);\n if (atomSubscriber._ctrl) {\n atomSubscriber._ctrl.abort();\n atomSubscriber._ctrl = undefined;\n }\n if (!this._subscribers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n [Symbol.toPrimitive](): Value | undefined {\n return this.state.value;\n }\n}\n\nclass PrimitiveAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: true;\n declare readonly _needExecute: false;\n _needPropagate: boolean = false;\n _marked: boolean = false;\n\n declare readonly _init: Value;\n declare readonly _equals: AtomEquals<Value> | undefined;\n\n declare state: AtomSuccessState<Value>;\n declare _hasValue: true;\n declare _nextValue: Value;\n declare _nextError: undefined;\n declare _resolve: undefined;\n declare _reject: undefined;\n\n constructor(init: Value, options?: AtomOptions<Value>) {\n super();\n this._nextValue = this._init = init;\n this._equals = options?.equals;\n this.state = {\n active: true,\n promise: undefined,\n error: undefined,\n value: init,\n };\n }\n\n set(this: PrimitiveAtomInternal<Value>, value: AtomUpdater<Value>) {\n const nextValue = value instanceof Function ? value(this._nextValue!) : value;\n if (!Object.is(nextValue, this._nextValue)) {\n this._nextValue = nextValue;\n requestPropagate(this);\n }\n }\n}\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._source = true;\nPrimitiveAtomInternal.prototype._hasValue = true;\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._needExecute = false;\n\nclass DerivedAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: false;\n\n _hasValue = false;\n _needExecute = false;\n _needPropagate = false;\n _marked = false;\n\n _counter = 0;\n _resolve: ((value: Value) => void) | undefined;\n _reject: ((reason: any) => void) | undefined;\n _ctrl: ThenableSignalController | undefined;\n _dependencies: Set<AtomInternal<any>> | undefined;\n _wdependencies: Set<AtomInternal<any>> | undefined;\n _allDependencies: Set<AtomInternal<any>> | undefined;\n\n declare readonly _init: AtomGetterInternal<Value>;\n declare readonly _equals: AtomEquals<Value> | undefined;\n declare readonly _gcDelay: number | undefined;\n declare readonly _persist: boolean;\n declare readonly _options: AtomGetOptions;\n\n declare state: AtomState<Value>;\n\n constructor(init: AtomGetter<Value>, options?: AtomOptions<Value>) {\n super();\n this._init = init as AtomGetterInternal<Value>;\n this._equals = options?.equals;\n this._gcDelay = options?.gcDelay;\n this._persist = !!options?.persist;\n\n const self = this;\n this._options = {\n get signal() {\n return (self._ctrl ||= createThenableSignal()).signal;\n },\n };\n\n this.state = {\n active: false,\n promise: undefined,\n error: undefined,\n value: undefined,\n };\n }\n\n refresh() {\n this._needExecute = true;\n requestPropagate(this);\n }\n}\n// @ts-expect-error\nDerivedAtomInternal.prototype._source = false;\n\nexport const $: CreateAtom = <Value>(\n init: Value | AtomGetter<Value>,\n options?: AtomOptions<Value>,\n) => {\n if (init instanceof Function) return new DerivedAtomInternal(init, options);\n return new PrimitiveAtomInternal(init, options) as any;\n};\n\nexport const isAtom = (x: unknown): x is Atom<any> => x instanceof CommonAtomInternal;\n\nexport const isPrimitiveAtom = (x: unknown): x is PrimitiveAtom<any> =>\n x instanceof PrimitiveAtomInternal;\n\nexport type AtomValuePair<Value> =\n | [Atom<Value>, Value | PrimitiveAtom<Value>]\n | [DerivedAtom<Value>, Value | Atom<Value>];\nexport const createScope = <T extends AtomValuePair<any>[]>(\n parentScope?: AtomScope | null,\n atomValuePairs?: T,\n): AtomScope => {\n const scopeMap = new WeakMap<Atom<any>, Atom<any>>();\n const atomMap = parentScope ? new WeakMap<Atom<any>, Atom<any>>() : scopeMap;\n const scope = (<T extends Atom<any>>(baseAtom: T, strict = false) => {\n let scopedAtom = scopeMap.get(baseAtom);\n if (!strict) scopedAtom ||= atomMap.get(baseAtom);\n // TODO: 현재 스코프마다 사용되는 모든 아톰을 저장해서 메모리 사용이 비효율적인데 해결할 수 있을까?\n // 의존성이 동적이라 많이 어렵다\n if (!scopedAtom) {\n const parentAtom = parentScope?.(baseAtom, true);\n if (strict) return parentAtom;\n const realBaseAtom = parentAtom || baseAtom;\n atomMap.set(\n baseAtom,\n (scopedAtom = (\n (realBaseAtom as AtomInternal<never>)._init instanceof Function\n ? $(\n (get, options) =>\n (realBaseAtom as AtomInternal<never>)._init(\n (atom, watch?: boolean) => get(scope(atom), watch as false),\n options,\n ),\n {\n equals: (realBaseAtom as AtomInternal<never>)._equals,\n persist: (realBaseAtom as DerivedAtomInternal<never>)._persist,\n },\n )\n : // baseAtom을 전달하지 않고 새로 생성하는 이유는 SSR 등에서 사용자 간 상태 공유를 막기 위함\n parentAtom || $((realBaseAtom as AtomInternal<any>)._init)\n ) as T),\n );\n }\n return scopedAtom;\n }) as AtomScope;\n if (atomValuePairs) {\n for (const [atom, value] of atomValuePairs) {\n scopeMap.set(atom, isAtom(value) ? (parentScope || scope)(value) : $(value));\n }\n }\n return scope;\n};\n\nlet pendingUpdateAtoms = false;\nlet updateQueue: AtomInternal<any>[] = [];\nlet stack: AtomInternal<any>[] = [];\nconst requestActivate = <Value>(atom: DerivedAtomInternal<Value>) => {\n if (!atom._needExecute) {\n atom._needExecute = true;\n requestPropagate(atom);\n }\n};\nconst requestPropagate = <Value>(atom: AtomInternal<Value>) => {\n if (!atom._needPropagate) {\n atom._needPropagate = true;\n updateQueue.push(atom);\n if (!pendingUpdateAtoms) {\n pendingUpdateAtoms = true;\n queueMicrotask(updateAtoms);\n }\n }\n};\nconst updateAtoms = () => {\n pendingUpdateAtoms = false;\n {\n const updatedAtoms = updateQueue;\n updateQueue = [];\n for (const atom of updatedAtoms) {\n if (atom.state.active) {\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n if ((atom.state.error = atom._nextError)) {\n atom._nextValue = atom.state.value;\n if (atom._reject) {\n atom._reject(atom._nextError);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n } else {\n if (\n !atom._hasValue ||\n (!Object.is(atom._nextValue, atom.state.value) &&\n !atom._equals?.(atom._nextValue, atom.state.value!))\n ) {\n atom.state.value = atom._nextValue;\n atom._valueChanged = atom._hasValue = true;\n } else {\n atom._nextValue = atom.state.value;\n if (prevSuccess) {\n atom._needPropagate = false;\n continue;\n }\n }\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n mark(atom);\n }\n }\n const markedAtoms = stack;\n stack = [];\n for (let i = markedAtoms.length; i--; ) {\n const atom = markedAtoms[i]!;\n atom._marked = false;\n if (atom._needExecute) {\n atom._needPropagate = true;\n execute(atom);\n }\n if (atom._needPropagate) {\n propagate(atom);\n }\n }\n};\nconst propagate = <Value>(atom: AtomInternal<Value>) => {\n atom._needPropagate = false;\n if (atom._watchers) {\n for (const watcher of atom._watchers) {\n try {\n watcher();\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._wchildren) {\n for (const wchild of atom._wchildren) {\n wchild._needExecute = true;\n }\n }\n if (atom.state.promise) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.promise ||= new Promise((resolve, reject) => {\n child._resolve = resolve;\n child._reject = reject;\n });\n child._needPropagate = true;\n }\n }\n } else if (atom.state.error) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.error = child._nextError = atom.state.error;\n if (child._reject) {\n child._reject(child._nextError);\n child._resolve = child._reject = child.state.promise = undefined;\n }\n child._needPropagate = true;\n }\n }\n } else {\n if (atom._valueChanged && atom._subscribers) {\n for (const subscriber of atom._subscribers) {\n if (subscriber._ctrl) {\n subscriber._ctrl.abort();\n subscriber._ctrl = undefined;\n }\n try {\n subscriber._subscriber(atom.state.value!, subscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._children) {\n for (const child of atom._children) {\n child._needExecute = true;\n }\n }\n }\n atom._valueChanged = false;\n};\nconst mark = (atom: AtomInternal<any>) => {\n if (!atom._marked) {\n atom._marked = true;\n if (atom._children) {\n for (const child of atom._children) {\n mark(child);\n }\n }\n if (atom._wchildren) {\n for (const child of atom._wchildren) {\n mark(child);\n }\n }\n stack.push(atom);\n }\n};\n\nclass Wrapped {\n e: unknown;\n constructor(e: unknown) {\n this.e = e;\n }\n}\nconst expired = Symbol();\nconst loading = Symbol();\nconst execute = <Value>(atom: DerivedAtomInternal<Value>) => {\n const counter = ++atom._counter;\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n\n atom.state.active = true;\n atom._needExecute = false;\n\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._wdependencies.clear();\n }\n if (atom._ctrl) {\n atom._ctrl.abort();\n atom._ctrl = undefined;\n }\n\n try {\n const value = atom._init(<V>(anotherAtom: AtomInternal<V>, watch = false) => {\n if (counter !== atom._counter) throw expired;\n\n if ((atom as unknown) !== anotherAtom) {\n if (!anotherAtom.state.active) {\n execute(anotherAtom as DerivedAtomInternal<V>);\n }\n (atom._allDependencies ||= new Set()).add(anotherAtom);\n if (watch) {\n atom._dependencies?.delete(anotherAtom);\n (atom._wdependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._wchildren ||= new Set()).add(atom);\n } else if (!atom._wdependencies?.has(anotherAtom)) {\n (atom._dependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._children ||= new Set()).add(atom);\n }\n }\n\n const { state } = anotherAtom;\n if (watch) return state as V;\n if (state.promise) throw loading;\n if (state.error) throw new Wrapped(state.error);\n return state.value as V;\n }, atom._options);\n\n if (isPromiseLike(value)) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n value.then(\n (value) => {\n if (counter === atom._counter) {\n ++atom._counter;\n if (!atom._hasValue || !Object.is(value, atom._nextValue!)) atom._nextValue = value;\n atom._nextError = undefined;\n requestPropagate(atom);\n }\n },\n (e) => {\n if (counter === atom._counter && e !== expired) {\n ++atom._counter;\n if (e !== loading) {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom._nextError = e;\n requestPropagate(atom);\n }\n }\n },\n );\n } else {\n ++atom._counter;\n if (\n !atom._hasValue ||\n (!Object.is(value, atom._nextValue) && !atom._equals?.(value, atom._nextValue!))\n ) {\n atom.state.value = atom._nextValue = value;\n atom._valueChanged = atom._hasValue = true;\n } else if (prevSuccess) {\n atom._needPropagate = false;\n }\n atom.state.error = atom._nextError = undefined;\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n } catch (e) {\n // assert(e !== expired);\n ++atom._counter;\n if (e === loading) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n } else {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom.state.error = atom._nextError = e;\n if (atom._reject) {\n atom._reject(e);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n};\n\nlet runningGc = false;\nlet gcCandidates: Set<DerivedAtomInternal<any>> = new Set();\nconst disableAtom = <Value>(atom: AtomInternal<Value>) => {\n if (\n !atom._source &&\n !atom._persist &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n if (atom._gcDelay) {\n setTimeout(() => {\n gcCandidates.add(atom);\n gc();\n }, atom._gcDelay);\n } else {\n gcCandidates.add(atom);\n if (!runningGc) {\n runningGc = true;\n setTimeout(gc, 0);\n }\n }\n }\n};\nconst gc = () => {\n for (const atom of gcCandidates) {\n if (\n !atom._source &&\n !atom._persist &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n atom._ctrl?.abort();\n // atom._reject?.(null);\n ++atom._counter;\n atom._nextValue =\n atom._nextError =\n atom.state.error =\n atom.state.value =\n atom.state.promise =\n atom._resolve =\n atom._reject =\n atom._ctrl =\n undefined;\n atom._needPropagate = atom._needExecute = atom._hasValue = atom.state.active = false;\n atom._valueChanged = atom._source;\n if (atom._allDependencies) {\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n }\n atom._wdependencies.clear();\n }\n for (const dep of atom._allDependencies) {\n disableAtom(dep);\n }\n atom._allDependencies.clear();\n }\n }\n }\n gcCandidates.clear();\n runningGc = false;\n};\n\nconst isPromiseLike = (x: unknown): x is PromiseLike<any> =>\n typeof (x as PromiseLike<any>)?.then === \"function\";\n\nconst createThenableSignal = () => {\n const ctrl = new AbortController();\n const signal = ctrl.signal as ThenableSignal;\n const promise = new Promise((resolve) => {\n signal.then = (f: () => void) => promise.then(f);\n signal.addEventListener(\"abort\", resolve, {\n once: true,\n passive: true,\n });\n });\n return {\n abort: () => ctrl.abort(),\n signal,\n };\n};\n\nconst logError = (e: unknown) => {\n // Chrome's console.error doesn't follow the stack trace of the given Error\n queueMicrotask(() => {\n throw e;\n });\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"atom.mjs","names":[],"sources":["../src/atom.ts"],"sourcesContent":["export type Atom<Value> = PrimitiveAtom<Value> | DerivedAtom<Value>;\nexport type CommonAtom<Value> = {\n readonly get: () => Value;\n readonly watch: (watcher: AtomWatcher) => () => void;\n readonly subscribe: (subscriber: AtomSubscribe<Value>) => () => void;\n readonly state: AtomState<Value>;\n};\nexport type PrimitiveAtom<Value> = CommonAtom<Value> & {\n readonly set: (value: AtomUpdater<Value>) => void;\n readonly state: AtomSuccessState<Value>;\n};\nexport type DerivedAtom<Value> = CommonAtom<Value> & {\n readonly refresh: () => void;\n};\n\nexport type AtomWatcher = () => void;\nexport type AtomSubscribe<Value> = (value: Value, options: AtomSubscriberOptions) => void;\nexport type AtomInit<Value> = Value | AtomGetter<Value>;\nexport type AtomUpdater<Value> = Value | AtomReducer<Value>;\n// TODO: readonly\nexport type AtomInactiveState<Value> = {\n active: false;\n error: unknown;\n promise: undefined;\n value?: Value;\n};\nexport type AtomPromiseState<Value> = {\n active: true;\n error: unknown;\n promise: PromiseLike<Value>;\n value?: Value;\n};\nexport type AtomSuccessState<Value> = {\n active: true;\n error: undefined;\n promise: undefined;\n value: Value;\n};\nexport type AtomErrorState<Value> = {\n active: true;\n error: unknown;\n promise: undefined;\n value?: Value;\n};\nexport type AtomState<Value> =\n | AtomInactiveState<Value>\n | AtomPromiseState<Value>\n | AtomErrorState<Value>\n | AtomSuccessState<Value>;\n\nexport type AtomSubscriberOptions = { readonly signal: ThenableSignal };\nexport type AtomGetter<Value> = (\n get: GetAtom,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\nexport type AtomReducer<Value> = (value: Value) => Value;\n\nexport type AtomGetOptions = {\n readonly $: CreateAtom;\n readonly signal: ThenableSignal;\n};\nexport type ThenableSignal = AbortSignal & { then: (f: () => void) => void };\ntype ThenableSignalController = {\n abort: () => void;\n signal: ThenableSignal;\n};\n\nexport type GetAtom = {\n <Value>(anotherAtom: Atom<Value>, watch?: false): Value;\n <Value>(\n anotherAtom: Atom<Value>,\n watch: true,\n ): AtomPromiseState<Value> | AtomErrorState<Value> | AtomSuccessState<Value>;\n};\n\ntype CreateAtom = {\n <Value>(init: AtomGetter<Value>, options?: AtomOptions<Value>): DerivedAtom<Value>;\n <Value>(init: Value, options?: AtomOptions<Value>): PrimitiveAtom<Value>;\n <Value>(init: Value | AtomGetter<Value>, options?: AtomOptions<Value>): Atom<Value>;\n};\nexport type AtomOptions<Value> = {\n equals?: AtomEquals<Value>;\n global?: boolean;\n eager?: boolean;\n gcDelay?: number;\n};\n\nexport type AtomEquals<Value> = (value: Value, prevValue: Value) => boolean;\nexport type AtomScope = {\n <Value>(baseAtom: PrimitiveAtom<Value>): PrimitiveAtom<Value>;\n <Value>(baseAtom: DerivedAtom<Value>): DerivedAtom<Value>;\n <Value>(baseAtom: Atom<Value>): Atom<Value>;\n <Value>(baseAtom: PrimitiveAtom<Value>, strict: true): PrimitiveAtom<Value> | undefined;\n <Value>(baseAtom: DerivedAtom<Value>, strict: true): DerivedAtom<Value> | undefined;\n <Value>(baseAtom: Atom<Value>, strict: true): Atom<Value> | undefined;\n};\n\nexport type SetLike<Key> = Key[] | Set<Key> | (Key extends object ? WeakSet<Key> : never);\nexport type MapLike<Key, Value> =\n | Map<Key, Value>\n | (Key extends object ? WeakMap<Key, Value> : never)\n | (Key extends string | number | symbol ? Record<Key, Value> : never);\n\ntype GetAtomInternal = <Value>(anotherAtom: AtomInternal<Value>) => Value;\ntype AtomGetterInternal<Value> = (\n get: GetAtomInternal,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\ntype AtomSubscribeInternal<Value> = {\n _subscriber: AtomSubscribe<Value>;\n _options: AtomSubscriberOptions;\n _ctrl?: ThenableSignalController;\n};\n\ntype AtomInternal<Value> = PrimitiveAtomInternal<Value> | DerivedAtomInternal<Value>;\n\nabstract class CommonAtomInternal<Value> {\n _nextValue: Value | undefined;\n _nextError: unknown | undefined;\n _children: Set<DerivedAtomInternal<any>> | undefined;\n _wchildren: Set<DerivedAtomInternal<any>> | undefined;\n _watchers: Set<AtomWatcher> | undefined;\n _subscribers: Set<AtomSubscribeInternal<Value>> | undefined;\n _valueChanged = true;\n\n abstract readonly _source: boolean;\n abstract _needExecute: boolean;\n abstract _needPropagate: boolean;\n abstract _marked: boolean;\n abstract _resolve: ((value: Value) => void) | undefined;\n abstract _reject: ((reason: unknown) => void) | undefined;\n\n abstract readonly _init: Value | AtomGetterInternal<Value>;\n abstract readonly _equals: AtomEquals<Value> | undefined;\n\n abstract readonly state: AtomState<Value>;\n\n get(): Value {\n if (!this.state.active) {\n execute(this as unknown as DerivedAtomInternal<Value>);\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n if (this.state.promise) throw this.state.promise;\n if (this.state.error) throw this.state.error;\n return this.state.value!;\n }\n\n watch(watcher: AtomWatcher): () => void {\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n }\n (this._watchers ||= new Set()).add(watcher);\n return () => {\n this._watchers!.delete(watcher);\n if (!this._watchers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n subscribe(subscriber: AtomSubscribe<Value>): () => void {\n const atomSubscriber: AtomSubscribeInternal<Value> = {\n _subscriber: subscriber,\n _options: {\n get signal() {\n return (atomSubscriber._ctrl ||= createThenableSignal()).signal;\n },\n },\n };\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n } else if (!this.state.error && !this.state.promise) {\n try {\n subscriber(this.state.value!, atomSubscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n (this._subscribers ||= new Set()).add(atomSubscriber);\n return () => {\n this._subscribers!.delete(atomSubscriber);\n if (atomSubscriber._ctrl) {\n atomSubscriber._ctrl.abort();\n atomSubscriber._ctrl = undefined;\n }\n if (!this._subscribers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n [Symbol.toPrimitive](): Value | undefined {\n return this.state.value;\n }\n}\n\nclass PrimitiveAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: true;\n declare readonly _needExecute: false;\n _needPropagate: boolean = false;\n _marked: boolean = false;\n\n declare readonly _init: Value;\n declare readonly _equals: AtomEquals<Value> | undefined;\n\n declare state: AtomSuccessState<Value>;\n declare _hasValue: true;\n declare _nextValue: Value;\n declare _nextError: undefined;\n declare _resolve: undefined;\n declare _reject: undefined;\n\n constructor(init: Value, options?: AtomOptions<Value>) {\n super();\n this._nextValue = this._init = init;\n this._equals = options?.equals;\n this.state = {\n active: true,\n promise: undefined,\n error: undefined,\n value: init,\n };\n }\n\n set(this: PrimitiveAtomInternal<Value>, value: AtomUpdater<Value>) {\n const nextValue = value instanceof Function ? value(this._nextValue!) : value;\n if (!Object.is(nextValue, this._nextValue)) {\n this._nextValue = nextValue;\n requestPropagate(this);\n }\n }\n}\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._source = true;\nPrimitiveAtomInternal.prototype._hasValue = true;\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._needExecute = false;\n\nclass DerivedAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: false;\n\n _hasValue = false;\n _needExecute = false;\n _needPropagate = false;\n _marked = false;\n\n _counter = 0;\n _resolve: ((value: Value) => void) | undefined;\n _reject: ((reason: unknown) => void) | undefined;\n _ctrl: ThenableSignalController | undefined;\n _dependencies: Set<AtomInternal<any>> | undefined;\n _wdependencies: Set<AtomInternal<any>> | undefined;\n _allDependencies: Set<AtomInternal<any>> | undefined;\n\n declare readonly _init: AtomGetterInternal<Value>;\n declare readonly _equals: AtomEquals<Value> | undefined;\n declare readonly _gcDelay: number | undefined;\n declare readonly _global: boolean;\n declare readonly _options: AtomGetOptions;\n\n declare state: AtomState<Value>;\n\n constructor(init: AtomGetter<Value>, options?: AtomOptions<Value>) {\n super();\n this._init = init as AtomGetterInternal<Value>;\n this._equals = options?.equals;\n this._gcDelay = options?.gcDelay;\n this._global = !!options?.global;\n\n const self = this;\n this._options = {\n $,\n get signal() {\n return (self._ctrl ||= createThenableSignal()).signal;\n },\n };\n\n this.state = {\n active: false,\n promise: undefined,\n error: undefined,\n value: undefined,\n };\n }\n\n refresh() {\n this._needExecute = true;\n requestPropagate(this);\n }\n}\n// @ts-expect-error\nDerivedAtomInternal.prototype._source = false;\n\nexport const $: CreateAtom = <Value>(\n init: Value | AtomGetter<Value>,\n options?: AtomOptions<Value>,\n) => {\n if (init instanceof Function) return new DerivedAtomInternal(init, options);\n return new PrimitiveAtomInternal(init, options) as any;\n};\n\nexport const isAtom = (x: unknown): x is Atom<unknown> => x instanceof CommonAtomInternal;\n\nexport const isPrimitiveAtom = (x: unknown): x is PrimitiveAtom<unknown> =>\n x instanceof PrimitiveAtomInternal;\n\nexport type AtomValuePair<Value> =\n | [Atom<Value>, Value | PrimitiveAtom<Value>]\n | [DerivedAtom<Value>, Value | Atom<Value>];\nexport const createScope = (\n parentScope?: AtomScope | null,\n atomValuePairs?: AtomValuePair<any>[],\n): AtomScope => {\n const scopeMap = new WeakMap<Atom<unknown>, Atom<unknown>>();\n const atomMap = parentScope ? new WeakMap<Atom<unknown>, Atom<unknown>>() : scopeMap;\n // TODO: scope와 inner$를 잘 통편합할 수 있는 방법이 있는지 고민하기\n const inner$ = ((init, options) => scope($(init, options))) as CreateAtom;\n const scope = (<T extends Atom<unknown>>(baseAtom: T, strict = false) => {\n let scopedAtom = scopeMap.get(baseAtom);\n const scopedDerivedAtom = atomMap.get(baseAtom);\n if (!strict || (scopedDerivedAtom as DerivedAtomInternal<never> | undefined)?._global) scopedAtom ||= scopedDerivedAtom;\n // TODO: 현재 스코프마다 사용되는 모든 아톰을 저장해서 메모리 사용이 비효율적인데 해결할 수 있을까?\n // 의존성이 동적이라 많이 어렵다\n if (!scopedAtom) {\n const parentAtom = parentScope?.(baseAtom, true);\n if (strict) return parentAtom;\n const realBaseAtom = parentAtom || baseAtom;\n atomMap.set(\n baseAtom,\n (scopedAtom = (\n (realBaseAtom as AtomInternal<never>)._init instanceof Function\n ? $(\n (get, options) =>\n (realBaseAtom as AtomInternal<never>)._init(\n (atom, watch?: boolean) => get(scope(atom), watch as false),\n {\n ...options,\n $: inner$,\n },\n ),\n {\n equals: (realBaseAtom as AtomInternal<never>)._equals,\n global: (realBaseAtom as DerivedAtomInternal<never>)._global,\n gcDelay: (realBaseAtom as DerivedAtomInternal<never>)._gcDelay,\n },\n )\n : // baseAtom을 전달하지 않고 새로 생성하는 이유는 SSR 등에서 사용자 간 상태 공유를 막기 위함\n parentAtom || $((realBaseAtom as AtomInternal<unknown>)._init)\n ) as T),\n );\n }\n return scopedAtom;\n }) as AtomScope;\n if (atomValuePairs) {\n for (const [atom, value] of atomValuePairs) {\n scopeMap.set(atom, isAtom(value) ? (parentScope || scope)(value) : $(value));\n }\n }\n return scope;\n};\n\nlet pendingUpdateAtoms = false;\nlet updateQueue: AtomInternal<any>[] = [];\nlet stack: AtomInternal<unknown>[] = [];\nconst requestActivate = <Value>(atom: DerivedAtomInternal<Value>) => {\n if (!atom._needExecute) {\n atom._needExecute = true;\n requestPropagate(atom);\n }\n};\nconst requestPropagate = <Value>(atom: AtomInternal<Value>) => {\n if (!atom._needPropagate) {\n atom._needPropagate = true;\n updateQueue.push(atom);\n if (!pendingUpdateAtoms) {\n pendingUpdateAtoms = true;\n queueMicrotask(updateAtoms);\n }\n }\n};\nconst updateAtoms = () => {\n pendingUpdateAtoms = false;\n {\n const updatedAtoms = updateQueue;\n updateQueue = [];\n for (const atom of updatedAtoms) {\n if (atom.state.active) {\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n if ((atom.state.error = atom._nextError)) {\n atom._nextValue = atom.state.value;\n if (atom._reject) {\n atom._reject(atom._nextError);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n } else {\n if (\n !atom._hasValue ||\n (!Object.is(atom._nextValue, atom.state.value) &&\n !atom._equals?.(atom._nextValue, atom.state.value!))\n ) {\n atom.state.value = atom._nextValue;\n atom._valueChanged = atom._hasValue = true;\n } else {\n atom._nextValue = atom.state.value;\n if (prevSuccess) {\n atom._needPropagate = false;\n continue;\n }\n }\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n mark(atom);\n }\n }\n const markedAtoms = stack;\n stack = [];\n for (let i = markedAtoms.length; i--; ) {\n const atom = markedAtoms[i]!;\n atom._marked = false;\n if (atom._needExecute) {\n atom._needPropagate = true;\n execute(atom);\n }\n if (atom._needPropagate) {\n propagate(atom);\n }\n }\n};\nconst propagate = <Value>(atom: AtomInternal<Value>) => {\n atom._needPropagate = false;\n if (atom._watchers) {\n for (const watcher of atom._watchers) {\n try {\n watcher();\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._wchildren) {\n for (const wchild of atom._wchildren) {\n wchild._needExecute = true;\n }\n }\n if (atom.state.promise) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.promise ||= new Promise((resolve, reject) => {\n child._resolve = resolve;\n child._reject = reject;\n });\n child._needPropagate = true;\n }\n }\n } else if (atom.state.error) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.error = child._nextError = atom.state.error;\n if (child._reject) {\n child._reject(child._nextError);\n child._resolve = child._reject = child.state.promise = undefined;\n }\n child._needPropagate = true;\n }\n }\n } else {\n if (atom._valueChanged && atom._subscribers) {\n for (const subscriber of atom._subscribers) {\n if (subscriber._ctrl) {\n subscriber._ctrl.abort();\n subscriber._ctrl = undefined;\n }\n try {\n subscriber._subscriber(atom.state.value!, subscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._children) {\n for (const child of atom._children) {\n child._needExecute = true;\n }\n }\n }\n atom._valueChanged = false;\n};\nconst mark = (atom: AtomInternal<unknown>) => {\n if (!atom._marked) {\n atom._marked = true;\n if (atom._children) {\n for (const child of atom._children) {\n mark(child);\n }\n }\n if (atom._wchildren) {\n for (const child of atom._wchildren) {\n mark(child);\n }\n }\n stack.push(atom);\n }\n};\n\nclass Wrapped {\n e: unknown;\n constructor(e: unknown) {\n this.e = e;\n }\n}\nconst expired = Symbol();\nconst loading = Symbol();\nconst execute = <Value>(atom: DerivedAtomInternal<Value>) => {\n const counter = ++atom._counter;\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n\n atom.state.active = true;\n atom._needExecute = false;\n\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._wdependencies.clear();\n }\n if (atom._ctrl) {\n atom._ctrl.abort();\n atom._ctrl = undefined;\n }\n\n try {\n const value = atom._init(<V>(anotherAtom: AtomInternal<V>, watch = false) => {\n if (counter !== atom._counter) throw expired;\n\n if ((atom as unknown) !== anotherAtom) {\n if (!anotherAtom.state.active) {\n execute(anotherAtom as DerivedAtomInternal<V>);\n }\n (atom._allDependencies ||= new Set()).add(anotherAtom);\n if (watch) {\n atom._dependencies?.delete(anotherAtom);\n (atom._wdependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._wchildren ||= new Set()).add(atom);\n } else if (!atom._wdependencies?.has(anotherAtom)) {\n (atom._dependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._children ||= new Set()).add(atom);\n }\n }\n\n const { state } = anotherAtom;\n if (watch) return state as V;\n if (state.promise) throw loading;\n if (state.error) throw new Wrapped(state.error);\n return state.value as V;\n }, atom._options);\n\n if (isPromiseLike(value)) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n value.then(\n (value) => {\n if (counter === atom._counter) {\n ++atom._counter;\n if (!atom._hasValue || !Object.is(value, atom._nextValue!)) atom._nextValue = value;\n atom._nextError = undefined;\n requestPropagate(atom);\n }\n },\n (e) => {\n if (counter === atom._counter && e !== expired) {\n ++atom._counter;\n if (e !== loading) {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom._nextError = e;\n requestPropagate(atom);\n }\n }\n },\n );\n } else {\n ++atom._counter;\n if (\n !atom._hasValue ||\n (!Object.is(value, atom._nextValue) && !atom._equals?.(value, atom._nextValue!))\n ) {\n atom.state.value = atom._nextValue = value;\n atom._valueChanged = atom._hasValue = true;\n } else if (prevSuccess) {\n atom._needPropagate = false;\n }\n atom.state.error = atom._nextError = undefined;\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n } catch (e) {\n // assert(e !== expired);\n ++atom._counter;\n if (e === loading) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n } else {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom.state.error = atom._nextError = e;\n if (atom._reject) {\n atom._reject(e);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n};\n\nlet runningGc = false;\nlet gcCandidates: Set<DerivedAtomInternal<any>> = new Set();\nconst disableAtom = <Value>(atom: AtomInternal<Value>) => {\n if (\n !atom._source &&\n !atom._global &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n if (atom._gcDelay) {\n setTimeout(() => {\n gcCandidates.add(atom);\n gc();\n }, atom._gcDelay);\n } else {\n gcCandidates.add(atom);\n if (!runningGc) {\n runningGc = true;\n setTimeout(gc, 0);\n }\n }\n }\n};\nconst gc = () => {\n for (const atom of gcCandidates) {\n if (\n !atom._source &&\n !atom._global &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n atom._ctrl?.abort();\n // atom._reject?.(null);\n ++atom._counter;\n atom._nextValue =\n atom._nextError =\n atom.state.error =\n atom.state.value =\n atom.state.promise =\n atom._resolve =\n atom._reject =\n atom._ctrl =\n undefined;\n atom._needPropagate = atom._needExecute = atom._hasValue = atom.state.active = false;\n atom._valueChanged = atom._source;\n if (atom._allDependencies) {\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n }\n atom._wdependencies.clear();\n }\n for (const dep of atom._allDependencies) {\n disableAtom(dep);\n }\n atom._allDependencies.clear();\n }\n }\n }\n gcCandidates.clear();\n runningGc = false;\n};\n\nconst isPromiseLike = (x: unknown): x is PromiseLike<unknown> =>\n typeof (x as PromiseLike<unknown>)?.then === \"function\";\n\nconst createThenableSignal = () => {\n const ctrl = new AbortController();\n const signal = ctrl.signal as ThenableSignal;\n const promise = new Promise((resolve) => {\n signal.then = (f: () => void) => promise.then(f);\n signal.addEventListener(\"abort\", resolve, {\n once: true,\n passive: true,\n });\n });\n return {\n abort: () => ctrl.abort(),\n signal,\n };\n};\n\nconst logError = (e: unknown) => {\n // Chrome's console.error doesn't follow the stack trace of the given Error\n queueMicrotask(() => {\n throw e;\n });\n};\n"],"mappings":"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"}
@@ -19,13 +19,13 @@ type AtomInit<Value> = Value | AtomGetter<Value>;
19
19
  type AtomUpdater<Value> = Value | AtomReducer<Value>;
20
20
  type AtomInactiveState<Value> = {
21
21
  active: false;
22
- error: any;
22
+ error: unknown;
23
23
  promise: undefined;
24
24
  value?: Value;
25
25
  };
26
26
  type AtomPromiseState<Value> = {
27
27
  active: true;
28
- error: any;
28
+ error: unknown;
29
29
  promise: PromiseLike<Value>;
30
30
  value?: Value;
31
31
  };
@@ -37,7 +37,7 @@ type AtomSuccessState<Value> = {
37
37
  };
38
38
  type AtomErrorState<Value> = {
39
39
  active: true;
40
- error: any;
40
+ error: unknown;
41
41
  promise: undefined;
42
42
  value?: Value;
43
43
  };
@@ -48,6 +48,7 @@ type AtomSubscriberOptions = {
48
48
  type AtomGetter<Value> = (get: GetAtom, options: AtomGetOptions) => Value | PromiseLike<Value>;
49
49
  type AtomReducer<Value> = (value: Value) => Value;
50
50
  type AtomGetOptions = {
51
+ readonly $: CreateAtom;
51
52
  readonly signal: ThenableSignal;
52
53
  };
53
54
  type ThenableSignal = AbortSignal & {
@@ -64,7 +65,7 @@ type CreateAtom = {
64
65
  };
65
66
  type AtomOptions<Value> = {
66
67
  equals?: AtomEquals<Value>;
67
- persist?: boolean;
68
+ global?: boolean;
68
69
  eager?: boolean;
69
70
  gcDelay?: number;
70
71
  };
@@ -80,10 +81,10 @@ type AtomScope = {
80
81
  type SetLike<Key> = Key[] | Set<Key> | (Key extends object ? WeakSet<Key> : never);
81
82
  type MapLike<Key, Value> = Map<Key, Value> | (Key extends object ? WeakMap<Key, Value> : never) | (Key extends string | number | symbol ? Record<Key, Value> : never);
82
83
  declare const $: CreateAtom;
83
- declare const isAtom: (x: unknown) => x is Atom<any>;
84
- declare const isPrimitiveAtom: (x: unknown) => x is PrimitiveAtom<any>;
84
+ declare const isAtom: (x: unknown) => x is Atom<unknown>;
85
+ declare const isPrimitiveAtom: (x: unknown) => x is PrimitiveAtom<unknown>;
85
86
  type AtomValuePair<Value> = [Atom<Value>, Value | PrimitiveAtom<Value>] | [DerivedAtom<Value>, Value | Atom<Value>];
86
- declare const createScope: <T extends AtomValuePair<any>[]>(parentScope?: AtomScope | null, atomValuePairs?: T) => AtomScope;
87
+ declare const createScope: (parentScope?: AtomScope | null, atomValuePairs?: AtomValuePair<any>[]) => AtomScope;
87
88
  //#endregion
88
89
  //#region src/utils.d.ts
89
90
  type Atomized<T> = T extends object ? { [K in keyof T]: Atomized<T[K]> } : PrimitiveAtom<T>;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/atom.ts","../../src/utils.ts"],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/atom.ts","../../src/utils.ts"],"mappings":";KAAY,IAAA,UAAc,aAAA,CAAc,KAAA,IAAS,WAAA,CAAY,KAAA;AAAA,KACjD,UAAA;EAAA,SACD,GAAA,QAAW,KAAA;EAAA,SACX,KAAA,GAAQ,OAAA,EAAS,WAAA;EAAA,SACjB,SAAA,GAAY,UAAA,EAAY,aAAA,CAAc,KAAA;EAAA,SACtC,KAAA,EAAO,SAAA,CAAU,KAAA;AAAA;AAAA,KAEhB,aAAA,UAAuB,UAAA,CAAW,KAAA;EAAA,SACnC,GAAA,GAAM,KAAA,EAAO,WAAA,CAAY,KAAA;EAAA,SACzB,KAAA,EAAO,gBAAA,CAAiB,KAAA;AAAA;AAAA,KAEvB,WAAA,UAAqB,UAAA,CAAW,KAAA;EAAA,SACjC,OAAA;AAAA;AAAA,KAGC,WAAA;AAAA,KACA,aAAA,WAAwB,KAAA,EAAO,KAAA,EAAO,OAAA,EAAS,qBAAA;AAAA,KAC/C,QAAA,UAAkB,KAAA,GAAQ,UAAA,CAAW,KAAA;AAAA,KACrC,WAAA,UAAqB,KAAA,GAAQ,WAAA,CAAY,KAAA;AAAA,KAEzC,iBAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,KAAA;AAAA;AAAA,KAEE,gBAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA,EAAS,WAAA,CAAY,KAAA;EACrB,KAAA,GAAQ,KAAA;AAAA;AAAA,KAEE,gBAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA,EAAO,KAAA;AAAA;AAAA,KAEG,cAAA;EACV,MAAA;EACA,KAAA;EACA,OAAA;EACA,KAAA,GAAQ,KAAA;AAAA;AAAA,KAEE,SAAA,UACR,iBAAA,CAAkB,KAAA,IAClB,gBAAA,CAAiB,KAAA,IACjB,cAAA,CAAe,KAAA,IACf,gBAAA,CAAiB,KAAA;AAAA,KAET,qBAAA;EAAA,SAAmC,MAAA,EAAQ,cAAA;AAAA;AAAA,KAC3C,UAAA,WACV,GAAA,EAAK,OAAA,EACL,OAAA,EAAS,cAAA,KACN,KAAA,GAAQ,WAAA,CAAY,KAAA;AAAA,KACb,WAAA,WAAsB,KAAA,EAAO,KAAA,KAAU,KAAA;AAAA,KAEvC,cAAA;EAAA,SACD,CAAA,EAAG,UAAA;EAAA,SACH,MAAA,EAAQ,cAAA;AAAA;AAAA,KAEP,cAAA,GAAiB,WAAA;EAAgB,IAAA,GAAO,CAAA;AAAA;AAAA,KAMxC,OAAA;EAAA,QACF,WAAA,EAAa,IAAA,CAAK,KAAA,GAAQ,KAAA,WAAgB,KAAA;EAAA,QAEhD,WAAA,EAAa,IAAA,CAAK,KAAA,GAClB,KAAA,SACC,gBAAA,CAAiB,KAAA,IAAS,cAAA,CAAe,KAAA,IAAS,gBAAA,CAAiB,KAAA;AAAA;AAAA,KAGnE,UAAA;EAAA,QACK,IAAA,EAAM,UAAA,CAAW,KAAA,GAAQ,OAAA,GAAU,WAAA,CAAY,KAAA,IAAS,WAAA,CAAY,KAAA;EAAA,QACpE,IAAA,EAAM,KAAA,EAAO,OAAA,GAAU,WAAA,CAAY,KAAA,IAAS,aAAA,CAAc,KAAA;EAAA,QAC1D,IAAA,EAAM,KAAA,GAAQ,UAAA,CAAW,KAAA,GAAQ,OAAA,GAAU,WAAA,CAAY,KAAA,IAAS,IAAA,CAAK,KAAA;AAAA;AAAA,KAEnE,WAAA;EACV,MAAA,GAAS,UAAA,CAAW,KAAA;EACpB,MAAA;EACA,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,UAAA,WAAqB,KAAA,EAAO,KAAA,EAAO,SAAA,EAAW,KAAA;AAAA,KAC9C,SAAA;EAAA,QACF,QAAA,EAAU,aAAA,CAAc,KAAA,IAAS,aAAA,CAAc,KAAA;EAAA,QAC/C,QAAA,EAAU,WAAA,CAAY,KAAA,IAAS,WAAA,CAAY,KAAA;EAAA,QAC3C,QAAA,EAAU,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA;EAAA,QAC7B,QAAA,EAAU,aAAA,CAAc,KAAA,GAAQ,MAAA,SAAe,aAAA,CAAc,KAAA;EAAA,QAC7D,QAAA,EAAU,WAAA,CAAY,KAAA,GAAQ,MAAA,SAAe,WAAA,CAAY,KAAA;EAAA,QACzD,QAAA,EAAU,IAAA,CAAK,KAAA,GAAQ,MAAA,SAAe,IAAA,CAAK,KAAA;AAAA;AAAA,KAGzC,OAAA,QAAe,GAAA,KAAQ,GAAA,CAAI,GAAA,KAAQ,GAAA,kBAAqB,OAAA,CAAQ,GAAA;AAAA,KAChE,OAAA,eACR,GAAA,CAAI,GAAA,EAAK,KAAA,KACR,GAAA,kBAAqB,OAAA,CAAQ,GAAA,EAAK,KAAA,cAClC,GAAA,oCAAuC,MAAA,CAAO,GAAA,EAAK,KAAA;AAAA,cAgM3C,CAAA,EAAG,UAAA;AAAA,cAQH,MAAA,GAAU,CAAA,cAAa,CAAA,IAAK,IAAA;AAAA,cAE5B,eAAA,GAAmB,CAAA,cAAa,CAAA,IAAK,aAAA;AAAA,KAGtC,aAAA,WACP,IAAA,CAAK,KAAA,GAAQ,KAAA,GAAQ,aAAA,CAAc,KAAA,MACnC,WAAA,CAAY,KAAA,GAAQ,KAAA,GAAQ,IAAA,CAAK,KAAA;AAAA,cACzB,WAAA,GACX,WAAA,GAAc,SAAA,SACd,cAAA,GAAiB,aAAA,YAChB,SAAA;;;KCrTS,QAAA,MAAc,CAAA,gCAAiC,CAAA,GAAI,QAAA,CAAS,CAAA,CAAE,CAAA,OAAQ,aAAA,CAAc,CAAA;AAAA,KAEpF,cAAA,MACV,CAAA,SAAU,IAAA,YAAgB,CAAA,GAAI,CAAA,gCAAiC,CAAA,GAAI,cAAA,CAAe,CAAA,CAAE,CAAA,OAAQ,CAAA;AAAA,KAEzF,WAAA;EAAA,QACK,IAAA,EAAM,UAAA,CAAW,KAAA,IAAS,WAAA,CAAY,KAAA;EAAA,QACtC,IAAA,EAAM,KAAA,GAAQ,WAAA,CAAY,cAAA,CAAe,KAAA;AAAA;AAAA,KAGvC,iBAAA,MACR,CAAA,IACC,CAAA,gCAEiB,CAAA,GAAI,iBAAA,CAAkB,CAAA,CAAE,CAAA;AAAA,cAajC,OAAA,MAAc,IAAA,EAAM,CAAA,KAAI,QAAA,CAAS,CAAA;AAAA,cASjC,YAAA,MAAmB,IAAA,EAAM,CAAA,EAAG,GAAA,SAAA,IAAA,EADf,IAAA,CAAK,GAAA,MAAK,GAAA,KACqB,cAAA,CAAe,CAAA;AAAA,cAY3D,QAAA,MAAe,IAAA,EAAM,CAAA,EAAG,MAAA,EAAQ,iBAAA,CAAkB,cAAA,CAAe,CAAA;AAAA,cAajE,EAAA,EAAI,WAAA"}
@@ -1,2 +1,2 @@
1
- var e=class{_nextValue;_nextError;_children;_wchildren;_watchers;_subscribers;_valueChanged=!0;get(){if(this.state.active||(v(this),x(this)),this.state.promise)throw this.state.promise;if(this.state.error)throw this.state.error;return this.state.value}watch(e){return this.state.active||u(this),(this._watchers||=new Set).add(e),()=>{this._watchers.delete(e),this._watchers.size||x(this)}}subscribe(e){let t={_subscriber:e,_options:{get signal(){return(t._ctrl||=w()).signal}}};if(!this.state.active)u(this);else if(!this.state.error&&!this.state.promise)try{e(this.state.value,t._options)}catch(e){T(e)}return(this._subscribers||=new Set).add(t),()=>{this._subscribers.delete(t),t._ctrl&&=(t._ctrl.abort(),void 0),this._subscribers.size||x(this)}}[Symbol.toPrimitive](){return this.state.value}},t=class extends e{_needPropagate=!1;_marked=!1;constructor(e,t){super(),this._nextValue=this._init=e,this._equals=t?.equals,this.state={active:!0,promise:void 0,error:void 0,value:e}}set(e){let t=e instanceof Function?e(this._nextValue):e;Object.is(t,this._nextValue)||(this._nextValue=t,d(this))}};t.prototype._source=!0,t.prototype._hasValue=!0,t.prototype._needExecute=!1;var n=class extends e{_hasValue=!1;_needExecute=!1;_needPropagate=!1;_marked=!1;_counter=0;_resolve;_reject;_ctrl;_dependencies;_wdependencies;_allDependencies;constructor(e,t){super(),this._init=e,this._equals=t?.equals,this._gcDelay=t?.gcDelay,this._persist=!!t?.persist;let n=this;this._options={get signal(){return(n._ctrl||=w()).signal}},this.state={active:!1,promise:void 0,error:void 0,value:void 0}}refresh(){this._needExecute=!0,d(this)}};n.prototype._source=!1;const r=(e,r)=>e instanceof Function?new n(e,r):new t(e,r),i=t=>t instanceof e,a=e=>e instanceof t,o=(e,t)=>{let n=new WeakMap,a=e?new WeakMap:n,o=((t,i=!1)=>{let s=n.get(t);if(i||(s||=a.get(t)),!s){let n=e?.(t,!0);if(i)return n;let c=n||t;a.set(t,s=c._init instanceof Function?r((e,t)=>c._init((t,n)=>e(o(t),n),t),{equals:c._equals,persist:c._persist}):n||r(c._init))}return s});if(t)for(let[a,s]of t)n.set(a,i(s)?(e||o)(s):r(s));return o};let s=!1,c=[],l=[];const u=e=>{e._needExecute||(e._needExecute=!0,d(e))},d=e=>{e._needPropagate||(e._needPropagate=!0,c.push(e),s||(s=!0,queueMicrotask(f)))},f=()=>{s=!1;{let e=c;c=[];for(let t of e){if(t.state.active){let e=t._hasValue&&!t.state.promise&&!t.state.error;if(t.state.error=t._nextError)t._nextValue=t.state.value,t._reject&&(t._reject(t._nextError),t._resolve=t._reject=t.state.promise=void 0);else{if(!t._hasValue||!Object.is(t._nextValue,t.state.value)&&!t._equals?.(t._nextValue,t.state.value))t.state.value=t._nextValue,t._valueChanged=t._hasValue=!0;else if(t._nextValue=t.state.value,e){t._needPropagate=!1;continue}t._resolve&&=(t._resolve(t._nextValue),t._reject=t.state.promise=void 0)}}m(t)}}let e=l;l=[];for(let t=e.length;t--;){let n=e[t];n._marked=!1,n._needExecute&&(n._needPropagate=!0,v(n)),n._needPropagate&&p(n)}},p=e=>{if(e._needPropagate=!1,e._watchers)for(let t of e._watchers)try{t()}catch(e){T(e)}if(e._wchildren)for(let t of e._wchildren)t._needExecute=!0;if(e.state.promise){if(e._children)for(let t of e._children)t.state.promise||=new Promise((e,n)=>{t._resolve=e,t._reject=n}),t._needPropagate=!0}else if(e.state.error){if(e._children)for(let t of e._children)t.state.error=t._nextError=e.state.error,t._reject&&(t._reject(t._nextError),t._resolve=t._reject=t.state.promise=void 0),t._needPropagate=!0}else{if(e._valueChanged&&e._subscribers)for(let t of e._subscribers){t._ctrl&&=(t._ctrl.abort(),void 0);try{t._subscriber(e.state.value,t._options)}catch(e){T(e)}}if(e._children)for(let t of e._children)t._needExecute=!0}e._valueChanged=!1},m=e=>{if(!e._marked){if(e._marked=!0,e._children)for(let t of e._children)m(t);if(e._wchildren)for(let t of e._wchildren)m(t);l.push(e)}};var h=class{e;constructor(e){this.e=e}};const g=Symbol(),_=Symbol(),v=e=>{let t=++e._counter,n=e._hasValue&&!e.state.promise&&!e.state.error;if(e.state.active=!0,e._needExecute=!1,e._dependencies){for(let t of e._dependencies)t._children.delete(e);e._dependencies.clear()}if(e._wdependencies){for(let t of e._wdependencies)t._wchildren.delete(e);e._wdependencies.clear()}e._ctrl&&=(e._ctrl.abort(),void 0);try{let r=e._init((n,r=!1)=>{if(t!==e._counter)throw g;e!==n&&(n.state.active||v(n),(e._allDependencies||=new Set).add(n),r?(e._dependencies?.delete(n),(e._wdependencies||=new Set).add(n),(n._wchildren||=new Set).add(e)):e._wdependencies?.has(n)||((e._dependencies||=new Set).add(n),(n._children||=new Set).add(e)));let{state:i}=n;if(r)return i;if(i.promise)throw _;if(i.error)throw new h(i.error);return i.value},e._options);C(r)?(e.state.promise||=new Promise((t,n)=>{e._resolve=t,e._reject=n}),r.then(n=>{t===e._counter&&(++e._counter,(!e._hasValue||!Object.is(n,e._nextValue))&&(e._nextValue=n),e._nextError=void 0,d(e))},n=>{t===e._counter&&n!==g&&(++e._counter,n!==_&&(n instanceof h?n=n.e:T(n),e._nextError=n,d(e)))})):(++e._counter,!e._hasValue||!Object.is(r,e._nextValue)&&!e._equals?.(r,e._nextValue)?(e.state.value=e._nextValue=r,e._valueChanged=e._hasValue=!0):n&&(e._needPropagate=!1),e.state.error=e._nextError=void 0,e._resolve&&=(e._resolve(e._nextValue),e._reject=e.state.promise=void 0))}catch(t){++e._counter,t===_?e.state.promise||=new Promise((t,n)=>{e._resolve=t,e._reject=n}):(t instanceof h?t=t.e:T(t),e.state.error=e._nextError=t,e._reject&&(e._reject(t),e._resolve=e._reject=e.state.promise=void 0))}};let y=!1,b=new Set;const x=e=>{!e._source&&!e._persist&&!e._children?.size&&!e._watchers?.size&&!e._subscribers?.size&&(e._gcDelay?setTimeout(()=>{b.add(e),S()},e._gcDelay):(b.add(e),y||(y=!0,setTimeout(S,0))))},S=()=>{for(let e of b)if(!e._source&&!e._persist&&!e._children?.size&&!e._watchers?.size&&!e._subscribers?.size&&(e._ctrl?.abort(),++e._counter,e._nextValue=e._nextError=e.state.error=e.state.value=e.state.promise=e._resolve=e._reject=e._ctrl=void 0,e._needPropagate=e._needExecute=e._hasValue=e.state.active=!1,e._valueChanged=e._source,e._allDependencies)){if(e._dependencies){for(let t of e._dependencies)t._children.delete(e);e._dependencies.clear()}if(e._wdependencies){for(let t of e._wdependencies)t._wchildren.delete(e);e._wdependencies.clear()}for(let t of e._allDependencies)x(t);e._allDependencies.clear()}b.clear(),y=!1},C=e=>typeof e?.then==`function`,w=()=>{let e=new AbortController,t=e.signal,n=new Promise(e=>{t.then=e=>n.then(e),t.addEventListener(`abort`,e,{once:!0,passive:!0})});return{abort:()=>e.abort(),signal:t}},T=e=>{queueMicrotask(()=>{throw e})},E=()=>E,D=()=>void 0;Object.setPrototypeOf(E,new Proxy(E,{get:(e,t)=>t===Symbol.toPrimitive?D:E}));const O=e=>{if(typeof e!=`object`||!e)return r(e);if(Array.isArray(e))return e.map(O);let t=Object.create(null);for(let n in e)t[n]=O(e[n]);return t},k=e=>e.get(),A=(e,t=k)=>{let n=e=>{if(typeof e!=`object`||!e)return e;if(i(e))return t(e);if(Array.isArray(e))return e.map(n);let r=Object.create(null);for(let t in e)r[t]=n(e[t]);return r};return n(e)},j=(e,t)=>{let n=(e,t)=>{if(typeof e==`object`&&e)if(i(e))a(e)&&e.set(t);else for(let r in t)n(e[r],t[r])};n(e,t)},M=e=>e instanceof Function?r((t,n)=>{let r,i,a=e(e=>{let n=t(e,!0);if(n.error)i=n.error;else if(n.promise)(r||=[]).push(n.promise);else return n.value;return E},n);if(i)throw i;return r?Promise.all(r):a},{equals:N}):M(t=>A(e,t)),N=(e,t)=>{if(typeof e!=`object`||typeof t!=`object`||!e||!t)return!1;let n=e.constructor;if(n!==t.constructor)return!1;if(n===Array){let n=e.length;if(n!==t.length)return!1;for(;(n=n-1|0)>=0;)if(!Object.is(e[n],t[n]))return!1;return!0}let r=0;for(let n in e){if(!(n in t&&Object.is(e[n],t[n])))return!1;r=r+1|0}for(let e in t)if((r=r-1|0)<0)return!1;return!0};export{r as $,M as $$,O as atomize,A as collectAtoms,o as createScope,i as isAtom,a as isPrimitiveAtom,j as setAtoms};
1
+ var e=class{_nextValue;_nextError;_children;_wchildren;_watchers;_subscribers;_valueChanged=!0;get(){if(this.state.active||(v(this),x(this)),this.state.promise)throw this.state.promise;if(this.state.error)throw this.state.error;return this.state.value}watch(e){return this.state.active||u(this),(this._watchers||=new Set).add(e),()=>{this._watchers.delete(e),this._watchers.size||x(this)}}subscribe(e){let t={_subscriber:e,_options:{get signal(){return(t._ctrl||=w()).signal}}};if(!this.state.active)u(this);else if(!this.state.error&&!this.state.promise)try{e(this.state.value,t._options)}catch(e){T(e)}return(this._subscribers||=new Set).add(t),()=>{this._subscribers.delete(t),t._ctrl&&=(t._ctrl.abort(),void 0),this._subscribers.size||x(this)}}[Symbol.toPrimitive](){return this.state.value}},t=class extends e{_needPropagate=!1;_marked=!1;constructor(e,t){super(),this._nextValue=this._init=e,this._equals=t?.equals,this.state={active:!0,promise:void 0,error:void 0,value:e}}set(e){let t=e instanceof Function?e(this._nextValue):e;Object.is(t,this._nextValue)||(this._nextValue=t,d(this))}};t.prototype._source=!0,t.prototype._hasValue=!0,t.prototype._needExecute=!1;var n=class extends e{_hasValue=!1;_needExecute=!1;_needPropagate=!1;_marked=!1;_counter=0;_resolve;_reject;_ctrl;_dependencies;_wdependencies;_allDependencies;constructor(e,t){super(),this._init=e,this._equals=t?.equals,this._gcDelay=t?.gcDelay,this._global=!!t?.global;let n=this;this._options={$:r,get signal(){return(n._ctrl||=w()).signal}},this.state={active:!1,promise:void 0,error:void 0,value:void 0}}refresh(){this._needExecute=!0,d(this)}};n.prototype._source=!1;const r=(e,r)=>e instanceof Function?new n(e,r):new t(e,r),i=t=>t instanceof e,a=e=>e instanceof t,o=(e,t)=>{let n=new WeakMap,a=e?new WeakMap:n,o=((e,t)=>s(r(e,t))),s=((t,i=!1)=>{let c=n.get(t),l=a.get(t);if((!i||l?._global)&&(c||=l),!c){let n=e?.(t,!0);if(i)return n;let l=n||t;a.set(t,c=l._init instanceof Function?r((e,t)=>l._init((t,n)=>e(s(t),n),{...t,$:o}),{equals:l._equals,global:l._global,gcDelay:l._gcDelay}):n||r(l._init))}return c});if(t)for(let[a,o]of t)n.set(a,i(o)?(e||s)(o):r(o));return s};let s=!1,c=[],l=[];const u=e=>{e._needExecute||(e._needExecute=!0,d(e))},d=e=>{e._needPropagate||(e._needPropagate=!0,c.push(e),s||(s=!0,queueMicrotask(f)))},f=()=>{s=!1;{let e=c;c=[];for(let t of e){if(t.state.active){let e=t._hasValue&&!t.state.promise&&!t.state.error;if(t.state.error=t._nextError)t._nextValue=t.state.value,t._reject&&(t._reject(t._nextError),t._resolve=t._reject=t.state.promise=void 0);else{if(!t._hasValue||!Object.is(t._nextValue,t.state.value)&&!t._equals?.(t._nextValue,t.state.value))t.state.value=t._nextValue,t._valueChanged=t._hasValue=!0;else if(t._nextValue=t.state.value,e){t._needPropagate=!1;continue}t._resolve&&=(t._resolve(t._nextValue),t._reject=t.state.promise=void 0)}}m(t)}}let e=l;l=[];for(let t=e.length;t--;){let n=e[t];n._marked=!1,n._needExecute&&(n._needPropagate=!0,v(n)),n._needPropagate&&p(n)}},p=e=>{if(e._needPropagate=!1,e._watchers)for(let t of e._watchers)try{t()}catch(e){T(e)}if(e._wchildren)for(let t of e._wchildren)t._needExecute=!0;if(e.state.promise){if(e._children)for(let t of e._children)t.state.promise||=new Promise((e,n)=>{t._resolve=e,t._reject=n}),t._needPropagate=!0}else if(e.state.error){if(e._children)for(let t of e._children)t.state.error=t._nextError=e.state.error,t._reject&&(t._reject(t._nextError),t._resolve=t._reject=t.state.promise=void 0),t._needPropagate=!0}else{if(e._valueChanged&&e._subscribers)for(let t of e._subscribers){t._ctrl&&=(t._ctrl.abort(),void 0);try{t._subscriber(e.state.value,t._options)}catch(e){T(e)}}if(e._children)for(let t of e._children)t._needExecute=!0}e._valueChanged=!1},m=e=>{if(!e._marked){if(e._marked=!0,e._children)for(let t of e._children)m(t);if(e._wchildren)for(let t of e._wchildren)m(t);l.push(e)}};var h=class{e;constructor(e){this.e=e}};const g=Symbol(),_=Symbol(),v=e=>{let t=++e._counter,n=e._hasValue&&!e.state.promise&&!e.state.error;if(e.state.active=!0,e._needExecute=!1,e._dependencies){for(let t of e._dependencies)t._children.delete(e);e._dependencies.clear()}if(e._wdependencies){for(let t of e._wdependencies)t._wchildren.delete(e);e._wdependencies.clear()}e._ctrl&&=(e._ctrl.abort(),void 0);try{let r=e._init((n,r=!1)=>{if(t!==e._counter)throw g;e!==n&&(n.state.active||v(n),(e._allDependencies||=new Set).add(n),r?(e._dependencies?.delete(n),(e._wdependencies||=new Set).add(n),(n._wchildren||=new Set).add(e)):e._wdependencies?.has(n)||((e._dependencies||=new Set).add(n),(n._children||=new Set).add(e)));let{state:i}=n;if(r)return i;if(i.promise)throw _;if(i.error)throw new h(i.error);return i.value},e._options);C(r)?(e.state.promise||=new Promise((t,n)=>{e._resolve=t,e._reject=n}),r.then(n=>{t===e._counter&&(++e._counter,(!e._hasValue||!Object.is(n,e._nextValue))&&(e._nextValue=n),e._nextError=void 0,d(e))},n=>{t===e._counter&&n!==g&&(++e._counter,n!==_&&(n instanceof h?n=n.e:T(n),e._nextError=n,d(e)))})):(++e._counter,!e._hasValue||!Object.is(r,e._nextValue)&&!e._equals?.(r,e._nextValue)?(e.state.value=e._nextValue=r,e._valueChanged=e._hasValue=!0):n&&(e._needPropagate=!1),e.state.error=e._nextError=void 0,e._resolve&&=(e._resolve(e._nextValue),e._reject=e.state.promise=void 0))}catch(t){++e._counter,t===_?e.state.promise||=new Promise((t,n)=>{e._resolve=t,e._reject=n}):(t instanceof h?t=t.e:T(t),e.state.error=e._nextError=t,e._reject&&(e._reject(t),e._resolve=e._reject=e.state.promise=void 0))}};let y=!1,b=new Set;const x=e=>{!e._source&&!e._global&&!e._children?.size&&!e._watchers?.size&&!e._subscribers?.size&&(e._gcDelay?setTimeout(()=>{b.add(e),S()},e._gcDelay):(b.add(e),y||(y=!0,setTimeout(S,0))))},S=()=>{for(let e of b)if(!e._source&&!e._global&&!e._children?.size&&!e._watchers?.size&&!e._subscribers?.size&&(e._ctrl?.abort(),++e._counter,e._nextValue=e._nextError=e.state.error=e.state.value=e.state.promise=e._resolve=e._reject=e._ctrl=void 0,e._needPropagate=e._needExecute=e._hasValue=e.state.active=!1,e._valueChanged=e._source,e._allDependencies)){if(e._dependencies){for(let t of e._dependencies)t._children.delete(e);e._dependencies.clear()}if(e._wdependencies){for(let t of e._wdependencies)t._wchildren.delete(e);e._wdependencies.clear()}for(let t of e._allDependencies)x(t);e._allDependencies.clear()}b.clear(),y=!1},C=e=>typeof e?.then==`function`,w=()=>{let e=new AbortController,t=e.signal,n=new Promise(e=>{t.then=e=>n.then(e),t.addEventListener(`abort`,e,{once:!0,passive:!0})});return{abort:()=>e.abort(),signal:t}},T=e=>{queueMicrotask(()=>{throw e})},E=()=>E,D=()=>void 0;Object.setPrototypeOf(E,new Proxy(E,{get:(e,t)=>t===Symbol.toPrimitive?D:E}));const O=e=>{if(typeof e!=`object`||!e)return r(e);if(Array.isArray(e))return e.map(O);let t=Object.create(null);for(let n in e)t[n]=O(e[n]);return t},k=e=>e.get(),A=(e,t=k)=>{let n=e=>{if(typeof e!=`object`||!e)return e;if(i(e))return t(e);if(Array.isArray(e))return e.map(n);let r=Object.create(null);for(let t in e)r[t]=n(e[t]);return r};return n(e)},j=(e,t)=>{let n=(e,t)=>{if(typeof e==`object`&&e)if(i(e))a(e)&&e.set(t);else for(let r in t)n(e[r],t[r])};n(e,t)},M=e=>e instanceof Function?r((t,n)=>{let r,i,a=e(e=>{let n=t(e,!0);if(n.error)i=n.error;else if(n.promise)(r||=[]).push(n.promise);else return n.value;return E},n);if(i)throw i;return r?Promise.all(r):a},{equals:N}):M(t=>A(e,t)),N=(e,t)=>{if(typeof e!=`object`||typeof t!=`object`||!e||!t)return!1;let n=e.constructor;if(n!==t.constructor)return!1;if(n===Array){let n=e.length;if(n!==t.length)return!1;for(;(n=n-1|0)>=0;)if(!Object.is(e[n],t[n]))return!1;return!0}let r=0;for(let n in e){if(!(n in t&&Object.is(e[n],t[n])))return!1;r=r+1|0}for(let e in t)if((r=r-1|0)<0)return!1;return!0};export{r as $,M as $$,O as atomize,A as collectAtoms,o as createScope,i as isAtom,a as isPrimitiveAtom,j as setAtoms};
2
2
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../src/atom.ts","../../src/utils.ts"],"sourcesContent":["export type Atom<Value> = PrimitiveAtom<Value> | DerivedAtom<Value>;\nexport type CommonAtom<Value> = {\n readonly get: () => Value;\n readonly watch: (watcher: AtomWatcher) => () => void;\n readonly subscribe: (subscriber: AtomSubscribe<Value>) => () => void;\n readonly state: AtomState<Value>;\n};\nexport type PrimitiveAtom<Value> = CommonAtom<Value> & {\n readonly set: (value: AtomUpdater<Value>) => void;\n readonly state: AtomSuccessState<Value>;\n};\nexport type DerivedAtom<Value> = CommonAtom<Value> & {\n readonly refresh: () => void;\n};\n\nexport type AtomWatcher = () => void;\nexport type AtomSubscribe<Value> = (value: Value, options: AtomSubscriberOptions) => void;\nexport type AtomInit<Value> = Value | AtomGetter<Value>;\nexport type AtomUpdater<Value> = Value | AtomReducer<Value>;\n// TODO: readonly\nexport type AtomInactiveState<Value> = {\n active: false;\n error: any;\n promise: undefined;\n value?: Value;\n};\nexport type AtomPromiseState<Value> = {\n active: true;\n error: any;\n promise: PromiseLike<Value>;\n value?: Value;\n};\nexport type AtomSuccessState<Value> = {\n active: true;\n error: undefined;\n promise: undefined;\n value: Value;\n};\nexport type AtomErrorState<Value> = {\n active: true;\n error: any;\n promise: undefined;\n value?: Value;\n};\nexport type AtomState<Value> =\n | AtomInactiveState<Value>\n | AtomPromiseState<Value>\n | AtomErrorState<Value>\n | AtomSuccessState<Value>;\n\nexport type AtomSubscriberOptions = { readonly signal: ThenableSignal };\nexport type AtomGetter<Value> = (\n get: GetAtom,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\nexport type AtomReducer<Value> = (value: Value) => Value;\n\nexport type AtomGetOptions = { readonly signal: ThenableSignal };\nexport type ThenableSignal = AbortSignal & { then: (f: () => void) => void };\ntype ThenableSignalController = {\n abort: () => void;\n signal: ThenableSignal;\n};\n\nexport type GetAtom = {\n <Value>(anotherAtom: Atom<Value>, watch?: false): Value;\n <Value>(\n anotherAtom: Atom<Value>,\n watch: true,\n ): AtomPromiseState<Value> | AtomErrorState<Value> | AtomSuccessState<Value>;\n};\n\ntype CreateAtom = {\n <Value>(init: AtomGetter<Value>, options?: AtomOptions<Value>): DerivedAtom<Value>;\n <Value>(init: Value, options?: AtomOptions<Value>): PrimitiveAtom<Value>;\n <Value>(init: Value | AtomGetter<Value>, options?: AtomOptions<Value>): Atom<Value>;\n};\nexport type AtomOptions<Value> = {\n equals?: AtomEquals<Value>;\n persist?: boolean;\n eager?: boolean;\n gcDelay?: number;\n};\n\nexport type AtomEquals<Value> = (value: Value, prevValue: Value) => boolean;\nexport type AtomScope = {\n <Value>(baseAtom: PrimitiveAtom<Value>): PrimitiveAtom<Value>;\n <Value>(baseAtom: DerivedAtom<Value>): DerivedAtom<Value>;\n <Value>(baseAtom: Atom<Value>): Atom<Value>;\n <Value>(baseAtom: PrimitiveAtom<Value>, strict: true): PrimitiveAtom<Value> | undefined;\n <Value>(baseAtom: DerivedAtom<Value>, strict: true): DerivedAtom<Value> | undefined;\n <Value>(baseAtom: Atom<Value>, strict: true): Atom<Value> | undefined;\n};\n\nexport type SetLike<Key> = Key[] | Set<Key> | (Key extends object ? WeakSet<Key> : never);\nexport type MapLike<Key, Value> =\n | Map<Key, Value>\n | (Key extends object ? WeakMap<Key, Value> : never)\n | (Key extends string | number | symbol ? Record<Key, Value> : never);\n\ntype GetAtomInternal = <Value>(anotherAtom: AtomInternal<Value>) => Value;\ntype AtomGetterInternal<Value> = (\n get: GetAtomInternal,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\ntype AtomSubscribeInternal<Value> = {\n _subscriber: AtomSubscribe<Value>;\n _options: AtomSubscriberOptions;\n _ctrl?: ThenableSignalController;\n};\n\ntype AtomInternal<Value> = PrimitiveAtomInternal<Value> | DerivedAtomInternal<Value>;\n\nabstract class CommonAtomInternal<Value> {\n _nextValue: Value | undefined;\n _nextError: any | undefined;\n _children: Set<DerivedAtomInternal<any>> | undefined;\n _wchildren: Set<DerivedAtomInternal<any>> | undefined;\n _watchers: Set<AtomWatcher> | undefined;\n _subscribers: Set<AtomSubscribeInternal<Value>> | undefined;\n _valueChanged = true;\n\n abstract readonly _source: boolean;\n abstract _needExecute: boolean;\n abstract _needPropagate: boolean;\n abstract _marked: boolean;\n abstract _resolve: ((value: Value) => void) | undefined;\n abstract _reject: ((reason: any) => void) | undefined;\n\n abstract readonly _init: Value | AtomGetterInternal<Value>;\n abstract readonly _equals: AtomEquals<Value> | undefined;\n\n abstract readonly state: AtomState<Value>;\n\n get(): Value {\n if (!this.state.active) {\n execute(this as unknown as DerivedAtomInternal<Value>);\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n if (this.state.promise) throw this.state.promise;\n if (this.state.error) throw this.state.error;\n return this.state.value!;\n }\n\n watch(watcher: AtomWatcher): () => void {\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n }\n (this._watchers ||= new Set()).add(watcher);\n return () => {\n this._watchers!.delete(watcher);\n if (!this._watchers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n subscribe(subscriber: AtomSubscribe<Value>): () => void {\n const atomSubscriber: AtomSubscribeInternal<Value> = {\n _subscriber: subscriber,\n _options: {\n get signal() {\n return (atomSubscriber._ctrl ||= createThenableSignal()).signal;\n },\n },\n };\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n } else if (!this.state.error && !this.state.promise) {\n try {\n subscriber(this.state.value!, atomSubscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n (this._subscribers ||= new Set()).add(atomSubscriber);\n return () => {\n this._subscribers!.delete(atomSubscriber);\n if (atomSubscriber._ctrl) {\n atomSubscriber._ctrl.abort();\n atomSubscriber._ctrl = undefined;\n }\n if (!this._subscribers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n [Symbol.toPrimitive](): Value | undefined {\n return this.state.value;\n }\n}\n\nclass PrimitiveAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: true;\n declare readonly _needExecute: false;\n _needPropagate: boolean = false;\n _marked: boolean = false;\n\n declare readonly _init: Value;\n declare readonly _equals: AtomEquals<Value> | undefined;\n\n declare state: AtomSuccessState<Value>;\n declare _hasValue: true;\n declare _nextValue: Value;\n declare _nextError: undefined;\n declare _resolve: undefined;\n declare _reject: undefined;\n\n constructor(init: Value, options?: AtomOptions<Value>) {\n super();\n this._nextValue = this._init = init;\n this._equals = options?.equals;\n this.state = {\n active: true,\n promise: undefined,\n error: undefined,\n value: init,\n };\n }\n\n set(this: PrimitiveAtomInternal<Value>, value: AtomUpdater<Value>) {\n const nextValue = value instanceof Function ? value(this._nextValue!) : value;\n if (!Object.is(nextValue, this._nextValue)) {\n this._nextValue = nextValue;\n requestPropagate(this);\n }\n }\n}\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._source = true;\nPrimitiveAtomInternal.prototype._hasValue = true;\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._needExecute = false;\n\nclass DerivedAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: false;\n\n _hasValue = false;\n _needExecute = false;\n _needPropagate = false;\n _marked = false;\n\n _counter = 0;\n _resolve: ((value: Value) => void) | undefined;\n _reject: ((reason: any) => void) | undefined;\n _ctrl: ThenableSignalController | undefined;\n _dependencies: Set<AtomInternal<any>> | undefined;\n _wdependencies: Set<AtomInternal<any>> | undefined;\n _allDependencies: Set<AtomInternal<any>> | undefined;\n\n declare readonly _init: AtomGetterInternal<Value>;\n declare readonly _equals: AtomEquals<Value> | undefined;\n declare readonly _gcDelay: number | undefined;\n declare readonly _persist: boolean;\n declare readonly _options: AtomGetOptions;\n\n declare state: AtomState<Value>;\n\n constructor(init: AtomGetter<Value>, options?: AtomOptions<Value>) {\n super();\n this._init = init as AtomGetterInternal<Value>;\n this._equals = options?.equals;\n this._gcDelay = options?.gcDelay;\n this._persist = !!options?.persist;\n\n const self = this;\n this._options = {\n get signal() {\n return (self._ctrl ||= createThenableSignal()).signal;\n },\n };\n\n this.state = {\n active: false,\n promise: undefined,\n error: undefined,\n value: undefined,\n };\n }\n\n refresh() {\n this._needExecute = true;\n requestPropagate(this);\n }\n}\n// @ts-expect-error\nDerivedAtomInternal.prototype._source = false;\n\nexport const $: CreateAtom = <Value>(\n init: Value | AtomGetter<Value>,\n options?: AtomOptions<Value>,\n) => {\n if (init instanceof Function) return new DerivedAtomInternal(init, options);\n return new PrimitiveAtomInternal(init, options) as any;\n};\n\nexport const isAtom = (x: unknown): x is Atom<any> => x instanceof CommonAtomInternal;\n\nexport const isPrimitiveAtom = (x: unknown): x is PrimitiveAtom<any> =>\n x instanceof PrimitiveAtomInternal;\n\nexport type AtomValuePair<Value> =\n | [Atom<Value>, Value | PrimitiveAtom<Value>]\n | [DerivedAtom<Value>, Value | Atom<Value>];\nexport const createScope = <T extends AtomValuePair<any>[]>(\n parentScope?: AtomScope | null,\n atomValuePairs?: T,\n): AtomScope => {\n const scopeMap = new WeakMap<Atom<any>, Atom<any>>();\n const atomMap = parentScope ? new WeakMap<Atom<any>, Atom<any>>() : scopeMap;\n const scope = (<T extends Atom<any>>(baseAtom: T, strict = false) => {\n let scopedAtom = scopeMap.get(baseAtom);\n if (!strict) scopedAtom ||= atomMap.get(baseAtom);\n // TODO: 현재 스코프마다 사용되는 모든 아톰을 저장해서 메모리 사용이 비효율적인데 해결할 수 있을까?\n // 의존성이 동적이라 많이 어렵다\n if (!scopedAtom) {\n const parentAtom = parentScope?.(baseAtom, true);\n if (strict) return parentAtom;\n const realBaseAtom = parentAtom || baseAtom;\n atomMap.set(\n baseAtom,\n (scopedAtom = (\n (realBaseAtom as AtomInternal<never>)._init instanceof Function\n ? $(\n (get, options) =>\n (realBaseAtom as AtomInternal<never>)._init(\n (atom, watch?: boolean) => get(scope(atom), watch as false),\n options,\n ),\n {\n equals: (realBaseAtom as AtomInternal<never>)._equals,\n persist: (realBaseAtom as DerivedAtomInternal<never>)._persist,\n },\n )\n : // baseAtom을 전달하지 않고 새로 생성하는 이유는 SSR 등에서 사용자 간 상태 공유를 막기 위함\n parentAtom || $((realBaseAtom as AtomInternal<any>)._init)\n ) as T),\n );\n }\n return scopedAtom;\n }) as AtomScope;\n if (atomValuePairs) {\n for (const [atom, value] of atomValuePairs) {\n scopeMap.set(atom, isAtom(value) ? (parentScope || scope)(value) : $(value));\n }\n }\n return scope;\n};\n\nlet pendingUpdateAtoms = false;\nlet updateQueue: AtomInternal<any>[] = [];\nlet stack: AtomInternal<any>[] = [];\nconst requestActivate = <Value>(atom: DerivedAtomInternal<Value>) => {\n if (!atom._needExecute) {\n atom._needExecute = true;\n requestPropagate(atom);\n }\n};\nconst requestPropagate = <Value>(atom: AtomInternal<Value>) => {\n if (!atom._needPropagate) {\n atom._needPropagate = true;\n updateQueue.push(atom);\n if (!pendingUpdateAtoms) {\n pendingUpdateAtoms = true;\n queueMicrotask(updateAtoms);\n }\n }\n};\nconst updateAtoms = () => {\n pendingUpdateAtoms = false;\n {\n const updatedAtoms = updateQueue;\n updateQueue = [];\n for (const atom of updatedAtoms) {\n if (atom.state.active) {\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n if ((atom.state.error = atom._nextError)) {\n atom._nextValue = atom.state.value;\n if (atom._reject) {\n atom._reject(atom._nextError);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n } else {\n if (\n !atom._hasValue ||\n (!Object.is(atom._nextValue, atom.state.value) &&\n !atom._equals?.(atom._nextValue, atom.state.value!))\n ) {\n atom.state.value = atom._nextValue;\n atom._valueChanged = atom._hasValue = true;\n } else {\n atom._nextValue = atom.state.value;\n if (prevSuccess) {\n atom._needPropagate = false;\n continue;\n }\n }\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n mark(atom);\n }\n }\n const markedAtoms = stack;\n stack = [];\n for (let i = markedAtoms.length; i--; ) {\n const atom = markedAtoms[i]!;\n atom._marked = false;\n if (atom._needExecute) {\n atom._needPropagate = true;\n execute(atom);\n }\n if (atom._needPropagate) {\n propagate(atom);\n }\n }\n};\nconst propagate = <Value>(atom: AtomInternal<Value>) => {\n atom._needPropagate = false;\n if (atom._watchers) {\n for (const watcher of atom._watchers) {\n try {\n watcher();\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._wchildren) {\n for (const wchild of atom._wchildren) {\n wchild._needExecute = true;\n }\n }\n if (atom.state.promise) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.promise ||= new Promise((resolve, reject) => {\n child._resolve = resolve;\n child._reject = reject;\n });\n child._needPropagate = true;\n }\n }\n } else if (atom.state.error) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.error = child._nextError = atom.state.error;\n if (child._reject) {\n child._reject(child._nextError);\n child._resolve = child._reject = child.state.promise = undefined;\n }\n child._needPropagate = true;\n }\n }\n } else {\n if (atom._valueChanged && atom._subscribers) {\n for (const subscriber of atom._subscribers) {\n if (subscriber._ctrl) {\n subscriber._ctrl.abort();\n subscriber._ctrl = undefined;\n }\n try {\n subscriber._subscriber(atom.state.value!, subscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._children) {\n for (const child of atom._children) {\n child._needExecute = true;\n }\n }\n }\n atom._valueChanged = false;\n};\nconst mark = (atom: AtomInternal<any>) => {\n if (!atom._marked) {\n atom._marked = true;\n if (atom._children) {\n for (const child of atom._children) {\n mark(child);\n }\n }\n if (atom._wchildren) {\n for (const child of atom._wchildren) {\n mark(child);\n }\n }\n stack.push(atom);\n }\n};\n\nclass Wrapped {\n e: unknown;\n constructor(e: unknown) {\n this.e = e;\n }\n}\nconst expired = Symbol();\nconst loading = Symbol();\nconst execute = <Value>(atom: DerivedAtomInternal<Value>) => {\n const counter = ++atom._counter;\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n\n atom.state.active = true;\n atom._needExecute = false;\n\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._wdependencies.clear();\n }\n if (atom._ctrl) {\n atom._ctrl.abort();\n atom._ctrl = undefined;\n }\n\n try {\n const value = atom._init(<V>(anotherAtom: AtomInternal<V>, watch = false) => {\n if (counter !== atom._counter) throw expired;\n\n if ((atom as unknown) !== anotherAtom) {\n if (!anotherAtom.state.active) {\n execute(anotherAtom as DerivedAtomInternal<V>);\n }\n (atom._allDependencies ||= new Set()).add(anotherAtom);\n if (watch) {\n atom._dependencies?.delete(anotherAtom);\n (atom._wdependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._wchildren ||= new Set()).add(atom);\n } else if (!atom._wdependencies?.has(anotherAtom)) {\n (atom._dependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._children ||= new Set()).add(atom);\n }\n }\n\n const { state } = anotherAtom;\n if (watch) return state as V;\n if (state.promise) throw loading;\n if (state.error) throw new Wrapped(state.error);\n return state.value as V;\n }, atom._options);\n\n if (isPromiseLike(value)) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n value.then(\n (value) => {\n if (counter === atom._counter) {\n ++atom._counter;\n if (!atom._hasValue || !Object.is(value, atom._nextValue!)) atom._nextValue = value;\n atom._nextError = undefined;\n requestPropagate(atom);\n }\n },\n (e) => {\n if (counter === atom._counter && e !== expired) {\n ++atom._counter;\n if (e !== loading) {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom._nextError = e;\n requestPropagate(atom);\n }\n }\n },\n );\n } else {\n ++atom._counter;\n if (\n !atom._hasValue ||\n (!Object.is(value, atom._nextValue) && !atom._equals?.(value, atom._nextValue!))\n ) {\n atom.state.value = atom._nextValue = value;\n atom._valueChanged = atom._hasValue = true;\n } else if (prevSuccess) {\n atom._needPropagate = false;\n }\n atom.state.error = atom._nextError = undefined;\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n } catch (e) {\n // assert(e !== expired);\n ++atom._counter;\n if (e === loading) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n } else {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom.state.error = atom._nextError = e;\n if (atom._reject) {\n atom._reject(e);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n};\n\nlet runningGc = false;\nlet gcCandidates: Set<DerivedAtomInternal<any>> = new Set();\nconst disableAtom = <Value>(atom: AtomInternal<Value>) => {\n if (\n !atom._source &&\n !atom._persist &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n if (atom._gcDelay) {\n setTimeout(() => {\n gcCandidates.add(atom);\n gc();\n }, atom._gcDelay);\n } else {\n gcCandidates.add(atom);\n if (!runningGc) {\n runningGc = true;\n setTimeout(gc, 0);\n }\n }\n }\n};\nconst gc = () => {\n for (const atom of gcCandidates) {\n if (\n !atom._source &&\n !atom._persist &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n atom._ctrl?.abort();\n // atom._reject?.(null);\n ++atom._counter;\n atom._nextValue =\n atom._nextError =\n atom.state.error =\n atom.state.value =\n atom.state.promise =\n atom._resolve =\n atom._reject =\n atom._ctrl =\n undefined;\n atom._needPropagate = atom._needExecute = atom._hasValue = atom.state.active = false;\n atom._valueChanged = atom._source;\n if (atom._allDependencies) {\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n }\n atom._wdependencies.clear();\n }\n for (const dep of atom._allDependencies) {\n disableAtom(dep);\n }\n atom._allDependencies.clear();\n }\n }\n }\n gcCandidates.clear();\n runningGc = false;\n};\n\nconst isPromiseLike = (x: unknown): x is PromiseLike<any> =>\n typeof (x as PromiseLike<any>)?.then === \"function\";\n\nconst createThenableSignal = () => {\n const ctrl = new AbortController();\n const signal = ctrl.signal as ThenableSignal;\n const promise = new Promise((resolve) => {\n signal.then = (f: () => void) => promise.then(f);\n signal.addEventListener(\"abort\", resolve, {\n once: true,\n passive: true,\n });\n });\n return {\n abort: () => ctrl.abort(),\n signal,\n };\n};\n\nconst logError = (e: unknown) => {\n // Chrome's console.error doesn't follow the stack trace of the given Error\n queueMicrotask(() => {\n throw e;\n });\n};\n","import { $, isAtom, isPrimitiveAtom } from \"./atom.ts\";\nimport type { PrimitiveAtom, Atom, AtomGetter, DerivedAtom } from \"./atom.ts\";\n\nexport type Atomized<T> = T extends object ? { [K in keyof T]: Atomized<T[K]> } : PrimitiveAtom<T>;\n\nexport type CollectedAtoms<T> =\n T extends Atom<infer U> ? U : T extends object ? { [K in keyof T]: CollectedAtoms<T[K]> } : T;\n\ntype CollectAtom = {\n <Value>(init: AtomGetter<Value>): DerivedAtom<Value>;\n <Value>(init: Value): DerivedAtom<CollectedAtoms<Value>>;\n};\n\nexport type RecursiveOptional<T> =\n | T\n | (T extends object\n ? {\n [P in keyof T]: RecursiveOptional<T[P]>;\n }\n : never);\n\nconst ouroboros: any = () => ouroboros;\nconst toUndefined = () => undefined;\nObject.setPrototypeOf(\n ouroboros,\n new Proxy(ouroboros, {\n get: (_, k) => (k === Symbol.toPrimitive ? toUndefined : ouroboros),\n }),\n);\n\nexport const atomize = <T>(tree: T): Atomized<T> => {\n if (typeof tree !== \"object\" || tree === null) return $(tree) as any;\n if (Array.isArray(tree)) return tree.map(atomize) as any;\n const result = Object.create(null);\n for (const k in tree) result[k] = atomize(tree[k]);\n return result;\n};\n\nconst getAtom = <T>(atom: Atom<T>): T => atom.get();\nexport const collectAtoms = <T>(tree: T, get = getAtom): CollectedAtoms<T> => {\n const recurse = <T>(t: T): CollectedAtoms<T> => {\n if (typeof t !== \"object\" || t === null) return t as any;\n if (isAtom(t)) return get(t) as any;\n if (Array.isArray(t)) return t.map(recurse) as any;\n const result = Object.create(null);\n for (const k in t) result[k] = recurse(t[k] as any);\n return result;\n };\n return recurse(tree);\n};\n\nexport const setAtoms = <T>(tree: T, values: RecursiveOptional<CollectedAtoms<T>>): void => {\n const recurse = (t: any, v: any) => {\n if (typeof t === \"object\" && t !== null) {\n if (isAtom(t)) {\n if (isPrimitiveAtom(t)) t.set(v);\n } else {\n for (const k in v) recurse(t[k], v[k]);\n }\n }\n };\n recurse(tree, values);\n};\n\nexport const $$: CollectAtom = <Value>(init: Value | AtomGetter<Value>) =>\n init instanceof Function\n ? $(\n (get, options) => {\n let promises: PromiseLike<any>[] | undefined;\n let error: unknown;\n const result = init((atom) => {\n const state = get(atom, true);\n if (state.error) error = state.error;\n else if (state.promise) (promises ||= []).push(state.promise);\n else return state.value;\n return ouroboros;\n }, options);\n if (error) throw error;\n return promises ? Promise.all(promises) : result;\n },\n {\n equals: shallowEquals,\n },\n )\n : $$((get) => collectAtoms(init, get));\n\nconst shallowEquals = (a: any, b: any): boolean => {\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) return false;\n const c = a.constructor;\n if (c !== b.constructor) return false;\n\n if (c === Array) {\n let i = a.length;\n if (i !== b.length) return false;\n while ((i = (i - 1) | 0) >= 0) if (!Object.is(a[i], b[i])) return false;\n return true;\n }\n\n let n = 0;\n for (const k in a) {\n if (!(k in b && Object.is(a[k], b[k]))) return false;\n n = (n + 1) | 0;\n }\n for (const _ in b) if ((n = (n - 1) | 0) < 0) return false;\n return true;\n};\n"],"mappings":"AAiHA,IAAe,EAAf,KAAyC,CACvC,WACA,WACA,UACA,WACA,UACA,aACA,cAAgB,GAchB,KAAa,CAKX,GAJK,KAAK,MAAM,SACd,EAAQ,KAA8C,CACtD,EAAY,KAAuC,EAEjD,KAAK,MAAM,QAAS,MAAM,KAAK,MAAM,QACzC,GAAI,KAAK,MAAM,MAAO,MAAM,KAAK,MAAM,MACvC,OAAO,KAAK,MAAM,MAGpB,MAAM,EAAkC,CAKtC,OAJK,KAAK,MAAM,QACd,EAAgB,KAA8C,EAE/D,KAAK,YAAc,IAAI,KAAO,IAAI,EAAQ,KAC9B,CACX,KAAK,UAAW,OAAO,EAAQ,CAC1B,KAAK,UAAW,MACnB,EAAY,KAAuC,EAKzD,UAAU,EAA8C,CACtD,IAAM,EAA+C,CACnD,YAAa,EACb,SAAU,CACR,IAAI,QAAS,CACX,OAAQ,EAAe,QAAU,GAAsB,EAAE,QAE5D,CACF,CACD,GAAI,CAAC,KAAK,MAAM,OACd,EAAgB,KAA8C,SACrD,CAAC,KAAK,MAAM,OAAS,CAAC,KAAK,MAAM,QAC1C,GAAI,CACF,EAAW,KAAK,MAAM,MAAQ,EAAe,SAAS,OAC/C,EAAG,CACV,EAAS,EAAE,CAIf,OADC,KAAK,eAAiB,IAAI,KAAO,IAAI,EAAe,KACxC,CACX,KAAK,aAAc,OAAO,EAAe,CACzC,AAEE,EAAe,SADf,EAAe,MAAM,OAAO,CACL,IAAA,IAEpB,KAAK,aAAc,MACtB,EAAY,KAAuC,EAKzD,CAAC,OAAO,cAAkC,CACxC,OAAO,KAAK,MAAM,QAIhB,EAAN,cAA2C,CAA0B,CAGnE,eAA0B,GAC1B,QAAmB,GAYnB,YAAY,EAAa,EAA8B,CACrD,OAAO,CACP,KAAK,WAAa,KAAK,MAAQ,EAC/B,KAAK,QAAU,GAAS,OACxB,KAAK,MAAQ,CACX,OAAQ,GACR,QAAS,IAAA,GACT,MAAO,IAAA,GACP,MAAO,EACR,CAGH,IAAwC,EAA2B,CACjE,IAAM,EAAY,aAAiB,SAAW,EAAM,KAAK,WAAY,CAAG,EACnE,OAAO,GAAG,EAAW,KAAK,WAAW,GACxC,KAAK,WAAa,EAClB,EAAiB,KAAK,IAK5B,EAAsB,UAAU,QAAU,GAC1C,EAAsB,UAAU,UAAY,GAE5C,EAAsB,UAAU,aAAe,GAE/C,IAAM,EAAN,cAAyC,CAA0B,CAGjE,UAAY,GACZ,aAAe,GACf,eAAiB,GACjB,QAAU,GAEV,SAAW,EACX,SACA,QACA,MACA,cACA,eACA,iBAUA,YAAY,EAAyB,EAA8B,CACjE,OAAO,CACP,KAAK,MAAQ,EACb,KAAK,QAAU,GAAS,OACxB,KAAK,SAAW,GAAS,QACzB,KAAK,SAAW,CAAC,CAAC,GAAS,QAE3B,IAAM,EAAO,KACb,KAAK,SAAW,CACd,IAAI,QAAS,CACX,OAAQ,EAAK,QAAU,GAAsB,EAAE,QAElD,CAED,KAAK,MAAQ,CACX,OAAQ,GACR,QAAS,IAAA,GACT,MAAO,IAAA,GACP,MAAO,IAAA,GACR,CAGH,SAAU,CACR,KAAK,aAAe,GACpB,EAAiB,KAAK,GAI1B,EAAoB,UAAU,QAAU,GAExC,MAAa,GACX,EACA,IAEI,aAAgB,SAAiB,IAAI,EAAoB,EAAM,EAAQ,CACpE,IAAI,EAAsB,EAAM,EAAQ,CAGpC,EAAU,GAA+B,aAAa,EAEtD,EAAmB,GAC9B,aAAa,EAKF,GACX,EACA,IACc,CACd,IAAM,EAAW,IAAI,QACf,EAAU,EAAc,IAAI,QAAkC,EAC9D,IAA+B,EAAa,EAAS,KAAU,CACnE,IAAI,EAAa,EAAS,IAAI,EAAS,CAIvC,GAHK,IAAQ,IAAe,EAAQ,IAAI,EAAS,EAG7C,CAAC,EAAY,CACf,IAAM,EAAa,IAAc,EAAU,GAAK,CAChD,GAAI,EAAQ,OAAO,EACnB,IAAM,EAAe,GAAc,EACnC,EAAQ,IACN,EACC,EACE,EAAqC,iBAAiB,SACnD,GACG,EAAK,IACH,EAAqC,OACnC,EAAM,IAAoB,EAAI,EAAM,EAAK,CAAE,EAAe,CAC3D,EACD,CACH,CACE,OAAS,EAAqC,QAC9C,QAAU,EAA4C,SACvD,CACF,CAED,GAAc,EAAG,EAAmC,MAAM,CAEjE,CAEH,OAAO,IAET,GAAI,EACF,IAAK,GAAM,CAAC,EAAM,KAAU,EAC1B,EAAS,IAAI,EAAM,EAAO,EAAM,EAAI,GAAe,GAAO,EAAM,CAAG,EAAE,EAAM,CAAC,CAGhF,OAAO,GAGT,IAAI,EAAqB,GACrB,EAAmC,EAAE,CACrC,EAA6B,EAAE,CACnC,MAAM,EAA0B,GAAqC,CAC9D,EAAK,eACR,EAAK,aAAe,GACpB,EAAiB,EAAK,GAGpB,EAA2B,GAA8B,CACxD,EAAK,iBACR,EAAK,eAAiB,GACtB,EAAY,KAAK,EAAK,CACjB,IACH,EAAqB,GACrB,eAAe,EAAY,IAI3B,MAAoB,CACxB,EAAqB,GACrB,CACE,IAAM,EAAe,EACrB,EAAc,EAAE,CAChB,IAAK,IAAM,KAAQ,EAAc,CAC/B,GAAI,EAAK,MAAM,OAAQ,CACrB,IAAM,EAAc,EAAK,WAAa,CAAC,EAAK,MAAM,SAAW,CAAC,EAAK,MAAM,MACzE,GAAK,EAAK,MAAM,MAAQ,EAAK,WAC3B,EAAK,WAAa,EAAK,MAAM,MACzB,EAAK,UACP,EAAK,QAAQ,EAAK,WAAW,CAC7B,EAAK,SAAW,EAAK,QAAU,EAAK,MAAM,QAAU,IAAA,QAEjD,CACL,GACE,CAAC,EAAK,WACL,CAAC,OAAO,GAAG,EAAK,WAAY,EAAK,MAAM,MAAM,EAC5C,CAAC,EAAK,UAAU,EAAK,WAAY,EAAK,MAAM,MAAO,CAErD,EAAK,MAAM,MAAQ,EAAK,WACxB,EAAK,cAAgB,EAAK,UAAY,WAEtC,EAAK,WAAa,EAAK,MAAM,MACzB,EAAa,CACf,EAAK,eAAiB,GACtB,SAGJ,AAEE,EAAK,YADL,EAAK,SAAS,EAAK,WAAY,CACf,EAAK,QAAU,EAAK,MAAM,QAAU,IAAA,KAI1D,EAAK,EAAK,EAGd,IAAM,EAAc,EACpB,EAAQ,EAAE,CACV,IAAK,IAAI,EAAI,EAAY,OAAQ,KAAO,CACtC,IAAM,EAAO,EAAY,GACzB,EAAK,QAAU,GACX,EAAK,eACP,EAAK,eAAiB,GACtB,EAAQ,EAAK,EAEX,EAAK,gBACP,EAAU,EAAK,GAIf,EAAoB,GAA8B,CAEtD,GADA,EAAK,eAAiB,GAClB,EAAK,UACP,IAAK,IAAM,KAAW,EAAK,UACzB,GAAI,CACF,GAAS,OACF,EAAG,CACV,EAAS,EAAE,CAIjB,GAAI,EAAK,WACP,IAAK,IAAM,KAAU,EAAK,WACxB,EAAO,aAAe,GAG1B,GAAI,EAAK,MAAM,YACT,EAAK,UACP,IAAK,IAAM,KAAS,EAAK,UACvB,EAAM,MAAM,UAAY,IAAI,SAAS,EAAS,IAAW,CACvD,EAAM,SAAW,EACjB,EAAM,QAAU,GAChB,CACF,EAAM,eAAiB,WAGlB,EAAK,MAAM,UAChB,EAAK,UACP,IAAK,IAAM,KAAS,EAAK,UACvB,EAAM,MAAM,MAAQ,EAAM,WAAa,EAAK,MAAM,MAC9C,EAAM,UACR,EAAM,QAAQ,EAAM,WAAW,CAC/B,EAAM,SAAW,EAAM,QAAU,EAAM,MAAM,QAAU,IAAA,IAEzD,EAAM,eAAiB,OAGtB,CACL,GAAI,EAAK,eAAiB,EAAK,aAC7B,IAAK,IAAM,KAAc,EAAK,aAAc,CAC1C,AAEE,EAAW,SADX,EAAW,MAAM,OAAO,CACL,IAAA,IAErB,GAAI,CACF,EAAW,YAAY,EAAK,MAAM,MAAQ,EAAW,SAAS,OACvD,EAAG,CACV,EAAS,EAAE,EAIjB,GAAI,EAAK,UACP,IAAK,IAAM,KAAS,EAAK,UACvB,EAAM,aAAe,GAI3B,EAAK,cAAgB,IAEjB,EAAQ,GAA4B,CACxC,GAAI,CAAC,EAAK,QAAS,CAEjB,GADA,EAAK,QAAU,GACX,EAAK,UACP,IAAK,IAAM,KAAS,EAAK,UACvB,EAAK,EAAM,CAGf,GAAI,EAAK,WACP,IAAK,IAAM,KAAS,EAAK,WACvB,EAAK,EAAM,CAGf,EAAM,KAAK,EAAK,GAIpB,IAAM,EAAN,KAAc,CACZ,EACA,YAAY,EAAY,CACtB,KAAK,EAAI,IAGb,MAAM,EAAU,QAAQ,CAClB,EAAU,QAAQ,CAClB,EAAkB,GAAqC,CAC3D,IAAM,EAAU,EAAE,EAAK,SACjB,EAAc,EAAK,WAAa,CAAC,EAAK,MAAM,SAAW,CAAC,EAAK,MAAM,MAKzE,GAHA,EAAK,MAAM,OAAS,GACpB,EAAK,aAAe,GAEhB,EAAK,cAAe,CACtB,IAAK,IAAM,KAAO,EAAK,cACrB,EAAI,UAAW,OAAO,EAAK,CAG7B,EAAK,cAAc,OAAO,CAE5B,GAAI,EAAK,eAAgB,CACvB,IAAK,IAAM,KAAO,EAAK,eACrB,EAAI,WAAY,OAAO,EAAK,CAG9B,EAAK,eAAe,OAAO,CAE7B,AAEE,EAAK,SADL,EAAK,MAAM,OAAO,CACL,IAAA,IAGf,GAAI,CACF,IAAM,EAAQ,EAAK,OAAU,EAA8B,EAAQ,KAAU,CAC3E,GAAI,IAAY,EAAK,SAAU,MAAM,EAEhC,IAAqB,IACnB,EAAY,MAAM,QACrB,EAAQ,EAAsC,EAE/C,EAAK,mBAAqB,IAAI,KAAO,IAAI,EAAY,CAClD,GACF,EAAK,eAAe,OAAO,EAAY,EACtC,EAAK,iBAAmB,IAAI,KAAO,IAAI,EAAY,EACnD,EAAY,aAAe,IAAI,KAAO,IAAI,EAAK,EACtC,EAAK,gBAAgB,IAAI,EAAY,IAC9C,EAAK,gBAAkB,IAAI,KAAO,IAAI,EAAY,EAClD,EAAY,YAAc,IAAI,KAAO,IAAI,EAAK,GAInD,GAAM,CAAE,SAAU,EAClB,GAAI,EAAO,OAAO,EAClB,GAAI,EAAM,QAAS,MAAM,EACzB,GAAI,EAAM,MAAO,MAAM,IAAI,EAAQ,EAAM,MAAM,CAC/C,OAAO,EAAM,OACZ,EAAK,SAAS,CAEb,EAAc,EAAM,EACtB,EAAK,MAAM,UAAY,IAAI,SAAS,EAAS,IAAW,CACtD,EAAK,SAAW,EAChB,EAAK,QAAU,GACf,CACF,EAAM,KACH,GAAU,CACL,IAAY,EAAK,WACnB,EAAE,EAAK,UACH,CAAC,EAAK,WAAa,CAAC,OAAO,GAAG,EAAO,EAAK,WAAY,IAAE,EAAK,WAAa,GAC9E,EAAK,WAAa,IAAA,GAClB,EAAiB,EAAK,GAGzB,GAAM,CACD,IAAY,EAAK,UAAY,IAAM,IACrC,EAAE,EAAK,SACH,IAAM,IACJ,aAAa,EACf,EAAI,EAAE,EAEN,EAAS,EAAE,CAEb,EAAK,WAAa,EAClB,EAAiB,EAAK,IAI7B,GAED,EAAE,EAAK,SAEL,CAAC,EAAK,WACL,CAAC,OAAO,GAAG,EAAO,EAAK,WAAW,EAAI,CAAC,EAAK,UAAU,EAAO,EAAK,WAAY,EAE/E,EAAK,MAAM,MAAQ,EAAK,WAAa,EACrC,EAAK,cAAgB,EAAK,UAAY,IAC7B,IACT,EAAK,eAAiB,IAExB,EAAK,MAAM,MAAQ,EAAK,WAAa,IAAA,GACrC,AAEE,EAAK,YADL,EAAK,SAAS,EAAK,WAAY,CACf,EAAK,QAAU,EAAK,MAAM,QAAU,IAAA,WAGjD,EAAG,CAEV,EAAE,EAAK,SACH,IAAM,EACR,EAAK,MAAM,UAAY,IAAI,SAAS,EAAS,IAAW,CACtD,EAAK,SAAW,EAChB,EAAK,QAAU,GACf,EAEE,aAAa,EACf,EAAI,EAAE,EAEN,EAAS,EAAE,CAEb,EAAK,MAAM,MAAQ,EAAK,WAAa,EACjC,EAAK,UACP,EAAK,QAAQ,EAAE,CACf,EAAK,SAAW,EAAK,QAAU,EAAK,MAAM,QAAU,IAAA,OAM5D,IAAI,EAAY,GACZ,EAA8C,IAAI,IACtD,MAAM,EAAsB,GAA8B,CAEtD,CAAC,EAAK,SACN,CAAC,EAAK,UACN,CAAC,EAAK,WAAW,MACjB,CAAC,EAAK,WAAW,MACjB,CAAC,EAAK,cAAc,OAEhB,EAAK,SACP,eAAiB,CACf,EAAa,IAAI,EAAK,CACtB,GAAI,EACH,EAAK,SAAS,EAEjB,EAAa,IAAI,EAAK,CACjB,IACH,EAAY,GACZ,WAAW,EAAI,EAAE,KAKnB,MAAW,CACf,IAAK,IAAM,KAAQ,EACjB,GACE,CAAC,EAAK,SACN,CAAC,EAAK,UACN,CAAC,EAAK,WAAW,MACjB,CAAC,EAAK,WAAW,MACjB,CAAC,EAAK,cAAc,OAEpB,EAAK,OAAO,OAAO,CAEnB,EAAE,EAAK,SACP,EAAK,WACH,EAAK,WACL,EAAK,MAAM,MACX,EAAK,MAAM,MACX,EAAK,MAAM,QACX,EAAK,SACL,EAAK,QACL,EAAK,MACH,IAAA,GACJ,EAAK,eAAiB,EAAK,aAAe,EAAK,UAAY,EAAK,MAAM,OAAS,GAC/E,EAAK,cAAgB,EAAK,QACtB,EAAK,kBAAkB,CACzB,GAAI,EAAK,cAAe,CACtB,IAAK,IAAM,KAAO,EAAK,cACrB,EAAI,UAAW,OAAO,EAAK,CAE7B,EAAK,cAAc,OAAO,CAE5B,GAAI,EAAK,eAAgB,CACvB,IAAK,IAAM,KAAO,EAAK,eACrB,EAAI,WAAY,OAAO,EAAK,CAE9B,EAAK,eAAe,OAAO,CAE7B,IAAK,IAAM,KAAO,EAAK,iBACrB,EAAY,EAAI,CAElB,EAAK,iBAAiB,OAAO,CAInC,EAAa,OAAO,CACpB,EAAY,IAGR,EAAiB,GACrB,OAAQ,GAAwB,MAAS,WAErC,MAA6B,CACjC,IAAM,EAAO,IAAI,gBACX,EAAS,EAAK,OACd,EAAU,IAAI,QAAS,GAAY,CACvC,EAAO,KAAQ,GAAkB,EAAQ,KAAK,EAAE,CAChD,EAAO,iBAAiB,QAAS,EAAS,CACxC,KAAM,GACN,QAAS,GACV,CAAC,EACF,CACF,MAAO,CACL,UAAa,EAAK,OAAO,CACzB,SACD,EAGG,EAAY,GAAe,CAE/B,mBAAqB,CACnB,MAAM,GACN,EC3rBE,MAAuB,EACvB,MAAoB,IAAA,GAC1B,OAAO,eACL,EACA,IAAI,MAAM,EAAW,CACnB,KAAM,EAAG,IAAO,IAAM,OAAO,YAAc,EAAc,EAC1D,CAAC,CACH,CAED,MAAa,EAAc,GAAyB,CAClD,GAAI,OAAO,GAAS,WAAY,EAAe,OAAO,EAAE,EAAK,CAC7D,GAAI,MAAM,QAAQ,EAAK,CAAE,OAAO,EAAK,IAAI,EAAQ,CACjD,IAAM,EAAS,OAAO,OAAO,KAAK,CAClC,IAAK,IAAM,KAAK,EAAM,EAAO,GAAK,EAAQ,EAAK,GAAG,CAClD,OAAO,GAGH,EAAc,GAAqB,EAAK,KAAK,CACtC,GAAmB,EAAS,EAAM,IAA+B,CAC5E,IAAM,EAAc,GAA4B,CAC9C,GAAI,OAAO,GAAM,WAAY,EAAY,OAAO,EAChD,GAAI,EAAO,EAAE,CAAE,OAAO,EAAI,EAAE,CAC5B,GAAI,MAAM,QAAQ,EAAE,CAAE,OAAO,EAAE,IAAI,EAAQ,CAC3C,IAAM,EAAS,OAAO,OAAO,KAAK,CAClC,IAAK,IAAM,KAAK,EAAG,EAAO,GAAK,EAAQ,EAAE,GAAU,CACnD,OAAO,GAET,OAAO,EAAQ,EAAK,EAGT,GAAe,EAAS,IAAuD,CAC1F,IAAM,GAAW,EAAQ,IAAW,CAClC,GAAI,OAAO,GAAM,UAAY,EAC3B,GAAI,EAAO,EAAE,CACP,EAAgB,EAAE,EAAE,EAAE,IAAI,EAAE,MAEhC,IAAK,IAAM,KAAK,EAAG,EAAQ,EAAE,GAAI,EAAE,GAAG,EAI5C,EAAQ,EAAM,EAAO,EAGV,EAA0B,GACrC,aAAgB,SACZ,GACG,EAAK,IAAY,CAChB,IAAI,EACA,EACE,EAAS,EAAM,GAAS,CAC5B,IAAM,EAAQ,EAAI,EAAM,GAAK,CAC7B,GAAI,EAAM,MAAO,EAAQ,EAAM,cACtB,EAAM,SAAU,IAAa,EAAE,EAAE,KAAK,EAAM,QAAQ,MACxD,OAAO,EAAM,MAClB,OAAO,GACN,EAAQ,CACX,GAAI,EAAO,MAAM,EACjB,OAAO,EAAW,QAAQ,IAAI,EAAS,CAAG,GAE5C,CACE,OAAQ,EACT,CACF,CACD,EAAI,GAAQ,EAAa,EAAM,EAAI,CAAC,CAEpC,GAAiB,EAAQ,IAAoB,CACjD,GAAI,OAAO,GAAM,UAAY,OAAO,GAAM,UAAY,CAAC,GAAK,CAAC,EAAG,MAAO,GACvE,IAAM,EAAI,EAAE,YACZ,GAAI,IAAM,EAAE,YAAa,MAAO,GAEhC,GAAI,IAAM,MAAO,CACf,IAAI,EAAI,EAAE,OACV,GAAI,IAAM,EAAE,OAAQ,MAAO,GAC3B,MAAQ,EAAK,EAAI,EAAK,IAAM,GAAG,GAAI,CAAC,OAAO,GAAG,EAAE,GAAI,EAAE,GAAG,CAAE,MAAO,GAClE,MAAO,GAGT,IAAI,EAAI,EACR,IAAK,IAAM,KAAK,EAAG,CACjB,GAAI,EAAE,KAAK,GAAK,OAAO,GAAG,EAAE,GAAI,EAAE,GAAG,EAAG,MAAO,GAC/C,EAAK,EAAI,EAAK,EAEhB,IAAK,IAAM,KAAK,EAAG,IAAK,EAAK,EAAI,EAAK,GAAK,EAAG,MAAO,GACrD,MAAO"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../src/atom.ts","../../src/utils.ts"],"sourcesContent":["export type Atom<Value> = PrimitiveAtom<Value> | DerivedAtom<Value>;\nexport type CommonAtom<Value> = {\n readonly get: () => Value;\n readonly watch: (watcher: AtomWatcher) => () => void;\n readonly subscribe: (subscriber: AtomSubscribe<Value>) => () => void;\n readonly state: AtomState<Value>;\n};\nexport type PrimitiveAtom<Value> = CommonAtom<Value> & {\n readonly set: (value: AtomUpdater<Value>) => void;\n readonly state: AtomSuccessState<Value>;\n};\nexport type DerivedAtom<Value> = CommonAtom<Value> & {\n readonly refresh: () => void;\n};\n\nexport type AtomWatcher = () => void;\nexport type AtomSubscribe<Value> = (value: Value, options: AtomSubscriberOptions) => void;\nexport type AtomInit<Value> = Value | AtomGetter<Value>;\nexport type AtomUpdater<Value> = Value | AtomReducer<Value>;\n// TODO: readonly\nexport type AtomInactiveState<Value> = {\n active: false;\n error: unknown;\n promise: undefined;\n value?: Value;\n};\nexport type AtomPromiseState<Value> = {\n active: true;\n error: unknown;\n promise: PromiseLike<Value>;\n value?: Value;\n};\nexport type AtomSuccessState<Value> = {\n active: true;\n error: undefined;\n promise: undefined;\n value: Value;\n};\nexport type AtomErrorState<Value> = {\n active: true;\n error: unknown;\n promise: undefined;\n value?: Value;\n};\nexport type AtomState<Value> =\n | AtomInactiveState<Value>\n | AtomPromiseState<Value>\n | AtomErrorState<Value>\n | AtomSuccessState<Value>;\n\nexport type AtomSubscriberOptions = { readonly signal: ThenableSignal };\nexport type AtomGetter<Value> = (\n get: GetAtom,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\nexport type AtomReducer<Value> = (value: Value) => Value;\n\nexport type AtomGetOptions = {\n readonly $: CreateAtom;\n readonly signal: ThenableSignal;\n};\nexport type ThenableSignal = AbortSignal & { then: (f: () => void) => void };\ntype ThenableSignalController = {\n abort: () => void;\n signal: ThenableSignal;\n};\n\nexport type GetAtom = {\n <Value>(anotherAtom: Atom<Value>, watch?: false): Value;\n <Value>(\n anotherAtom: Atom<Value>,\n watch: true,\n ): AtomPromiseState<Value> | AtomErrorState<Value> | AtomSuccessState<Value>;\n};\n\ntype CreateAtom = {\n <Value>(init: AtomGetter<Value>, options?: AtomOptions<Value>): DerivedAtom<Value>;\n <Value>(init: Value, options?: AtomOptions<Value>): PrimitiveAtom<Value>;\n <Value>(init: Value | AtomGetter<Value>, options?: AtomOptions<Value>): Atom<Value>;\n};\nexport type AtomOptions<Value> = {\n equals?: AtomEquals<Value>;\n global?: boolean;\n eager?: boolean;\n gcDelay?: number;\n};\n\nexport type AtomEquals<Value> = (value: Value, prevValue: Value) => boolean;\nexport type AtomScope = {\n <Value>(baseAtom: PrimitiveAtom<Value>): PrimitiveAtom<Value>;\n <Value>(baseAtom: DerivedAtom<Value>): DerivedAtom<Value>;\n <Value>(baseAtom: Atom<Value>): Atom<Value>;\n <Value>(baseAtom: PrimitiveAtom<Value>, strict: true): PrimitiveAtom<Value> | undefined;\n <Value>(baseAtom: DerivedAtom<Value>, strict: true): DerivedAtom<Value> | undefined;\n <Value>(baseAtom: Atom<Value>, strict: true): Atom<Value> | undefined;\n};\n\nexport type SetLike<Key> = Key[] | Set<Key> | (Key extends object ? WeakSet<Key> : never);\nexport type MapLike<Key, Value> =\n | Map<Key, Value>\n | (Key extends object ? WeakMap<Key, Value> : never)\n | (Key extends string | number | symbol ? Record<Key, Value> : never);\n\ntype GetAtomInternal = <Value>(anotherAtom: AtomInternal<Value>) => Value;\ntype AtomGetterInternal<Value> = (\n get: GetAtomInternal,\n options: AtomGetOptions,\n) => Value | PromiseLike<Value>;\ntype AtomSubscribeInternal<Value> = {\n _subscriber: AtomSubscribe<Value>;\n _options: AtomSubscriberOptions;\n _ctrl?: ThenableSignalController;\n};\n\ntype AtomInternal<Value> = PrimitiveAtomInternal<Value> | DerivedAtomInternal<Value>;\n\nabstract class CommonAtomInternal<Value> {\n _nextValue: Value | undefined;\n _nextError: unknown | undefined;\n _children: Set<DerivedAtomInternal<any>> | undefined;\n _wchildren: Set<DerivedAtomInternal<any>> | undefined;\n _watchers: Set<AtomWatcher> | undefined;\n _subscribers: Set<AtomSubscribeInternal<Value>> | undefined;\n _valueChanged = true;\n\n abstract readonly _source: boolean;\n abstract _needExecute: boolean;\n abstract _needPropagate: boolean;\n abstract _marked: boolean;\n abstract _resolve: ((value: Value) => void) | undefined;\n abstract _reject: ((reason: unknown) => void) | undefined;\n\n abstract readonly _init: Value | AtomGetterInternal<Value>;\n abstract readonly _equals: AtomEquals<Value> | undefined;\n\n abstract readonly state: AtomState<Value>;\n\n get(): Value {\n if (!this.state.active) {\n execute(this as unknown as DerivedAtomInternal<Value>);\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n if (this.state.promise) throw this.state.promise;\n if (this.state.error) throw this.state.error;\n return this.state.value!;\n }\n\n watch(watcher: AtomWatcher): () => void {\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n }\n (this._watchers ||= new Set()).add(watcher);\n return () => {\n this._watchers!.delete(watcher);\n if (!this._watchers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n subscribe(subscriber: AtomSubscribe<Value>): () => void {\n const atomSubscriber: AtomSubscribeInternal<Value> = {\n _subscriber: subscriber,\n _options: {\n get signal() {\n return (atomSubscriber._ctrl ||= createThenableSignal()).signal;\n },\n },\n };\n if (!this.state.active) {\n requestActivate(this as unknown as DerivedAtomInternal<Value>);\n } else if (!this.state.error && !this.state.promise) {\n try {\n subscriber(this.state.value!, atomSubscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n (this._subscribers ||= new Set()).add(atomSubscriber);\n return () => {\n this._subscribers!.delete(atomSubscriber);\n if (atomSubscriber._ctrl) {\n atomSubscriber._ctrl.abort();\n atomSubscriber._ctrl = undefined;\n }\n if (!this._subscribers!.size) {\n disableAtom(this as unknown as AtomInternal<Value>);\n }\n };\n }\n\n [Symbol.toPrimitive](): Value | undefined {\n return this.state.value;\n }\n}\n\nclass PrimitiveAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: true;\n declare readonly _needExecute: false;\n _needPropagate: boolean = false;\n _marked: boolean = false;\n\n declare readonly _init: Value;\n declare readonly _equals: AtomEquals<Value> | undefined;\n\n declare state: AtomSuccessState<Value>;\n declare _hasValue: true;\n declare _nextValue: Value;\n declare _nextError: undefined;\n declare _resolve: undefined;\n declare _reject: undefined;\n\n constructor(init: Value, options?: AtomOptions<Value>) {\n super();\n this._nextValue = this._init = init;\n this._equals = options?.equals;\n this.state = {\n active: true,\n promise: undefined,\n error: undefined,\n value: init,\n };\n }\n\n set(this: PrimitiveAtomInternal<Value>, value: AtomUpdater<Value>) {\n const nextValue = value instanceof Function ? value(this._nextValue!) : value;\n if (!Object.is(nextValue, this._nextValue)) {\n this._nextValue = nextValue;\n requestPropagate(this);\n }\n }\n}\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._source = true;\nPrimitiveAtomInternal.prototype._hasValue = true;\n// @ts-expect-error\nPrimitiveAtomInternal.prototype._needExecute = false;\n\nclass DerivedAtomInternal<Value> extends CommonAtomInternal<Value> {\n declare readonly _source: false;\n\n _hasValue = false;\n _needExecute = false;\n _needPropagate = false;\n _marked = false;\n\n _counter = 0;\n _resolve: ((value: Value) => void) | undefined;\n _reject: ((reason: unknown) => void) | undefined;\n _ctrl: ThenableSignalController | undefined;\n _dependencies: Set<AtomInternal<any>> | undefined;\n _wdependencies: Set<AtomInternal<any>> | undefined;\n _allDependencies: Set<AtomInternal<any>> | undefined;\n\n declare readonly _init: AtomGetterInternal<Value>;\n declare readonly _equals: AtomEquals<Value> | undefined;\n declare readonly _gcDelay: number | undefined;\n declare readonly _global: boolean;\n declare readonly _options: AtomGetOptions;\n\n declare state: AtomState<Value>;\n\n constructor(init: AtomGetter<Value>, options?: AtomOptions<Value>) {\n super();\n this._init = init as AtomGetterInternal<Value>;\n this._equals = options?.equals;\n this._gcDelay = options?.gcDelay;\n this._global = !!options?.global;\n\n const self = this;\n this._options = {\n $,\n get signal() {\n return (self._ctrl ||= createThenableSignal()).signal;\n },\n };\n\n this.state = {\n active: false,\n promise: undefined,\n error: undefined,\n value: undefined,\n };\n }\n\n refresh() {\n this._needExecute = true;\n requestPropagate(this);\n }\n}\n// @ts-expect-error\nDerivedAtomInternal.prototype._source = false;\n\nexport const $: CreateAtom = <Value>(\n init: Value | AtomGetter<Value>,\n options?: AtomOptions<Value>,\n) => {\n if (init instanceof Function) return new DerivedAtomInternal(init, options);\n return new PrimitiveAtomInternal(init, options) as any;\n};\n\nexport const isAtom = (x: unknown): x is Atom<unknown> => x instanceof CommonAtomInternal;\n\nexport const isPrimitiveAtom = (x: unknown): x is PrimitiveAtom<unknown> =>\n x instanceof PrimitiveAtomInternal;\n\nexport type AtomValuePair<Value> =\n | [Atom<Value>, Value | PrimitiveAtom<Value>]\n | [DerivedAtom<Value>, Value | Atom<Value>];\nexport const createScope = (\n parentScope?: AtomScope | null,\n atomValuePairs?: AtomValuePair<any>[],\n): AtomScope => {\n const scopeMap = new WeakMap<Atom<unknown>, Atom<unknown>>();\n const atomMap = parentScope ? new WeakMap<Atom<unknown>, Atom<unknown>>() : scopeMap;\n // TODO: scope와 inner$를 잘 통편합할 수 있는 방법이 있는지 고민하기\n const inner$ = ((init, options) => scope($(init, options))) as CreateAtom;\n const scope = (<T extends Atom<unknown>>(baseAtom: T, strict = false) => {\n let scopedAtom = scopeMap.get(baseAtom);\n const scopedDerivedAtom = atomMap.get(baseAtom);\n if (!strict || (scopedDerivedAtom as DerivedAtomInternal<never> | undefined)?._global) scopedAtom ||= scopedDerivedAtom;\n // TODO: 현재 스코프마다 사용되는 모든 아톰을 저장해서 메모리 사용이 비효율적인데 해결할 수 있을까?\n // 의존성이 동적이라 많이 어렵다\n if (!scopedAtom) {\n const parentAtom = parentScope?.(baseAtom, true);\n if (strict) return parentAtom;\n const realBaseAtom = parentAtom || baseAtom;\n atomMap.set(\n baseAtom,\n (scopedAtom = (\n (realBaseAtom as AtomInternal<never>)._init instanceof Function\n ? $(\n (get, options) =>\n (realBaseAtom as AtomInternal<never>)._init(\n (atom, watch?: boolean) => get(scope(atom), watch as false),\n {\n ...options,\n $: inner$,\n },\n ),\n {\n equals: (realBaseAtom as AtomInternal<never>)._equals,\n global: (realBaseAtom as DerivedAtomInternal<never>)._global,\n gcDelay: (realBaseAtom as DerivedAtomInternal<never>)._gcDelay,\n },\n )\n : // baseAtom을 전달하지 않고 새로 생성하는 이유는 SSR 등에서 사용자 간 상태 공유를 막기 위함\n parentAtom || $((realBaseAtom as AtomInternal<unknown>)._init)\n ) as T),\n );\n }\n return scopedAtom;\n }) as AtomScope;\n if (atomValuePairs) {\n for (const [atom, value] of atomValuePairs) {\n scopeMap.set(atom, isAtom(value) ? (parentScope || scope)(value) : $(value));\n }\n }\n return scope;\n};\n\nlet pendingUpdateAtoms = false;\nlet updateQueue: AtomInternal<any>[] = [];\nlet stack: AtomInternal<unknown>[] = [];\nconst requestActivate = <Value>(atom: DerivedAtomInternal<Value>) => {\n if (!atom._needExecute) {\n atom._needExecute = true;\n requestPropagate(atom);\n }\n};\nconst requestPropagate = <Value>(atom: AtomInternal<Value>) => {\n if (!atom._needPropagate) {\n atom._needPropagate = true;\n updateQueue.push(atom);\n if (!pendingUpdateAtoms) {\n pendingUpdateAtoms = true;\n queueMicrotask(updateAtoms);\n }\n }\n};\nconst updateAtoms = () => {\n pendingUpdateAtoms = false;\n {\n const updatedAtoms = updateQueue;\n updateQueue = [];\n for (const atom of updatedAtoms) {\n if (atom.state.active) {\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n if ((atom.state.error = atom._nextError)) {\n atom._nextValue = atom.state.value;\n if (atom._reject) {\n atom._reject(atom._nextError);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n } else {\n if (\n !atom._hasValue ||\n (!Object.is(atom._nextValue, atom.state.value) &&\n !atom._equals?.(atom._nextValue, atom.state.value!))\n ) {\n atom.state.value = atom._nextValue;\n atom._valueChanged = atom._hasValue = true;\n } else {\n atom._nextValue = atom.state.value;\n if (prevSuccess) {\n atom._needPropagate = false;\n continue;\n }\n }\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n mark(atom);\n }\n }\n const markedAtoms = stack;\n stack = [];\n for (let i = markedAtoms.length; i--; ) {\n const atom = markedAtoms[i]!;\n atom._marked = false;\n if (atom._needExecute) {\n atom._needPropagate = true;\n execute(atom);\n }\n if (atom._needPropagate) {\n propagate(atom);\n }\n }\n};\nconst propagate = <Value>(atom: AtomInternal<Value>) => {\n atom._needPropagate = false;\n if (atom._watchers) {\n for (const watcher of atom._watchers) {\n try {\n watcher();\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._wchildren) {\n for (const wchild of atom._wchildren) {\n wchild._needExecute = true;\n }\n }\n if (atom.state.promise) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.promise ||= new Promise((resolve, reject) => {\n child._resolve = resolve;\n child._reject = reject;\n });\n child._needPropagate = true;\n }\n }\n } else if (atom.state.error) {\n if (atom._children) {\n for (const child of atom._children) {\n child.state.error = child._nextError = atom.state.error;\n if (child._reject) {\n child._reject(child._nextError);\n child._resolve = child._reject = child.state.promise = undefined;\n }\n child._needPropagate = true;\n }\n }\n } else {\n if (atom._valueChanged && atom._subscribers) {\n for (const subscriber of atom._subscribers) {\n if (subscriber._ctrl) {\n subscriber._ctrl.abort();\n subscriber._ctrl = undefined;\n }\n try {\n subscriber._subscriber(atom.state.value!, subscriber._options);\n } catch (e) {\n logError(e);\n }\n }\n }\n if (atom._children) {\n for (const child of atom._children) {\n child._needExecute = true;\n }\n }\n }\n atom._valueChanged = false;\n};\nconst mark = (atom: AtomInternal<unknown>) => {\n if (!atom._marked) {\n atom._marked = true;\n if (atom._children) {\n for (const child of atom._children) {\n mark(child);\n }\n }\n if (atom._wchildren) {\n for (const child of atom._wchildren) {\n mark(child);\n }\n }\n stack.push(atom);\n }\n};\n\nclass Wrapped {\n e: unknown;\n constructor(e: unknown) {\n this.e = e;\n }\n}\nconst expired = Symbol();\nconst loading = Symbol();\nconst execute = <Value>(atom: DerivedAtomInternal<Value>) => {\n const counter = ++atom._counter;\n const prevSuccess = atom._hasValue && !atom.state.promise && !atom.state.error;\n\n atom.state.active = true;\n atom._needExecute = false;\n\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n // TODO?: if (dep.aggressiveGc) disableAtom(dep);\n }\n atom._wdependencies.clear();\n }\n if (atom._ctrl) {\n atom._ctrl.abort();\n atom._ctrl = undefined;\n }\n\n try {\n const value = atom._init(<V>(anotherAtom: AtomInternal<V>, watch = false) => {\n if (counter !== atom._counter) throw expired;\n\n if ((atom as unknown) !== anotherAtom) {\n if (!anotherAtom.state.active) {\n execute(anotherAtom as DerivedAtomInternal<V>);\n }\n (atom._allDependencies ||= new Set()).add(anotherAtom);\n if (watch) {\n atom._dependencies?.delete(anotherAtom);\n (atom._wdependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._wchildren ||= new Set()).add(atom);\n } else if (!atom._wdependencies?.has(anotherAtom)) {\n (atom._dependencies ||= new Set()).add(anotherAtom);\n (anotherAtom._children ||= new Set()).add(atom);\n }\n }\n\n const { state } = anotherAtom;\n if (watch) return state as V;\n if (state.promise) throw loading;\n if (state.error) throw new Wrapped(state.error);\n return state.value as V;\n }, atom._options);\n\n if (isPromiseLike(value)) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n value.then(\n (value) => {\n if (counter === atom._counter) {\n ++atom._counter;\n if (!atom._hasValue || !Object.is(value, atom._nextValue!)) atom._nextValue = value;\n atom._nextError = undefined;\n requestPropagate(atom);\n }\n },\n (e) => {\n if (counter === atom._counter && e !== expired) {\n ++atom._counter;\n if (e !== loading) {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom._nextError = e;\n requestPropagate(atom);\n }\n }\n },\n );\n } else {\n ++atom._counter;\n if (\n !atom._hasValue ||\n (!Object.is(value, atom._nextValue) && !atom._equals?.(value, atom._nextValue!))\n ) {\n atom.state.value = atom._nextValue = value;\n atom._valueChanged = atom._hasValue = true;\n } else if (prevSuccess) {\n atom._needPropagate = false;\n }\n atom.state.error = atom._nextError = undefined;\n if (atom._resolve) {\n atom._resolve(atom._nextValue!);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n } catch (e) {\n // assert(e !== expired);\n ++atom._counter;\n if (e === loading) {\n atom.state.promise ||= new Promise((resolve, reject) => {\n atom._resolve = resolve;\n atom._reject = reject;\n });\n } else {\n if (e instanceof Wrapped) {\n e = e.e;\n } else {\n logError(e);\n }\n atom.state.error = atom._nextError = e;\n if (atom._reject) {\n atom._reject(e);\n atom._resolve = atom._reject = atom.state.promise = undefined;\n }\n }\n }\n};\n\nlet runningGc = false;\nlet gcCandidates: Set<DerivedAtomInternal<any>> = new Set();\nconst disableAtom = <Value>(atom: AtomInternal<Value>) => {\n if (\n !atom._source &&\n !atom._global &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n if (atom._gcDelay) {\n setTimeout(() => {\n gcCandidates.add(atom);\n gc();\n }, atom._gcDelay);\n } else {\n gcCandidates.add(atom);\n if (!runningGc) {\n runningGc = true;\n setTimeout(gc, 0);\n }\n }\n }\n};\nconst gc = () => {\n for (const atom of gcCandidates) {\n if (\n !atom._source &&\n !atom._global &&\n !atom._children?.size &&\n !atom._watchers?.size &&\n !atom._subscribers?.size\n ) {\n atom._ctrl?.abort();\n // atom._reject?.(null);\n ++atom._counter;\n atom._nextValue =\n atom._nextError =\n atom.state.error =\n atom.state.value =\n atom.state.promise =\n atom._resolve =\n atom._reject =\n atom._ctrl =\n undefined;\n atom._needPropagate = atom._needExecute = atom._hasValue = atom.state.active = false;\n atom._valueChanged = atom._source;\n if (atom._allDependencies) {\n if (atom._dependencies) {\n for (const dep of atom._dependencies) {\n dep._children!.delete(atom);\n }\n atom._dependencies.clear();\n }\n if (atom._wdependencies) {\n for (const dep of atom._wdependencies) {\n dep._wchildren!.delete(atom);\n }\n atom._wdependencies.clear();\n }\n for (const dep of atom._allDependencies) {\n disableAtom(dep);\n }\n atom._allDependencies.clear();\n }\n }\n }\n gcCandidates.clear();\n runningGc = false;\n};\n\nconst isPromiseLike = (x: unknown): x is PromiseLike<unknown> =>\n typeof (x as PromiseLike<unknown>)?.then === \"function\";\n\nconst createThenableSignal = () => {\n const ctrl = new AbortController();\n const signal = ctrl.signal as ThenableSignal;\n const promise = new Promise((resolve) => {\n signal.then = (f: () => void) => promise.then(f);\n signal.addEventListener(\"abort\", resolve, {\n once: true,\n passive: true,\n });\n });\n return {\n abort: () => ctrl.abort(),\n signal,\n };\n};\n\nconst logError = (e: unknown) => {\n // Chrome's console.error doesn't follow the stack trace of the given Error\n queueMicrotask(() => {\n throw e;\n });\n};\n","import { $, isAtom, isPrimitiveAtom } from \"./atom.ts\";\nimport type { PrimitiveAtom, Atom, AtomGetter, DerivedAtom } from \"./atom.ts\";\n\nexport type Atomized<T> = T extends object ? { [K in keyof T]: Atomized<T[K]> } : PrimitiveAtom<T>;\n\nexport type CollectedAtoms<T> =\n T extends Atom<infer U> ? U : T extends object ? { [K in keyof T]: CollectedAtoms<T[K]> } : T;\n\ntype CollectAtom = {\n <Value>(init: AtomGetter<Value>): DerivedAtom<Value>;\n <Value>(init: Value): DerivedAtom<CollectedAtoms<Value>>;\n};\n\nexport type RecursiveOptional<T> =\n | T\n | (T extends object\n ? {\n [P in keyof T]: RecursiveOptional<T[P]>;\n }\n : never);\n\nconst ouroboros: any = () => ouroboros;\nconst toUndefined = () => undefined;\nObject.setPrototypeOf(\n ouroboros,\n new Proxy(ouroboros, {\n get: (_, k) => (k === Symbol.toPrimitive ? toUndefined : ouroboros),\n }),\n);\n\nexport const atomize = <T>(tree: T): Atomized<T> => {\n if (typeof tree !== \"object\" || tree === null) return $(tree) as any;\n if (Array.isArray(tree)) return tree.map(atomize) as any;\n const result = Object.create(null);\n for (const k in tree) result[k] = atomize(tree[k]);\n return result;\n};\n\nconst getAtom = <T>(atom: Atom<T>): T => atom.get();\nexport const collectAtoms = <T>(tree: T, get = getAtom): CollectedAtoms<T> => {\n const recurse = <T>(t: T): CollectedAtoms<T> => {\n if (typeof t !== \"object\" || t === null) return t as any;\n if (isAtom(t)) return get(t) as any;\n if (Array.isArray(t)) return t.map(recurse) as any;\n const result = Object.create(null);\n for (const k in t) result[k] = recurse(t[k] as any);\n return result;\n };\n return recurse(tree);\n};\n\nexport const setAtoms = <T>(tree: T, values: RecursiveOptional<CollectedAtoms<T>>): void => {\n const recurse = (t: any, v: any) => {\n if (typeof t === \"object\" && t !== null) {\n if (isAtom(t)) {\n if (isPrimitiveAtom(t)) t.set(v);\n } else {\n for (const k in v) recurse(t[k], v[k]);\n }\n }\n };\n recurse(tree, values);\n};\n\nexport const $$: CollectAtom = <Value>(init: Value | AtomGetter<Value>) =>\n init instanceof Function\n ? $(\n (get, options) => {\n let promises: PromiseLike<unknown>[] | undefined;\n let error: unknown;\n const result = init((atom) => {\n const state = get(atom, true);\n if (state.error) error = state.error;\n else if (state.promise) (promises ||= []).push(state.promise);\n else return state.value;\n return ouroboros;\n }, options);\n if (error) throw error;\n return promises ? Promise.all(promises) : result;\n },\n {\n equals: shallowEquals,\n },\n )\n : $$((get) => collectAtoms(init, get));\n\nconst shallowEquals = (a: any, b: any): boolean => {\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) return false;\n const c = a.constructor;\n if (c !== b.constructor) return false;\n\n if (c === Array) {\n let i = a.length;\n if (i !== b.length) return false;\n while ((i = (i - 1) | 0) >= 0) if (!Object.is(a[i], b[i])) return false;\n return true;\n }\n\n let n = 0;\n for (const k in a) {\n if (!(k in b && Object.is(a[k], b[k]))) return false;\n n = (n + 1) | 0;\n }\n for (const _ in b) if ((n = (n - 1) | 0) < 0) return false;\n return true;\n};\n"],"mappings":"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"}
package/dist/react.d.mts CHANGED
@@ -9,17 +9,17 @@ declare const useForkedAtom: <Value>(atom: DerivedAtom<Value>, injectedEntries?:
9
9
  declare const useAtomValue: <Value>(atom: Atom<Value>) => Value;
10
10
  declare const useAtomState: <Value>(atom: DerivedAtom<Value>) => {
11
11
  active: false;
12
- error: any;
12
+ error: unknown;
13
13
  promise: undefined;
14
14
  value?: Value | undefined;
15
15
  } | {
16
16
  active: true;
17
- error: any;
17
+ error: unknown;
18
18
  promise: PromiseLike<Value>;
19
19
  value?: Value | undefined;
20
20
  } | {
21
21
  active: true;
22
- error: any;
22
+ error: unknown;
23
23
  promise: undefined;
24
24
  value?: Value | undefined;
25
25
  } | {
@@ -1 +1 @@
1
- {"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import { $, isAtom, isPrimitiveAtom } from \"./atom.ts\";\nimport type { PrimitiveAtom, Atom, AtomGetter, DerivedAtom } from \"./atom.ts\";\n\nexport type Atomized<T> = T extends object ? { [K in keyof T]: Atomized<T[K]> } : PrimitiveAtom<T>;\n\nexport type CollectedAtoms<T> =\n T extends Atom<infer U> ? U : T extends object ? { [K in keyof T]: CollectedAtoms<T[K]> } : T;\n\ntype CollectAtom = {\n <Value>(init: AtomGetter<Value>): DerivedAtom<Value>;\n <Value>(init: Value): DerivedAtom<CollectedAtoms<Value>>;\n};\n\nexport type RecursiveOptional<T> =\n | T\n | (T extends object\n ? {\n [P in keyof T]: RecursiveOptional<T[P]>;\n }\n : never);\n\nconst ouroboros: any = () => ouroboros;\nconst toUndefined = () => undefined;\nObject.setPrototypeOf(\n ouroboros,\n new Proxy(ouroboros, {\n get: (_, k) => (k === Symbol.toPrimitive ? toUndefined : ouroboros),\n }),\n);\n\nexport const atomize = <T>(tree: T): Atomized<T> => {\n if (typeof tree !== \"object\" || tree === null) return $(tree) as any;\n if (Array.isArray(tree)) return tree.map(atomize) as any;\n const result = Object.create(null);\n for (const k in tree) result[k] = atomize(tree[k]);\n return result;\n};\n\nconst getAtom = <T>(atom: Atom<T>): T => atom.get();\nexport const collectAtoms = <T>(tree: T, get = getAtom): CollectedAtoms<T> => {\n const recurse = <T>(t: T): CollectedAtoms<T> => {\n if (typeof t !== \"object\" || t === null) return t as any;\n if (isAtom(t)) return get(t) as any;\n if (Array.isArray(t)) return t.map(recurse) as any;\n const result = Object.create(null);\n for (const k in t) result[k] = recurse(t[k] as any);\n return result;\n };\n return recurse(tree);\n};\n\nexport const setAtoms = <T>(tree: T, values: RecursiveOptional<CollectedAtoms<T>>): void => {\n const recurse = (t: any, v: any) => {\n if (typeof t === \"object\" && t !== null) {\n if (isAtom(t)) {\n if (isPrimitiveAtom(t)) t.set(v);\n } else {\n for (const k in v) recurse(t[k], v[k]);\n }\n }\n };\n recurse(tree, values);\n};\n\nexport const $$: CollectAtom = <Value>(init: Value | AtomGetter<Value>) =>\n init instanceof Function\n ? $(\n (get, options) => {\n let promises: PromiseLike<any>[] | undefined;\n let error: unknown;\n const result = init((atom) => {\n const state = get(atom, true);\n if (state.error) error = state.error;\n else if (state.promise) (promises ||= []).push(state.promise);\n else return state.value;\n return ouroboros;\n }, options);\n if (error) throw error;\n return promises ? Promise.all(promises) : result;\n },\n {\n equals: shallowEquals,\n },\n )\n : $$((get) => collectAtoms(init, get));\n\nconst shallowEquals = (a: any, b: any): boolean => {\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) return false;\n const c = a.constructor;\n if (c !== b.constructor) return false;\n\n if (c === Array) {\n let i = a.length;\n if (i !== b.length) return false;\n while ((i = (i - 1) | 0) >= 0) if (!Object.is(a[i], b[i])) return false;\n return true;\n }\n\n let n = 0;\n for (const k in a) {\n if (!(k in b && Object.is(a[k], b[k]))) return false;\n n = (n + 1) | 0;\n }\n for (const _ in b) if ((n = (n - 1) | 0) < 0) return false;\n return true;\n};\n"],"mappings":";;AAqBA,MAAM,kBAAuB;AAC7B,MAAM,oBAAoB,KAAA;AAC1B,OAAO,eACL,WACA,IAAI,MAAM,WAAW,EACnB,MAAM,GAAG,MAAO,MAAM,OAAO,cAAc,cAAc,WAC1D,CAAC,CACH;AAED,MAAa,WAAc,SAAyB;AAClD,KAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO,EAAE,KAAK;AAC7D,KAAI,MAAM,QAAQ,KAAK,CAAE,QAAO,KAAK,IAAI,QAAQ;CACjD,MAAM,SAAS,OAAO,OAAO,KAAK;AAClC,MAAK,MAAM,KAAK,KAAM,QAAO,KAAK,QAAQ,KAAK,GAAG;AAClD,QAAO;;AAGT,MAAM,WAAc,SAAqB,KAAK,KAAK;AACnD,MAAa,gBAAmB,MAAS,MAAM,YAA+B;CAC5E,MAAM,WAAc,MAA4B;AAC9C,MAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,MAAI,OAAO,EAAE,CAAE,QAAO,IAAI,EAAE;AAC5B,MAAI,MAAM,QAAQ,EAAE,CAAE,QAAO,EAAE,IAAI,QAAQ;EAC3C,MAAM,SAAS,OAAO,OAAO,KAAK;AAClC,OAAK,MAAM,KAAK,EAAG,QAAO,KAAK,QAAQ,EAAE,GAAU;AACnD,SAAO;;AAET,QAAO,QAAQ,KAAK;;AAGtB,MAAa,YAAe,MAAS,WAAuD;CAC1F,MAAM,WAAW,GAAQ,MAAW;AAClC,MAAI,OAAO,MAAM,YAAY,MAAM,KACjC,KAAI,OAAO,EAAE;OACP,gBAAgB,EAAE,CAAE,GAAE,IAAI,EAAE;QAEhC,MAAK,MAAM,KAAK,EAAG,SAAQ,EAAE,IAAI,EAAE,GAAG;;AAI5C,SAAQ,MAAM,OAAO;;AAGvB,MAAa,MAA0B,SACrC,gBAAgB,WACZ,GACG,KAAK,YAAY;CAChB,IAAI;CACJ,IAAI;CACJ,MAAM,SAAS,MAAM,SAAS;EAC5B,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC7B,MAAI,MAAM,MAAO,SAAQ,MAAM;WACtB,MAAM,QAAS,EAAC,aAAa,EAAE,EAAE,KAAK,MAAM,QAAQ;MACxD,QAAO,MAAM;AAClB,SAAO;IACN,QAAQ;AACX,KAAI,MAAO,OAAM;AACjB,QAAO,WAAW,QAAQ,IAAI,SAAS,GAAG;GAE5C,EACE,QAAQ,eACT,CACF,GACD,IAAI,QAAQ,aAAa,MAAM,IAAI,CAAC;AAE1C,MAAM,iBAAiB,GAAQ,MAAoB;AACjD,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC,EAAG,QAAO;CACvE,MAAM,IAAI,EAAE;AACZ,KAAI,MAAM,EAAE,YAAa,QAAO;AAEhC,KAAI,MAAM,OAAO;EACf,IAAI,IAAI,EAAE;AACV,MAAI,MAAM,EAAE,OAAQ,QAAO;AAC3B,UAAQ,IAAK,IAAI,IAAK,MAAM,EAAG,KAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO;AAClE,SAAO;;CAGT,IAAI,IAAI;AACR,MAAK,MAAM,KAAK,GAAG;AACjB,MAAI,EAAE,KAAK,KAAK,OAAO,GAAG,EAAE,IAAI,EAAE,GAAG,EAAG,QAAO;AAC/C,MAAK,IAAI,IAAK;;AAEhB,MAAK,MAAM,KAAK,EAAG,MAAK,IAAK,IAAI,IAAK,KAAK,EAAG,QAAO;AACrD,QAAO"}
1
+ {"version":3,"file":"utils.mjs","names":[],"sources":["../src/utils.ts"],"sourcesContent":["import { $, isAtom, isPrimitiveAtom } from \"./atom.ts\";\nimport type { PrimitiveAtom, Atom, AtomGetter, DerivedAtom } from \"./atom.ts\";\n\nexport type Atomized<T> = T extends object ? { [K in keyof T]: Atomized<T[K]> } : PrimitiveAtom<T>;\n\nexport type CollectedAtoms<T> =\n T extends Atom<infer U> ? U : T extends object ? { [K in keyof T]: CollectedAtoms<T[K]> } : T;\n\ntype CollectAtom = {\n <Value>(init: AtomGetter<Value>): DerivedAtom<Value>;\n <Value>(init: Value): DerivedAtom<CollectedAtoms<Value>>;\n};\n\nexport type RecursiveOptional<T> =\n | T\n | (T extends object\n ? {\n [P in keyof T]: RecursiveOptional<T[P]>;\n }\n : never);\n\nconst ouroboros: any = () => ouroboros;\nconst toUndefined = () => undefined;\nObject.setPrototypeOf(\n ouroboros,\n new Proxy(ouroboros, {\n get: (_, k) => (k === Symbol.toPrimitive ? toUndefined : ouroboros),\n }),\n);\n\nexport const atomize = <T>(tree: T): Atomized<T> => {\n if (typeof tree !== \"object\" || tree === null) return $(tree) as any;\n if (Array.isArray(tree)) return tree.map(atomize) as any;\n const result = Object.create(null);\n for (const k in tree) result[k] = atomize(tree[k]);\n return result;\n};\n\nconst getAtom = <T>(atom: Atom<T>): T => atom.get();\nexport const collectAtoms = <T>(tree: T, get = getAtom): CollectedAtoms<T> => {\n const recurse = <T>(t: T): CollectedAtoms<T> => {\n if (typeof t !== \"object\" || t === null) return t as any;\n if (isAtom(t)) return get(t) as any;\n if (Array.isArray(t)) return t.map(recurse) as any;\n const result = Object.create(null);\n for (const k in t) result[k] = recurse(t[k] as any);\n return result;\n };\n return recurse(tree);\n};\n\nexport const setAtoms = <T>(tree: T, values: RecursiveOptional<CollectedAtoms<T>>): void => {\n const recurse = (t: any, v: any) => {\n if (typeof t === \"object\" && t !== null) {\n if (isAtom(t)) {\n if (isPrimitiveAtom(t)) t.set(v);\n } else {\n for (const k in v) recurse(t[k], v[k]);\n }\n }\n };\n recurse(tree, values);\n};\n\nexport const $$: CollectAtom = <Value>(init: Value | AtomGetter<Value>) =>\n init instanceof Function\n ? $(\n (get, options) => {\n let promises: PromiseLike<unknown>[] | undefined;\n let error: unknown;\n const result = init((atom) => {\n const state = get(atom, true);\n if (state.error) error = state.error;\n else if (state.promise) (promises ||= []).push(state.promise);\n else return state.value;\n return ouroboros;\n }, options);\n if (error) throw error;\n return promises ? Promise.all(promises) : result;\n },\n {\n equals: shallowEquals,\n },\n )\n : $$((get) => collectAtoms(init, get));\n\nconst shallowEquals = (a: any, b: any): boolean => {\n if (typeof a !== \"object\" || typeof b !== \"object\" || !a || !b) return false;\n const c = a.constructor;\n if (c !== b.constructor) return false;\n\n if (c === Array) {\n let i = a.length;\n if (i !== b.length) return false;\n while ((i = (i - 1) | 0) >= 0) if (!Object.is(a[i], b[i])) return false;\n return true;\n }\n\n let n = 0;\n for (const k in a) {\n if (!(k in b && Object.is(a[k], b[k]))) return false;\n n = (n + 1) | 0;\n }\n for (const _ in b) if ((n = (n - 1) | 0) < 0) return false;\n return true;\n};\n"],"mappings":";;AAqBA,MAAM,kBAAuB;AAC7B,MAAM,oBAAoB,KAAA;AAC1B,OAAO,eACL,WACA,IAAI,MAAM,WAAW,EACnB,MAAM,GAAG,MAAO,MAAM,OAAO,cAAc,cAAc,WAC1D,CAAC,CACH;AAED,MAAa,WAAc,SAAyB;AAClD,KAAI,OAAO,SAAS,YAAY,SAAS,KAAM,QAAO,EAAE,KAAK;AAC7D,KAAI,MAAM,QAAQ,KAAK,CAAE,QAAO,KAAK,IAAI,QAAQ;CACjD,MAAM,SAAS,OAAO,OAAO,KAAK;AAClC,MAAK,MAAM,KAAK,KAAM,QAAO,KAAK,QAAQ,KAAK,GAAG;AAClD,QAAO;;AAGT,MAAM,WAAc,SAAqB,KAAK,KAAK;AACnD,MAAa,gBAAmB,MAAS,MAAM,YAA+B;CAC5E,MAAM,WAAc,MAA4B;AAC9C,MAAI,OAAO,MAAM,YAAY,MAAM,KAAM,QAAO;AAChD,MAAI,OAAO,EAAE,CAAE,QAAO,IAAI,EAAE;AAC5B,MAAI,MAAM,QAAQ,EAAE,CAAE,QAAO,EAAE,IAAI,QAAQ;EAC3C,MAAM,SAAS,OAAO,OAAO,KAAK;AAClC,OAAK,MAAM,KAAK,EAAG,QAAO,KAAK,QAAQ,EAAE,GAAU;AACnD,SAAO;;AAET,QAAO,QAAQ,KAAK;;AAGtB,MAAa,YAAe,MAAS,WAAuD;CAC1F,MAAM,WAAW,GAAQ,MAAW;AAClC,MAAI,OAAO,MAAM,YAAY,MAAM,KACjC,KAAI,OAAO,EAAE;OACP,gBAAgB,EAAE,CAAE,GAAE,IAAI,EAAE;QAEhC,MAAK,MAAM,KAAK,EAAG,SAAQ,EAAE,IAAI,EAAE,GAAG;;AAI5C,SAAQ,MAAM,OAAO;;AAGvB,MAAa,MAA0B,SACrC,gBAAgB,WACZ,GACG,KAAK,YAAY;CAChB,IAAI;CACJ,IAAI;CACJ,MAAM,SAAS,MAAM,SAAS;EAC5B,MAAM,QAAQ,IAAI,MAAM,KAAK;AAC7B,MAAI,MAAM,MAAO,SAAQ,MAAM;WACtB,MAAM,QAAS,EAAC,aAAa,EAAE,EAAE,KAAK,MAAM,QAAQ;MACxD,QAAO,MAAM;AAClB,SAAO;IACN,QAAQ;AACX,KAAI,MAAO,OAAM;AACjB,QAAO,WAAW,QAAQ,IAAI,SAAS,GAAG;GAE5C,EACE,QAAQ,eACT,CACF,GACD,IAAI,QAAQ,aAAa,MAAM,IAAI,CAAC;AAE1C,MAAM,iBAAiB,GAAQ,MAAoB;AACjD,KAAI,OAAO,MAAM,YAAY,OAAO,MAAM,YAAY,CAAC,KAAK,CAAC,EAAG,QAAO;CACvE,MAAM,IAAI,EAAE;AACZ,KAAI,MAAM,EAAE,YAAa,QAAO;AAEhC,KAAI,MAAM,OAAO;EACf,IAAI,IAAI,EAAE;AACV,MAAI,MAAM,EAAE,OAAQ,QAAO;AAC3B,UAAQ,IAAK,IAAI,IAAK,MAAM,EAAG,KAAI,CAAC,OAAO,GAAG,EAAE,IAAI,EAAE,GAAG,CAAE,QAAO;AAClE,SAAO;;CAGT,IAAI,IAAI;AACR,MAAK,MAAM,KAAK,GAAG;AACjB,MAAI,EAAE,KAAK,KAAK,OAAO,GAAG,EAAE,IAAI,EAAE,GAAG,EAAG,QAAO;AAC/C,MAAK,IAAI,IAAK;;AAEhB,MAAK,MAAM,KAAK,EAAG,MAAK,IAAK,IAAI,IAAK,KAAK,EAAG,QAAO;AACrD,QAAO"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bansa",
3
- "version": "0.0.34",
3
+ "version": "0.0.37",
4
4
  "description": "",
5
5
  "keywords": [
6
6
  "bansa",