@pumped-fn/core-next 0.5.39 → 0.5.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,13 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [commit-and-tag-version](https://github.com/absolute-version/commit-and-tag-version) for commit guidelines.
4
4
 
5
+ ## [0.5.40](https://github.com/pumped-fn/pumped-fn/compare/@pumped-fn/next@0.5.39...@pumped-fn/next@0.5.40) (2025-05-19)
6
+
7
+
8
+ ### Features
9
+
10
+ * added preset to scope, now preset can be used to test ([f501c68](https://github.com/pumped-fn/pumped-fn/commit/f501c68588402624c545649c7da51ecbd502875f))
11
+
5
12
  ## [0.5.39](https://github.com/pumped-fn/pumped-fn/compare/@pumped-fn/next@0.5.38...@pumped-fn/next@0.5.39) (2025-05-15)
6
13
 
7
14
 
package/README.md CHANGED
@@ -1,14 +1,101 @@
1
+ DO NOT GIVE ME HIGH LEVEL STUFF, IF I ASK FOR FIX OR
2
+ EXPLANATION, I WANT ACTUAL CODE OR EXPLANATION!!! I DONT
3
+ WANT "Here's how you can blablabla"
4
+ Be casual unless otherwise specified
5
+ Be terse
6
+ Suggest solutions that I didn't think about—anticipate my needs
7
+ Treat me as an expert
8
+ Be accurate and thorough
9
+ Give the answer immediately. Provide detailed explanations and restate
10
+ my query in your own words if necessary after giving the answer
11
+ Value good arguments over authorities, the source is irrelevant
12
+ Consider new technologies and contrarian ideas, not just the
13
+ conventional wisdom
14
+ You may use high levels of speculation or prediction, just flag it for me
15
+ No moral lectures
16
+ Discuss safety only when it's crucial and non-obvious
17
+ If your content policy is an issue, provide the closest acceptable
18
+ response and exp
19
+
20
+
1
21
  # Pumped fn
2
22
 
3
- A function on steroid. A practical library to provide multiple much needed orchestration for any application (frontend or backend)
23
+ Minimal set of library providing functional encapsulation.
24
+
25
+ # Usages
26
+ - Assume all of those functions are from `@pumped-fn/core-next`
27
+ - Operator are all directly exported from the package
28
+ - Always try to infer instead of explicit declaration
29
+
30
+ ## Container and resolver
31
+ Fns helps you create multiple containers. Those are lazy by default and will only resolve via a scope
32
+
33
+ A scope is a simple facility created using `createScope`
34
+
35
+ ## Scope
36
+
37
+ - `scope#resolve(executor)` will resolve to a `Promise<value>`
38
+ - `scope#accessor(executor)` will return a Core.Accessor which can help to `get`, `resolve`, `lookup` or `subscribe`
39
+
40
+ ## Executor
41
+ Executor is the container. Executor has certain methods letting you declare its as dependencies in a various way
42
+ - as it is, will return the value, without being interactive
43
+ - reactive, will return the accessor, and resolve the value if it's yet resolved
44
+ - lazy, will return the accessor, without resolving it
45
+ - static, will resolve to the value
46
+
47
+ ## Usage
48
+
49
+ ```typescript
50
+ const counter = provide(() => 0) // Core.Executor<number>
4
51
 
5
- # Quick start
52
+ // different usage of derive, look at the argument of the callback
53
+ const derivedValue = derive(counter, (counter) => { /* code */ })
54
+ const derivedValue = derive({ counter }, ({ counter }) => { /* code */ })
55
+ const derivedValue = derive([counter], ([counter]) => { /* code */ })
56
+ ```
6
57
 
7
58
  ```typescript
8
- import { createScope, provide, derive } from "@pumped-fn/core-next"
59
+ // container can also be reactive, the factory function will be recalled as those dependencies change
9
60
 
10
- const logLevel = provide(() => "debug")
11
- const logger = derive(logLevel, () => )
61
+ const derivedValue = derive(counter.reactive, (counter) => /* this code will be called whenever counter got updated */)
62
+
63
+ // to update counter
64
+ scope.update(counter, /* new value */)
65
+ ```
66
+
67
+ ```typescript
68
+ // life cycle. The cleanup will be called on [scope dispose], [or resource update], [or resource being released]
69
+ const derivedValue = derive(counter.reactive, (counter, controller) => {
70
+ // create resource ...
71
+ controller.cleanup(() => { /* cleanup code */ })
72
+
73
+ return resource
74
+ })
75
+
76
+ // to release
77
+ scope.release(derivedValue)
78
+
79
+ // or be released as the dependency released
80
+ scope.release(counter)
81
+ ```
82
+
83
+ ## Meta
84
+
85
+ Meta are decorative information to the executor. Meta uses StandardSchema (zod, valibot, arktype etc) to enforce typing. `custom` is included within the library, it doesn't do any validation
86
+
87
+ ```typescript
88
+ // adding debug name
89
+ const debugName = meta('debug', custom<string>())
12
90
 
91
+ const counter = provide(() => 0, debugName('counter'))
13
92
 
93
+ // then meta can be accessed using accessor
94
+ const derivedCounter = derive(counter.static, counter => {
95
+ counter.metas // would give you access to the given meta
96
+ // or
97
+ debugName.find(counter) // should give you 'counter' | undefined
98
+ // or
99
+ debugName.get(counter) // will throw error if no value found
100
+ })
14
101
  ```
package/dist/index.cjs CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var C=Object.defineProperty;var D=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var P=Object.prototype.hasOwnProperty;var R=(o,e)=>{for(var t in e)C(o,t,{get:e[t],enumerable:!0})},O=(o,e,t,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of V(e))!P.call(o,r)&&r!==t&&C(o,r,{get:()=>e[r],enumerable:!(n=D(e,r))||n.enumerable});return o};var U=o=>O(C({},"__esModule",{value:!0}),o);var K={};R(K,{SchemaError:()=>p,createScope:()=>L,custom:()=>z,derive:()=>I,executorSymbol:()=>d,findValue:()=>E,findValues:()=>g,getValue:()=>S,isExecutor:()=>k,isLazyExecutor:()=>x,isReactiveExecutor:()=>v,isStaticExecutor:()=>m,meta:()=>j,metaSymbol:()=>y,provide:()=>F,validate:()=>T,validateAsync:()=>B});module.exports=U(K);var d=Symbol.for("@pumped-fn/core/executor"),y=Symbol.for("@pumped-fn/core/meta"),p=class extends Error{issues;constructor(e){super(e[0].message),this.name="SchemaError",this.issues=e}};function b(o,e,t){let n={[d]:"base",factory:(f,a)=>e===void 0?o(a):o(f,a),dependencies:e,metas:t},r={[d]:"lazy",dependencies:void 0,executor:n,factory:void 0,metas:t},c={[d]:"reactive",executor:n,factory:void 0,dependencies:void 0,metas:t},i={[d]:"static",dependencies:void 0,factory:void 0,metas:t,executor:n};return Object.defineProperties(n,{lazy:{value:r,writable:!1,configurable:!1,enumerable:!1},reactive:{value:c,writable:!1,configurable:!1,enumerable:!1},static:{value:i,writable:!1,configurable:!1,enumerable:!1}}),n}function x(o){return o[d]==="lazy"}function v(o){return o[d]==="reactive"}function m(o){return o[d]==="static"}function k(o){return typeof o=="object"&&o!==null&&d in o}function F(o,...e){return b(o,void 0,e)}function I(o,e,...t){return b(e,o,t)}function T(o,e){let t=o["~standard"].validate(e);if("then"in t)throw new Error("validating async is not supported");if(t.issues)throw new p(t.issues);return t.value}async function B(o,e){let t=o["~standard"].validate(e);if("then"in t){let n=await t;if(n.issues)throw new p(n.issues);return n.value}if(t.issues)throw new p(t.issues);return Promise.resolve(t.value)}function z(){return{"~standard":{vendor:"pumped-fn",version:1,validate:o=>({value:o})}}}var j=(o,e)=>{let t=typeof o=="string"?Symbol(o):o,n=r=>({[y]:!0,key:t,schema:e,value:r});return Object.defineProperty(n,"key",{value:t,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperty(n,y,{value:!0,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperties(n,{partial:{value:r=>Object.assign({},n({}),r),configurable:!1,enumerable:!1,writable:!1},some:{value:r=>g(r,n),configurable:!1,enumerable:!1,writable:!1},find:{value:r=>E(r,n),configurable:!1,enumerable:!1,writable:!1},get:{value:r=>S(E(r,n)),configurable:!1,enumerable:!1,writable:!1}}),n};function S(o){return T(o.schema,o.value)}function g(o,e){return o?(Array.isArray(o)?o:o.metas??[]).filter(r=>r.key===e.key).map(r=>S(r)):[]}function E(o,e){return g(o,e).at(0)}var M=class{isDisposed=!1;cache=new Map;valueCache=new Map;reactiveness=new Map;cleanups=new Map;onUpdates=new Map;"~appendReactive"(e,t){let n=this.reactiveness.get(e)??new Set;this.reactiveness.set(e,n),n.add(t)}async"~resolveDependencies"(e,t){if(e===void 0)return;if(k(e)){if(x(e))return this["~resolveLazy"](e);let r=await this["~resolveStatic"](e);return v(e)&&this["~appendReactive"](e.executor,t),await r.resolve(!1),m(e)?r:r.get()}if(Array.isArray(e))return await Promise.all(e.map(r=>this["~resolveDependencies"](r,t)));let n={};for(let r of Object.keys(e)){let c=e[r],i=await this["~resolveDependencies"](c,t);n[r]=i}return n}"~resolveLazy"(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.cache.get(e.executor);return t||this["~makeAccessor"](e.executor)}async"~resolveStatic"(e){let t=this.cache.get(e);return t||this["~makeAccessor"](e,!0)}"~makeController"(e){return{cleanup:t=>{let n=this.cleanups.get(e)??new Set;this.cleanups.set(e,n),n.add(t)},release:async()=>{this.release(e)},scope:this}}"~makeAccessor"(e,t=!1){let n={},r=x(e)||v(e)||m(e)?e.executor:e,c=this.cache.get(r);if(c)return c;let i=r.factory,f=this["~makeController"](r),a=async s=>{if(this.isDisposed)throw new Error("Scope is disposed");let u=this.valueCache.get(r);if(u&&!s){if(u.kind==="resolved")return u.value;if(u.kind==="rejected")throw u.error;return u.promise}let h=new Promise((w,A)=>{this["~resolveDependencies"](r.dependencies,r).then(l=>i(l,f)).then(l=>{this.valueCache.set(r,{kind:"resolved",value:l}),w(l)}).catch(l=>{this.valueCache.set(r,{kind:"rejected",error:l}),A(l)})});return this.valueCache.set(r,{kind:"resolving",promise:h}),this.cache.set(r,n),h};return(!x(e)||t)&&a(!1),Object.assign(n,{get:()=>{if(this.isDisposed)throw new Error("Scope is disposed");let s=this.valueCache.get(r);if(!s||s.kind==="resolving")throw new Error("Executor not found");if(s.kind==="rejected")throw s.error;return s.value},lookup:()=>{if(this.isDisposed)throw new Error("Scope is disposed");return this.valueCache.get(r)},metas:e.metas,resolve:a,release:async(s=!1)=>{this.release(r,s)},update:s=>this.update(r,s),subscribe:s=>{if(this.isDisposed)throw new Error("Scope is disposed");return this.onUpdate(r,s)}})}accessor(e){if(this.isDisposed)throw new Error("Scope is disposed");return this["~makeAccessor"](e,!1)}async resolve(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.valueCache.get(e);if(t){if(t.kind==="resolved")return t.value;if(t.kind==="rejected")throw t.error;return await t.promise}let n=this["~makeAccessor"](e,!0);return await n.resolve(!1),n.get()}async resolveAccessor(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.cache.get(e);if(!t){let n=this["~makeAccessor"](e,!0);return await n.resolve(),n}return await t.resolve(),t}"~findAffectedTargets"(e,t=new Set){let n=this.reactiveness.get(e);if(n&&n.size>0)for(let r of n)t.has(r)&&t.delete(r),t.add(r),this.reactiveness.has(r)&&this["~findAffectedTargets"](r,t);return t}async update(e,t){if(this.isDisposed)throw new Error("Scope is disposed");let n=this.cache.get(e);if(!n)throw new Error("Executor is not yet resolved");let r=await n.resolve(!1),c=this.cleanups.get(e);if(c)for(let a of Array.from(c.values()).reverse())await a();if(typeof t=="function"){let s=t(r);this.valueCache.set(e,{kind:"resolved",value:s})}else this.valueCache.set(e,{kind:"resolved",value:t});let i=this.onUpdates.get(e);if(i)for(let a of Array.from(i.values()))await a(n);let f=this["~findAffectedTargets"](e);for(let a of f){let s=this.cache.get(a);if(s){let u=this.cleanups.get(a);if(u)for(let w of Array.from(u.values()).reverse())await w();await s.resolve(!0);let h=this.onUpdates.get(a);if(h)for(let w of Array.from(h.values()))await w(s)}}}async reset(e){if(this.isDisposed)throw new Error("Scope is disposed");await this.release(e,!0),await this.resolve(e)}async release(e,t=!1){if(this.isDisposed)throw new Error("Scope is disposed");if(!this.cache.get(e)&&!t)throw new Error("Executor is not yet resolved");let r=this["~findAffectedTargets"](e);for(let i of r)await this.release(i,!0);let c=this.cleanups.get(e);if(c)for(let i of Array.from(c.values()).reverse())await i();this.cache.delete(e),this.valueCache.delete(e),this.reactiveness.delete(e),this.onUpdates.delete(e)}async dispose(){let e=this.cache.keys();for(let t of e)await this.release(t,!0);this.isDisposed=!0,this.cache.clear(),this.valueCache.clear(),this.reactiveness.clear(),this.cleanups.clear()}onUpdate(e,t){if(this.isDisposed)throw new Error("scope is disposed");let n=this.onUpdates.get(e)??new Set;return this.onUpdates.set(e,n),n.add(t),()=>{if(this.isDisposed)throw new Error("scope is disposed");let r=this.onUpdates.get(e);r&&(r.delete(t),r.size===0&&this.onUpdates.delete(e))}}getCache(){return this.cache}getValueCache(){return this.valueCache}getReactiveness(){return this.reactiveness}};function L(){return new M}0&&(module.exports={SchemaError,createScope,custom,derive,executorSymbol,findValue,findValues,getValue,isExecutor,isLazyExecutor,isReactiveExecutor,isStaticExecutor,meta,metaSymbol,provide,validate,validateAsync});
1
+ "use strict";var w=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var V=Object.prototype.hasOwnProperty;var O=(r,e)=>{for(var t in e)w(r,t,{get:e[t],enumerable:!0})},F=(r,e,t,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of A(e))!V.call(r,n)&&n!==t&&w(r,n,{get:()=>e[n],enumerable:!(o=U(e,n))||o.enumerable});return r};var R=r=>F(w({},"__esModule",{value:!0}),r);var q={};O(q,{SchemaError:()=>d,createScope:()=>_,custom:()=>j,derive:()=>N,executorSymbol:()=>c,findValue:()=>E,findValues:()=>S,getValue:()=>k,isExecutor:()=>v,isLazyExecutor:()=>p,isMainExecutor:()=>h,isReactiveExecutor:()=>f,isStaticExecutor:()=>x,meta:()=>K,metaSymbol:()=>m,preset:()=>B,provide:()=>I,validate:()=>C,validateAsync:()=>z});module.exports=R(q);var c=Symbol.for("@pumped-fn/core/executor"),m=Symbol.for("@pumped-fn/core/meta"),d=class extends Error{issues;constructor(e){super(e[0].message),this.name="SchemaError",this.issues=e}};function g(r,e,t){let o={[c]:"main",factory:(T,a)=>e===void 0?r(a):r(T,a),dependencies:e,metas:t},n={[c]:"lazy",dependencies:void 0,executor:o,factory:void 0,metas:t},s={[c]:"reactive",executor:o,factory:void 0,dependencies:void 0,metas:t},l={[c]:"static",dependencies:void 0,factory:void 0,metas:t,executor:o};return Object.defineProperties(o,{lazy:{value:n,writable:!1,configurable:!1,enumerable:!1},reactive:{value:s,writable:!1,configurable:!1,enumerable:!1},static:{value:l,writable:!1,configurable:!1,enumerable:!1}}),o}function p(r){return r[c]==="lazy"}function f(r){return r[c]==="reactive"}function x(r){return r[c]==="static"}function h(r){return v(r)&&r[c]==="main"}function v(r){return typeof r=="object"&&r!==null&&c in r}function I(r,...e){return g(r,void 0,e)}function N(r,e,...t){return g(e,r,t)}function B(r,e){return{[c]:"preset",value:e,executor:r}}function C(r,e){let t=r["~standard"].validate(e);if("then"in t)throw new Error("validating async is not supported");if(t.issues)throw new d(t.issues);return t.value}async function z(r,e){let t=r["~standard"].validate(e);if("then"in t){let o=await t;if(o.issues)throw new d(o.issues);return o.value}if(t.issues)throw new d(t.issues);return Promise.resolve(t.value)}function j(){return{"~standard":{vendor:"pumped-fn",version:1,validate:r=>({value:r})}}}var K=(r,e)=>{let t=typeof r=="string"?Symbol(r):r,o=n=>({[m]:!0,key:t,schema:e,value:n});return Object.defineProperty(o,"key",{value:t,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperty(o,m,{value:!0,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperties(o,{partial:{value:n=>Object.assign({},o({}),n),configurable:!1,enumerable:!1,writable:!1},some:{value:n=>S(n,o),configurable:!1,enumerable:!1,writable:!1},find:{value:n=>E(n,o),configurable:!1,enumerable:!1,writable:!1},get:{value:n=>k(E(n,o)),configurable:!1,enumerable:!1,writable:!1}}),o};function k(r){return C(r.schema,r.value)}function S(r,e){return r?(Array.isArray(r)?r:r.metas??[]).filter(n=>n.key===e.key).map(n=>k(n)):[]}function E(r,e){return S(r,e).at(0)}function L(r){return p(r)||f(r)||x(r)?r.executor:r}var M=class{disposed=!1;cache=new Map;cleanups=new Map;onUpdates=new Map;constructor(...e){for(let t of e){let o=this["~makeAccessor"](t.executor);this.cache.set(t.executor,{accessor:o,value:{kind:"resolved",value:t.value}})}}async"~triggerCleanup"(e){let t=this.cleanups.get(e);if(t)for(let o of Array.from(t.values()).reverse())await o()}async"~triggerUpdate"(e){let t=this.cache.get(e);if(!t)throw new Error("Executor is not yet resolved");let o=this.onUpdates.get(e);if(o)for(let n of Array.from(o.values()))h(n)?(this.cleanups.has(n)&&this["~triggerCleanup"](n),await this.cache.get(n).accessor.resolve(!0),this.onUpdates.has(n)&&await this["~triggerUpdate"](n)):await n(t.accessor)}async"~resolveExecutor"(e,t){let o=L(e),n=this["~makeAccessor"](o);if(p(e))return n;if(f(e)){let s=this.onUpdates.get(e.executor)??new Set;this.onUpdates.set(e.executor,s),s.add(t)}return await n.resolve(!1),x(e)?n:n.get()}async"~resolveDependencies"(e,t){if(e===void 0)return;if(v(e))return this["~resolveExecutor"](e,t);if(Array.isArray(e))return await Promise.all(e.map(n=>this["~resolveDependencies"](n,t)));let o={};for(let n of Object.keys(e)){let s=e[n],l=await this["~resolveDependencies"](s,t);o[n]=l}return o}"~ensureNotDisposed"(){if(this.disposed)throw new Error("Scope is disposed")}"~makeAccessor"(e){let t=p(e)||f(e)||x(e)?e.executor:e,o=this.cache.get(t);if(o)return o.accessor;let n={},s=t.factory,l={cleanup:a=>{let y=this.cleanups.get(t)??new Set;this.cleanups.set(t,y),y.add(a)},release:async()=>this.release(t),scope:this},T=a=>{this["~ensureNotDisposed"]();let u=this.cache.get(t)?.value;if(u&&!a){if(u.kind==="resolved")return Promise.resolve(u.value);if(u.kind==="rejected")throw u.error;return u.promise}let b=new Promise((D,P)=>{this["~resolveDependencies"](t.dependencies,t).then(i=>s(i,l)).then(i=>{this.cache.set(t,{accessor:n,value:{kind:"resolved",value:i}}),D(i)}).catch(i=>{this.cache.set(t,{accessor:n,value:{kind:"rejected",error:i}}),P(i)})});return this.cache.set(t,{accessor:n,value:{kind:"resolving",promise:b}}),b};return Object.assign(n,{get:()=>{this["~ensureNotDisposed"]();let a=this.cache.get(t)?.value;if(!a||a.kind==="resolving")throw new Error("Executor is not resolved");if(a.kind==="rejected")throw a.error;return a.value},lookup:()=>(this["~ensureNotDisposed"](),this.cache.get(t)?.value),metas:e.metas,resolve:T,release:async(a=!1)=>{this.release(t,a)},update:a=>this.update(t,a),subscribe:a=>(this["~ensureNotDisposed"](),this.onUpdate(t,a))})}accessor(e){return this["~ensureNotDisposed"](),this["~makeAccessor"](e)}async resolve(e,t=!1){this["~ensureNotDisposed"]();let o=this["~makeAccessor"](e);return await o.resolve(t),o.get()}async resolveAccessor(e,t=!1){this["~ensureNotDisposed"]();let o=this["~makeAccessor"](e);return await o.resolve(t),o}async update(e,t){this["~ensureNotDisposed"](),this["~triggerCleanup"](e);let o=this["~makeAccessor"](e);if(typeof t=="function"){let s=t(o.get());this.cache.set(e,{accessor:o,value:{kind:"resolved",value:s}})}else this.cache.set(e,{accessor:o,value:{kind:"resolved",value:t}});await this["~triggerUpdate"](e)}async reset(e){if(this.disposed)throw new Error("Scope is disposed");await this.release(e,!0),await this.resolve(e,!0)}async release(e,t=!1){if(this["~ensureNotDisposed"](),!this.cache.get(e)&&!t)throw new Error("Executor is not yet resolved");await this["~triggerCleanup"](e);let n=this.onUpdates.get(e);if(n){for(let s of Array.from(n.values()))h(s)&&await this.release(s,!0);this.onUpdates.delete(e)}this.cache.delete(e)}async dispose(){this["~ensureNotDisposed"]();let e=this.cache.keys();for(let t of e)await this.release(t,!0);this.disposed=!0,this.cache.clear(),this.cleanups.clear()}onUpdate(e,t){this["~ensureNotDisposed"]();let o=this.onUpdates.get(e)??new Set;return this.onUpdates.set(e,o),o.add(t),()=>{this["~ensureNotDisposed"]();let n=this.onUpdates.get(e);n&&(n.delete(t),n.size===0&&this.onUpdates.delete(e))}}};function _(...r){return new M(...r)}0&&(module.exports={SchemaError,createScope,custom,derive,executorSymbol,findValue,findValues,getValue,isExecutor,isLazyExecutor,isMainExecutor,isReactiveExecutor,isStaticExecutor,meta,metaSymbol,preset,provide,validate,validateAsync});
2
2
  //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/types.ts","../src/executor.ts","../src/ssch.ts","../src/meta.ts","../src/scope.ts"],"sourcesContent":["export * from \"./executor\";\nexport * from \"./meta\";\nexport * from \"./scope\";\nexport * from \"./types\";\nexport * from \"./ssch\";\n","export const executorSymbol = Symbol.for(\"@pumped-fn/core/executor\");\nexport const metaSymbol = Symbol.for(\"@pumped-fn/core/meta\");\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n export interface Props<Input = unknown, Output = Input> {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n readonly types?: Types<Input, Output> | undefined;\n }\n\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n export interface SuccessResult<Output> {\n readonly value: Output;\n readonly issues?: undefined;\n }\n\n export interface FailureResult {\n readonly issues: ReadonlyArray<Issue>;\n }\n\n export interface Issue {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n export interface PathSegment {\n readonly key: PropertyKey;\n }\n\n export interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"input\"];\n\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"output\"];\n}\n\nexport class SchemaError extends Error {\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n}\n\nexport declare namespace Meta {\n export interface MetaContainer {\n metas: Meta[] | undefined;\n }\n\n export interface Meta<V = unknown> {\n readonly [metaSymbol]: true;\n readonly key: string | symbol;\n readonly schema: StandardSchemaV1<V>;\n readonly value: V;\n }\n\n export interface MetaFn<V> {\n (value: V): Meta<V>;\n readonly key: string | symbol;\n partial: <D extends Partial<V>>(d: D) => D;\n some: (source: MetaContainer | Meta[] | undefined) => V[];\n find: (source: MetaContainer | Meta[] | undefined) => V | undefined;\n get: (source: MetaContainer | Meta[] | undefined) => V;\n }\n}\n\nexport declare namespace Core {\n export type Output<T> = T | Promise<T>;\n\n export type NoDependencyFn<T> = (scope: Controller) => Output<T>;\n export type DependentFn<T, D> = (\n dependencies: D,\n scope: Controller\n ) => Output<T>;\n export type RecordLike = Record<string, unknown>;\n export type UExecutor = BaseExecutor<unknown>;\n\n export type Cleanup = () => void | Promise<void>;\n\n export type Controller = {\n cleanup: (cleanup: Cleanup) => void;\n release: () => Promise<void>;\n scope: Scope;\n };\n\n export type Kind = \"main\" | \"reactive\" | \"lazy\" | \"static\";\n\n export interface BaseExecutor<T> extends Meta.MetaContainer {\n [executorSymbol]: Kind;\n factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;\n dependencies:\n | undefined\n | UExecutor\n | Array<UExecutor>\n | Record<string, UExecutor>;\n }\n\n export interface Executor<T> extends BaseExecutor<T> {\n [executorSymbol]: \"main\";\n factory: NoDependencyFn<T> | DependentFn<T, unknown>;\n\n /** Return an executor controller without resolving Executor */\n readonly lazy: Lazy<T>;\n\n /** Return an resolved executor, and mark the user to be reactived for future changes */\n readonly reactive: Reactive<T>;\n\n /** Return an resolved executor with its controller */\n readonly static: Static<T>;\n }\n\n export interface Reactive<T> extends BaseExecutor<T> {\n [executorSymbol]: \"reactive\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Lazy<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"lazy\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Static<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"static\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Accessor<T> extends Meta.MetaContainer {\n lookup(): T;\n get(): T;\n resolve(force?: boolean): Promise<T>;\n release(soft?: boolean): Promise<void>;\n update(updateFn: T | ((current: T) => T)): Promise<void>;\n subscribe(callback: (value: T) => void): Cleanup;\n }\n\n export type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U>\n ? Awaited<U>\n : T extends Lazy<infer U> | Static<infer U>\n ? Accessor<Awaited<U>>\n : never;\n\n export interface Scope {\n accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;\n\n resolve<T>(executor: Core.Executor<T>): Promise<T>;\n resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;\n\n update<T>(\n executor: Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promise<void>;\n\n reset<T>(executor: Executor<T>): void;\n release(executor: Executor<any>, soft?: boolean): Promise<void>;\n\n dispose(): Promise<void>;\n\n onUpdate<T>(\n executor: Executor<T>,\n callback: (accessor: Accessor<T>) => void\n ): Cleanup;\n // onRelease<T>(executor: Executor<T>, callback: () => void): () => void;\n }\n}\n","import { Core, executorSymbol, Meta } from \"./types\";\n\nfunction createExecutor<T>(\n factory: Core.NoDependencyFn<T> | Core.DependentFn<T, unknown>,\n dependencies:\n | undefined\n | Core.UExecutor\n | Array<Core.UExecutor>\n | Record<string, Core.UExecutor>,\n metas: Meta.Meta[] | undefined\n): Core.Executor<T> {\n const executor = {\n [executorSymbol]: \"base\",\n factory: (_: unknown, controller: Core.Controller) => {\n if (dependencies === undefined) {\n const f = factory as Core.NoDependencyFn<T>;\n return f(controller);\n }\n\n const f = factory as Core.DependentFn<T, unknown>;\n return f(_, controller);\n },\n dependencies,\n metas: metas,\n } as unknown as Core.Executor<T>;\n\n const lazyExecutor = {\n [executorSymbol]: \"lazy\",\n dependencies: undefined,\n executor,\n factory: undefined,\n metas: metas,\n } satisfies Core.Lazy<T>;\n\n const reactiveExecutor = {\n [executorSymbol]: \"reactive\",\n executor,\n factory: undefined,\n dependencies: undefined,\n metas: metas,\n } satisfies Core.Reactive<T>;\n\n const staticExecutor = {\n [executorSymbol]: \"static\",\n dependencies: undefined,\n factory: undefined,\n metas: metas,\n executor,\n } satisfies Core.Static<T>;\n\n Object.defineProperties(executor, {\n lazy: {\n value: lazyExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n reactive: {\n value: reactiveExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n static: {\n value: staticExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n });\n\n return executor;\n}\n\nexport function isLazyExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Lazy<unknown> {\n return executor[executorSymbol] === \"lazy\";\n}\n\nexport function isReactiveExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Reactive<unknown> {\n return executor[executorSymbol] === \"reactive\";\n}\n\nexport function isStaticExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Static<unknown> {\n return executor[executorSymbol] === \"static\";\n}\n\nexport function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\n}\n\nexport function provide<T>(\n factory: Core.NoDependencyFn<T>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(factory, undefined, metas);\n}\n\nexport function derive<T, D extends Core.BaseExecutor<unknown>>(\n dependencies: D,\n factory: Core.DependentFn<T, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<\n T,\n D extends\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n>(\n dependencies: { [K in keyof D]: D[K] },\n factory: Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<T, D>(\n pdependencies:\n | Core.BaseExecutor<D>\n | Array<Core.BaseExecutor<D>>\n | Record<string, Core.BaseExecutor<unknown>>,\n pfactory:\n | Core.DependentFn<T, Core.InferOutput<D>>\n | Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(pfactory as any, pdependencies, metas);\n}\n","import { SchemaError, StandardSchemaV1 } from \"./types\";\n\nexport function validate<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Awaited<StandardSchemaV1.InferOutput<TSchema>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n throw new Error(\"validating async is not supported\");\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n return result.value as any;\n}\n\nexport async function validateAsync<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n const result_1 = await result;\n if (result_1.issues) {\n throw new SchemaError(result_1.issues);\n }\n return result_1.value as any;\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n\n return Promise.resolve(result.value as any);\n}\n\nexport function custom<T>(): StandardSchemaV1<T, T> {\n return {\n \"~standard\": {\n vendor: \"pumped-fn\",\n version: 1,\n validate: (value) => {\n return { value: value as T };\n },\n },\n };\n}\n","import { validate } from \"./ssch\";\nimport { metaSymbol, StandardSchemaV1, type Meta } from \"./types\";\n\nexport const meta = <V>(\n key: string | symbol,\n schema: StandardSchemaV1<V>\n): Meta.MetaFn<V> => {\n const _key = typeof key === \"string\" ? Symbol(key) : key;\n\n const fn = (value: V) =>\n ({\n [metaSymbol]: true,\n key: _key,\n schema,\n value,\n } as unknown as Meta.MetaFn<V>);\n\n Object.defineProperty(fn, \"key\", {\n value: _key,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperty(fn, metaSymbol, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperties(fn, {\n partial: {\n value: (d: Partial<V>) => {\n return Object.assign({}, fn({} as V), d);\n },\n configurable: false,\n enumerable: false,\n writable: false,\n },\n some: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValues(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n find: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValue(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n get: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n getValue(\n findValue(\n source,\n fn as unknown as Meta.MetaFn<unknown>\n ) as Meta.Meta<V>\n ),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n });\n\n return fn as any;\n};\n\nexport function getValue<V>(meta: Meta.Meta<V>) {\n return validate(meta.schema, meta.value);\n}\n\nexport function findValues<V = unknown>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V[] {\n if (!executor) return [];\n\n const metas = Array.isArray(executor) ? executor : executor.metas ?? [];\n\n const maybeMeta = metas.filter((m) => m.key === meta.key);\n return maybeMeta.map((m) => getValue(m as Meta.Meta<V>));\n}\n\nexport function findValue<V>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V | undefined {\n const values = findValues(executor, meta);\n return values.at(0);\n}\n","import {\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n isExecutor,\n} from \"./executor\";\nimport { Core } from \"./types\";\n\nexport interface ScopeInner {\n \"~findAffectedTargets\"(\n target: Core.Executor<unknown>,\n updateSet?: Set<Core.Executor<unknown>>\n ): Set<Core.Executor<unknown>>;\n\n \"~resolveDependencies\"(\n e:\n | undefined\n | Core.BaseExecutor<unknown>\n | Core.BaseExecutor<unknown>[]\n | Record<string, Core.BaseExecutor<unknown>>,\n ref: Core.Executor<unknown>\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>>;\n\n getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>>;\n getValueCache(): Map<Core.Executor<unknown>, unknown>;\n getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>>;\n}\n\ntype Value =\n | { kind: \"resolving\"; promise: Promise<unknown> }\n | { kind: \"resolved\"; value: unknown }\n | { kind: \"rejected\"; error: unknown };\n\nclass Scope implements Core.Scope, ScopeInner {\n private isDisposed: boolean = false;\n private cache: Map<Core.Executor<unknown>, Core.Accessor<unknown>> =\n new Map();\n private valueCache: Map<Core.Executor<unknown>, Value> = new Map();\n private reactiveness = new Map<\n Core.Executor<unknown>,\n Set<Core.Executor<unknown>>\n >();\n private cleanups = new Map<Core.Executor<unknown>, Set<Core.Cleanup>>();\n private onUpdates = new Map<\n Core.Executor<unknown>,\n Set<(accessor: Core.Accessor<unknown>) => void | Promise<void>>\n >();\n\n private \"~appendReactive\"(\n reactive: Core.Executor<unknown>,\n ref: Core.Executor<unknown>\n ) {\n const currentSet = this.reactiveness.get(reactive) ?? new Set();\n this.reactiveness.set(reactive, currentSet);\n\n currentSet.add(ref);\n }\n\n async \"~resolveDependencies\"(\n e:\n | undefined\n | Core.BaseExecutor<unknown>\n | Core.BaseExecutor<unknown>[]\n | Record<string, Core.BaseExecutor<unknown>>,\n ref: Core.Executor<unknown>\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>> {\n if (e === undefined) {\n return undefined;\n }\n\n if (isExecutor(e)) {\n if (isLazyExecutor(e)) {\n return this[\"~resolveLazy\"](e);\n }\n\n const staticResult = await this[\"~resolveStatic\"](\n e as Core.Executor<unknown>\n );\n\n if (isReactiveExecutor(e)) {\n this[\"~appendReactive\"](e.executor, ref);\n }\n\n await staticResult.resolve(false);\n if (isStaticExecutor(e)) {\n return staticResult;\n }\n\n return staticResult.get();\n }\n\n if (Array.isArray(e)) {\n return await Promise.all(\n e.map((item) => this[\"~resolveDependencies\"](item, ref))\n );\n }\n\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(e)) {\n const target = e[key];\n const resolvedResult = await this[\"~resolveDependencies\"](target, ref);\n\n result[key] = resolvedResult;\n }\n\n return result;\n }\n\n private \"~resolveLazy\"(e: Core.Lazy<unknown>): Core.Accessor<unknown> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.cache.get(e.executor);\n if (cached) {\n return cached;\n }\n\n const accessor = this[\"~makeAccessor\"](e.executor);\n\n return accessor;\n }\n\n private async \"~resolveStatic\"(\n e: Core.Executor<unknown>\n ): Promise<Core.Accessor<unknown>> {\n const cached = this.cache.get(e);\n if (cached) {\n return cached;\n }\n\n const accessor = this[\"~makeAccessor\"](e, true);\n return accessor;\n }\n\n private \"~makeController\"(e: Core.Executor<unknown>): Core.Controller {\n return {\n cleanup: (cleanup: Core.Cleanup) => {\n const currentSet = this.cleanups.get(e) ?? new Set();\n this.cleanups.set(e, currentSet);\n\n currentSet.add(cleanup);\n },\n release: async () => {\n this.release(e);\n },\n scope: this,\n };\n }\n\n private \"~makeAccessor\"(\n e: Core.BaseExecutor<unknown>,\n eager: boolean = false\n ): Core.Accessor<unknown> {\n const accessor = {} as Core.Accessor<unknown>;\n const requestor =\n isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)\n ? e.executor\n : (e as Core.Executor<unknown>);\n\n const cachedAccessor = this.cache.get(requestor);\n if (cachedAccessor) {\n return cachedAccessor;\n }\n\n const factory = requestor.factory;\n const controller = this[\"~makeController\"](requestor);\n\n const resolve = async (force: boolean): Promise<unknown> => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.valueCache.get(requestor);\n if (cached && !force) {\n if (cached.kind === \"resolved\") {\n return cached.value;\n } else if (cached.kind === \"rejected\") {\n throw cached.error;\n } else {\n return cached.promise;\n }\n }\n\n const promise = new Promise((resolve, reject) => {\n this[\"~resolveDependencies\"](requestor.dependencies, requestor)\n .then((dependencies) => factory(dependencies as any, controller))\n .then((result) => {\n this.valueCache.set(requestor, { kind: \"resolved\", value: result });\n resolve(result);\n })\n .catch((error) => {\n this.valueCache.set(requestor, { kind: \"rejected\", error });\n reject(error);\n });\n });\n\n this.valueCache.set(requestor, { kind: \"resolving\", promise });\n this.cache.set(requestor, accessor);\n return promise;\n };\n\n if (!isLazyExecutor(e) || eager) {\n resolve(false);\n }\n\n return Object.assign(accessor, {\n get: () => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const valueCached = this.valueCache.get(requestor);\n\n if (!valueCached || valueCached.kind === \"resolving\") {\n throw new Error(\"Executor not found\");\n }\n\n if (valueCached.kind === \"rejected\") {\n throw valueCached.error;\n }\n\n return valueCached.value;\n },\n lookup: () => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n return this.valueCache.get(requestor);\n },\n metas: e.metas,\n resolve,\n release: async (soft: boolean = false) => {\n this.release(requestor, soft);\n },\n update: (updateFn: unknown | ((current: unknown) => unknown)) => {\n return this.update(requestor, updateFn);\n },\n subscribe: (cb: (value: unknown) => void) => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n return this.onUpdate(requestor, cb);\n },\n } satisfies Partial<Core.Accessor<unknown>>);\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n return this[\"~makeAccessor\"](executor, false) as Core.Accessor<T>;\n }\n\n async resolve<T>(executor: Core.Executor<T>): Promise<T> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.valueCache.get(executor);\n if (cached) {\n if (cached.kind === \"resolved\") {\n return cached.value as T;\n } else if (cached.kind === \"rejected\") {\n throw cached.error;\n } else {\n return (await cached.promise) as T;\n }\n }\n\n const accessor = this[\"~makeAccessor\"](executor, true);\n await accessor.resolve(false);\n\n return accessor.get() as T;\n }\n\n async resolveAccessor<T>(\n executor: Core.Executor<T>\n ): Promise<Core.Accessor<T>> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cachedAccessor = this.cache.get(executor);\n if (!cachedAccessor) {\n const accessor = this[\"~makeAccessor\"](executor, true);\n await accessor.resolve();\n\n return accessor as Core.Accessor<T>;\n }\n\n await cachedAccessor.resolve();\n return cachedAccessor as Core.Accessor<T>;\n }\n\n \"~findAffectedTargets\"(\n target: Core.Executor<unknown>,\n updateSet: Set<Core.Executor<unknown>> = new Set()\n ): Set<Core.Executor<unknown>> {\n const triggerTargets = this.reactiveness.get(target);\n\n if (triggerTargets && triggerTargets.size > 0) {\n for (const target of triggerTargets) {\n if (updateSet.has(target)) {\n updateSet.delete(target);\n }\n updateSet.add(target);\n\n if (this.reactiveness.has(target)) {\n this[\"~findAffectedTargets\"](target, updateSet);\n }\n }\n }\n\n return updateSet;\n }\n\n async update<T>(\n executor: Core.Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promise<void> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.cache.get(executor);\n if (!cached) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const current = (await cached.resolve(false)) as T;\n const cleanups = this.cleanups.get(executor);\n if (cleanups) {\n for (const cleanup of Array.from(cleanups.values()).reverse()) {\n await cleanup();\n }\n }\n\n if (typeof updateFn === \"function\") {\n const fn = updateFn as (current: T) => T;\n const newValue = fn(current);\n this.valueCache.set(executor, { kind: \"resolved\", value: newValue });\n } else {\n this.valueCache.set(executor, {\n kind: \"resolved\",\n value: updateFn,\n });\n }\n\n const onUpdateSet = this.onUpdates.get(executor);\n if (onUpdateSet) {\n for (const callback of Array.from(onUpdateSet.values())) {\n await callback(cached);\n }\n }\n\n const updateSet = this[\"~findAffectedTargets\"](executor);\n for (const target of updateSet) {\n const cached = this.cache.get(target);\n\n if (cached) {\n const cleanups = this.cleanups.get(target);\n if (cleanups) {\n for (const cleanup of Array.from(cleanups.values()).reverse()) {\n await cleanup();\n }\n }\n\n await cached.resolve(true);\n\n const onUpdateSet = this.onUpdates.get(target);\n if (onUpdateSet) {\n for (const callback of Array.from(onUpdateSet.values())) {\n await callback(cached);\n }\n }\n }\n }\n }\n\n async reset<T>(executor: Core.Executor<T>): Promise<void> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n await this.release(executor, true);\n await this.resolve(executor);\n }\n\n async release(\n executor: Core.Executor<any>,\n soft: boolean = false\n ): Promise<void> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.cache.get(executor);\n if (!cached && !soft) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const affectedTargets = this[\"~findAffectedTargets\"](executor);\n for (const target of affectedTargets) {\n await this.release(target, true);\n }\n\n const cleanups = this.cleanups.get(executor);\n if (cleanups) {\n for (const cleanup of Array.from(cleanups.values()).reverse()) {\n await cleanup();\n }\n }\n\n this.cache.delete(executor);\n this.valueCache.delete(executor);\n this.reactiveness.delete(executor);\n this.onUpdates.delete(executor);\n }\n\n async dispose(): Promise<void> {\n const currents = this.cache.keys();\n for (const current of currents) {\n await this.release(current, true);\n }\n\n this.isDisposed = true;\n this.cache.clear();\n this.valueCache.clear();\n this.reactiveness.clear();\n this.cleanups.clear();\n }\n\n onUpdate<T>(\n executor: Core.Executor<T>,\n callback: (accessor: Core.Accessor<T>) => void | Promise<void>\n ): Core.Cleanup {\n if (this.isDisposed) {\n throw new Error(\"scope is disposed\");\n }\n\n const onUpdateSet = this.onUpdates.get(executor) ?? new Set();\n this.onUpdates.set(executor, onUpdateSet);\n onUpdateSet.add(callback as any);\n\n return () => {\n if (this.isDisposed) {\n throw new Error(\"scope is disposed\");\n }\n\n const currentSet = this.onUpdates.get(executor);\n if (currentSet) {\n currentSet.delete(callback as any);\n if (currentSet.size === 0) {\n this.onUpdates.delete(executor);\n }\n }\n };\n }\n\n getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>> {\n return this.cache;\n }\n\n getValueCache(): Map<Core.Executor<unknown>, unknown> {\n return this.valueCache;\n }\n\n getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>> {\n return this.reactiveness;\n }\n}\n\nexport function createScope(): Core.Scope {\n return new Scope();\n}\n"],"mappings":"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","names":["index_exports","__export","SchemaError","createScope","custom","derive","executorSymbol","findValue","findValues","getValue","isExecutor","isLazyExecutor","isReactiveExecutor","isStaticExecutor","meta","metaSymbol","provide","validate","validateAsync","__toCommonJS","executorSymbol","metaSymbol","SchemaError","issues","createExecutor","factory","dependencies","metas","executor","executorSymbol","_","controller","lazyExecutor","reactiveExecutor","staticExecutor","isLazyExecutor","isReactiveExecutor","isStaticExecutor","isExecutor","input","provide","derive","pdependencies","pfactory","validate","schema","data","result","SchemaError","validateAsync","result_1","custom","value","meta","key","schema","_key","fn","value","metaSymbol","d","source","findValues","findValue","getValue","validate","executor","m","Scope","reactive","ref","currentSet","isExecutor","isLazyExecutor","staticResult","isReactiveExecutor","isStaticExecutor","item","result","key","target","resolvedResult","cached","cleanup","eager","accessor","requestor","cachedAccessor","factory","controller","resolve","force","promise","reject","dependencies","error","valueCached","soft","updateFn","cb","executor","updateSet","triggerTargets","current","cleanups","newValue","onUpdateSet","callback","affectedTargets","currents","createScope"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/types.ts","../src/executor.ts","../src/ssch.ts","../src/meta.ts","../src/scope.ts"],"sourcesContent":["export * from \"./executor\";\nexport * from \"./meta\";\nexport * from \"./scope\";\nexport * from \"./types\";\nexport * from \"./ssch\";\n","export const executorSymbol = Symbol.for(\"@pumped-fn/core/executor\");\nexport const metaSymbol = Symbol.for(\"@pumped-fn/core/meta\");\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n export interface Props<Input = unknown, Output = Input> {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n readonly types?: Types<Input, Output> | undefined;\n }\n\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n export interface SuccessResult<Output> {\n readonly value: Output;\n readonly issues?: undefined;\n }\n\n export interface FailureResult {\n readonly issues: ReadonlyArray<Issue>;\n }\n\n export interface Issue {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n export interface PathSegment {\n readonly key: PropertyKey;\n }\n\n export interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"input\"];\n\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"output\"];\n}\n\nexport class SchemaError extends Error {\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n}\n\nexport declare namespace Meta {\n export interface MetaContainer {\n metas: Meta[] | undefined;\n }\n\n export interface Meta<V = unknown> {\n readonly [metaSymbol]: true;\n readonly key: string | symbol;\n readonly schema: StandardSchemaV1<V>;\n readonly value: V;\n }\n\n export interface MetaFn<V> {\n (value: V): Meta<V>;\n readonly key: string | symbol;\n partial: <D extends Partial<V>>(d: D) => D;\n some: (source: MetaContainer | Meta[] | undefined) => V[];\n find: (source: MetaContainer | Meta[] | undefined) => V | undefined;\n get: (source: MetaContainer | Meta[] | undefined) => V;\n }\n}\n\nexport declare namespace Core {\n export type Output<T> = T | Promise<T>;\n\n export type NoDependencyFn<T> = (scope: Controller) => Output<T>;\n export type DependentFn<T, D> = (\n dependencies: D,\n scope: Controller\n ) => Output<T>;\n export type RecordLike = Record<string, unknown>;\n export type UExecutor = BaseExecutor<unknown>;\n\n export type Cleanup = () => void | Promise<void>;\n\n export type Controller = {\n cleanup: (cleanup: Cleanup) => void;\n release: () => Promise<void>;\n scope: Scope;\n };\n\n export type Kind = \"main\" | \"reactive\" | \"lazy\" | \"static\";\n\n export interface BaseExecutor<T> extends Meta.MetaContainer {\n [executorSymbol]: Kind;\n factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;\n dependencies:\n | undefined\n | UExecutor\n | Array<UExecutor>\n | Record<string, UExecutor>;\n }\n\n export interface Executor<T> extends BaseExecutor<T> {\n [executorSymbol]: \"main\";\n factory: NoDependencyFn<T> | DependentFn<T, unknown>;\n\n /** Return an executor controller without resolving Executor */\n readonly lazy: Lazy<T>;\n\n /** Return an resolved executor, and mark the user to be reactived for future changes */\n readonly reactive: Reactive<T>;\n\n /** Return an resolved executor with its controller */\n readonly static: Static<T>;\n }\n\n export interface Reactive<T> extends BaseExecutor<T> {\n [executorSymbol]: \"reactive\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Lazy<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"lazy\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Static<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"static\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Accessor<T> extends Meta.MetaContainer {\n lookup(): T;\n get(): T;\n resolve(force?: boolean): Promise<T>;\n release(soft?: boolean): Promise<void>;\n update(updateFn: T | ((current: T) => T)): Promise<void>;\n subscribe(callback: (value: T) => void): Cleanup;\n }\n\n export interface Preset<T> {\n [executorSymbol]: \"preset\";\n executor: Executor<T>;\n value: T;\n }\n\n export type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U>\n ? Awaited<U>\n : T extends Lazy<infer U> | Static<infer U>\n ? Accessor<Awaited<U>>\n : never;\n\n export interface Scope {\n accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;\n\n resolve<T>(executor: Core.Executor<T>): Promise<T>;\n resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;\n\n update<T>(\n executor: Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promise<void>;\n\n reset<T>(executor: Executor<T>): Promise<void>;\n release(executor: Executor<any>, soft?: boolean): Promise<void>;\n\n dispose(): Promise<void>;\n\n onUpdate<T>(\n executor: Executor<T>,\n callback: (accessor: Accessor<T>) => void\n ): Cleanup;\n // onRelease<T>(executor: Executor<T>, callback: () => void): () => void;\n }\n}\n","import { Core, executorSymbol, Meta } from \"./types\";\n\nfunction createExecutor<T>(\n factory: Core.NoDependencyFn<T> | Core.DependentFn<T, unknown>,\n dependencies:\n | undefined\n | Core.UExecutor\n | Array<Core.UExecutor>\n | Record<string, Core.UExecutor>,\n metas: Meta.Meta[] | undefined\n): Core.Executor<T> {\n const executor = {\n [executorSymbol]: \"main\",\n factory: (_: unknown, controller: Core.Controller) => {\n if (dependencies === undefined) {\n const f = factory as Core.NoDependencyFn<T>;\n return f(controller);\n }\n\n const f = factory as Core.DependentFn<T, unknown>;\n return f(_, controller);\n },\n dependencies,\n metas: metas,\n } as unknown as Core.Executor<T>;\n\n const lazyExecutor = {\n [executorSymbol]: \"lazy\",\n dependencies: undefined,\n executor,\n factory: undefined,\n metas: metas,\n } satisfies Core.Lazy<T>;\n\n const reactiveExecutor = {\n [executorSymbol]: \"reactive\",\n executor,\n factory: undefined,\n dependencies: undefined,\n metas: metas,\n } satisfies Core.Reactive<T>;\n\n const staticExecutor = {\n [executorSymbol]: \"static\",\n dependencies: undefined,\n factory: undefined,\n metas: metas,\n executor,\n } satisfies Core.Static<T>;\n\n Object.defineProperties(executor, {\n lazy: {\n value: lazyExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n reactive: {\n value: reactiveExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n static: {\n value: staticExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n });\n\n return executor;\n}\n\nexport function isLazyExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Lazy<unknown> {\n return executor[executorSymbol] === \"lazy\";\n}\n\nexport function isReactiveExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Reactive<unknown> {\n return executor[executorSymbol] === \"reactive\";\n}\n\nexport function isStaticExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Static<unknown> {\n return executor[executorSymbol] === \"static\";\n}\n\nexport function isMainExecutor(\n executor: unknown\n): executor is Core.Executor<unknown> {\n return isExecutor(executor) && executor[executorSymbol] === \"main\";\n}\n\nexport function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\n}\n\nexport function provide<T>(\n factory: Core.NoDependencyFn<T>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(factory, undefined, metas);\n}\n\nexport function derive<T, D extends Core.BaseExecutor<unknown>>(\n dependencies: D,\n factory: Core.DependentFn<T, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<\n T,\n D extends\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n>(\n dependencies: { [K in keyof D]: D[K] },\n factory: Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<T, D>(\n pdependencies:\n | Core.BaseExecutor<D>\n | Array<Core.BaseExecutor<D>>\n | Record<string, Core.BaseExecutor<unknown>>,\n pfactory:\n | Core.DependentFn<T, Core.InferOutput<D>>\n | Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(pfactory as any, pdependencies, metas);\n}\n\nexport function preset<T>(e: Core.Executor<T>, v: T): Core.Preset<T> {\n return {\n [executorSymbol]: \"preset\",\n value: v,\n executor: e,\n };\n}\n","import { SchemaError, StandardSchemaV1 } from \"./types\";\n\nexport function validate<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Awaited<StandardSchemaV1.InferOutput<TSchema>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n throw new Error(\"validating async is not supported\");\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n return result.value as any;\n}\n\nexport async function validateAsync<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n const result_1 = await result;\n if (result_1.issues) {\n throw new SchemaError(result_1.issues);\n }\n return result_1.value as any;\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n\n return Promise.resolve(result.value as any);\n}\n\nexport function custom<T>(): StandardSchemaV1<T, T> {\n return {\n \"~standard\": {\n vendor: \"pumped-fn\",\n version: 1,\n validate: (value) => {\n return { value: value as T };\n },\n },\n };\n}\n","import { validate } from \"./ssch\";\nimport { metaSymbol, StandardSchemaV1, type Meta } from \"./types\";\n\nexport const meta = <V>(\n key: string | symbol,\n schema: StandardSchemaV1<V>\n): Meta.MetaFn<V> => {\n const _key = typeof key === \"string\" ? Symbol(key) : key;\n\n const fn = (value: V) =>\n ({\n [metaSymbol]: true,\n key: _key,\n schema,\n value,\n } as unknown as Meta.MetaFn<V>);\n\n Object.defineProperty(fn, \"key\", {\n value: _key,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperty(fn, metaSymbol, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperties(fn, {\n partial: {\n value: (d: Partial<V>) => {\n return Object.assign({}, fn({} as V), d);\n },\n configurable: false,\n enumerable: false,\n writable: false,\n },\n some: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValues(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n find: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValue(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n get: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n getValue(\n findValue(\n source,\n fn as unknown as Meta.MetaFn<unknown>\n ) as Meta.Meta<V>\n ),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n });\n\n return fn as any;\n};\n\nexport function getValue<V>(meta: Meta.Meta<V>) {\n return validate(meta.schema, meta.value);\n}\n\nexport function findValues<V = unknown>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V[] {\n if (!executor) return [];\n\n const metas = Array.isArray(executor) ? executor : executor.metas ?? [];\n\n const maybeMeta = metas.filter((m) => m.key === meta.key);\n return maybeMeta.map((m) => getValue(m as Meta.Meta<V>));\n}\n\nexport function findValue<V>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V | undefined {\n const values = findValues(executor, meta);\n return values.at(0);\n}\n","import {\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n isMainExecutor,\n isExecutor,\n} from \"./executor\";\nimport { Core } from \"./types\";\n\ntype CacheEntry = {\n accessor: Core.Accessor<unknown>;\n value:\n | { kind: \"resolving\"; promise: Promise<unknown> }\n | { kind: \"resolved\"; value: unknown }\n | { kind: \"rejected\"; error: unknown };\n};\n\ntype UE = Core.Executor<unknown>;\ntype OnUpdateFn = (accessor: Core.Accessor<unknown>) => void | Promise<void>;\n\nfunction getExecutor(e: Core.UExecutor): Core.Executor<unknown> {\n if (isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)) {\n return e.executor;\n }\n\n return e as Core.Executor<unknown>;\n}\n\nclass Scope implements Core.Scope {\n private disposed: boolean = false;\n private cache: Map<UE, CacheEntry> = new Map();\n private cleanups = new Map<UE, Set<Core.Cleanup>>();\n private onUpdates = new Map<UE, Set<OnUpdateFn | UE>>();\n\n constructor(...presets: Core.Preset<unknown>[]) {\n for (const preset of presets) {\n const accessor = this[\"~makeAccessor\"](preset.executor);\n\n this.cache.set(preset.executor, {\n accessor,\n value: { kind: \"resolved\", value: preset.value },\n });\n }\n }\n\n private async \"~triggerCleanup\"(e: UE): Promise<void> {\n const cs = this.cleanups.get(e);\n if (cs) {\n for (const c of Array.from(cs.values()).reverse()) {\n await c();\n }\n }\n }\n\n private async \"~triggerUpdate\"(e: UE): Promise<void> {\n const ce = this.cache.get(e);\n if (!ce) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const ou = this.onUpdates.get(e);\n if (ou) {\n for (const t of Array.from(ou.values())) {\n if (isMainExecutor(t)) {\n if (this.cleanups.has(t)) {\n this[\"~triggerCleanup\"](t);\n }\n\n const a = this.cache.get(t);\n await a!.accessor.resolve(true);\n\n if (this.onUpdates.has(t)) {\n await this[\"~triggerUpdate\"](t);\n }\n } else {\n await t(ce.accessor);\n }\n }\n }\n }\n\n private async \"~resolveExecutor\"(\n ie: Core.UExecutor,\n ref: UE\n ): Promise<unknown> {\n const e = getExecutor(ie);\n const a = this[\"~makeAccessor\"](e);\n\n if (isLazyExecutor(ie)) {\n return a;\n }\n\n if (isReactiveExecutor(ie)) {\n const c = this.onUpdates.get(ie.executor) ?? new Set();\n this.onUpdates.set(ie.executor, c);\n c.add(ref);\n }\n\n await a.resolve(false);\n if (isStaticExecutor(ie)) {\n return a;\n }\n\n return a.get();\n }\n\n private async \"~resolveDependencies\"(\n ie:\n | undefined\n | Core.UExecutor\n | Core.UExecutor[]\n | Record<string, Core.UExecutor>,\n ref: UE\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>> {\n if (ie === undefined) {\n return undefined;\n }\n\n if (isExecutor(ie)) {\n return this[\"~resolveExecutor\"](ie, ref);\n }\n\n if (Array.isArray(ie)) {\n return await Promise.all(\n ie.map((item) => this[\"~resolveDependencies\"](item, ref))\n );\n }\n\n const r: Record<string, unknown> = {};\n for (const k of Object.keys(ie)) {\n const t = ie[k];\n const rd = await this[\"~resolveDependencies\"](t, ref);\n\n r[k] = rd;\n }\n\n return r;\n }\n\n private \"~ensureNotDisposed\"(): void {\n if (this.disposed) {\n throw new Error(\"Scope is disposed\");\n }\n }\n\n private \"~makeAccessor\"(e: Core.UExecutor): Core.Accessor<unknown> {\n const requestor =\n isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)\n ? e.executor\n : (e as UE);\n\n const cachedAccessor = this.cache.get(requestor);\n if (cachedAccessor) {\n return cachedAccessor.accessor;\n }\n\n const accessor = {} as Core.Accessor<unknown>;\n const factory = requestor.factory;\n const controller = {\n cleanup: (cleanup: Core.Cleanup) => {\n const currentSet = this.cleanups.get(requestor) ?? new Set();\n this.cleanups.set(requestor, currentSet);\n\n currentSet.add(cleanup);\n },\n release: async () => this.release(requestor),\n scope: this,\n };\n\n const resolve = (force: boolean): Promise<unknown> => {\n this[\"~ensureNotDisposed\"]();\n\n const entry = this.cache.get(requestor)!;\n const cached = entry?.value;\n\n if (cached && !force) {\n if (cached.kind === \"resolved\") {\n return Promise.resolve(cached.value);\n } else if (cached.kind === \"rejected\") {\n throw cached.error;\n } else {\n return cached.promise;\n }\n }\n\n const promise = new Promise((resolve, reject) => {\n this[\"~resolveDependencies\"](requestor.dependencies, requestor)\n .then((dependencies) => factory(dependencies as any, controller))\n .then((result) => {\n this.cache.set(requestor, {\n accessor,\n value: { kind: \"resolved\", value: result },\n });\n\n resolve(result);\n })\n .catch((error) => {\n this.cache.set(requestor, {\n accessor,\n value: { kind: \"rejected\", error },\n });\n\n reject(error);\n });\n });\n\n this.cache.set(requestor, {\n accessor,\n value: { kind: \"resolving\", promise },\n });\n return promise;\n };\n\n return Object.assign(accessor, {\n get: () => {\n this[\"~ensureNotDisposed\"]();\n\n const cacheEntry = this.cache.get(requestor)?.value;\n\n if (!cacheEntry || cacheEntry.kind === \"resolving\") {\n throw new Error(\"Executor is not resolved\");\n }\n\n if (cacheEntry.kind === \"rejected\") {\n throw cacheEntry.error;\n }\n\n return cacheEntry.value;\n },\n lookup: () => {\n this[\"~ensureNotDisposed\"]();\n\n return this.cache.get(requestor)?.value;\n },\n metas: e.metas,\n resolve,\n release: async (soft: boolean = false) => {\n this.release(requestor, soft);\n },\n update: (updateFn: unknown | ((current: unknown) => unknown)) => {\n return this.update(requestor, updateFn);\n },\n subscribe: (cb: (value: unknown) => void) => {\n this[\"~ensureNotDisposed\"]();\n return this.onUpdate(requestor, cb);\n },\n } satisfies Partial<Core.Accessor<unknown>>);\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n this[\"~ensureNotDisposed\"]();\n return this[\"~makeAccessor\"](executor) as Core.Accessor<T>;\n }\n\n async resolve<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promise<T> {\n this[\"~ensureNotDisposed\"]();\n const accessor = this[\"~makeAccessor\"](executor);\n await accessor.resolve(force);\n return accessor.get() as T;\n }\n\n async resolveAccessor<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promise<Core.Accessor<T>> {\n this[\"~ensureNotDisposed\"]();\n const accessor = this[\"~makeAccessor\"](executor);\n await accessor.resolve(force);\n return accessor as Core.Accessor<T>;\n }\n\n async update<T>(\n e: Core.Executor<T>,\n u: T | ((current: T) => T)\n ): Promise<void> {\n this[\"~ensureNotDisposed\"]();\n this[\"~triggerCleanup\"](e);\n const accessor = this[\"~makeAccessor\"](e);\n\n if (typeof u === \"function\") {\n const fn = u as (current: T) => T;\n const n = fn(accessor.get() as T);\n this.cache.set(e, {\n accessor,\n value: { kind: \"resolved\", value: n },\n });\n } else {\n this.cache.set(e, {\n accessor,\n value: { kind: \"resolved\", value: u },\n });\n }\n\n await this[\"~triggerUpdate\"](e);\n }\n\n async reset<T>(executor: Core.Executor<T>): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n await this.release(executor, true);\n await this.resolve(executor, true);\n }\n\n async release(e: Core.Executor<unknown>, s: boolean = false): Promise<void> {\n this[\"~ensureNotDisposed\"]();\n\n const ce = this.cache.get(e);\n if (!ce && !s) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n await this[\"~triggerCleanup\"](e);\n\n const ou = this.onUpdates.get(e);\n if (ou) {\n for (const t of Array.from(ou.values())) {\n if (isMainExecutor(t)) {\n await this.release(t, true);\n }\n }\n\n this.onUpdates.delete(e);\n }\n\n this.cache.delete(e);\n }\n\n async dispose(): Promise<void> {\n this[\"~ensureNotDisposed\"]();\n const currents = this.cache.keys();\n for (const current of currents) {\n await this.release(current, true);\n }\n\n this.disposed = true;\n this.cache.clear();\n this.cleanups.clear();\n }\n\n onUpdate<T>(\n e: Core.Executor<T>,\n cb: (a: Core.Accessor<T>) => void | Promise<void>\n ): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n\n const ou = this.onUpdates.get(e) ?? new Set();\n this.onUpdates.set(e, ou);\n ou.add(cb as any);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n\n const ou = this.onUpdates.get(e);\n if (ou) {\n ou.delete(cb as any);\n if (ou.size === 0) {\n this.onUpdates.delete(e);\n }\n }\n };\n }\n}\n\nexport function createScope(...presets: Core.Preset<unknown>[]): Core.Scope {\n return new Scope(...presets);\n}\n"],"mappings":"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","names":["index_exports","__export","SchemaError","createScope","custom","derive","executorSymbol","findValue","findValues","getValue","isExecutor","isLazyExecutor","isMainExecutor","isReactiveExecutor","isStaticExecutor","meta","metaSymbol","preset","provide","validate","validateAsync","__toCommonJS","executorSymbol","metaSymbol","SchemaError","issues","createExecutor","factory","dependencies","metas","executor","executorSymbol","_","controller","lazyExecutor","reactiveExecutor","staticExecutor","isLazyExecutor","isReactiveExecutor","isStaticExecutor","isMainExecutor","isExecutor","input","provide","derive","pdependencies","pfactory","preset","e","v","validate","schema","data","result","SchemaError","validateAsync","result_1","custom","value","meta","key","schema","_key","fn","value","metaSymbol","d","source","findValues","findValue","getValue","validate","executor","m","getExecutor","e","isLazyExecutor","isReactiveExecutor","isStaticExecutor","Scope","presets","preset","accessor","cs","c","ce","ou","t","isMainExecutor","ie","ref","a","isExecutor","item","r","k","rd","requestor","cachedAccessor","factory","controller","cleanup","currentSet","resolve","force","cached","promise","reject","dependencies","result","error","cacheEntry","soft","updateFn","cb","executor","u","n","s","currents","current","createScope"]}
package/dist/index.d.cts CHANGED
@@ -106,13 +106,18 @@ declare namespace Core {
106
106
  update(updateFn: T | ((current: T) => T)): Promise<void>;
107
107
  subscribe(callback: (value: T) => void): Cleanup;
108
108
  }
109
+ interface Preset<T> {
110
+ [executorSymbol]: "preset";
111
+ executor: Executor<T>;
112
+ value: T;
113
+ }
109
114
  type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U> ? Awaited<U> : T extends Lazy<infer U> | Static<infer U> ? Accessor<Awaited<U>> : never;
110
115
  interface Scope {
111
116
  accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;
112
117
  resolve<T>(executor: Core.Executor<T>): Promise<T>;
113
118
  resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;
114
119
  update<T>(executor: Executor<T>, updateFn: T | ((current: T) => T)): Promise<void>;
115
- reset<T>(executor: Executor<T>): void;
120
+ reset<T>(executor: Executor<T>): Promise<void>;
116
121
  release(executor: Executor<any>, soft?: boolean): Promise<void>;
117
122
  dispose(): Promise<void>;
118
123
  onUpdate<T>(executor: Executor<T>, callback: (accessor: Accessor<T>) => void): Cleanup;
@@ -122,6 +127,7 @@ declare namespace Core {
122
127
  declare function isLazyExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Lazy<unknown>;
123
128
  declare function isReactiveExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Reactive<unknown>;
124
129
  declare function isStaticExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Static<unknown>;
130
+ declare function isMainExecutor(executor: unknown): executor is Core.Executor<unknown>;
125
131
  declare function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T>;
126
132
  declare function provide<T>(factory: Core.NoDependencyFn<T>, ...metas: Meta.Meta[]): Core.Executor<T>;
127
133
  declare function derive<T, D extends Core.BaseExecutor<unknown>>(dependencies: D, factory: Core.DependentFn<T, Core.InferOutput<D>>, ...metas: Meta.Meta[]): Core.Executor<T>;
@@ -130,23 +136,17 @@ declare function derive<T, D extends ReadonlyArray<Core.BaseExecutor<unknown>> |
130
136
  }, factory: Core.DependentFn<T, {
131
137
  [K in keyof D]: Core.InferOutput<D[K]>;
132
138
  }>, ...metas: Meta.Meta[]): Core.Executor<T>;
139
+ declare function preset<T>(e: Core.Executor<T>, v: T): Core.Preset<T>;
133
140
 
134
141
  declare const meta: <V>(key: string | symbol, schema: StandardSchemaV1<V>) => Meta.MetaFn<V>;
135
142
  declare function getValue<V>(meta: Meta.Meta<V>): Awaited<V>;
136
143
  declare function findValues<V = unknown>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V[];
137
144
  declare function findValue<V>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V | undefined;
138
145
 
139
- interface ScopeInner {
140
- "~findAffectedTargets"(target: Core.Executor<unknown>, updateSet?: Set<Core.Executor<unknown>>): Set<Core.Executor<unknown>>;
141
- "~resolveDependencies"(e: undefined | Core.BaseExecutor<unknown> | Core.BaseExecutor<unknown>[] | Record<string, Core.BaseExecutor<unknown>>, ref: Core.Executor<unknown>): Promise<undefined | unknown | unknown[] | Record<string, unknown>>;
142
- getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>>;
143
- getValueCache(): Map<Core.Executor<unknown>, unknown>;
144
- getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>>;
145
- }
146
- declare function createScope(): Core.Scope;
146
+ declare function createScope(...presets: Core.Preset<unknown>[]): Core.Scope;
147
147
 
148
148
  declare function validate<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Awaited<StandardSchemaV1.InferOutput<TSchema>>;
149
149
  declare function validateAsync<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>>;
150
150
  declare function custom<T>(): StandardSchemaV1<T, T>;
151
151
 
152
- export { Core, Meta, SchemaError, type ScopeInner, StandardSchemaV1, createScope, custom, derive, executorSymbol, findValue, findValues, getValue, isExecutor, isLazyExecutor, isReactiveExecutor, isStaticExecutor, meta, metaSymbol, provide, validate, validateAsync };
152
+ export { Core, Meta, SchemaError, StandardSchemaV1, createScope, custom, derive, executorSymbol, findValue, findValues, getValue, isExecutor, isLazyExecutor, isMainExecutor, isReactiveExecutor, isStaticExecutor, meta, metaSymbol, preset, provide, validate, validateAsync };
package/dist/index.d.ts CHANGED
@@ -106,13 +106,18 @@ declare namespace Core {
106
106
  update(updateFn: T | ((current: T) => T)): Promise<void>;
107
107
  subscribe(callback: (value: T) => void): Cleanup;
108
108
  }
109
+ interface Preset<T> {
110
+ [executorSymbol]: "preset";
111
+ executor: Executor<T>;
112
+ value: T;
113
+ }
109
114
  type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U> ? Awaited<U> : T extends Lazy<infer U> | Static<infer U> ? Accessor<Awaited<U>> : never;
110
115
  interface Scope {
111
116
  accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;
112
117
  resolve<T>(executor: Core.Executor<T>): Promise<T>;
113
118
  resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;
114
119
  update<T>(executor: Executor<T>, updateFn: T | ((current: T) => T)): Promise<void>;
115
- reset<T>(executor: Executor<T>): void;
120
+ reset<T>(executor: Executor<T>): Promise<void>;
116
121
  release(executor: Executor<any>, soft?: boolean): Promise<void>;
117
122
  dispose(): Promise<void>;
118
123
  onUpdate<T>(executor: Executor<T>, callback: (accessor: Accessor<T>) => void): Cleanup;
@@ -122,6 +127,7 @@ declare namespace Core {
122
127
  declare function isLazyExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Lazy<unknown>;
123
128
  declare function isReactiveExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Reactive<unknown>;
124
129
  declare function isStaticExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Static<unknown>;
130
+ declare function isMainExecutor(executor: unknown): executor is Core.Executor<unknown>;
125
131
  declare function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T>;
126
132
  declare function provide<T>(factory: Core.NoDependencyFn<T>, ...metas: Meta.Meta[]): Core.Executor<T>;
127
133
  declare function derive<T, D extends Core.BaseExecutor<unknown>>(dependencies: D, factory: Core.DependentFn<T, Core.InferOutput<D>>, ...metas: Meta.Meta[]): Core.Executor<T>;
@@ -130,23 +136,17 @@ declare function derive<T, D extends ReadonlyArray<Core.BaseExecutor<unknown>> |
130
136
  }, factory: Core.DependentFn<T, {
131
137
  [K in keyof D]: Core.InferOutput<D[K]>;
132
138
  }>, ...metas: Meta.Meta[]): Core.Executor<T>;
139
+ declare function preset<T>(e: Core.Executor<T>, v: T): Core.Preset<T>;
133
140
 
134
141
  declare const meta: <V>(key: string | symbol, schema: StandardSchemaV1<V>) => Meta.MetaFn<V>;
135
142
  declare function getValue<V>(meta: Meta.Meta<V>): Awaited<V>;
136
143
  declare function findValues<V = unknown>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V[];
137
144
  declare function findValue<V>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V | undefined;
138
145
 
139
- interface ScopeInner {
140
- "~findAffectedTargets"(target: Core.Executor<unknown>, updateSet?: Set<Core.Executor<unknown>>): Set<Core.Executor<unknown>>;
141
- "~resolveDependencies"(e: undefined | Core.BaseExecutor<unknown> | Core.BaseExecutor<unknown>[] | Record<string, Core.BaseExecutor<unknown>>, ref: Core.Executor<unknown>): Promise<undefined | unknown | unknown[] | Record<string, unknown>>;
142
- getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>>;
143
- getValueCache(): Map<Core.Executor<unknown>, unknown>;
144
- getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>>;
145
- }
146
- declare function createScope(): Core.Scope;
146
+ declare function createScope(...presets: Core.Preset<unknown>[]): Core.Scope;
147
147
 
148
148
  declare function validate<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Awaited<StandardSchemaV1.InferOutput<TSchema>>;
149
149
  declare function validateAsync<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>>;
150
150
  declare function custom<T>(): StandardSchemaV1<T, T>;
151
151
 
152
- export { Core, Meta, SchemaError, type ScopeInner, StandardSchemaV1, createScope, custom, derive, executorSymbol, findValue, findValues, getValue, isExecutor, isLazyExecutor, isReactiveExecutor, isStaticExecutor, meta, metaSymbol, provide, validate, validateAsync };
152
+ export { Core, Meta, SchemaError, StandardSchemaV1, createScope, custom, derive, executorSymbol, findValue, findValues, getValue, isExecutor, isLazyExecutor, isMainExecutor, isReactiveExecutor, isStaticExecutor, meta, metaSymbol, preset, provide, validate, validateAsync };
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- var d=Symbol.for("@pumped-fn/core/executor"),y=Symbol.for("@pumped-fn/core/meta"),p=class extends Error{issues;constructor(e){super(e[0].message),this.name="SchemaError",this.issues=e}};function k(o,e,t){let n={[d]:"base",factory:(f,a)=>e===void 0?o(a):o(f,a),dependencies:e,metas:t},r={[d]:"lazy",dependencies:void 0,executor:n,factory:void 0,metas:t},c={[d]:"reactive",executor:n,factory:void 0,dependencies:void 0,metas:t},i={[d]:"static",dependencies:void 0,factory:void 0,metas:t,executor:n};return Object.defineProperties(n,{lazy:{value:r,writable:!1,configurable:!1,enumerable:!1},reactive:{value:c,writable:!1,configurable:!1,enumerable:!1},static:{value:i,writable:!1,configurable:!1,enumerable:!1}}),n}function x(o){return o[d]==="lazy"}function v(o){return o[d]==="reactive"}function m(o){return o[d]==="static"}function T(o){return typeof o=="object"&&o!==null&&d in o}function R(o,...e){return k(o,void 0,e)}function O(o,e,...t){return k(e,o,t)}function E(o,e){let t=o["~standard"].validate(e);if("then"in t)throw new Error("validating async is not supported");if(t.issues)throw new p(t.issues);return t.value}async function B(o,e){let t=o["~standard"].validate(e);if("then"in t){let n=await t;if(n.issues)throw new p(n.issues);return n.value}if(t.issues)throw new p(t.issues);return Promise.resolve(t.value)}function z(){return{"~standard":{vendor:"pumped-fn",version:1,validate:o=>({value:o})}}}var _=(o,e)=>{let t=typeof o=="string"?Symbol(o):o,n=r=>({[y]:!0,key:t,schema:e,value:r});return Object.defineProperty(n,"key",{value:t,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperty(n,y,{value:!0,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperties(n,{partial:{value:r=>Object.assign({},n({}),r),configurable:!1,enumerable:!1,writable:!1},some:{value:r=>M(r,n),configurable:!1,enumerable:!1,writable:!1},find:{value:r=>S(r,n),configurable:!1,enumerable:!1,writable:!1},get:{value:r=>g(S(r,n)),configurable:!1,enumerable:!1,writable:!1}}),n};function g(o){return E(o.schema,o.value)}function M(o,e){return o?(Array.isArray(o)?o:o.metas??[]).filter(r=>r.key===e.key).map(r=>g(r)):[]}function S(o,e){return M(o,e).at(0)}var C=class{isDisposed=!1;cache=new Map;valueCache=new Map;reactiveness=new Map;cleanups=new Map;onUpdates=new Map;"~appendReactive"(e,t){let n=this.reactiveness.get(e)??new Set;this.reactiveness.set(e,n),n.add(t)}async"~resolveDependencies"(e,t){if(e===void 0)return;if(T(e)){if(x(e))return this["~resolveLazy"](e);let r=await this["~resolveStatic"](e);return v(e)&&this["~appendReactive"](e.executor,t),await r.resolve(!1),m(e)?r:r.get()}if(Array.isArray(e))return await Promise.all(e.map(r=>this["~resolveDependencies"](r,t)));let n={};for(let r of Object.keys(e)){let c=e[r],i=await this["~resolveDependencies"](c,t);n[r]=i}return n}"~resolveLazy"(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.cache.get(e.executor);return t||this["~makeAccessor"](e.executor)}async"~resolveStatic"(e){let t=this.cache.get(e);return t||this["~makeAccessor"](e,!0)}"~makeController"(e){return{cleanup:t=>{let n=this.cleanups.get(e)??new Set;this.cleanups.set(e,n),n.add(t)},release:async()=>{this.release(e)},scope:this}}"~makeAccessor"(e,t=!1){let n={},r=x(e)||v(e)||m(e)?e.executor:e,c=this.cache.get(r);if(c)return c;let i=r.factory,f=this["~makeController"](r),a=async s=>{if(this.isDisposed)throw new Error("Scope is disposed");let u=this.valueCache.get(r);if(u&&!s){if(u.kind==="resolved")return u.value;if(u.kind==="rejected")throw u.error;return u.promise}let h=new Promise((w,b)=>{this["~resolveDependencies"](r.dependencies,r).then(l=>i(l,f)).then(l=>{this.valueCache.set(r,{kind:"resolved",value:l}),w(l)}).catch(l=>{this.valueCache.set(r,{kind:"rejected",error:l}),b(l)})});return this.valueCache.set(r,{kind:"resolving",promise:h}),this.cache.set(r,n),h};return(!x(e)||t)&&a(!1),Object.assign(n,{get:()=>{if(this.isDisposed)throw new Error("Scope is disposed");let s=this.valueCache.get(r);if(!s||s.kind==="resolving")throw new Error("Executor not found");if(s.kind==="rejected")throw s.error;return s.value},lookup:()=>{if(this.isDisposed)throw new Error("Scope is disposed");return this.valueCache.get(r)},metas:e.metas,resolve:a,release:async(s=!1)=>{this.release(r,s)},update:s=>this.update(r,s),subscribe:s=>{if(this.isDisposed)throw new Error("Scope is disposed");return this.onUpdate(r,s)}})}accessor(e){if(this.isDisposed)throw new Error("Scope is disposed");return this["~makeAccessor"](e,!1)}async resolve(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.valueCache.get(e);if(t){if(t.kind==="resolved")return t.value;if(t.kind==="rejected")throw t.error;return await t.promise}let n=this["~makeAccessor"](e,!0);return await n.resolve(!1),n.get()}async resolveAccessor(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.cache.get(e);if(!t){let n=this["~makeAccessor"](e,!0);return await n.resolve(),n}return await t.resolve(),t}"~findAffectedTargets"(e,t=new Set){let n=this.reactiveness.get(e);if(n&&n.size>0)for(let r of n)t.has(r)&&t.delete(r),t.add(r),this.reactiveness.has(r)&&this["~findAffectedTargets"](r,t);return t}async update(e,t){if(this.isDisposed)throw new Error("Scope is disposed");let n=this.cache.get(e);if(!n)throw new Error("Executor is not yet resolved");let r=await n.resolve(!1),c=this.cleanups.get(e);if(c)for(let a of Array.from(c.values()).reverse())await a();if(typeof t=="function"){let s=t(r);this.valueCache.set(e,{kind:"resolved",value:s})}else this.valueCache.set(e,{kind:"resolved",value:t});let i=this.onUpdates.get(e);if(i)for(let a of Array.from(i.values()))await a(n);let f=this["~findAffectedTargets"](e);for(let a of f){let s=this.cache.get(a);if(s){let u=this.cleanups.get(a);if(u)for(let w of Array.from(u.values()).reverse())await w();await s.resolve(!0);let h=this.onUpdates.get(a);if(h)for(let w of Array.from(h.values()))await w(s)}}}async reset(e){if(this.isDisposed)throw new Error("Scope is disposed");await this.release(e,!0),await this.resolve(e)}async release(e,t=!1){if(this.isDisposed)throw new Error("Scope is disposed");if(!this.cache.get(e)&&!t)throw new Error("Executor is not yet resolved");let r=this["~findAffectedTargets"](e);for(let i of r)await this.release(i,!0);let c=this.cleanups.get(e);if(c)for(let i of Array.from(c.values()).reverse())await i();this.cache.delete(e),this.valueCache.delete(e),this.reactiveness.delete(e),this.onUpdates.delete(e)}async dispose(){let e=this.cache.keys();for(let t of e)await this.release(t,!0);this.isDisposed=!0,this.cache.clear(),this.valueCache.clear(),this.reactiveness.clear(),this.cleanups.clear()}onUpdate(e,t){if(this.isDisposed)throw new Error("scope is disposed");let n=this.onUpdates.get(e)??new Set;return this.onUpdates.set(e,n),n.add(t),()=>{if(this.isDisposed)throw new Error("scope is disposed");let r=this.onUpdates.get(e);r&&(r.delete(t),r.size===0&&this.onUpdates.delete(e))}}getCache(){return this.cache}getValueCache(){return this.valueCache}getReactiveness(){return this.reactiveness}};function H(){return new C}export{p as SchemaError,H as createScope,z as custom,O as derive,d as executorSymbol,S as findValue,M as findValues,g as getValue,T as isExecutor,x as isLazyExecutor,v as isReactiveExecutor,m as isStaticExecutor,_ as meta,y as metaSymbol,R as provide,E as validate,B as validateAsync};
1
+ var c=Symbol.for("@pumped-fn/core/executor"),h=Symbol.for("@pumped-fn/core/meta"),d=class extends Error{issues;constructor(e){super(e[0].message),this.name="SchemaError",this.issues=e}};function E(r,e,t){let n={[c]:"main",factory:(m,a)=>e===void 0?r(a):r(m,a),dependencies:e,metas:t},o={[c]:"lazy",dependencies:void 0,executor:n,factory:void 0,metas:t},s={[c]:"reactive",executor:n,factory:void 0,dependencies:void 0,metas:t},l={[c]:"static",dependencies:void 0,factory:void 0,metas:t,executor:n};return Object.defineProperties(n,{lazy:{value:o,writable:!1,configurable:!1,enumerable:!1},reactive:{value:s,writable:!1,configurable:!1,enumerable:!1},static:{value:l,writable:!1,configurable:!1,enumerable:!1}}),n}function f(r){return r[c]==="lazy"}function x(r){return r[c]==="reactive"}function y(r){return r[c]==="static"}function v(r){return T(r)&&r[c]==="main"}function T(r){return typeof r=="object"&&r!==null&&c in r}function F(r,...e){return E(r,void 0,e)}function R(r,e,...t){return E(e,r,t)}function I(r,e){return{[c]:"preset",value:e,executor:r}}function k(r,e){let t=r["~standard"].validate(e);if("then"in t)throw new Error("validating async is not supported");if(t.issues)throw new d(t.issues);return t.value}async function j(r,e){let t=r["~standard"].validate(e);if("then"in t){let n=await t;if(n.issues)throw new d(n.issues);return n.value}if(t.issues)throw new d(t.issues);return Promise.resolve(t.value)}function K(){return{"~standard":{vendor:"pumped-fn",version:1,validate:r=>({value:r})}}}var H=(r,e)=>{let t=typeof r=="string"?Symbol(r):r,n=o=>({[h]:!0,key:t,schema:e,value:o});return Object.defineProperty(n,"key",{value:t,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperty(n,h,{value:!0,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperties(n,{partial:{value:o=>Object.assign({},n({}),o),configurable:!1,enumerable:!1,writable:!1},some:{value:o=>b(o,n),configurable:!1,enumerable:!1,writable:!1},find:{value:o=>S(o,n),configurable:!1,enumerable:!1,writable:!1},get:{value:o=>M(S(o,n)),configurable:!1,enumerable:!1,writable:!1}}),n};function M(r){return k(r.schema,r.value)}function b(r,e){return r?(Array.isArray(r)?r:r.metas??[]).filter(o=>o.key===e.key).map(o=>M(o)):[]}function S(r,e){return b(r,e).at(0)}function P(r){return f(r)||x(r)||y(r)?r.executor:r}var w=class{disposed=!1;cache=new Map;cleanups=new Map;onUpdates=new Map;constructor(...e){for(let t of e){let n=this["~makeAccessor"](t.executor);this.cache.set(t.executor,{accessor:n,value:{kind:"resolved",value:t.value}})}}async"~triggerCleanup"(e){let t=this.cleanups.get(e);if(t)for(let n of Array.from(t.values()).reverse())await n()}async"~triggerUpdate"(e){let t=this.cache.get(e);if(!t)throw new Error("Executor is not yet resolved");let n=this.onUpdates.get(e);if(n)for(let o of Array.from(n.values()))v(o)?(this.cleanups.has(o)&&this["~triggerCleanup"](o),await this.cache.get(o).accessor.resolve(!0),this.onUpdates.has(o)&&await this["~triggerUpdate"](o)):await o(t.accessor)}async"~resolveExecutor"(e,t){let n=P(e),o=this["~makeAccessor"](n);if(f(e))return o;if(x(e)){let s=this.onUpdates.get(e.executor)??new Set;this.onUpdates.set(e.executor,s),s.add(t)}return await o.resolve(!1),y(e)?o:o.get()}async"~resolveDependencies"(e,t){if(e===void 0)return;if(T(e))return this["~resolveExecutor"](e,t);if(Array.isArray(e))return await Promise.all(e.map(o=>this["~resolveDependencies"](o,t)));let n={};for(let o of Object.keys(e)){let s=e[o],l=await this["~resolveDependencies"](s,t);n[o]=l}return n}"~ensureNotDisposed"(){if(this.disposed)throw new Error("Scope is disposed")}"~makeAccessor"(e){let t=f(e)||x(e)||y(e)?e.executor:e,n=this.cache.get(t);if(n)return n.accessor;let o={},s=t.factory,l={cleanup:a=>{let p=this.cleanups.get(t)??new Set;this.cleanups.set(t,p),p.add(a)},release:async()=>this.release(t),scope:this},m=a=>{this["~ensureNotDisposed"]();let u=this.cache.get(t)?.value;if(u&&!a){if(u.kind==="resolved")return Promise.resolve(u.value);if(u.kind==="rejected")throw u.error;return u.promise}let C=new Promise((g,D)=>{this["~resolveDependencies"](t.dependencies,t).then(i=>s(i,l)).then(i=>{this.cache.set(t,{accessor:o,value:{kind:"resolved",value:i}}),g(i)}).catch(i=>{this.cache.set(t,{accessor:o,value:{kind:"rejected",error:i}}),D(i)})});return this.cache.set(t,{accessor:o,value:{kind:"resolving",promise:C}}),C};return Object.assign(o,{get:()=>{this["~ensureNotDisposed"]();let a=this.cache.get(t)?.value;if(!a||a.kind==="resolving")throw new Error("Executor is not resolved");if(a.kind==="rejected")throw a.error;return a.value},lookup:()=>(this["~ensureNotDisposed"](),this.cache.get(t)?.value),metas:e.metas,resolve:m,release:async(a=!1)=>{this.release(t,a)},update:a=>this.update(t,a),subscribe:a=>(this["~ensureNotDisposed"](),this.onUpdate(t,a))})}accessor(e){return this["~ensureNotDisposed"](),this["~makeAccessor"](e)}async resolve(e,t=!1){this["~ensureNotDisposed"]();let n=this["~makeAccessor"](e);return await n.resolve(t),n.get()}async resolveAccessor(e,t=!1){this["~ensureNotDisposed"]();let n=this["~makeAccessor"](e);return await n.resolve(t),n}async update(e,t){this["~ensureNotDisposed"](),this["~triggerCleanup"](e);let n=this["~makeAccessor"](e);if(typeof t=="function"){let s=t(n.get());this.cache.set(e,{accessor:n,value:{kind:"resolved",value:s}})}else this.cache.set(e,{accessor:n,value:{kind:"resolved",value:t}});await this["~triggerUpdate"](e)}async reset(e){if(this.disposed)throw new Error("Scope is disposed");await this.release(e,!0),await this.resolve(e,!0)}async release(e,t=!1){if(this["~ensureNotDisposed"](),!this.cache.get(e)&&!t)throw new Error("Executor is not yet resolved");await this["~triggerCleanup"](e);let o=this.onUpdates.get(e);if(o){for(let s of Array.from(o.values()))v(s)&&await this.release(s,!0);this.onUpdates.delete(e)}this.cache.delete(e)}async dispose(){this["~ensureNotDisposed"]();let e=this.cache.keys();for(let t of e)await this.release(t,!0);this.disposed=!0,this.cache.clear(),this.cleanups.clear()}onUpdate(e,t){this["~ensureNotDisposed"]();let n=this.onUpdates.get(e)??new Set;return this.onUpdates.set(e,n),n.add(t),()=>{this["~ensureNotDisposed"]();let o=this.onUpdates.get(e);o&&(o.delete(t),o.size===0&&this.onUpdates.delete(e))}}};function W(...r){return new w(...r)}export{d as SchemaError,W as createScope,K as custom,R as derive,c as executorSymbol,S as findValue,b as findValues,M as getValue,T as isExecutor,f as isLazyExecutor,v as isMainExecutor,x as isReactiveExecutor,y as isStaticExecutor,H as meta,h as metaSymbol,I as preset,F as provide,k as validate,j as validateAsync};
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/types.ts","../src/executor.ts","../src/ssch.ts","../src/meta.ts","../src/scope.ts"],"sourcesContent":["export const executorSymbol = Symbol.for(\"@pumped-fn/core/executor\");\nexport const metaSymbol = Symbol.for(\"@pumped-fn/core/meta\");\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n export interface Props<Input = unknown, Output = Input> {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n readonly types?: Types<Input, Output> | undefined;\n }\n\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n export interface SuccessResult<Output> {\n readonly value: Output;\n readonly issues?: undefined;\n }\n\n export interface FailureResult {\n readonly issues: ReadonlyArray<Issue>;\n }\n\n export interface Issue {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n export interface PathSegment {\n readonly key: PropertyKey;\n }\n\n export interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"input\"];\n\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"output\"];\n}\n\nexport class SchemaError extends Error {\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n}\n\nexport declare namespace Meta {\n export interface MetaContainer {\n metas: Meta[] | undefined;\n }\n\n export interface Meta<V = unknown> {\n readonly [metaSymbol]: true;\n readonly key: string | symbol;\n readonly schema: StandardSchemaV1<V>;\n readonly value: V;\n }\n\n export interface MetaFn<V> {\n (value: V): Meta<V>;\n readonly key: string | symbol;\n partial: <D extends Partial<V>>(d: D) => D;\n some: (source: MetaContainer | Meta[] | undefined) => V[];\n find: (source: MetaContainer | Meta[] | undefined) => V | undefined;\n get: (source: MetaContainer | Meta[] | undefined) => V;\n }\n}\n\nexport declare namespace Core {\n export type Output<T> = T | Promise<T>;\n\n export type NoDependencyFn<T> = (scope: Controller) => Output<T>;\n export type DependentFn<T, D> = (\n dependencies: D,\n scope: Controller\n ) => Output<T>;\n export type RecordLike = Record<string, unknown>;\n export type UExecutor = BaseExecutor<unknown>;\n\n export type Cleanup = () => void | Promise<void>;\n\n export type Controller = {\n cleanup: (cleanup: Cleanup) => void;\n release: () => Promise<void>;\n scope: Scope;\n };\n\n export type Kind = \"main\" | \"reactive\" | \"lazy\" | \"static\";\n\n export interface BaseExecutor<T> extends Meta.MetaContainer {\n [executorSymbol]: Kind;\n factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;\n dependencies:\n | undefined\n | UExecutor\n | Array<UExecutor>\n | Record<string, UExecutor>;\n }\n\n export interface Executor<T> extends BaseExecutor<T> {\n [executorSymbol]: \"main\";\n factory: NoDependencyFn<T> | DependentFn<T, unknown>;\n\n /** Return an executor controller without resolving Executor */\n readonly lazy: Lazy<T>;\n\n /** Return an resolved executor, and mark the user to be reactived for future changes */\n readonly reactive: Reactive<T>;\n\n /** Return an resolved executor with its controller */\n readonly static: Static<T>;\n }\n\n export interface Reactive<T> extends BaseExecutor<T> {\n [executorSymbol]: \"reactive\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Lazy<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"lazy\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Static<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"static\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Accessor<T> extends Meta.MetaContainer {\n lookup(): T;\n get(): T;\n resolve(force?: boolean): Promise<T>;\n release(soft?: boolean): Promise<void>;\n update(updateFn: T | ((current: T) => T)): Promise<void>;\n subscribe(callback: (value: T) => void): Cleanup;\n }\n\n export type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U>\n ? Awaited<U>\n : T extends Lazy<infer U> | Static<infer U>\n ? Accessor<Awaited<U>>\n : never;\n\n export interface Scope {\n accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;\n\n resolve<T>(executor: Core.Executor<T>): Promise<T>;\n resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;\n\n update<T>(\n executor: Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promise<void>;\n\n reset<T>(executor: Executor<T>): void;\n release(executor: Executor<any>, soft?: boolean): Promise<void>;\n\n dispose(): Promise<void>;\n\n onUpdate<T>(\n executor: Executor<T>,\n callback: (accessor: Accessor<T>) => void\n ): Cleanup;\n // onRelease<T>(executor: Executor<T>, callback: () => void): () => void;\n }\n}\n","import { Core, executorSymbol, Meta } from \"./types\";\n\nfunction createExecutor<T>(\n factory: Core.NoDependencyFn<T> | Core.DependentFn<T, unknown>,\n dependencies:\n | undefined\n | Core.UExecutor\n | Array<Core.UExecutor>\n | Record<string, Core.UExecutor>,\n metas: Meta.Meta[] | undefined\n): Core.Executor<T> {\n const executor = {\n [executorSymbol]: \"base\",\n factory: (_: unknown, controller: Core.Controller) => {\n if (dependencies === undefined) {\n const f = factory as Core.NoDependencyFn<T>;\n return f(controller);\n }\n\n const f = factory as Core.DependentFn<T, unknown>;\n return f(_, controller);\n },\n dependencies,\n metas: metas,\n } as unknown as Core.Executor<T>;\n\n const lazyExecutor = {\n [executorSymbol]: \"lazy\",\n dependencies: undefined,\n executor,\n factory: undefined,\n metas: metas,\n } satisfies Core.Lazy<T>;\n\n const reactiveExecutor = {\n [executorSymbol]: \"reactive\",\n executor,\n factory: undefined,\n dependencies: undefined,\n metas: metas,\n } satisfies Core.Reactive<T>;\n\n const staticExecutor = {\n [executorSymbol]: \"static\",\n dependencies: undefined,\n factory: undefined,\n metas: metas,\n executor,\n } satisfies Core.Static<T>;\n\n Object.defineProperties(executor, {\n lazy: {\n value: lazyExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n reactive: {\n value: reactiveExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n static: {\n value: staticExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n });\n\n return executor;\n}\n\nexport function isLazyExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Lazy<unknown> {\n return executor[executorSymbol] === \"lazy\";\n}\n\nexport function isReactiveExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Reactive<unknown> {\n return executor[executorSymbol] === \"reactive\";\n}\n\nexport function isStaticExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Static<unknown> {\n return executor[executorSymbol] === \"static\";\n}\n\nexport function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\n}\n\nexport function provide<T>(\n factory: Core.NoDependencyFn<T>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(factory, undefined, metas);\n}\n\nexport function derive<T, D extends Core.BaseExecutor<unknown>>(\n dependencies: D,\n factory: Core.DependentFn<T, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<\n T,\n D extends\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n>(\n dependencies: { [K in keyof D]: D[K] },\n factory: Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<T, D>(\n pdependencies:\n | Core.BaseExecutor<D>\n | Array<Core.BaseExecutor<D>>\n | Record<string, Core.BaseExecutor<unknown>>,\n pfactory:\n | Core.DependentFn<T, Core.InferOutput<D>>\n | Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(pfactory as any, pdependencies, metas);\n}\n","import { SchemaError, StandardSchemaV1 } from \"./types\";\n\nexport function validate<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Awaited<StandardSchemaV1.InferOutput<TSchema>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n throw new Error(\"validating async is not supported\");\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n return result.value as any;\n}\n\nexport async function validateAsync<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n const result_1 = await result;\n if (result_1.issues) {\n throw new SchemaError(result_1.issues);\n }\n return result_1.value as any;\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n\n return Promise.resolve(result.value as any);\n}\n\nexport function custom<T>(): StandardSchemaV1<T, T> {\n return {\n \"~standard\": {\n vendor: \"pumped-fn\",\n version: 1,\n validate: (value) => {\n return { value: value as T };\n },\n },\n };\n}\n","import { validate } from \"./ssch\";\nimport { metaSymbol, StandardSchemaV1, type Meta } from \"./types\";\n\nexport const meta = <V>(\n key: string | symbol,\n schema: StandardSchemaV1<V>\n): Meta.MetaFn<V> => {\n const _key = typeof key === \"string\" ? Symbol(key) : key;\n\n const fn = (value: V) =>\n ({\n [metaSymbol]: true,\n key: _key,\n schema,\n value,\n } as unknown as Meta.MetaFn<V>);\n\n Object.defineProperty(fn, \"key\", {\n value: _key,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperty(fn, metaSymbol, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperties(fn, {\n partial: {\n value: (d: Partial<V>) => {\n return Object.assign({}, fn({} as V), d);\n },\n configurable: false,\n enumerable: false,\n writable: false,\n },\n some: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValues(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n find: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValue(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n get: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n getValue(\n findValue(\n source,\n fn as unknown as Meta.MetaFn<unknown>\n ) as Meta.Meta<V>\n ),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n });\n\n return fn as any;\n};\n\nexport function getValue<V>(meta: Meta.Meta<V>) {\n return validate(meta.schema, meta.value);\n}\n\nexport function findValues<V = unknown>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V[] {\n if (!executor) return [];\n\n const metas = Array.isArray(executor) ? executor : executor.metas ?? [];\n\n const maybeMeta = metas.filter((m) => m.key === meta.key);\n return maybeMeta.map((m) => getValue(m as Meta.Meta<V>));\n}\n\nexport function findValue<V>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V | undefined {\n const values = findValues(executor, meta);\n return values.at(0);\n}\n","import {\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n isExecutor,\n} from \"./executor\";\nimport { Core } from \"./types\";\n\nexport interface ScopeInner {\n \"~findAffectedTargets\"(\n target: Core.Executor<unknown>,\n updateSet?: Set<Core.Executor<unknown>>\n ): Set<Core.Executor<unknown>>;\n\n \"~resolveDependencies\"(\n e:\n | undefined\n | Core.BaseExecutor<unknown>\n | Core.BaseExecutor<unknown>[]\n | Record<string, Core.BaseExecutor<unknown>>,\n ref: Core.Executor<unknown>\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>>;\n\n getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>>;\n getValueCache(): Map<Core.Executor<unknown>, unknown>;\n getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>>;\n}\n\ntype Value =\n | { kind: \"resolving\"; promise: Promise<unknown> }\n | { kind: \"resolved\"; value: unknown }\n | { kind: \"rejected\"; error: unknown };\n\nclass Scope implements Core.Scope, ScopeInner {\n private isDisposed: boolean = false;\n private cache: Map<Core.Executor<unknown>, Core.Accessor<unknown>> =\n new Map();\n private valueCache: Map<Core.Executor<unknown>, Value> = new Map();\n private reactiveness = new Map<\n Core.Executor<unknown>,\n Set<Core.Executor<unknown>>\n >();\n private cleanups = new Map<Core.Executor<unknown>, Set<Core.Cleanup>>();\n private onUpdates = new Map<\n Core.Executor<unknown>,\n Set<(accessor: Core.Accessor<unknown>) => void | Promise<void>>\n >();\n\n private \"~appendReactive\"(\n reactive: Core.Executor<unknown>,\n ref: Core.Executor<unknown>\n ) {\n const currentSet = this.reactiveness.get(reactive) ?? new Set();\n this.reactiveness.set(reactive, currentSet);\n\n currentSet.add(ref);\n }\n\n async \"~resolveDependencies\"(\n e:\n | undefined\n | Core.BaseExecutor<unknown>\n | Core.BaseExecutor<unknown>[]\n | Record<string, Core.BaseExecutor<unknown>>,\n ref: Core.Executor<unknown>\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>> {\n if (e === undefined) {\n return undefined;\n }\n\n if (isExecutor(e)) {\n if (isLazyExecutor(e)) {\n return this[\"~resolveLazy\"](e);\n }\n\n const staticResult = await this[\"~resolveStatic\"](\n e as Core.Executor<unknown>\n );\n\n if (isReactiveExecutor(e)) {\n this[\"~appendReactive\"](e.executor, ref);\n }\n\n await staticResult.resolve(false);\n if (isStaticExecutor(e)) {\n return staticResult;\n }\n\n return staticResult.get();\n }\n\n if (Array.isArray(e)) {\n return await Promise.all(\n e.map((item) => this[\"~resolveDependencies\"](item, ref))\n );\n }\n\n const result: Record<string, unknown> = {};\n for (const key of Object.keys(e)) {\n const target = e[key];\n const resolvedResult = await this[\"~resolveDependencies\"](target, ref);\n\n result[key] = resolvedResult;\n }\n\n return result;\n }\n\n private \"~resolveLazy\"(e: Core.Lazy<unknown>): Core.Accessor<unknown> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.cache.get(e.executor);\n if (cached) {\n return cached;\n }\n\n const accessor = this[\"~makeAccessor\"](e.executor);\n\n return accessor;\n }\n\n private async \"~resolveStatic\"(\n e: Core.Executor<unknown>\n ): Promise<Core.Accessor<unknown>> {\n const cached = this.cache.get(e);\n if (cached) {\n return cached;\n }\n\n const accessor = this[\"~makeAccessor\"](e, true);\n return accessor;\n }\n\n private \"~makeController\"(e: Core.Executor<unknown>): Core.Controller {\n return {\n cleanup: (cleanup: Core.Cleanup) => {\n const currentSet = this.cleanups.get(e) ?? new Set();\n this.cleanups.set(e, currentSet);\n\n currentSet.add(cleanup);\n },\n release: async () => {\n this.release(e);\n },\n scope: this,\n };\n }\n\n private \"~makeAccessor\"(\n e: Core.BaseExecutor<unknown>,\n eager: boolean = false\n ): Core.Accessor<unknown> {\n const accessor = {} as Core.Accessor<unknown>;\n const requestor =\n isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)\n ? e.executor\n : (e as Core.Executor<unknown>);\n\n const cachedAccessor = this.cache.get(requestor);\n if (cachedAccessor) {\n return cachedAccessor;\n }\n\n const factory = requestor.factory;\n const controller = this[\"~makeController\"](requestor);\n\n const resolve = async (force: boolean): Promise<unknown> => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.valueCache.get(requestor);\n if (cached && !force) {\n if (cached.kind === \"resolved\") {\n return cached.value;\n } else if (cached.kind === \"rejected\") {\n throw cached.error;\n } else {\n return cached.promise;\n }\n }\n\n const promise = new Promise((resolve, reject) => {\n this[\"~resolveDependencies\"](requestor.dependencies, requestor)\n .then((dependencies) => factory(dependencies as any, controller))\n .then((result) => {\n this.valueCache.set(requestor, { kind: \"resolved\", value: result });\n resolve(result);\n })\n .catch((error) => {\n this.valueCache.set(requestor, { kind: \"rejected\", error });\n reject(error);\n });\n });\n\n this.valueCache.set(requestor, { kind: \"resolving\", promise });\n this.cache.set(requestor, accessor);\n return promise;\n };\n\n if (!isLazyExecutor(e) || eager) {\n resolve(false);\n }\n\n return Object.assign(accessor, {\n get: () => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const valueCached = this.valueCache.get(requestor);\n\n if (!valueCached || valueCached.kind === \"resolving\") {\n throw new Error(\"Executor not found\");\n }\n\n if (valueCached.kind === \"rejected\") {\n throw valueCached.error;\n }\n\n return valueCached.value;\n },\n lookup: () => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n return this.valueCache.get(requestor);\n },\n metas: e.metas,\n resolve,\n release: async (soft: boolean = false) => {\n this.release(requestor, soft);\n },\n update: (updateFn: unknown | ((current: unknown) => unknown)) => {\n return this.update(requestor, updateFn);\n },\n subscribe: (cb: (value: unknown) => void) => {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n return this.onUpdate(requestor, cb);\n },\n } satisfies Partial<Core.Accessor<unknown>>);\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n return this[\"~makeAccessor\"](executor, false) as Core.Accessor<T>;\n }\n\n async resolve<T>(executor: Core.Executor<T>): Promise<T> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.valueCache.get(executor);\n if (cached) {\n if (cached.kind === \"resolved\") {\n return cached.value as T;\n } else if (cached.kind === \"rejected\") {\n throw cached.error;\n } else {\n return (await cached.promise) as T;\n }\n }\n\n const accessor = this[\"~makeAccessor\"](executor, true);\n await accessor.resolve(false);\n\n return accessor.get() as T;\n }\n\n async resolveAccessor<T>(\n executor: Core.Executor<T>\n ): Promise<Core.Accessor<T>> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cachedAccessor = this.cache.get(executor);\n if (!cachedAccessor) {\n const accessor = this[\"~makeAccessor\"](executor, true);\n await accessor.resolve();\n\n return accessor as Core.Accessor<T>;\n }\n\n await cachedAccessor.resolve();\n return cachedAccessor as Core.Accessor<T>;\n }\n\n \"~findAffectedTargets\"(\n target: Core.Executor<unknown>,\n updateSet: Set<Core.Executor<unknown>> = new Set()\n ): Set<Core.Executor<unknown>> {\n const triggerTargets = this.reactiveness.get(target);\n\n if (triggerTargets && triggerTargets.size > 0) {\n for (const target of triggerTargets) {\n if (updateSet.has(target)) {\n updateSet.delete(target);\n }\n updateSet.add(target);\n\n if (this.reactiveness.has(target)) {\n this[\"~findAffectedTargets\"](target, updateSet);\n }\n }\n }\n\n return updateSet;\n }\n\n async update<T>(\n executor: Core.Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promise<void> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.cache.get(executor);\n if (!cached) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const current = (await cached.resolve(false)) as T;\n const cleanups = this.cleanups.get(executor);\n if (cleanups) {\n for (const cleanup of Array.from(cleanups.values()).reverse()) {\n await cleanup();\n }\n }\n\n if (typeof updateFn === \"function\") {\n const fn = updateFn as (current: T) => T;\n const newValue = fn(current);\n this.valueCache.set(executor, { kind: \"resolved\", value: newValue });\n } else {\n this.valueCache.set(executor, {\n kind: \"resolved\",\n value: updateFn,\n });\n }\n\n const onUpdateSet = this.onUpdates.get(executor);\n if (onUpdateSet) {\n for (const callback of Array.from(onUpdateSet.values())) {\n await callback(cached);\n }\n }\n\n const updateSet = this[\"~findAffectedTargets\"](executor);\n for (const target of updateSet) {\n const cached = this.cache.get(target);\n\n if (cached) {\n const cleanups = this.cleanups.get(target);\n if (cleanups) {\n for (const cleanup of Array.from(cleanups.values()).reverse()) {\n await cleanup();\n }\n }\n\n await cached.resolve(true);\n\n const onUpdateSet = this.onUpdates.get(target);\n if (onUpdateSet) {\n for (const callback of Array.from(onUpdateSet.values())) {\n await callback(cached);\n }\n }\n }\n }\n }\n\n async reset<T>(executor: Core.Executor<T>): Promise<void> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n await this.release(executor, true);\n await this.resolve(executor);\n }\n\n async release(\n executor: Core.Executor<any>,\n soft: boolean = false\n ): Promise<void> {\n if (this.isDisposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n const cached = this.cache.get(executor);\n if (!cached && !soft) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const affectedTargets = this[\"~findAffectedTargets\"](executor);\n for (const target of affectedTargets) {\n await this.release(target, true);\n }\n\n const cleanups = this.cleanups.get(executor);\n if (cleanups) {\n for (const cleanup of Array.from(cleanups.values()).reverse()) {\n await cleanup();\n }\n }\n\n this.cache.delete(executor);\n this.valueCache.delete(executor);\n this.reactiveness.delete(executor);\n this.onUpdates.delete(executor);\n }\n\n async dispose(): Promise<void> {\n const currents = this.cache.keys();\n for (const current of currents) {\n await this.release(current, true);\n }\n\n this.isDisposed = true;\n this.cache.clear();\n this.valueCache.clear();\n this.reactiveness.clear();\n this.cleanups.clear();\n }\n\n onUpdate<T>(\n executor: Core.Executor<T>,\n callback: (accessor: Core.Accessor<T>) => void | Promise<void>\n ): Core.Cleanup {\n if (this.isDisposed) {\n throw new Error(\"scope is disposed\");\n }\n\n const onUpdateSet = this.onUpdates.get(executor) ?? new Set();\n this.onUpdates.set(executor, onUpdateSet);\n onUpdateSet.add(callback as any);\n\n return () => {\n if (this.isDisposed) {\n throw new Error(\"scope is disposed\");\n }\n\n const currentSet = this.onUpdates.get(executor);\n if (currentSet) {\n currentSet.delete(callback as any);\n if (currentSet.size === 0) {\n this.onUpdates.delete(executor);\n }\n }\n };\n }\n\n getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>> {\n return this.cache;\n }\n\n getValueCache(): Map<Core.Executor<unknown>, unknown> {\n return this.valueCache;\n }\n\n getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>> {\n return this.reactiveness;\n }\n}\n\nexport function createScope(): Core.Scope {\n return new Scope();\n}\n"],"mappings":"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","names":["executorSymbol","metaSymbol","SchemaError","issues","createExecutor","factory","dependencies","metas","executor","executorSymbol","_","controller","lazyExecutor","reactiveExecutor","staticExecutor","isLazyExecutor","isReactiveExecutor","isStaticExecutor","isExecutor","input","provide","derive","pdependencies","pfactory","validate","schema","data","result","SchemaError","validateAsync","result_1","custom","value","meta","key","schema","_key","fn","value","metaSymbol","d","source","findValues","findValue","getValue","validate","executor","m","Scope","reactive","ref","currentSet","isExecutor","isLazyExecutor","staticResult","isReactiveExecutor","isStaticExecutor","item","result","key","target","resolvedResult","cached","cleanup","eager","accessor","requestor","cachedAccessor","factory","controller","resolve","force","promise","reject","dependencies","error","valueCached","soft","updateFn","cb","executor","updateSet","triggerTargets","current","cleanups","newValue","onUpdateSet","callback","affectedTargets","currents","createScope"]}
1
+ {"version":3,"sources":["../src/types.ts","../src/executor.ts","../src/ssch.ts","../src/meta.ts","../src/scope.ts"],"sourcesContent":["export const executorSymbol = Symbol.for(\"@pumped-fn/core/executor\");\nexport const metaSymbol = Symbol.for(\"@pumped-fn/core/meta\");\n\nexport interface StandardSchemaV1<Input = unknown, Output = Input> {\n readonly \"~standard\": StandardSchemaV1.Props<Input, Output>;\n}\n\nexport declare namespace StandardSchemaV1 {\n export interface Props<Input = unknown, Output = Input> {\n readonly version: 1;\n readonly vendor: string;\n readonly validate: (\n value: unknown\n ) => Result<Output> | Promise<Result<Output>>;\n readonly types?: Types<Input, Output> | undefined;\n }\n\n export type Result<Output> = SuccessResult<Output> | FailureResult;\n\n export interface SuccessResult<Output> {\n readonly value: Output;\n readonly issues?: undefined;\n }\n\n export interface FailureResult {\n readonly issues: ReadonlyArray<Issue>;\n }\n\n export interface Issue {\n readonly message: string;\n readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;\n }\n\n export interface PathSegment {\n readonly key: PropertyKey;\n }\n\n export interface Types<Input = unknown, Output = Input> {\n readonly input: Input;\n readonly output: Output;\n }\n\n export type InferInput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"input\"];\n\n export type InferOutput<Schema extends StandardSchemaV1> = NonNullable<\n Schema[\"~standard\"][\"types\"]\n >[\"output\"];\n}\n\nexport class SchemaError extends Error {\n public readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;\n\n constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>) {\n super(issues[0].message);\n this.name = \"SchemaError\";\n this.issues = issues;\n }\n}\n\nexport declare namespace Meta {\n export interface MetaContainer {\n metas: Meta[] | undefined;\n }\n\n export interface Meta<V = unknown> {\n readonly [metaSymbol]: true;\n readonly key: string | symbol;\n readonly schema: StandardSchemaV1<V>;\n readonly value: V;\n }\n\n export interface MetaFn<V> {\n (value: V): Meta<V>;\n readonly key: string | symbol;\n partial: <D extends Partial<V>>(d: D) => D;\n some: (source: MetaContainer | Meta[] | undefined) => V[];\n find: (source: MetaContainer | Meta[] | undefined) => V | undefined;\n get: (source: MetaContainer | Meta[] | undefined) => V;\n }\n}\n\nexport declare namespace Core {\n export type Output<T> = T | Promise<T>;\n\n export type NoDependencyFn<T> = (scope: Controller) => Output<T>;\n export type DependentFn<T, D> = (\n dependencies: D,\n scope: Controller\n ) => Output<T>;\n export type RecordLike = Record<string, unknown>;\n export type UExecutor = BaseExecutor<unknown>;\n\n export type Cleanup = () => void | Promise<void>;\n\n export type Controller = {\n cleanup: (cleanup: Cleanup) => void;\n release: () => Promise<void>;\n scope: Scope;\n };\n\n export type Kind = \"main\" | \"reactive\" | \"lazy\" | \"static\";\n\n export interface BaseExecutor<T> extends Meta.MetaContainer {\n [executorSymbol]: Kind;\n factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;\n dependencies:\n | undefined\n | UExecutor\n | Array<UExecutor>\n | Record<string, UExecutor>;\n }\n\n export interface Executor<T> extends BaseExecutor<T> {\n [executorSymbol]: \"main\";\n factory: NoDependencyFn<T> | DependentFn<T, unknown>;\n\n /** Return an executor controller without resolving Executor */\n readonly lazy: Lazy<T>;\n\n /** Return an resolved executor, and mark the user to be reactived for future changes */\n readonly reactive: Reactive<T>;\n\n /** Return an resolved executor with its controller */\n readonly static: Static<T>;\n }\n\n export interface Reactive<T> extends BaseExecutor<T> {\n [executorSymbol]: \"reactive\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Lazy<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"lazy\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Static<T> extends BaseExecutor<Accessor<T>> {\n [executorSymbol]: \"static\";\n factory: undefined;\n readonly executor: Executor<T>;\n }\n\n export interface Accessor<T> extends Meta.MetaContainer {\n lookup(): T;\n get(): T;\n resolve(force?: boolean): Promise<T>;\n release(soft?: boolean): Promise<void>;\n update(updateFn: T | ((current: T) => T)): Promise<void>;\n subscribe(callback: (value: T) => void): Cleanup;\n }\n\n export interface Preset<T> {\n [executorSymbol]: \"preset\";\n executor: Executor<T>;\n value: T;\n }\n\n export type InferOutput<T> = T extends Executor<infer U> | Reactive<infer U>\n ? Awaited<U>\n : T extends Lazy<infer U> | Static<infer U>\n ? Accessor<Awaited<U>>\n : never;\n\n export interface Scope {\n accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;\n\n resolve<T>(executor: Core.Executor<T>): Promise<T>;\n resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;\n\n update<T>(\n executor: Executor<T>,\n updateFn: T | ((current: T) => T)\n ): Promise<void>;\n\n reset<T>(executor: Executor<T>): Promise<void>;\n release(executor: Executor<any>, soft?: boolean): Promise<void>;\n\n dispose(): Promise<void>;\n\n onUpdate<T>(\n executor: Executor<T>,\n callback: (accessor: Accessor<T>) => void\n ): Cleanup;\n // onRelease<T>(executor: Executor<T>, callback: () => void): () => void;\n }\n}\n","import { Core, executorSymbol, Meta } from \"./types\";\n\nfunction createExecutor<T>(\n factory: Core.NoDependencyFn<T> | Core.DependentFn<T, unknown>,\n dependencies:\n | undefined\n | Core.UExecutor\n | Array<Core.UExecutor>\n | Record<string, Core.UExecutor>,\n metas: Meta.Meta[] | undefined\n): Core.Executor<T> {\n const executor = {\n [executorSymbol]: \"main\",\n factory: (_: unknown, controller: Core.Controller) => {\n if (dependencies === undefined) {\n const f = factory as Core.NoDependencyFn<T>;\n return f(controller);\n }\n\n const f = factory as Core.DependentFn<T, unknown>;\n return f(_, controller);\n },\n dependencies,\n metas: metas,\n } as unknown as Core.Executor<T>;\n\n const lazyExecutor = {\n [executorSymbol]: \"lazy\",\n dependencies: undefined,\n executor,\n factory: undefined,\n metas: metas,\n } satisfies Core.Lazy<T>;\n\n const reactiveExecutor = {\n [executorSymbol]: \"reactive\",\n executor,\n factory: undefined,\n dependencies: undefined,\n metas: metas,\n } satisfies Core.Reactive<T>;\n\n const staticExecutor = {\n [executorSymbol]: \"static\",\n dependencies: undefined,\n factory: undefined,\n metas: metas,\n executor,\n } satisfies Core.Static<T>;\n\n Object.defineProperties(executor, {\n lazy: {\n value: lazyExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n reactive: {\n value: reactiveExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n static: {\n value: staticExecutor,\n writable: false,\n configurable: false,\n enumerable: false,\n },\n });\n\n return executor;\n}\n\nexport function isLazyExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Lazy<unknown> {\n return executor[executorSymbol] === \"lazy\";\n}\n\nexport function isReactiveExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Reactive<unknown> {\n return executor[executorSymbol] === \"reactive\";\n}\n\nexport function isStaticExecutor(\n executor: Core.BaseExecutor<unknown>\n): executor is Core.Static<unknown> {\n return executor[executorSymbol] === \"static\";\n}\n\nexport function isMainExecutor(\n executor: unknown\n): executor is Core.Executor<unknown> {\n return isExecutor(executor) && executor[executorSymbol] === \"main\";\n}\n\nexport function isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\n}\n\nexport function provide<T>(\n factory: Core.NoDependencyFn<T>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(factory, undefined, metas);\n}\n\nexport function derive<T, D extends Core.BaseExecutor<unknown>>(\n dependencies: D,\n factory: Core.DependentFn<T, Core.InferOutput<D>>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<\n T,\n D extends\n | ReadonlyArray<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n>(\n dependencies: { [K in keyof D]: D[K] },\n factory: Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T>;\n\nexport function derive<T, D>(\n pdependencies:\n | Core.BaseExecutor<D>\n | Array<Core.BaseExecutor<D>>\n | Record<string, Core.BaseExecutor<unknown>>,\n pfactory:\n | Core.DependentFn<T, Core.InferOutput<D>>\n | Core.DependentFn<T, { [K in keyof D]: Core.InferOutput<D[K]> }>,\n ...metas: Meta.Meta[]\n): Core.Executor<T> {\n return createExecutor(pfactory as any, pdependencies, metas);\n}\n\nexport function preset<T>(e: Core.Executor<T>, v: T): Core.Preset<T> {\n return {\n [executorSymbol]: \"preset\",\n value: v,\n executor: e,\n };\n}\n","import { SchemaError, StandardSchemaV1 } from \"./types\";\n\nexport function validate<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Awaited<StandardSchemaV1.InferOutput<TSchema>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n throw new Error(\"validating async is not supported\");\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n return result.value as any;\n}\n\nexport async function validateAsync<TSchema extends StandardSchemaV1>(\n schema: TSchema,\n data: unknown\n): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>> {\n const result = schema[\"~standard\"].validate(data);\n\n if (\"then\" in result) {\n const result_1 = await result;\n if (result_1.issues) {\n throw new SchemaError(result_1.issues);\n }\n return result_1.value as any;\n }\n\n if (result.issues) {\n throw new SchemaError(result.issues);\n }\n\n return Promise.resolve(result.value as any);\n}\n\nexport function custom<T>(): StandardSchemaV1<T, T> {\n return {\n \"~standard\": {\n vendor: \"pumped-fn\",\n version: 1,\n validate: (value) => {\n return { value: value as T };\n },\n },\n };\n}\n","import { validate } from \"./ssch\";\nimport { metaSymbol, StandardSchemaV1, type Meta } from \"./types\";\n\nexport const meta = <V>(\n key: string | symbol,\n schema: StandardSchemaV1<V>\n): Meta.MetaFn<V> => {\n const _key = typeof key === \"string\" ? Symbol(key) : key;\n\n const fn = (value: V) =>\n ({\n [metaSymbol]: true,\n key: _key,\n schema,\n value,\n } as unknown as Meta.MetaFn<V>);\n\n Object.defineProperty(fn, \"key\", {\n value: _key,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperty(fn, metaSymbol, {\n value: true,\n configurable: false,\n enumerable: false,\n writable: false,\n });\n\n Object.defineProperties(fn, {\n partial: {\n value: (d: Partial<V>) => {\n return Object.assign({}, fn({} as V), d);\n },\n configurable: false,\n enumerable: false,\n writable: false,\n },\n some: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValues(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n find: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n findValue(source, fn as unknown as Meta.MetaFn<unknown>),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n get: {\n value: (source: Meta.MetaContainer | Meta.Meta[] | undefined) =>\n getValue(\n findValue(\n source,\n fn as unknown as Meta.MetaFn<unknown>\n ) as Meta.Meta<V>\n ),\n configurable: false,\n enumerable: false,\n writable: false,\n },\n });\n\n return fn as any;\n};\n\nexport function getValue<V>(meta: Meta.Meta<V>) {\n return validate(meta.schema, meta.value);\n}\n\nexport function findValues<V = unknown>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V[] {\n if (!executor) return [];\n\n const metas = Array.isArray(executor) ? executor : executor.metas ?? [];\n\n const maybeMeta = metas.filter((m) => m.key === meta.key);\n return maybeMeta.map((m) => getValue(m as Meta.Meta<V>));\n}\n\nexport function findValue<V>(\n executor: Meta.MetaContainer | Meta.Meta[] | undefined,\n meta: Meta.MetaFn<V>\n): V | undefined {\n const values = findValues(executor, meta);\n return values.at(0);\n}\n","import {\n isLazyExecutor,\n isReactiveExecutor,\n isStaticExecutor,\n isMainExecutor,\n isExecutor,\n} from \"./executor\";\nimport { Core } from \"./types\";\n\ntype CacheEntry = {\n accessor: Core.Accessor<unknown>;\n value:\n | { kind: \"resolving\"; promise: Promise<unknown> }\n | { kind: \"resolved\"; value: unknown }\n | { kind: \"rejected\"; error: unknown };\n};\n\ntype UE = Core.Executor<unknown>;\ntype OnUpdateFn = (accessor: Core.Accessor<unknown>) => void | Promise<void>;\n\nfunction getExecutor(e: Core.UExecutor): Core.Executor<unknown> {\n if (isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)) {\n return e.executor;\n }\n\n return e as Core.Executor<unknown>;\n}\n\nclass Scope implements Core.Scope {\n private disposed: boolean = false;\n private cache: Map<UE, CacheEntry> = new Map();\n private cleanups = new Map<UE, Set<Core.Cleanup>>();\n private onUpdates = new Map<UE, Set<OnUpdateFn | UE>>();\n\n constructor(...presets: Core.Preset<unknown>[]) {\n for (const preset of presets) {\n const accessor = this[\"~makeAccessor\"](preset.executor);\n\n this.cache.set(preset.executor, {\n accessor,\n value: { kind: \"resolved\", value: preset.value },\n });\n }\n }\n\n private async \"~triggerCleanup\"(e: UE): Promise<void> {\n const cs = this.cleanups.get(e);\n if (cs) {\n for (const c of Array.from(cs.values()).reverse()) {\n await c();\n }\n }\n }\n\n private async \"~triggerUpdate\"(e: UE): Promise<void> {\n const ce = this.cache.get(e);\n if (!ce) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n const ou = this.onUpdates.get(e);\n if (ou) {\n for (const t of Array.from(ou.values())) {\n if (isMainExecutor(t)) {\n if (this.cleanups.has(t)) {\n this[\"~triggerCleanup\"](t);\n }\n\n const a = this.cache.get(t);\n await a!.accessor.resolve(true);\n\n if (this.onUpdates.has(t)) {\n await this[\"~triggerUpdate\"](t);\n }\n } else {\n await t(ce.accessor);\n }\n }\n }\n }\n\n private async \"~resolveExecutor\"(\n ie: Core.UExecutor,\n ref: UE\n ): Promise<unknown> {\n const e = getExecutor(ie);\n const a = this[\"~makeAccessor\"](e);\n\n if (isLazyExecutor(ie)) {\n return a;\n }\n\n if (isReactiveExecutor(ie)) {\n const c = this.onUpdates.get(ie.executor) ?? new Set();\n this.onUpdates.set(ie.executor, c);\n c.add(ref);\n }\n\n await a.resolve(false);\n if (isStaticExecutor(ie)) {\n return a;\n }\n\n return a.get();\n }\n\n private async \"~resolveDependencies\"(\n ie:\n | undefined\n | Core.UExecutor\n | Core.UExecutor[]\n | Record<string, Core.UExecutor>,\n ref: UE\n ): Promise<undefined | unknown | unknown[] | Record<string, unknown>> {\n if (ie === undefined) {\n return undefined;\n }\n\n if (isExecutor(ie)) {\n return this[\"~resolveExecutor\"](ie, ref);\n }\n\n if (Array.isArray(ie)) {\n return await Promise.all(\n ie.map((item) => this[\"~resolveDependencies\"](item, ref))\n );\n }\n\n const r: Record<string, unknown> = {};\n for (const k of Object.keys(ie)) {\n const t = ie[k];\n const rd = await this[\"~resolveDependencies\"](t, ref);\n\n r[k] = rd;\n }\n\n return r;\n }\n\n private \"~ensureNotDisposed\"(): void {\n if (this.disposed) {\n throw new Error(\"Scope is disposed\");\n }\n }\n\n private \"~makeAccessor\"(e: Core.UExecutor): Core.Accessor<unknown> {\n const requestor =\n isLazyExecutor(e) || isReactiveExecutor(e) || isStaticExecutor(e)\n ? e.executor\n : (e as UE);\n\n const cachedAccessor = this.cache.get(requestor);\n if (cachedAccessor) {\n return cachedAccessor.accessor;\n }\n\n const accessor = {} as Core.Accessor<unknown>;\n const factory = requestor.factory;\n const controller = {\n cleanup: (cleanup: Core.Cleanup) => {\n const currentSet = this.cleanups.get(requestor) ?? new Set();\n this.cleanups.set(requestor, currentSet);\n\n currentSet.add(cleanup);\n },\n release: async () => this.release(requestor),\n scope: this,\n };\n\n const resolve = (force: boolean): Promise<unknown> => {\n this[\"~ensureNotDisposed\"]();\n\n const entry = this.cache.get(requestor)!;\n const cached = entry?.value;\n\n if (cached && !force) {\n if (cached.kind === \"resolved\") {\n return Promise.resolve(cached.value);\n } else if (cached.kind === \"rejected\") {\n throw cached.error;\n } else {\n return cached.promise;\n }\n }\n\n const promise = new Promise((resolve, reject) => {\n this[\"~resolveDependencies\"](requestor.dependencies, requestor)\n .then((dependencies) => factory(dependencies as any, controller))\n .then((result) => {\n this.cache.set(requestor, {\n accessor,\n value: { kind: \"resolved\", value: result },\n });\n\n resolve(result);\n })\n .catch((error) => {\n this.cache.set(requestor, {\n accessor,\n value: { kind: \"rejected\", error },\n });\n\n reject(error);\n });\n });\n\n this.cache.set(requestor, {\n accessor,\n value: { kind: \"resolving\", promise },\n });\n return promise;\n };\n\n return Object.assign(accessor, {\n get: () => {\n this[\"~ensureNotDisposed\"]();\n\n const cacheEntry = this.cache.get(requestor)?.value;\n\n if (!cacheEntry || cacheEntry.kind === \"resolving\") {\n throw new Error(\"Executor is not resolved\");\n }\n\n if (cacheEntry.kind === \"rejected\") {\n throw cacheEntry.error;\n }\n\n return cacheEntry.value;\n },\n lookup: () => {\n this[\"~ensureNotDisposed\"]();\n\n return this.cache.get(requestor)?.value;\n },\n metas: e.metas,\n resolve,\n release: async (soft: boolean = false) => {\n this.release(requestor, soft);\n },\n update: (updateFn: unknown | ((current: unknown) => unknown)) => {\n return this.update(requestor, updateFn);\n },\n subscribe: (cb: (value: unknown) => void) => {\n this[\"~ensureNotDisposed\"]();\n return this.onUpdate(requestor, cb);\n },\n } satisfies Partial<Core.Accessor<unknown>>);\n }\n\n accessor<T>(executor: Core.Executor<T>): Core.Accessor<T> {\n this[\"~ensureNotDisposed\"]();\n return this[\"~makeAccessor\"](executor) as Core.Accessor<T>;\n }\n\n async resolve<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promise<T> {\n this[\"~ensureNotDisposed\"]();\n const accessor = this[\"~makeAccessor\"](executor);\n await accessor.resolve(force);\n return accessor.get() as T;\n }\n\n async resolveAccessor<T>(\n executor: Core.Executor<T>,\n force: boolean = false\n ): Promise<Core.Accessor<T>> {\n this[\"~ensureNotDisposed\"]();\n const accessor = this[\"~makeAccessor\"](executor);\n await accessor.resolve(force);\n return accessor as Core.Accessor<T>;\n }\n\n async update<T>(\n e: Core.Executor<T>,\n u: T | ((current: T) => T)\n ): Promise<void> {\n this[\"~ensureNotDisposed\"]();\n this[\"~triggerCleanup\"](e);\n const accessor = this[\"~makeAccessor\"](e);\n\n if (typeof u === \"function\") {\n const fn = u as (current: T) => T;\n const n = fn(accessor.get() as T);\n this.cache.set(e, {\n accessor,\n value: { kind: \"resolved\", value: n },\n });\n } else {\n this.cache.set(e, {\n accessor,\n value: { kind: \"resolved\", value: u },\n });\n }\n\n await this[\"~triggerUpdate\"](e);\n }\n\n async reset<T>(executor: Core.Executor<T>): Promise<void> {\n if (this.disposed) {\n throw new Error(\"Scope is disposed\");\n }\n\n await this.release(executor, true);\n await this.resolve(executor, true);\n }\n\n async release(e: Core.Executor<unknown>, s: boolean = false): Promise<void> {\n this[\"~ensureNotDisposed\"]();\n\n const ce = this.cache.get(e);\n if (!ce && !s) {\n throw new Error(\"Executor is not yet resolved\");\n }\n\n await this[\"~triggerCleanup\"](e);\n\n const ou = this.onUpdates.get(e);\n if (ou) {\n for (const t of Array.from(ou.values())) {\n if (isMainExecutor(t)) {\n await this.release(t, true);\n }\n }\n\n this.onUpdates.delete(e);\n }\n\n this.cache.delete(e);\n }\n\n async dispose(): Promise<void> {\n this[\"~ensureNotDisposed\"]();\n const currents = this.cache.keys();\n for (const current of currents) {\n await this.release(current, true);\n }\n\n this.disposed = true;\n this.cache.clear();\n this.cleanups.clear();\n }\n\n onUpdate<T>(\n e: Core.Executor<T>,\n cb: (a: Core.Accessor<T>) => void | Promise<void>\n ): Core.Cleanup {\n this[\"~ensureNotDisposed\"]();\n\n const ou = this.onUpdates.get(e) ?? new Set();\n this.onUpdates.set(e, ou);\n ou.add(cb as any);\n\n return () => {\n this[\"~ensureNotDisposed\"]();\n\n const ou = this.onUpdates.get(e);\n if (ou) {\n ou.delete(cb as any);\n if (ou.size === 0) {\n this.onUpdates.delete(e);\n }\n }\n };\n }\n}\n\nexport function createScope(...presets: Core.Preset<unknown>[]): Core.Scope {\n return new Scope(...presets);\n}\n"],"mappings":"AAAO,IAAMA,EAAiB,OAAO,IAAI,0BAA0B,EACtDC,EAAa,OAAO,IAAI,sBAAsB,EAkD9CC,EAAN,cAA0B,KAAM,CACrB,OAEhB,YAAYC,EAA+C,CACzD,MAAMA,EAAO,CAAC,EAAE,OAAO,EACvB,KAAK,KAAO,cACZ,KAAK,OAASA,CAChB,CACF,ECzDA,SAASC,EACPC,EACAC,EAKAC,EACkB,CAClB,IAAMC,EAAW,CACf,CAACC,CAAc,EAAG,OAClB,QAAS,CAACC,EAAYC,IAChBL,IAAiB,OACTD,EACDM,CAAU,EAGXN,EACDK,EAAGC,CAAU,EAExB,aAAAL,EACA,MAAOC,CACT,EAEMK,EAAe,CACnB,CAACH,CAAc,EAAG,OAClB,aAAc,OACd,SAAAD,EACA,QAAS,OACT,MAAOD,CACT,EAEMM,EAAmB,CACvB,CAACJ,CAAc,EAAG,WAClB,SAAAD,EACA,QAAS,OACT,aAAc,OACd,MAAOD,CACT,EAEMO,EAAiB,CACrB,CAACL,CAAc,EAAG,SAClB,aAAc,OACd,QAAS,OACT,MAAOF,EACP,SAAAC,CACF,EAEA,cAAO,iBAAiBA,EAAU,CAChC,KAAM,CACJ,MAAOI,EACP,SAAU,GACV,aAAc,GACd,WAAY,EACd,EACA,SAAU,CACR,MAAOC,EACP,SAAU,GACV,aAAc,GACd,WAAY,EACd,EACA,OAAQ,CACN,MAAOC,EACP,SAAU,GACV,aAAc,GACd,WAAY,EACd,CACF,CAAC,EAEMN,CACT,CAEO,SAASO,EACdP,EACgC,CAChC,OAAOA,EAASC,CAAc,IAAM,MACtC,CAEO,SAASO,EACdR,EACoC,CACpC,OAAOA,EAASC,CAAc,IAAM,UACtC,CAEO,SAASQ,EACdT,EACkC,CAClC,OAAOA,EAASC,CAAc,IAAM,QACtC,CAEO,SAASS,EACdV,EACoC,CACpC,OAAOW,EAAWX,CAAQ,GAAKA,EAASC,CAAc,IAAM,MAC9D,CAEO,SAASU,EAAcC,EAA+C,CAC3E,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQX,KAAkBW,CAC1E,CAEO,SAASC,EACdhB,KACGE,EACe,CAClB,OAAOH,EAAeC,EAAS,OAAWE,CAAK,CACjD,CAmBO,SAASe,EACdC,EAIAC,KAGGjB,EACe,CAClB,OAAOH,EAAeoB,EAAiBD,EAAehB,CAAK,CAC7D,CAEO,SAASkB,EAAUC,EAAqBC,EAAsB,CACnE,MAAO,CACL,CAAClB,CAAc,EAAG,SAClB,MAAOkB,EACP,SAAUD,CACZ,CACF,CC/IO,SAASE,EACdC,EACAC,EACgD,CAChD,IAAMC,EAASF,EAAO,WAAW,EAAE,SAASC,CAAI,EAEhD,GAAI,SAAUC,EACZ,MAAM,IAAI,MAAM,mCAAmC,EAGrD,GAAIA,EAAO,OACT,MAAM,IAAIC,EAAYD,EAAO,MAAM,EAErC,OAAOA,EAAO,KAChB,CAEA,eAAsBE,EACpBJ,EACAC,EACyD,CACzD,IAAMC,EAASF,EAAO,WAAW,EAAE,SAASC,CAAI,EAEhD,GAAI,SAAUC,EAAQ,CACpB,IAAMG,EAAW,MAAMH,EACvB,GAAIG,EAAS,OACX,MAAM,IAAIF,EAAYE,EAAS,MAAM,EAEvC,OAAOA,EAAS,KAClB,CAEA,GAAIH,EAAO,OACT,MAAM,IAAIC,EAAYD,EAAO,MAAM,EAGrC,OAAO,QAAQ,QAAQA,EAAO,KAAY,CAC5C,CAEO,SAASI,GAAoC,CAClD,MAAO,CACL,YAAa,CACX,OAAQ,YACR,QAAS,EACT,SAAWC,IACF,CAAE,MAAOA,CAAW,EAE/B,CACF,CACF,CC9CO,IAAMC,EAAO,CAClBC,EACAC,IACmB,CACnB,IAAMC,EAAO,OAAOF,GAAQ,SAAW,OAAOA,CAAG,EAAIA,EAE/CG,EAAMC,IACT,CACC,CAACC,CAAU,EAAG,GACd,IAAKH,EACL,OAAAD,EACA,MAAAG,CACF,GAEF,cAAO,eAAeD,EAAI,MAAO,CAC/B,MAAOD,EACP,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,CAAC,EAED,OAAO,eAAeC,EAAIE,EAAY,CACpC,MAAO,GACP,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,CAAC,EAED,OAAO,iBAAiBF,EAAI,CAC1B,QAAS,CACP,MAAQG,GACC,OAAO,OAAO,CAAC,EAAGH,EAAG,CAAC,CAAM,EAAGG,CAAC,EAEzC,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,EACA,KAAM,CACJ,MAAQC,GACNC,EAAWD,EAAQJ,CAAqC,EAC1D,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,EACA,KAAM,CACJ,MAAQI,GACNE,EAAUF,EAAQJ,CAAqC,EACzD,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,EACA,IAAK,CACH,MAAQI,GACNG,EACED,EACEF,EACAJ,CACF,CACF,EACF,aAAc,GACd,WAAY,GACZ,SAAU,EACZ,CACF,CAAC,EAEMA,CACT,EAEO,SAASO,EAAYX,EAAoB,CAC9C,OAAOY,EAASZ,EAAK,OAAQA,EAAK,KAAK,CACzC,CAEO,SAASS,EACdI,EACAb,EACK,CACL,OAAKa,GAES,MAAM,QAAQA,CAAQ,EAAIA,EAAWA,EAAS,OAAS,CAAC,GAE9C,OAAQC,GAAMA,EAAE,MAAQd,EAAK,GAAG,EACvC,IAAKc,GAAMH,EAASG,CAAiB,CAAC,EALjC,CAAC,CAMzB,CAEO,SAASJ,EACdG,EACAb,EACe,CAEf,OADeS,EAAWI,EAAUb,CAAI,EAC1B,GAAG,CAAC,CACpB,CCzEA,SAASe,EAAYC,EAA2C,CAC9D,OAAIC,EAAeD,CAAC,GAAKE,EAAmBF,CAAC,GAAKG,EAAiBH,CAAC,EAC3DA,EAAE,SAGJA,CACT,CAEA,IAAMI,EAAN,KAAkC,CACxB,SAAoB,GACpB,MAA6B,IAAI,IACjC,SAAW,IAAI,IACf,UAAY,IAAI,IAExB,eAAeC,EAAiC,CAC9C,QAAWC,KAAUD,EAAS,CAC5B,IAAME,EAAW,KAAK,eAAe,EAAED,EAAO,QAAQ,EAEtD,KAAK,MAAM,IAAIA,EAAO,SAAU,CAC9B,SAAAC,EACA,MAAO,CAAE,KAAM,WAAY,MAAOD,EAAO,KAAM,CACjD,CAAC,CACH,CACF,CAEA,KAAc,kBAAkB,EAAsB,CACpD,IAAME,EAAK,KAAK,SAAS,IAAI,CAAC,EAC9B,GAAIA,EACF,QAAWC,KAAK,MAAM,KAAKD,EAAG,OAAO,CAAC,EAAE,QAAQ,EAC9C,MAAMC,EAAE,CAGd,CAEA,KAAc,iBAAiB,EAAsB,CACnD,IAAMC,EAAK,KAAK,MAAM,IAAI,CAAC,EAC3B,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,8BAA8B,EAGhD,IAAMC,EAAK,KAAK,UAAU,IAAI,CAAC,EAC/B,GAAIA,EACF,QAAWC,KAAK,MAAM,KAAKD,EAAG,OAAO,CAAC,EAChCE,EAAeD,CAAC,GACd,KAAK,SAAS,IAAIA,CAAC,GACrB,KAAK,iBAAiB,EAAEA,CAAC,EAI3B,MADU,KAAK,MAAM,IAAIA,CAAC,EACjB,SAAS,QAAQ,EAAI,EAE1B,KAAK,UAAU,IAAIA,CAAC,GACtB,MAAM,KAAK,gBAAgB,EAAEA,CAAC,GAGhC,MAAMA,EAAEF,EAAG,QAAQ,CAI3B,CAEA,KAAc,mBACZI,EACAC,EACkB,CAClB,IAAMf,EAAID,EAAYe,CAAE,EAClBE,EAAI,KAAK,eAAe,EAAEhB,CAAC,EAEjC,GAAIC,EAAea,CAAE,EACnB,OAAOE,EAGT,GAAId,EAAmBY,CAAE,EAAG,CAC1B,IAAML,EAAI,KAAK,UAAU,IAAIK,EAAG,QAAQ,GAAK,IAAI,IACjD,KAAK,UAAU,IAAIA,EAAG,SAAUL,CAAC,EACjCA,EAAE,IAAIM,CAAG,CACX,CAGA,OADA,MAAMC,EAAE,QAAQ,EAAK,EACjBb,EAAiBW,CAAE,EACdE,EAGFA,EAAE,IAAI,CACf,CAEA,KAAc,uBACZF,EAKAC,EACoE,CACpE,GAAID,IAAO,OACT,OAGF,GAAIG,EAAWH,CAAE,EACf,OAAO,KAAK,kBAAkB,EAAEA,EAAIC,CAAG,EAGzC,GAAI,MAAM,QAAQD,CAAE,EAClB,OAAO,MAAM,QAAQ,IACnBA,EAAG,IAAKI,GAAS,KAAK,sBAAsB,EAAEA,EAAMH,CAAG,CAAC,CAC1D,EAGF,IAAMI,EAA6B,CAAC,EACpC,QAAWC,KAAK,OAAO,KAAKN,CAAE,EAAG,CAC/B,IAAMF,EAAIE,EAAGM,CAAC,EACRC,EAAK,MAAM,KAAK,sBAAsB,EAAET,EAAGG,CAAG,EAEpDI,EAAEC,CAAC,EAAIC,CACT,CAEA,OAAOF,CACT,CAEQ,sBAA6B,CACnC,GAAI,KAAK,SACP,MAAM,IAAI,MAAM,mBAAmB,CAEvC,CAEQ,gBAAgB,EAA2C,CACjE,IAAMG,EACJrB,EAAe,CAAC,GAAKC,EAAmB,CAAC,GAAKC,EAAiB,CAAC,EAC5D,EAAE,SACD,EAEDoB,EAAiB,KAAK,MAAM,IAAID,CAAS,EAC/C,GAAIC,EACF,OAAOA,EAAe,SAGxB,IAAMhB,EAAW,CAAC,EACZiB,EAAUF,EAAU,QACpBG,EAAa,CACjB,QAAUC,GAA0B,CAClC,IAAMC,EAAa,KAAK,SAAS,IAAIL,CAAS,GAAK,IAAI,IACvD,KAAK,SAAS,IAAIA,EAAWK,CAAU,EAEvCA,EAAW,IAAID,CAAO,CACxB,EACA,QAAS,SAAY,KAAK,QAAQJ,CAAS,EAC3C,MAAO,IACT,EAEMM,EAAWC,GAAqC,CACpD,KAAK,oBAAoB,EAAE,EAG3B,IAAMC,EADQ,KAAK,MAAM,IAAIR,CAAS,GAChB,MAEtB,GAAIQ,GAAU,CAACD,EAAO,CACpB,GAAIC,EAAO,OAAS,WAClB,OAAO,QAAQ,QAAQA,EAAO,KAAK,EAC9B,GAAIA,EAAO,OAAS,WACzB,MAAMA,EAAO,MAEb,OAAOA,EAAO,OAElB,CAEA,IAAMC,EAAU,IAAI,QAAQ,CAACH,EAASI,IAAW,CAC/C,KAAK,sBAAsB,EAAEV,EAAU,aAAcA,CAAS,EAC3D,KAAMW,GAAiBT,EAAQS,EAAqBR,CAAU,CAAC,EAC/D,KAAMS,GAAW,CAChB,KAAK,MAAM,IAAIZ,EAAW,CACxB,SAAAf,EACA,MAAO,CAAE,KAAM,WAAY,MAAO2B,CAAO,CAC3C,CAAC,EAEDN,EAAQM,CAAM,CAChB,CAAC,EACA,MAAOC,GAAU,CAChB,KAAK,MAAM,IAAIb,EAAW,CACxB,SAAAf,EACA,MAAO,CAAE,KAAM,WAAY,MAAA4B,CAAM,CACnC,CAAC,EAEDH,EAAOG,CAAK,CACd,CAAC,CACL,CAAC,EAED,YAAK,MAAM,IAAIb,EAAW,CACxB,SAAAf,EACA,MAAO,CAAE,KAAM,YAAa,QAAAwB,CAAQ,CACtC,CAAC,EACMA,CACT,EAEA,OAAO,OAAO,OAAOxB,EAAU,CAC7B,IAAK,IAAM,CACT,KAAK,oBAAoB,EAAE,EAE3B,IAAM6B,EAAa,KAAK,MAAM,IAAId,CAAS,GAAG,MAE9C,GAAI,CAACc,GAAcA,EAAW,OAAS,YACrC,MAAM,IAAI,MAAM,0BAA0B,EAG5C,GAAIA,EAAW,OAAS,WACtB,MAAMA,EAAW,MAGnB,OAAOA,EAAW,KACpB,EACA,OAAQ,KACN,KAAK,oBAAoB,EAAE,EAEpB,KAAK,MAAM,IAAId,CAAS,GAAG,OAEpC,MAAO,EAAE,MACT,QAAAM,EACA,QAAS,MAAOS,EAAgB,KAAU,CACxC,KAAK,QAAQf,EAAWe,CAAI,CAC9B,EACA,OAASC,GACA,KAAK,OAAOhB,EAAWgB,CAAQ,EAExC,UAAYC,IACV,KAAK,oBAAoB,EAAE,EACpB,KAAK,SAASjB,EAAWiB,CAAE,EAEtC,CAA2C,CAC7C,CAEA,SAAYC,EAA8C,CACxD,YAAK,oBAAoB,EAAE,EACpB,KAAK,eAAe,EAAEA,CAAQ,CACvC,CAEA,MAAM,QACJA,EACAX,EAAiB,GACL,CACZ,KAAK,oBAAoB,EAAE,EAC3B,IAAMtB,EAAW,KAAK,eAAe,EAAEiC,CAAQ,EAC/C,aAAMjC,EAAS,QAAQsB,CAAK,EACrBtB,EAAS,IAAI,CACtB,CAEA,MAAM,gBACJiC,EACAX,EAAiB,GACU,CAC3B,KAAK,oBAAoB,EAAE,EAC3B,IAAMtB,EAAW,KAAK,eAAe,EAAEiC,CAAQ,EAC/C,aAAMjC,EAAS,QAAQsB,CAAK,EACrBtB,CACT,CAEA,MAAM,OACJ,EACAkC,EACe,CACf,KAAK,oBAAoB,EAAE,EAC3B,KAAK,iBAAiB,EAAE,CAAC,EACzB,IAAMlC,EAAW,KAAK,eAAe,EAAE,CAAC,EAExC,GAAI,OAAOkC,GAAM,WAAY,CAE3B,IAAMC,EADKD,EACElC,EAAS,IAAI,CAAM,EAChC,KAAK,MAAM,IAAI,EAAG,CAChB,SAAAA,EACA,MAAO,CAAE,KAAM,WAAY,MAAOmC,CAAE,CACtC,CAAC,CACH,MACE,KAAK,MAAM,IAAI,EAAG,CAChB,SAAAnC,EACA,MAAO,CAAE,KAAM,WAAY,MAAOkC,CAAE,CACtC,CAAC,EAGH,MAAM,KAAK,gBAAgB,EAAE,CAAC,CAChC,CAEA,MAAM,MAASD,EAA2C,CACxD,GAAI,KAAK,SACP,MAAM,IAAI,MAAM,mBAAmB,EAGrC,MAAM,KAAK,QAAQA,EAAU,EAAI,EACjC,MAAM,KAAK,QAAQA,EAAU,EAAI,CACnC,CAEA,MAAM,QAAQ,EAA2BG,EAAa,GAAsB,CAI1E,GAHA,KAAK,oBAAoB,EAAE,EAGvB,CADO,KAAK,MAAM,IAAI,CAAC,GAChB,CAACA,EACV,MAAM,IAAI,MAAM,8BAA8B,EAGhD,MAAM,KAAK,iBAAiB,EAAE,CAAC,EAE/B,IAAMhC,EAAK,KAAK,UAAU,IAAI,CAAC,EAC/B,GAAIA,EAAI,CACN,QAAWC,KAAK,MAAM,KAAKD,EAAG,OAAO,CAAC,EAChCE,EAAeD,CAAC,GAClB,MAAM,KAAK,QAAQA,EAAG,EAAI,EAI9B,KAAK,UAAU,OAAO,CAAC,CACzB,CAEA,KAAK,MAAM,OAAO,CAAC,CACrB,CAEA,MAAM,SAAyB,CAC7B,KAAK,oBAAoB,EAAE,EAC3B,IAAMgC,EAAW,KAAK,MAAM,KAAK,EACjC,QAAWC,KAAWD,EACpB,MAAM,KAAK,QAAQC,EAAS,EAAI,EAGlC,KAAK,SAAW,GAChB,KAAK,MAAM,MAAM,EACjB,KAAK,SAAS,MAAM,CACtB,CAEA,SACE,EACAN,EACc,CACd,KAAK,oBAAoB,EAAE,EAE3B,IAAM5B,EAAK,KAAK,UAAU,IAAI,CAAC,GAAK,IAAI,IACxC,YAAK,UAAU,IAAI,EAAGA,CAAE,EACxBA,EAAG,IAAI4B,CAAS,EAET,IAAM,CACX,KAAK,oBAAoB,EAAE,EAE3B,IAAM5B,EAAK,KAAK,UAAU,IAAI,CAAC,EAC3BA,IACFA,EAAG,OAAO4B,CAAS,EACf5B,EAAG,OAAS,GACd,KAAK,UAAU,OAAO,CAAC,EAG7B,CACF,CACF,EAEO,SAASmC,KAAezC,EAA6C,CAC1E,OAAO,IAAID,EAAM,GAAGC,CAAO,CAC7B","names":["executorSymbol","metaSymbol","SchemaError","issues","createExecutor","factory","dependencies","metas","executor","executorSymbol","_","controller","lazyExecutor","reactiveExecutor","staticExecutor","isLazyExecutor","isReactiveExecutor","isStaticExecutor","isMainExecutor","isExecutor","input","provide","derive","pdependencies","pfactory","preset","e","v","validate","schema","data","result","SchemaError","validateAsync","result_1","custom","value","meta","key","schema","_key","fn","value","metaSymbol","d","source","findValues","findValue","getValue","validate","executor","m","getExecutor","e","isLazyExecutor","isReactiveExecutor","isStaticExecutor","Scope","presets","preset","accessor","cs","c","ce","ou","t","isMainExecutor","ie","ref","a","isExecutor","item","r","k","rd","requestor","cachedAccessor","factory","controller","cleanup","currentSet","resolve","force","cached","promise","reject","dependencies","result","error","cacheEntry","soft","updateFn","cb","executor","u","n","s","currents","current","createScope"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pumped-fn/core-next",
3
- "version": "0.5.39",
3
+ "version": "0.5.40",
4
4
  "description": "Enhanced function utilities for TypeScript",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -29,8 +29,8 @@
29
29
  "release": "pnpm build && pnpm pump && npm publish --access public"
30
30
  },
31
31
  "devDependencies": {
32
- "tsup": "^8.3.6",
33
- "typescript": "^5.0.0",
32
+ "tsup": "^8.4.0",
33
+ "typescript": "^5.8.3",
34
34
  "vitest": "^1.0.0"
35
35
  },
36
36
  "engines": {