@pumped-fn/core-next 0.5.34
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/dist/index.cjs +2 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +141 -0
- package/dist/index.d.ts +141 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/package.json +57 -0
package/dist/index.cjs
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
"use strict";var y=Object.defineProperty;var b=Object.getOwnPropertyDescriptor;var A=Object.getOwnPropertyNames;var D=Object.prototype.hasOwnProperty;var V=(o,e)=>{for(var t in e)y(o,t,{get:e[t],enumerable:!0})},P=(o,e,t,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of A(e))!D.call(o,n)&&n!==t&&y(o,n,{get:()=>e[n],enumerable:!(r=b(e,n))||r.enumerable});return o};var R=o=>P(y({},"__esModule",{value:!0}),o);var N={};V(N,{SchemaError:()=>p,createScope:()=>L,custom:()=>B,derive:()=>F,executorSymbol:()=>u,findValue:()=>m,findValues:()=>T,getValue:()=>C,isLazyExecutor:()=>h,isReactiveExecutor:()=>w,isStaticExecutor:()=>O,meta:()=>z,metaSymbol:()=>x,provide:()=>I,validate:()=>v,validateAsync:()=>U});module.exports=R(N);var u=Symbol.for("@pumped-fn/core/executor"),x=Symbol.for("@pumped-fn/core/meta"),p=class extends Error{issues;constructor(e){super(e[0].message),this.name="SchemaError",this.issues=e}};function S(o,e,t){let r={[u]:"base",factory:(f,c)=>e===void 0?o(c):o(f,c),dependencies:e,metas:t},n={[u]:"lazy",dependencies:void 0,executor:r,factory:void 0,metas:t},s={[u]:"reactive",executor:r,factory:void 0,dependencies:void 0,metas:t},i={[u]:"static",dependencies:void 0,factory:void 0,metas:t,executor:r};return Object.defineProperties(r,{lazy:{value:n,writable:!1,configurable:!1,enumerable:!1},reactive:{value:s,writable:!1,configurable:!1,enumerable:!1},static:{value:i,writable:!1,configurable:!1,enumerable:!1}}),r}function h(o){return o[u]==="lazy"}function w(o){return o[u]==="reactive"}function O(o){return o[u]==="static"}function I(o,...e){return S(o,void 0,e)}function F(o,e,...t){return S(e,o,t)}function v(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 U(o,e){let t=o["~standard"].validate(e);if("then"in t){let r=await t;if(r.issues)throw new p(r.issues);return r.value}if(t.issues)throw new p(t.issues);return Promise.resolve(t.value)}function B(){return{"~standard":{vendor:"pumped-fn",version:1,validate:o=>({value:o})}}}var z=(o,e)=>{let t=r=>({[x]:!0,key:o,schema:e,value:r});return Object.defineProperty(t,"key",{value:o,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperty(t,x,{value:!0,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperties(t,{partial:{value:r=>Object.assign({},t({}),r),configurable:!1,enumerable:!1,writable:!1},some:{value:r=>T(r,t),configurable:!1,enumerable:!1,writable:!1},find:{value:r=>m(r,t),configurable:!1,enumerable:!1,writable:!1},get:{value:r=>C(m(r,t)),configurable:!1,enumerable:!1,writable:!1}}),t};function C(o){return v(o.schema,o.value)}function T(o,e){return o?(Array.isArray(o)?o:o.metas??[]).filter(n=>n.key===e.key).map(n=>C(n)):[]}function m(o,e){return T(o,e).at(0)}function j(o){return typeof o=="object"&&o!==null&&u in o}var k=class{isDisposed=!1;cache=new Map;valueCache=new Map;reactiveness=new Map;cleanups=new Map;onUpdates=new Map;"~appendReactive"(e,t){let r=this.reactiveness.get(e)??new Set;this.reactiveness.set(e,r),r.add(t)}async"~resolveDependencies"(e,t){if(e===void 0)return;if(j(e)){if(h(e))return this["~resolveLazy"](e);let n=await this["~resolveStatic"](e);return w(e)&&this["~appendReactive"](e.executor,t),await n.resolve(!1),n.get()}if(Array.isArray(e))return await Promise.all(e.map(n=>this["~resolveDependencies"](n,t)));let r={};for(let n of Object.keys(e)){let s=e[n],i=await this["~resolveDependencies"](s,t);r[n]=i}return r}"~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 r=this.cleanups.get(e)??new Set;this.cleanups.set(e,r),r.add(t)},release:async()=>{this.release(e)},scope:this}}"~makeAccessor"(e,t=!1){let r={},n=h(e)||w(e)?e.executor:e,s=this.cache.get(n);if(s)return s;let i=n.factory,f=this["~makeController"](n),c=async a=>{if(this.isDisposed)throw new Error("Scope is disposed");let d=this.valueCache.get(n);if(d&&!a){if(d.kind==="resolved")return d.value;if(d.kind==="rejected")throw d.error;return d.promise}let E=new Promise((M,g)=>{this["~resolveDependencies"](n.dependencies,n).then(l=>i(l,f)).then(l=>{this.valueCache.set(n,{kind:"resolved",value:l}),M(l)}).catch(l=>{this.valueCache.set(n,{kind:"rejected",error:l}),g(l)})});return this.valueCache.set(n,{kind:"resolving",promise:E}),this.cache.set(n,r),E};return(!h(e)||t)&&c(!1),Object.assign(r,{get:()=>{if(this.isDisposed)throw new Error("Scope is disposed");let a=this.valueCache.get(n);if(!a||a.kind==="resolving")throw new Error("Executor not found");if(a.kind==="rejected")throw a.error;return a.value},lookup:()=>{if(this.isDisposed)throw new Error("Scope is disposed");return this.valueCache.get(n)},metas:e.metas,resolve:c})}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 r=this["~makeAccessor"](e,!0);return await r.resolve(!1),r.get()}async resolveAccessor(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.cache.get(e);if(!t){let r=this["~makeAccessor"](e,!0);return await r.resolve(),r}return await t.resolve(),t}"~findAffectedTargets"(e,t=new Set){let r=this.reactiveness.get(e);if(r&&r.size>0)for(let n of r)t.has(n)&&t.delete(n),t.add(n),this.reactiveness.has(n)&&this["~findAffectedTargets"](n,t);return t}async update(e,t){if(this.isDisposed)throw new Error("Scope is disposed");let r=this.cache.get(e);if(!r)throw new Error("Executor is not yet resolved");let n=await r.resolve(!1),s=this.cleanups.get(e);if(s)for(let c of Array.from(s.values()).reverse())await c();if(typeof t=="function"){let a=t(n);this.valueCache.set(e,{kind:"resolved",value:a})}else this.valueCache.set(e,{kind:"resolved",value:t});let i=this["~findAffectedTargets"](e);for(let c of i){let a=this.cache.get(c);a&&await a.resolve(!0)}let f=this.onUpdates.get(e);if(f)for(let c of Array.from(f.values()))await c(r)}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 n=this["~findAffectedTargets"](e);for(let i of n)await this.release(i,!0);let s=this.cleanups.get(e);if(s)for(let i of Array.from(s.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 r=this.onUpdates.get(e)??new Set;return this.onUpdates.set(e,r),r.add(t),()=>{if(this.isDisposed)throw new Error("scope is disposed");let n=this.onUpdates.get(e);n&&(n.delete(t),n.size===0&&this.onUpdates.delete(e))}}getCache(){return this.cache}getValueCache(){return this.valueCache}getReactiveness(){return this.reactiveness}};function L(){return new k}0&&(module.exports={SchemaError,createScope,custom,derive,executorSymbol,findValue,findValues,getValue,isLazyExecutor,isReactiveExecutor,isStaticExecutor,meta,metaSymbol,provide,validate,validateAsync});
|
2
|
+
//# sourceMappingURL=index.cjs.map
|
@@ -0,0 +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 = \"base\" | \"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 readonly lazy: Lazy<T>;\n readonly reactive: Reactive<T>;\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 }\n\n export type InferOutput<T> = T extends Executor<infer U>\n ? Awaited<U>\n : T extends Lazy<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>): 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, metaSymbol } 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 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 | Array<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n>(\n dependencies: D,\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 fn = (value: V) =>\n ({\n [metaSymbol]: true,\n 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 { isLazyExecutor, isReactiveExecutor } from \"./executor\";\nimport { Core, executorSymbol } from \"./types\";\n\nexport interface ScopeInner {\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\nfunction isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\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 private 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 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)\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 });\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 Promise<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 private \"~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 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 updateSet = this[\"~findAffectedTargets\"](executor);\n for (const target of updateSet) {\n const cached = this.cache.get(target);\n if (cached) {\n await cached.resolve(true);\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\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","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","provide","derive","pdependencies","pfactory","validate","schema","data","result","SchemaError","validateAsync","result_1","custom","value","meta","key","schema","fn","value","metaSymbol","d","source","findValues","findValue","getValue","validate","executor","m","isExecutor","input","executorSymbol","Scope","reactive","ref","currentSet","isLazyExecutor","staticResult","isReactiveExecutor","item","result","key","target","resolvedResult","cached","cleanup","eager","accessor","requestor","cachedAccessor","factory","controller","resolve","force","promise","reject","dependencies","error","valueCached","executor","updateSet","triggerTargets","updateFn","current","cleanups","newValue","onUpdateSet","callback","soft","affectedTargets","currents","createScope"]}
|
package/dist/index.d.cts
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
declare const executorSymbol: unique symbol;
|
2
|
+
declare const metaSymbol: unique symbol;
|
3
|
+
interface StandardSchemaV1<Input = unknown, Output = Input> {
|
4
|
+
readonly "~standard": StandardSchemaV1.Props<Input, Output>;
|
5
|
+
}
|
6
|
+
declare namespace StandardSchemaV1 {
|
7
|
+
interface Props<Input = unknown, Output = Input> {
|
8
|
+
readonly version: 1;
|
9
|
+
readonly vendor: string;
|
10
|
+
readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
|
11
|
+
readonly types?: Types<Input, Output> | undefined;
|
12
|
+
}
|
13
|
+
type Result<Output> = SuccessResult<Output> | FailureResult;
|
14
|
+
interface SuccessResult<Output> {
|
15
|
+
readonly value: Output;
|
16
|
+
readonly issues?: undefined;
|
17
|
+
}
|
18
|
+
interface FailureResult {
|
19
|
+
readonly issues: ReadonlyArray<Issue>;
|
20
|
+
}
|
21
|
+
interface Issue {
|
22
|
+
readonly message: string;
|
23
|
+
readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
|
24
|
+
}
|
25
|
+
interface PathSegment {
|
26
|
+
readonly key: PropertyKey;
|
27
|
+
}
|
28
|
+
interface Types<Input = unknown, Output = Input> {
|
29
|
+
readonly input: Input;
|
30
|
+
readonly output: Output;
|
31
|
+
}
|
32
|
+
type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
|
33
|
+
type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
|
34
|
+
}
|
35
|
+
declare class SchemaError extends Error {
|
36
|
+
readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;
|
37
|
+
constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>);
|
38
|
+
}
|
39
|
+
declare namespace Meta {
|
40
|
+
interface MetaContainer {
|
41
|
+
metas: Meta[] | undefined;
|
42
|
+
}
|
43
|
+
interface Meta<V = unknown> {
|
44
|
+
readonly [metaSymbol]: true;
|
45
|
+
readonly key: string | symbol;
|
46
|
+
readonly schema: StandardSchemaV1<V>;
|
47
|
+
readonly value: V;
|
48
|
+
}
|
49
|
+
interface MetaFn<V> {
|
50
|
+
(value: V): Meta<V>;
|
51
|
+
readonly key: string | symbol;
|
52
|
+
partial: <D extends Partial<V>>(d: D) => D;
|
53
|
+
some: (source: MetaContainer | Meta[] | undefined) => V[];
|
54
|
+
find: (source: MetaContainer | Meta[] | undefined) => V | undefined;
|
55
|
+
get: (source: MetaContainer | Meta[] | undefined) => V;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
declare namespace Core {
|
59
|
+
type Output<T> = T | Promise<T>;
|
60
|
+
type NoDependencyFn<T> = (scope: Controller) => Output<T>;
|
61
|
+
type DependentFn<T, D> = (dependencies: D, scope: Controller) => Output<T>;
|
62
|
+
type RecordLike = Record<string, unknown>;
|
63
|
+
type UExecutor = BaseExecutor<unknown>;
|
64
|
+
type Cleanup = () => void | Promise<void>;
|
65
|
+
type Controller = {
|
66
|
+
cleanup: (cleanup: Cleanup) => void;
|
67
|
+
release: () => Promise<void>;
|
68
|
+
scope: Scope;
|
69
|
+
};
|
70
|
+
type Kind = "base" | "main" | "reactive" | "lazy" | "static";
|
71
|
+
interface BaseExecutor<T> extends Meta.MetaContainer {
|
72
|
+
[executorSymbol]: Kind;
|
73
|
+
factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;
|
74
|
+
dependencies: undefined | UExecutor | Array<UExecutor> | Record<string, UExecutor>;
|
75
|
+
}
|
76
|
+
interface Executor<T> extends BaseExecutor<T> {
|
77
|
+
[executorSymbol]: "main";
|
78
|
+
factory: NoDependencyFn<T> | DependentFn<T, unknown>;
|
79
|
+
readonly lazy: Lazy<T>;
|
80
|
+
readonly reactive: Reactive<T>;
|
81
|
+
readonly static: Static<T>;
|
82
|
+
}
|
83
|
+
interface Reactive<T> extends BaseExecutor<T> {
|
84
|
+
[executorSymbol]: "reactive";
|
85
|
+
factory: undefined;
|
86
|
+
readonly executor: Executor<T>;
|
87
|
+
}
|
88
|
+
interface Lazy<T> extends BaseExecutor<Accessor<T>> {
|
89
|
+
[executorSymbol]: "lazy";
|
90
|
+
factory: undefined;
|
91
|
+
readonly executor: Executor<T>;
|
92
|
+
}
|
93
|
+
interface Static<T> extends BaseExecutor<Accessor<T>> {
|
94
|
+
[executorSymbol]: "static";
|
95
|
+
factory: undefined;
|
96
|
+
readonly executor: Executor<T>;
|
97
|
+
}
|
98
|
+
interface Accessor<T> extends Meta.MetaContainer {
|
99
|
+
lookup(): T;
|
100
|
+
get(): T;
|
101
|
+
resolve(force?: boolean): Promise<T>;
|
102
|
+
}
|
103
|
+
type InferOutput<T> = T extends Executor<infer U> ? Awaited<U> : T extends Lazy<infer U> ? Accessor<Awaited<U>> : never;
|
104
|
+
interface Scope {
|
105
|
+
accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;
|
106
|
+
resolve<T>(executor: Core.Executor<T>): T | Promise<T>;
|
107
|
+
resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;
|
108
|
+
update<T>(executor: Executor<T>, updateFn: T | ((current: T) => T)): Promise<void>;
|
109
|
+
reset<T>(executor: Executor<T>): void;
|
110
|
+
release(executor: Executor<any>, soft?: boolean): Promise<void>;
|
111
|
+
dispose(): Promise<void>;
|
112
|
+
onUpdate<T>(executor: Executor<T>, callback: (accessor: Accessor<T>) => void): Cleanup;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
declare function isLazyExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Lazy<unknown>;
|
117
|
+
declare function isReactiveExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Reactive<unknown>;
|
118
|
+
declare function isStaticExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Static<unknown>;
|
119
|
+
declare function provide<T>(factory: Core.NoDependencyFn<T>, ...metas: Meta.Meta[]): Core.Executor<T>;
|
120
|
+
declare function derive<T, D extends Core.BaseExecutor<unknown>>(dependencies: D, factory: Core.DependentFn<T, Core.InferOutput<D>>, ...metas: Meta.Meta[]): Core.Executor<T>;
|
121
|
+
declare function derive<T, D extends Array<Core.BaseExecutor<unknown>> | Record<string, Core.BaseExecutor<unknown>>>(dependencies: D, factory: Core.DependentFn<T, {
|
122
|
+
[K in keyof D]: Core.InferOutput<D[K]>;
|
123
|
+
}>, ...metas: Meta.Meta[]): Core.Executor<T>;
|
124
|
+
|
125
|
+
declare const meta: <V>(key: string | symbol, schema: StandardSchemaV1<V>) => Meta.MetaFn<V>;
|
126
|
+
declare function getValue<V>(meta: Meta.Meta<V>): Awaited<V>;
|
127
|
+
declare function findValues<V = unknown>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V[];
|
128
|
+
declare function findValue<V>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V | undefined;
|
129
|
+
|
130
|
+
interface ScopeInner {
|
131
|
+
getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>>;
|
132
|
+
getValueCache(): Map<Core.Executor<unknown>, unknown>;
|
133
|
+
getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>>;
|
134
|
+
}
|
135
|
+
declare function createScope(): Core.Scope;
|
136
|
+
|
137
|
+
declare function validate<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Awaited<StandardSchemaV1.InferOutput<TSchema>>;
|
138
|
+
declare function validateAsync<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>>;
|
139
|
+
declare function custom<T>(): StandardSchemaV1<T, T>;
|
140
|
+
|
141
|
+
export { Core, Meta, SchemaError, type ScopeInner, StandardSchemaV1, createScope, custom, derive, executorSymbol, findValue, findValues, getValue, isLazyExecutor, isReactiveExecutor, isStaticExecutor, meta, metaSymbol, provide, validate, validateAsync };
|
package/dist/index.d.ts
ADDED
@@ -0,0 +1,141 @@
|
|
1
|
+
declare const executorSymbol: unique symbol;
|
2
|
+
declare const metaSymbol: unique symbol;
|
3
|
+
interface StandardSchemaV1<Input = unknown, Output = Input> {
|
4
|
+
readonly "~standard": StandardSchemaV1.Props<Input, Output>;
|
5
|
+
}
|
6
|
+
declare namespace StandardSchemaV1 {
|
7
|
+
interface Props<Input = unknown, Output = Input> {
|
8
|
+
readonly version: 1;
|
9
|
+
readonly vendor: string;
|
10
|
+
readonly validate: (value: unknown) => Result<Output> | Promise<Result<Output>>;
|
11
|
+
readonly types?: Types<Input, Output> | undefined;
|
12
|
+
}
|
13
|
+
type Result<Output> = SuccessResult<Output> | FailureResult;
|
14
|
+
interface SuccessResult<Output> {
|
15
|
+
readonly value: Output;
|
16
|
+
readonly issues?: undefined;
|
17
|
+
}
|
18
|
+
interface FailureResult {
|
19
|
+
readonly issues: ReadonlyArray<Issue>;
|
20
|
+
}
|
21
|
+
interface Issue {
|
22
|
+
readonly message: string;
|
23
|
+
readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
|
24
|
+
}
|
25
|
+
interface PathSegment {
|
26
|
+
readonly key: PropertyKey;
|
27
|
+
}
|
28
|
+
interface Types<Input = unknown, Output = Input> {
|
29
|
+
readonly input: Input;
|
30
|
+
readonly output: Output;
|
31
|
+
}
|
32
|
+
type InferInput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["input"];
|
33
|
+
type InferOutput<Schema extends StandardSchemaV1> = NonNullable<Schema["~standard"]["types"]>["output"];
|
34
|
+
}
|
35
|
+
declare class SchemaError extends Error {
|
36
|
+
readonly issues: ReadonlyArray<StandardSchemaV1.Issue>;
|
37
|
+
constructor(issues: ReadonlyArray<StandardSchemaV1.Issue>);
|
38
|
+
}
|
39
|
+
declare namespace Meta {
|
40
|
+
interface MetaContainer {
|
41
|
+
metas: Meta[] | undefined;
|
42
|
+
}
|
43
|
+
interface Meta<V = unknown> {
|
44
|
+
readonly [metaSymbol]: true;
|
45
|
+
readonly key: string | symbol;
|
46
|
+
readonly schema: StandardSchemaV1<V>;
|
47
|
+
readonly value: V;
|
48
|
+
}
|
49
|
+
interface MetaFn<V> {
|
50
|
+
(value: V): Meta<V>;
|
51
|
+
readonly key: string | symbol;
|
52
|
+
partial: <D extends Partial<V>>(d: D) => D;
|
53
|
+
some: (source: MetaContainer | Meta[] | undefined) => V[];
|
54
|
+
find: (source: MetaContainer | Meta[] | undefined) => V | undefined;
|
55
|
+
get: (source: MetaContainer | Meta[] | undefined) => V;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
declare namespace Core {
|
59
|
+
type Output<T> = T | Promise<T>;
|
60
|
+
type NoDependencyFn<T> = (scope: Controller) => Output<T>;
|
61
|
+
type DependentFn<T, D> = (dependencies: D, scope: Controller) => Output<T>;
|
62
|
+
type RecordLike = Record<string, unknown>;
|
63
|
+
type UExecutor = BaseExecutor<unknown>;
|
64
|
+
type Cleanup = () => void | Promise<void>;
|
65
|
+
type Controller = {
|
66
|
+
cleanup: (cleanup: Cleanup) => void;
|
67
|
+
release: () => Promise<void>;
|
68
|
+
scope: Scope;
|
69
|
+
};
|
70
|
+
type Kind = "base" | "main" | "reactive" | "lazy" | "static";
|
71
|
+
interface BaseExecutor<T> extends Meta.MetaContainer {
|
72
|
+
[executorSymbol]: Kind;
|
73
|
+
factory: NoDependencyFn<T> | DependentFn<T, unknown> | undefined;
|
74
|
+
dependencies: undefined | UExecutor | Array<UExecutor> | Record<string, UExecutor>;
|
75
|
+
}
|
76
|
+
interface Executor<T> extends BaseExecutor<T> {
|
77
|
+
[executorSymbol]: "main";
|
78
|
+
factory: NoDependencyFn<T> | DependentFn<T, unknown>;
|
79
|
+
readonly lazy: Lazy<T>;
|
80
|
+
readonly reactive: Reactive<T>;
|
81
|
+
readonly static: Static<T>;
|
82
|
+
}
|
83
|
+
interface Reactive<T> extends BaseExecutor<T> {
|
84
|
+
[executorSymbol]: "reactive";
|
85
|
+
factory: undefined;
|
86
|
+
readonly executor: Executor<T>;
|
87
|
+
}
|
88
|
+
interface Lazy<T> extends BaseExecutor<Accessor<T>> {
|
89
|
+
[executorSymbol]: "lazy";
|
90
|
+
factory: undefined;
|
91
|
+
readonly executor: Executor<T>;
|
92
|
+
}
|
93
|
+
interface Static<T> extends BaseExecutor<Accessor<T>> {
|
94
|
+
[executorSymbol]: "static";
|
95
|
+
factory: undefined;
|
96
|
+
readonly executor: Executor<T>;
|
97
|
+
}
|
98
|
+
interface Accessor<T> extends Meta.MetaContainer {
|
99
|
+
lookup(): T;
|
100
|
+
get(): T;
|
101
|
+
resolve(force?: boolean): Promise<T>;
|
102
|
+
}
|
103
|
+
type InferOutput<T> = T extends Executor<infer U> ? Awaited<U> : T extends Lazy<infer U> ? Accessor<Awaited<U>> : never;
|
104
|
+
interface Scope {
|
105
|
+
accessor<T>(executor: Core.Executor<T>, eager?: boolean): Accessor<T>;
|
106
|
+
resolve<T>(executor: Core.Executor<T>): T | Promise<T>;
|
107
|
+
resolveAccessor<T>(executor: Core.Executor<T>): Promise<Accessor<T>>;
|
108
|
+
update<T>(executor: Executor<T>, updateFn: T | ((current: T) => T)): Promise<void>;
|
109
|
+
reset<T>(executor: Executor<T>): void;
|
110
|
+
release(executor: Executor<any>, soft?: boolean): Promise<void>;
|
111
|
+
dispose(): Promise<void>;
|
112
|
+
onUpdate<T>(executor: Executor<T>, callback: (accessor: Accessor<T>) => void): Cleanup;
|
113
|
+
}
|
114
|
+
}
|
115
|
+
|
116
|
+
declare function isLazyExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Lazy<unknown>;
|
117
|
+
declare function isReactiveExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Reactive<unknown>;
|
118
|
+
declare function isStaticExecutor(executor: Core.BaseExecutor<unknown>): executor is Core.Static<unknown>;
|
119
|
+
declare function provide<T>(factory: Core.NoDependencyFn<T>, ...metas: Meta.Meta[]): Core.Executor<T>;
|
120
|
+
declare function derive<T, D extends Core.BaseExecutor<unknown>>(dependencies: D, factory: Core.DependentFn<T, Core.InferOutput<D>>, ...metas: Meta.Meta[]): Core.Executor<T>;
|
121
|
+
declare function derive<T, D extends Array<Core.BaseExecutor<unknown>> | Record<string, Core.BaseExecutor<unknown>>>(dependencies: D, factory: Core.DependentFn<T, {
|
122
|
+
[K in keyof D]: Core.InferOutput<D[K]>;
|
123
|
+
}>, ...metas: Meta.Meta[]): Core.Executor<T>;
|
124
|
+
|
125
|
+
declare const meta: <V>(key: string | symbol, schema: StandardSchemaV1<V>) => Meta.MetaFn<V>;
|
126
|
+
declare function getValue<V>(meta: Meta.Meta<V>): Awaited<V>;
|
127
|
+
declare function findValues<V = unknown>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V[];
|
128
|
+
declare function findValue<V>(executor: Meta.MetaContainer | Meta.Meta[] | undefined, meta: Meta.MetaFn<V>): V | undefined;
|
129
|
+
|
130
|
+
interface ScopeInner {
|
131
|
+
getCache(): Map<Core.Executor<unknown>, Core.Accessor<unknown>>;
|
132
|
+
getValueCache(): Map<Core.Executor<unknown>, unknown>;
|
133
|
+
getReactiveness(): Map<Core.Executor<unknown>, Set<Core.Executor<unknown>>>;
|
134
|
+
}
|
135
|
+
declare function createScope(): Core.Scope;
|
136
|
+
|
137
|
+
declare function validate<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Awaited<StandardSchemaV1.InferOutput<TSchema>>;
|
138
|
+
declare function validateAsync<TSchema extends StandardSchemaV1>(schema: TSchema, data: unknown): Promise<Awaited<StandardSchemaV1.InferOutput<TSchema>>>;
|
139
|
+
declare function custom<T>(): StandardSchemaV1<T, T>;
|
140
|
+
|
141
|
+
export { Core, Meta, SchemaError, type ScopeInner, StandardSchemaV1, createScope, custom, derive, executorSymbol, findValue, findValues, getValue, isLazyExecutor, isReactiveExecutor, isStaticExecutor, meta, metaSymbol, provide, validate, validateAsync };
|
package/dist/index.js
ADDED
@@ -0,0 +1,2 @@
|
|
1
|
+
var u=Symbol.for("@pumped-fn/core/executor"),x=Symbol.for("@pumped-fn/core/meta"),f=class extends Error{issues;constructor(e){super(e[0].message),this.name="SchemaError",this.issues=e}};function m(o,e,t){let r={[u]:"base",factory:(p,c)=>e===void 0?o(c):o(p,c),dependencies:e,metas:t},n={[u]:"lazy",dependencies:void 0,executor:r,factory:void 0,metas:t},s={[u]:"reactive",executor:r,factory:void 0,dependencies:void 0,metas:t},i={[u]:"static",dependencies:void 0,factory:void 0,metas:t,executor:r};return Object.defineProperties(r,{lazy:{value:n,writable:!1,configurable:!1,enumerable:!1},reactive:{value:s,writable:!1,configurable:!1,enumerable:!1},static:{value:i,writable:!1,configurable:!1,enumerable:!1}}),r}function h(o){return o[u]==="lazy"}function w(o){return o[u]==="reactive"}function R(o){return o[u]==="static"}function O(o,...e){return m(o,void 0,e)}function I(o,e,...t){return m(e,o,t)}function C(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 f(t.issues);return t.value}async function z(o,e){let t=o["~standard"].validate(e);if("then"in t){let r=await t;if(r.issues)throw new f(r.issues);return r.value}if(t.issues)throw new f(t.issues);return Promise.resolve(t.value)}function j(){return{"~standard":{vendor:"pumped-fn",version:1,validate:o=>({value:o})}}}var _=(o,e)=>{let t=r=>({[x]:!0,key:o,schema:e,value:r});return Object.defineProperty(t,"key",{value:o,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperty(t,x,{value:!0,configurable:!1,enumerable:!1,writable:!1}),Object.defineProperties(t,{partial:{value:r=>Object.assign({},t({}),r),configurable:!1,enumerable:!1,writable:!1},some:{value:r=>E(r,t),configurable:!1,enumerable:!1,writable:!1},find:{value:r=>T(r,t),configurable:!1,enumerable:!1,writable:!1},get:{value:r=>k(T(r,t)),configurable:!1,enumerable:!1,writable:!1}}),t};function k(o){return C(o.schema,o.value)}function E(o,e){return o?(Array.isArray(o)?o:o.metas??[]).filter(n=>n.key===e.key).map(n=>k(n)):[]}function T(o,e){return E(o,e).at(0)}function g(o){return typeof o=="object"&&o!==null&&u in o}var y=class{isDisposed=!1;cache=new Map;valueCache=new Map;reactiveness=new Map;cleanups=new Map;onUpdates=new Map;"~appendReactive"(e,t){let r=this.reactiveness.get(e)??new Set;this.reactiveness.set(e,r),r.add(t)}async"~resolveDependencies"(e,t){if(e===void 0)return;if(g(e)){if(h(e))return this["~resolveLazy"](e);let n=await this["~resolveStatic"](e);return w(e)&&this["~appendReactive"](e.executor,t),await n.resolve(!1),n.get()}if(Array.isArray(e))return await Promise.all(e.map(n=>this["~resolveDependencies"](n,t)));let r={};for(let n of Object.keys(e)){let s=e[n],i=await this["~resolveDependencies"](s,t);r[n]=i}return r}"~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 r=this.cleanups.get(e)??new Set;this.cleanups.set(e,r),r.add(t)},release:async()=>{this.release(e)},scope:this}}"~makeAccessor"(e,t=!1){let r={},n=h(e)||w(e)?e.executor:e,s=this.cache.get(n);if(s)return s;let i=n.factory,p=this["~makeController"](n),c=async a=>{if(this.isDisposed)throw new Error("Scope is disposed");let d=this.valueCache.get(n);if(d&&!a){if(d.kind==="resolved")return d.value;if(d.kind==="rejected")throw d.error;return d.promise}let v=new Promise((S,M)=>{this["~resolveDependencies"](n.dependencies,n).then(l=>i(l,p)).then(l=>{this.valueCache.set(n,{kind:"resolved",value:l}),S(l)}).catch(l=>{this.valueCache.set(n,{kind:"rejected",error:l}),M(l)})});return this.valueCache.set(n,{kind:"resolving",promise:v}),this.cache.set(n,r),v};return(!h(e)||t)&&c(!1),Object.assign(r,{get:()=>{if(this.isDisposed)throw new Error("Scope is disposed");let a=this.valueCache.get(n);if(!a||a.kind==="resolving")throw new Error("Executor not found");if(a.kind==="rejected")throw a.error;return a.value},lookup:()=>{if(this.isDisposed)throw new Error("Scope is disposed");return this.valueCache.get(n)},metas:e.metas,resolve:c})}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 r=this["~makeAccessor"](e,!0);return await r.resolve(!1),r.get()}async resolveAccessor(e){if(this.isDisposed)throw new Error("Scope is disposed");let t=this.cache.get(e);if(!t){let r=this["~makeAccessor"](e,!0);return await r.resolve(),r}return await t.resolve(),t}"~findAffectedTargets"(e,t=new Set){let r=this.reactiveness.get(e);if(r&&r.size>0)for(let n of r)t.has(n)&&t.delete(n),t.add(n),this.reactiveness.has(n)&&this["~findAffectedTargets"](n,t);return t}async update(e,t){if(this.isDisposed)throw new Error("Scope is disposed");let r=this.cache.get(e);if(!r)throw new Error("Executor is not yet resolved");let n=await r.resolve(!1),s=this.cleanups.get(e);if(s)for(let c of Array.from(s.values()).reverse())await c();if(typeof t=="function"){let a=t(n);this.valueCache.set(e,{kind:"resolved",value:a})}else this.valueCache.set(e,{kind:"resolved",value:t});let i=this["~findAffectedTargets"](e);for(let c of i){let a=this.cache.get(c);a&&await a.resolve(!0)}let p=this.onUpdates.get(e);if(p)for(let c of Array.from(p.values()))await c(r)}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 n=this["~findAffectedTargets"](e);for(let i of n)await this.release(i,!0);let s=this.cleanups.get(e);if(s)for(let i of Array.from(s.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 r=this.onUpdates.get(e)??new Set;return this.onUpdates.set(e,r),r.add(t),()=>{if(this.isDisposed)throw new Error("scope is disposed");let n=this.onUpdates.get(e);n&&(n.delete(t),n.size===0&&this.onUpdates.delete(e))}}getCache(){return this.cache}getValueCache(){return this.valueCache}getReactiveness(){return this.reactiveness}};function W(){return new y}export{f as SchemaError,W as createScope,j as custom,I as derive,u as executorSymbol,T as findValue,E as findValues,k as getValue,h as isLazyExecutor,w as isReactiveExecutor,R as isStaticExecutor,_ as meta,x as metaSymbol,O as provide,C as validate,z as validateAsync};
|
2
|
+
//# sourceMappingURL=index.js.map
|
@@ -0,0 +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 = \"base\" | \"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 readonly lazy: Lazy<T>;\n readonly reactive: Reactive<T>;\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 }\n\n export type InferOutput<T> = T extends Executor<infer U>\n ? Awaited<U>\n : T extends Lazy<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>): 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, metaSymbol } 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 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 | Array<Core.BaseExecutor<unknown>>\n | Record<string, Core.BaseExecutor<unknown>>\n>(\n dependencies: D,\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 fn = (value: V) =>\n ({\n [metaSymbol]: true,\n 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 { isLazyExecutor, isReactiveExecutor } from \"./executor\";\nimport { Core, executorSymbol } from \"./types\";\n\nexport interface ScopeInner {\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\nfunction isExecutor<T>(input: unknown): input is Core.BaseExecutor<T> {\n return typeof input === \"object\" && input !== null && executorSymbol in input;\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 private 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 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)\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 });\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 Promise<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 private \"~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 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 updateSet = this[\"~findAffectedTargets\"](executor);\n for (const target of updateSet) {\n const cached = this.cache.get(target);\n if (cached) {\n await cached.resolve(true);\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\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","provide","derive","pdependencies","pfactory","validate","schema","data","result","SchemaError","validateAsync","result_1","custom","value","meta","key","schema","fn","value","metaSymbol","d","source","findValues","findValue","getValue","validate","executor","m","isExecutor","input","executorSymbol","Scope","reactive","ref","currentSet","isLazyExecutor","staticResult","isReactiveExecutor","item","result","key","target","resolvedResult","cached","cleanup","eager","accessor","requestor","cachedAccessor","factory","controller","resolve","force","promise","reject","dependencies","error","valueCached","executor","updateSet","triggerTargets","updateFn","current","cleanups","newValue","onUpdateSet","callback","soft","affectedTargets","currents","createScope"]}
|
package/package.json
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
{
|
2
|
+
"name": "@pumped-fn/core-next",
|
3
|
+
"version": "0.5.34",
|
4
|
+
"description": "Enhanced function utilities for TypeScript",
|
5
|
+
"type": "module",
|
6
|
+
"main": "./dist/index.js",
|
7
|
+
"module": "./dist/index.js",
|
8
|
+
"types": "./dist/index.d.ts",
|
9
|
+
"exports": {
|
10
|
+
".": {
|
11
|
+
"types": "./dist/index.d.ts",
|
12
|
+
"import": "./dist/index.js",
|
13
|
+
"require": "./dist/index.cjs"
|
14
|
+
}
|
15
|
+
},
|
16
|
+
"files": [
|
17
|
+
"dist"
|
18
|
+
],
|
19
|
+
"scripts": {
|
20
|
+
"build": "tsup",
|
21
|
+
"test": "vitest run",
|
22
|
+
"test:watch": "vitest watch",
|
23
|
+
"typecheck": "tsc --noEmit",
|
24
|
+
"typecheck:test": "vitest typecheck",
|
25
|
+
"pump": "pnpm dlx commit-and-tag-version --path . -r patch -t @pumped-fn/next@",
|
26
|
+
"release": "pnpm build && pnpm pump && npm publish --access public"
|
27
|
+
},
|
28
|
+
"devDependencies": {
|
29
|
+
"tsup": "^8.3.6",
|
30
|
+
"typescript": "^5.0.0",
|
31
|
+
"vitest": "^1.0.0"
|
32
|
+
},
|
33
|
+
"engines": {
|
34
|
+
"node": ">=18"
|
35
|
+
},
|
36
|
+
"publishConfig": {
|
37
|
+
"access": "public"
|
38
|
+
},
|
39
|
+
"repository": {
|
40
|
+
"type": "git",
|
41
|
+
"directory": "packages/next",
|
42
|
+
"url": "git+https://github.com/pumped-fn/pumped-fn.git"
|
43
|
+
},
|
44
|
+
"release-it": {
|
45
|
+
"hooks": {
|
46
|
+
"after:bump": "pnpm run build && pnpm dlx auto-changelog -p"
|
47
|
+
},
|
48
|
+
"git": {
|
49
|
+
"commitMessage": "chore: release v${version}",
|
50
|
+
"tagName": "${npm.name}@${version}",
|
51
|
+
"changelog": "pnpm dlx auto-changelog --stdout --commit-limit false --unreleased --template https://raw.githubusercontent.com/release-it/release-it/main/templates/changelog-compact.hbs"
|
52
|
+
},
|
53
|
+
"npm": {
|
54
|
+
"publish": true
|
55
|
+
}
|
56
|
+
}
|
57
|
+
}
|