@derivesome/core
Advanced tools
| type FilterUndefined<T> = T extends undefined ? never : T; | ||
| type FilterNull<T> = T extends null ? never : T; | ||
| type FilterUndefinedAndNull<T> = FilterUndefined<FilterNull<T>>; | ||
| export type ExtractFromObject<O extends Record<PropertyKey, unknown>, K> = K extends keyof O ? O[K] : K extends keyof FilterUndefinedAndNull<O> ? FilterUndefinedAndNull<O>[K] | undefined : undefined; | ||
| type ExtractFromArray<A extends readonly any[], K> = any[] extends A ? A extends readonly (infer T)[] ? T | undefined : undefined : K extends keyof A ? A[K] : undefined; | ||
| type GetWithArray<O, K> = K extends [] ? O : K extends [infer Key, ...infer Rest] ? O extends Record<PropertyKey, unknown> ? GetWithArray<ExtractFromObject<O, Key>, Rest> : O extends readonly any[] ? GetWithArray<ExtractFromArray<O, Key>, Rest> : undefined : never; | ||
| export type GetPath<T> = T extends `${infer Key}.${infer Rest}` ? [Key, ...GetPath<Rest>] : T extends `${infer Key}` ? [Key] : []; | ||
| export type Get<O, K> = GetWithArray<O, GetPath<K>>; | ||
| export declare function pick<O, K extends string>(obj: O, path: K): Get<O, K>; | ||
| export declare const insert: <T extends Record<PropertyKey, any>>(obj: T, path: string, value: any) => T; | ||
| export {}; | ||
| //# sourceMappingURL=picking.d.ts.map |
| {"version":3,"file":"picking.d.ts","sourceRoot":"","sources":["../../../src/common/picking.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AAC1D,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;AAChD,KAAK,sBAAsB,CAAC,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,CAC3B,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACtC,CAAC,IACC,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,MAAM,sBAAsB,CAAC,CAAC,CAAC,GACvC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACxC,SAAS,CAAC;AAEhB,KAAK,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,GAChE,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5B,CAAC,GAAG,SAAS,GACb,SAAS,GACX,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,SAAS,CAAC;AAEhB,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAClC,CAAC,GACD,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAClC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GACpC,YAAY,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAC7C,CAAC,SAAS,SAAS,GAAG,EAAE,GACtB,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAC5C,SAAS,GACb,KAAK,CAAC;AAEZ,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,GAC3D,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACvB,CAAC,SAAS,GAAG,MAAM,GAAG,EAAE,GACtB,CAAC,GAAG,CAAC,GACL,EAAE,CAAC;AAET,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpD,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAkBtE,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EACvD,KAAK,CAAC,EACN,MAAM,MAAM,EACZ,OAAO,GAAG,KACT,CAmBF,CAAC"} |
| "use strict"; | ||
| Object.defineProperty(exports, "__esModule", { value: true }); | ||
| exports.insert = void 0; | ||
| exports.pick = pick; | ||
| function pick(obj, path) { | ||
| const keys = path.split("."); | ||
| let currentObj = obj; | ||
| for (const key of keys) { | ||
| const value = currentObj[key]; | ||
| if (value === undefined || value === null) { | ||
| return undefined; | ||
| } | ||
| currentObj = value; | ||
| } | ||
| return currentObj; | ||
| } | ||
| // TODO: make this more type-safe | ||
| const insert = (obj, path, value) => { | ||
| const copy = { ...obj }; | ||
| const keys = path.split("."); | ||
| let next = copy; | ||
| while (keys.length > 0 && !!next) { | ||
| const key = keys[0]; | ||
| if (!key) | ||
| break; | ||
| if (keys.length <= 1) { | ||
| next[key] = value; | ||
| break; | ||
| } | ||
| keys.splice(0, 1); | ||
| next = next[key]; | ||
| } | ||
| return copy; | ||
| }; | ||
| exports.insert = insert; | ||
| //# sourceMappingURL=picking.js.map |
| {"version":3,"file":"picking.js","sourceRoot":"","sources":["../../../src/common/picking.ts"],"names":[],"mappings":";;;AAwCA,oBAcC;AAdD,SAAgB,IAAI,CAAC,GAA4B,EAAE,IAAY;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,UAAU,GAAG,KAAgC,CAAC;IAChD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iCAAiC;AAC1B,MAAM,MAAM,GAAG,CACpB,GAAM,EACN,IAAY,EACZ,KAAU,EACP,EAAE;IACL,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG;YAAE,MAAM;QAEhB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACpB,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,MAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAvBW,QAAA,MAAM,UAuBjB"} |
| type FilterUndefined<T> = T extends undefined ? never : T; | ||
| type FilterNull<T> = T extends null ? never : T; | ||
| type FilterUndefinedAndNull<T> = FilterUndefined<FilterNull<T>>; | ||
| export type ExtractFromObject<O extends Record<PropertyKey, unknown>, K> = K extends keyof O ? O[K] : K extends keyof FilterUndefinedAndNull<O> ? FilterUndefinedAndNull<O>[K] | undefined : undefined; | ||
| type ExtractFromArray<A extends readonly any[], K> = any[] extends A ? A extends readonly (infer T)[] ? T | undefined : undefined : K extends keyof A ? A[K] : undefined; | ||
| type GetWithArray<O, K> = K extends [] ? O : K extends [infer Key, ...infer Rest] ? O extends Record<PropertyKey, unknown> ? GetWithArray<ExtractFromObject<O, Key>, Rest> : O extends readonly any[] ? GetWithArray<ExtractFromArray<O, Key>, Rest> : undefined : never; | ||
| export type GetPath<T> = T extends `${infer Key}.${infer Rest}` ? [Key, ...GetPath<Rest>] : T extends `${infer Key}` ? [Key] : []; | ||
| export type Get<O, K> = GetWithArray<O, GetPath<K>>; | ||
| export declare function pick<O, K extends string>(obj: O, path: K): Get<O, K>; | ||
| export declare const insert: <T extends Record<PropertyKey, any>>(obj: T, path: string, value: any) => T; | ||
| export {}; | ||
| //# sourceMappingURL=picking.d.ts.map |
| {"version":3,"file":"picking.d.ts","sourceRoot":"","sources":["../../../src/common/picking.ts"],"names":[],"mappings":"AAAA,KAAK,eAAe,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,GAAG,KAAK,GAAG,CAAC,CAAC;AAC1D,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;AAChD,KAAK,sBAAsB,CAAC,CAAC,IAAI,eAAe,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAEhE,MAAM,MAAM,iBAAiB,CAC3B,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,EACtC,CAAC,IACC,CAAC,SAAS,MAAM,CAAC,GACjB,CAAC,CAAC,CAAC,CAAC,GACJ,CAAC,SAAS,MAAM,sBAAsB,CAAC,CAAC,CAAC,GACvC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,GACxC,SAAS,CAAC;AAEhB,KAAK,gBAAgB,CAAC,CAAC,SAAS,SAAS,GAAG,EAAE,EAAE,CAAC,IAAI,GAAG,EAAE,SAAS,CAAC,GAChE,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,GAC5B,CAAC,GAAG,SAAS,GACb,SAAS,GACX,CAAC,SAAS,MAAM,CAAC,GACf,CAAC,CAAC,CAAC,CAAC,GACJ,SAAS,CAAC;AAEhB,KAAK,YAAY,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAClC,CAAC,GACD,CAAC,SAAS,CAAC,MAAM,GAAG,EAAE,GAAG,MAAM,IAAI,CAAC,GAClC,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,OAAO,CAAC,GACpC,YAAY,CAAC,iBAAiB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAC7C,CAAC,SAAS,SAAS,GAAG,EAAE,GACtB,YAAY,CAAC,gBAAgB,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,IAAI,CAAC,GAC5C,SAAS,GACb,KAAK,CAAC;AAEZ,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI,CAAC,SAAS,GAAG,MAAM,GAAG,IAAI,MAAM,IAAI,EAAE,GAC3D,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GACvB,CAAC,SAAS,GAAG,MAAM,GAAG,EAAE,GACtB,CAAC,GAAG,CAAC,GACL,EAAE,CAAC;AAET,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAAI,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpD,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAkBtE,eAAO,MAAM,MAAM,GAAI,CAAC,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EACvD,KAAK,CAAC,EACN,MAAM,MAAM,EACZ,OAAO,GAAG,KACT,CAmBF,CAAC"} |
| export function pick(obj, path) { | ||
| const keys = path.split("."); | ||
| let currentObj = obj; | ||
| for (const key of keys) { | ||
| const value = currentObj[key]; | ||
| if (value === undefined || value === null) { | ||
| return undefined; | ||
| } | ||
| currentObj = value; | ||
| } | ||
| return currentObj; | ||
| } | ||
| // TODO: make this more type-safe | ||
| export const insert = (obj, path, value) => { | ||
| const copy = { ...obj }; | ||
| const keys = path.split("."); | ||
| let next = copy; | ||
| while (keys.length > 0 && !!next) { | ||
| const key = keys[0]; | ||
| if (!key) | ||
| break; | ||
| if (keys.length <= 1) { | ||
| next[key] = value; | ||
| break; | ||
| } | ||
| keys.splice(0, 1); | ||
| next = next[key]; | ||
| } | ||
| return copy; | ||
| }; | ||
| //# sourceMappingURL=picking.js.map |
| {"version":3,"file":"picking.js","sourceRoot":"","sources":["../../../src/common/picking.ts"],"names":[],"mappings":"AAwCA,MAAM,UAAU,IAAI,CAAC,GAA4B,EAAE,IAAY;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,UAAU,GAAG,GAAG,CAAC;IACrB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,OAAO,SAAS,CAAC;QACnB,CAAC;QAED,UAAU,GAAG,KAAgC,CAAC;IAChD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iCAAiC;AACjC,MAAM,CAAC,MAAM,MAAM,GAAG,CACpB,GAAM,EACN,IAAY,EACZ,KAAU,EACP,EAAE;IACL,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;IACxB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,IAAI,GAAG,IAAI,CAAC;IAChB,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,CAAC,GAAG;YAAE,MAAM;QAEhB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;YACpB,IAAY,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YAC3B,MAAM;QACR,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAClB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"} |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
| type FilterUndefined<T> = T extends undefined ? never : T; | ||
| type FilterNull<T> = T extends null ? never : T; | ||
| type FilterUndefinedAndNull<T> = FilterUndefined<FilterNull<T>>; | ||
| export type ExtractFromObject< | ||
| O extends Record<PropertyKey, unknown>, | ||
| K, | ||
| > = K extends keyof O | ||
| ? O[K] | ||
| : K extends keyof FilterUndefinedAndNull<O> | ||
| ? FilterUndefinedAndNull<O>[K] | undefined | ||
| : undefined; | ||
| type ExtractFromArray<A extends readonly any[], K> = any[] extends A | ||
| ? A extends readonly (infer T)[] | ||
| ? T | undefined | ||
| : undefined | ||
| : K extends keyof A | ||
| ? A[K] | ||
| : undefined; | ||
| type GetWithArray<O, K> = K extends [] | ||
| ? O | ||
| : K extends [infer Key, ...infer Rest] | ||
| ? O extends Record<PropertyKey, unknown> | ||
| ? GetWithArray<ExtractFromObject<O, Key>, Rest> | ||
| : O extends readonly any[] | ||
| ? GetWithArray<ExtractFromArray<O, Key>, Rest> | ||
| : undefined | ||
| : never; | ||
| export type GetPath<T> = T extends `${infer Key}.${infer Rest}` | ||
| ? [Key, ...GetPath<Rest>] | ||
| : T extends `${infer Key}` | ||
| ? [Key] | ||
| : []; | ||
| export type Get<O, K> = GetWithArray<O, GetPath<K>>; | ||
| export function pick<O, K extends string>(obj: O, path: K): Get<O, K>; | ||
| export function pick(obj: Record<string, unknown>, path: string): unknown { | ||
| const keys = path.split("."); | ||
| let currentObj = obj; | ||
| for (const key of keys) { | ||
| const value = currentObj[key]; | ||
| if (value === undefined || value === null) { | ||
| return undefined; | ||
| } | ||
| currentObj = value as Record<string, unknown>; | ||
| } | ||
| return currentObj; | ||
| } | ||
| // TODO: make this more type-safe | ||
| export const insert = <T extends Record<PropertyKey, any>>( | ||
| obj: T, | ||
| path: string, | ||
| value: any, | ||
| ): T => { | ||
| const copy = { ...obj }; | ||
| const keys = path.split("."); | ||
| let next = copy; | ||
| while (keys.length > 0 && !!next) { | ||
| const key = keys[0]; | ||
| if (!key) break; | ||
| if (keys.length <= 1) { | ||
| (next as any)[key] = value; | ||
| break; | ||
| } | ||
| keys.splice(0, 1); | ||
| next = next[key]; | ||
| } | ||
| return copy; | ||
| }; |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
@@ -12,2 +12,3 @@ export * from "./types"; | ||
| export * from "./string"; | ||
| export * from "./picking"; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"} |
@@ -28,2 +28,3 @@ "use strict"; | ||
| __exportStar(require("./string"), exports); | ||
| __exportStar(require("./picking"), exports); | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,uCAAqB;AACrB,0CAAwB;AACxB,4CAA0B;AAC1B,iDAA+B;AAC/B,wCAAsB;AACtB,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,0CAAwB;AACxB,uCAAqB;AACrB,0CAAwB;AACxB,4CAA0B;AAC1B,iDAA+B;AAC/B,wCAAsB;AACtB,0CAAwB;AACxB,yCAAuB;AACvB,0CAAwB;AACxB,0CAAwB;AACxB,2CAAyB;AACzB,4CAA0B"} |
@@ -1,2 +0,2 @@ | ||
| import { Boxed, SubscribeOptions, Subscription, VoidFunction } from "./common/types"; | ||
| import { SubscribeOptions, Subscription, VoidFunction } from "./common/types"; | ||
| import { PubSub } from "./pubsub"; | ||
@@ -9,5 +9,5 @@ export declare const OBSERVABLE: unique symbol; | ||
| } | ||
| export declare function observable<T>(state: Boxed<T>, ps: PubSub<T>): Observable<T>; | ||
| export declare function observable<T>(getter: () => T, ps: PubSub<T>): Observable<T>; | ||
| export declare function isObservable<X extends Observable<unknown>>(x: X): x is X; | ||
| export declare function isObservable(x: unknown): x is Observable<unknown>; | ||
| //# sourceMappingURL=observable.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,UAAU,eAAuB,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC;AAE3C,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,YAAY,CAAC;CAC5E;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgB3E;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1E,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC"} | ||
| {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,UAAU,eAAuB,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC;AAE3C,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,YAAY,CAAC;CAC5E;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgB3E;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1E,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC"} |
@@ -8,6 +8,6 @@ "use strict"; | ||
| exports.OBSERVABLE = Symbol("Observable"); | ||
| function observable(state, ps) { | ||
| function observable(getter, ps) { | ||
| const observe = (fn, options = {}) => { | ||
| if (options.immediate) { | ||
| fn(state.value); | ||
| fn(getter()); | ||
| } | ||
@@ -14,0 +14,0 @@ return ps.subscribe(fn, options.cleanup); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"observable.js","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":";;;AAiBA,gCAgBC;AAID,oCAEC;AAvCD,qCAA+B;AASlB,QAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAQ/C,SAAgB,UAAU,CAAI,KAAe,EAAE,EAAa;IAC1D,MAAM,OAAO,GAAG,CACd,EAAmB,EACnB,UAA4B,EAAE,EAChB,EAAE;QAChB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,kBAAU,CAAC,EAAE,IAAI;QAClB,GAAG,EAAE;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAID,SAAgB,YAAY,CAAC,CAAU;IACrC,OAAO,IAAA,YAAG,EAAC,CAAC,EAAE,kBAAU,CAAC,CAAC;AAC5B,CAAC"} | ||
| {"version":3,"file":"observable.js","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":";;;AAYA,gCAgBC;AAID,oCAEC;AAlCD,qCAA+B;AAIlB,QAAA,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAQ/C,SAAgB,UAAU,CAAI,MAAe,EAAE,EAAa;IAC1D,MAAM,OAAO,GAAG,CACd,EAAmB,EACnB,UAA4B,EAAE,EAChB,EAAE;QAChB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACf,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,kBAAU,CAAC,EAAE,IAAI;QAClB,GAAG,EAAE;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAID,SAAgB,YAAY,CAAC,CAAU;IACrC,OAAO,IAAA,YAAG,EAAC,CAAC,EAAE,kBAAU,CAAC,CAAC;AAC5B,CAAC"} |
@@ -12,3 +12,7 @@ import { Dispatch, Loose, SetStateAction } from "./common/types"; | ||
| export type MaybeReference<T> = T | Reference<T>; | ||
| export declare function ref<T>(value: T): Reference<T>; | ||
| export type RefInit<T> = { | ||
| get: () => T; | ||
| set: (value: T) => T; | ||
| }; | ||
| export declare function ref<T>(value: T, cfg?: RefInit<T>): Reference<T>; | ||
| export declare function isReference(x: Loose): x is Reference<Loose>; | ||
@@ -15,0 +19,0 @@ export declare function isReference(x: unknown): x is Reference<unknown>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAItD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEjD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAoC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"} | ||
| {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAItD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;CACtB,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAiC/D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"} |
@@ -14,18 +14,16 @@ "use strict"; | ||
| exports.REFERENCE = Symbol("Reference"); | ||
| function ref(value) { | ||
| function ref(value, cfg) { | ||
| const ps = (0, pubsub_1.pubsub)(); | ||
| const state = { value: (0, maybeProxy_1.maybeProxy)(value) }; | ||
| const obs = (0, observable_1.observable)(state, ps); | ||
| const addEffectDependency = (fx) => { | ||
| ps.addEffect(fx.run, fx.cleanup); | ||
| }; | ||
| const obs = (0, observable_1.observable)(() => state.value, ps); | ||
| const get = () => { | ||
| const fx = context_1.Context.scope.current.effect; | ||
| if (fx) | ||
| addEffectDependency(fx); | ||
| return state.value; | ||
| ps.addEffect(fx.run, fx.cleanup); | ||
| return cfg ? cfg.get() : state.value; | ||
| }; | ||
| const set = (fn) => { | ||
| const prev = state.value; | ||
| const next = (0, maybeProxy_1.maybeProxy)((0, is_1.isFunction)(fn) ? fn(state.value) : fn); | ||
| const rawNext = (0, maybeProxy_1.maybeProxy)((0, is_1.isFunction)(fn) ? fn(state.value) : fn); | ||
| const next = cfg ? cfg.set(rawNext) : rawNext; | ||
| if (!(0, compare_1.compare)(next, prev)) { | ||
@@ -32,0 +30,0 @@ state.value = next; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":";;;AAsBA,kBAoCC;AAKD,kCAEC;AAjED,qCAA+B;AAC/B,8CAA2C;AAC3C,oCAAyC;AAEzC,uCAAoC;AAEpC,6CAAsD;AACtD,qCAAkC;AAClC,mDAAgD;AAEnC,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAY7C,SAAgB,GAAG,CAAI,KAAQ;IAC7B,MAAM,EAAE,GAAG,IAAA,eAAM,GAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,IAAA,uBAAU,EAAC,KAAK,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,IAAA,uBAAU,EAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,EAAE;QACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,iBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,IAAA,uBAAU,EAAC,IAAA,eAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,IAAA,iBAAO,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,iBAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,SAAgB,WAAW,CAAC,CAAU;IACpC,OAAO,IAAA,YAAG,EAAC,CAAC,EAAE,iBAAS,CAAC,CAAC;AAC3B,CAAC"} | ||
| {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":";;;AA0BA,kBAiCC;AAKD,kCAEC;AAlED,qCAA+B;AAC/B,8CAA2C;AAC3C,oCAAyC;AAEzC,uCAAoC;AACpC,6CAAsD;AACtD,qCAAkC;AAClC,mDAAgD;AAEnC,QAAA,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAiB7C,SAAgB,GAAG,CAAI,KAAQ,EAAE,GAAgB;IAC/C,MAAM,EAAE,GAAG,IAAA,eAAM,GAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,IAAA,uBAAU,EAAC,KAAK,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,IAAA,uBAAU,EAAI,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,iBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,IAAA,uBAAU,EAAC,IAAA,eAAU,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,IAAA,iBAAO,EAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,iBAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,SAAgB,WAAW,CAAC,CAAU;IACpC,OAAO,IAAA,YAAG,EAAC,CAAC,EAAE,iBAAS,CAAC,CAAC;AAC3B,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"unref.d.ts","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5G,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAE,OAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAQ9D"} | ||
| {"version":3,"file":"unref.d.ts","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GACnD,CAAC,GACD,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GACnC,CAAC,GACD,CAAC,CAAC;AAER,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAE,OAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAQ9D"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"unref.js","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":";;AAIA,sBAQC;AAZD,4CAAsE;AAItE,SAAgB,KAAK,CAAI,CAAI,EAAE,OAAgB,KAAK;IAClD,IAAI,IAAA,uBAAW,EAAC,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,IAAA,uBAAW,EAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAa,CAAC;AACvB,CAAC"} | ||
| {"version":3,"file":"unref.js","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":";;AAQA,sBAQC;AAhBD,4CAAsE;AAQtE,SAAgB,KAAK,CAAI,CAAI,EAAE,OAAgB,KAAK;IAClD,IAAI,IAAA,uBAAW,EAAC,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,IAAA,uBAAW,EAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAa,CAAC;AACvB,CAAC"} |
@@ -12,2 +12,3 @@ export * from "./types"; | ||
| export * from "./string"; | ||
| export * from "./picking"; | ||
| //# sourceMappingURL=index.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"} | ||
| {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"} |
@@ -12,2 +12,3 @@ export * from "./types"; | ||
| export * from "./string"; | ||
| export * from "./picking"; | ||
| //# sourceMappingURL=index.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC"} | ||
| {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,MAAM,CAAC;AACrB,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,OAAO,CAAC;AACtB,cAAc,SAAS,CAAC;AACxB,cAAc,QAAQ,CAAC;AACvB,cAAc,SAAS,CAAC;AACxB,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,WAAW,CAAC"} |
@@ -1,2 +0,2 @@ | ||
| import { Boxed, SubscribeOptions, Subscription, VoidFunction } from "./common/types"; | ||
| import { SubscribeOptions, Subscription, VoidFunction } from "./common/types"; | ||
| import { PubSub } from "./pubsub"; | ||
@@ -9,5 +9,5 @@ export declare const OBSERVABLE: unique symbol; | ||
| } | ||
| export declare function observable<T>(state: Boxed<T>, ps: PubSub<T>): Observable<T>; | ||
| export declare function observable<T>(getter: () => T, ps: PubSub<T>): Observable<T>; | ||
| export declare function isObservable<X extends Observable<unknown>>(x: X): x is X; | ||
| export declare function isObservable(x: unknown): x is Observable<unknown>; | ||
| //# sourceMappingURL=observable.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,YAAY,EACZ,YAAY,EACb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,UAAU,eAAuB,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC;AAE3C,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,YAAY,CAAC;CAC5E;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgB3E;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1E,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC"} | ||
| {"version":3,"file":"observable.d.ts","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9E,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAElC,eAAO,MAAM,UAAU,eAAuB,CAAC;AAC/C,MAAM,MAAM,UAAU,GAAG,OAAO,UAAU,CAAC;AAE3C,MAAM,WAAW,UAAU,CAAC,CAAC,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAC9C,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC;IACnB,OAAO,EAAE,CAAC,EAAE,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,gBAAgB,KAAK,YAAY,CAAC;CAC5E;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAgB3E;AAED,wBAAgB,YAAY,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1E,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CAAC,OAAO,CAAC,CAAC"} |
| import { has } from "./common"; | ||
| export const OBSERVABLE = Symbol("Observable"); | ||
| export function observable(state, ps) { | ||
| export function observable(getter, ps) { | ||
| const observe = (fn, options = {}) => { | ||
| if (options.immediate) { | ||
| fn(state.value); | ||
| fn(getter()); | ||
| } | ||
@@ -8,0 +8,0 @@ return ps.subscribe(fn, options.cleanup); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"observable.js","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAS/B,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAQ/C,MAAM,UAAU,UAAU,CAAI,KAAe,EAAE,EAAa;IAC1D,MAAM,OAAO,GAAG,CACd,EAAmB,EACnB,UAA4B,EAAE,EAChB,EAAE;QAChB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,UAAU,CAAC,EAAE,IAAI;QAClB,GAAG,EAAE;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC5B,CAAC"} | ||
| {"version":3,"file":"observable.js","sourceRoot":"","sources":["../../src/observable.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAI/B,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAQ/C,MAAM,UAAU,UAAU,CAAI,MAAe,EAAE,EAAa;IAC1D,MAAM,OAAO,GAAG,CACd,EAAmB,EACnB,UAA4B,EAAE,EAChB,EAAE;QAChB,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;YACtB,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC;QACf,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,UAAU,CAAC,EAAE,IAAI;QAClB,GAAG,EAAE;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAID,MAAM,UAAU,YAAY,CAAC,CAAU;IACrC,OAAO,GAAG,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AAC5B,CAAC"} |
@@ -12,3 +12,7 @@ import { Dispatch, Loose, SetStateAction } from "./common/types"; | ||
| export type MaybeReference<T> = T | Reference<T>; | ||
| export declare function ref<T>(value: T): Reference<T>; | ||
| export type RefInit<T> = { | ||
| get: () => T; | ||
| set: (value: T) => T; | ||
| }; | ||
| export declare function ref<T>(value: T, cfg?: RefInit<T>): Reference<T>; | ||
| export declare function isReference(x: Loose): x is Reference<Loose>; | ||
@@ -15,0 +19,0 @@ export declare function isReference(x: unknown): x is Reference<unknown>; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAGxE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAItD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEjD,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAoC7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"} | ||
| {"version":3,"file":"reference.d.ts","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAGA,OAAO,EAAS,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAExE,OAAO,EAAc,UAAU,EAAE,MAAM,cAAc,CAAC;AAItD,eAAO,MAAM,SAAS,eAAsB,CAAC;AAC7C,MAAM,MAAM,SAAS,GAAG,OAAO,SAAS,CAAC;AAEzC,MAAM,WAAW,SAAS,CAAC,CAAC,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IACjD,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC;IACjC,IAAI,EAAE,MAAM,CAAC,CAAC;CACf;AAED,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,MAAM,OAAO,CAAC,CAAC,IAAI;IACvB,GAAG,EAAE,MAAM,CAAC,CAAC;IACb,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;CACtB,CAAC;AAEF,wBAAgB,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAiC/D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC;AAC7D,wBAAgB,WAAW,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;AACjE,wBAAgB,WAAW,CAAC,CAAC,SAAS,SAAS,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC"} |
@@ -9,18 +9,16 @@ import { has } from "./common"; | ||
| export const REFERENCE = Symbol("Reference"); | ||
| export function ref(value) { | ||
| export function ref(value, cfg) { | ||
| const ps = pubsub(); | ||
| const state = { value: maybeProxy(value) }; | ||
| const obs = observable(state, ps); | ||
| const addEffectDependency = (fx) => { | ||
| ps.addEffect(fx.run, fx.cleanup); | ||
| }; | ||
| const obs = observable(() => state.value, ps); | ||
| const get = () => { | ||
| const fx = Context.scope.current.effect; | ||
| if (fx) | ||
| addEffectDependency(fx); | ||
| return state.value; | ||
| ps.addEffect(fx.run, fx.cleanup); | ||
| return cfg ? cfg.get() : state.value; | ||
| }; | ||
| const set = (fn) => { | ||
| const prev = state.value; | ||
| const next = maybeProxy(isFunction(fn) ? fn(state.value) : fn); | ||
| const rawNext = maybeProxy(isFunction(fn) ? fn(state.value) : fn); | ||
| const next = cfg ? cfg.set(rawNext) : rawNext; | ||
| if (!compare(next, prev)) { | ||
@@ -27,0 +25,0 @@ state.value = next; |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAY7C,MAAM,UAAU,GAAG,CAAI,KAAQ;IAC7B,MAAM,EAAE,GAAG,MAAM,EAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,UAAU,CAAI,KAAK,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,mBAAmB,GAAG,CAAC,EAAU,EAAE,EAAE;QACzC,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAChC,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,IAAI,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC/D,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,SAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3B,CAAC"} | ||
| {"version":3,"file":"reference.js","sourceRoot":"","sources":["../../src/reference.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAc,MAAM,cAAc,CAAC;AACtD,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,CAAC,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC;AAiB7C,MAAM,UAAU,GAAG,CAAI,KAAQ,EAAE,GAAgB;IAC/C,MAAM,EAAE,GAAG,MAAM,EAAK,CAAC;IACvB,MAAM,KAAK,GAAa,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,UAAU,CAAI,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,GAAM,EAAE;QAClB,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QACxC,IAAI,EAAE;YAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;IACvC,CAAC,CAAC;IAEF,MAAM,GAAG,GAAgC,CAAC,EAAE,EAAE,EAAE;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC;QACzB,MAAM,OAAO,GAAG,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClE,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QAC9C,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;YACnB,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;IACH,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,GAAM,EAAE;QACnB,OAAO,KAAK,CAAC,KAAK,CAAC;IACrB,CAAC,CAAC;IAEF,OAAO;QACL,CAAC,SAAS,CAAC,EAAE,IAAI;QACjB,GAAG,EAAE;QACL,GAAG,GAAG;QACN,GAAG;QACH,GAAG;QACH,IAAI;KACL,CAAC;AACJ,CAAC;AAKD,MAAM,UAAU,WAAW,CAAC,CAAU;IACpC,OAAO,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3B,CAAC"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"unref.d.ts","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAE5G,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAE,OAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAQ9D"} | ||
| {"version":3,"file":"unref.d.ts","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,cAAc,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEtE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,GACnD,CAAC,GACD,CAAC,CAAC,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GACnC,CAAC,GACD,CAAC,CAAC;AAER,wBAAgB,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,GAAE,OAAe,GAAG,KAAK,CAAC,CAAC,CAAC,CAQ9D"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"unref.js","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA6B,MAAM,cAAc,CAAC;AAItE,MAAM,UAAU,KAAK,CAAI,CAAI,EAAE,OAAgB,KAAK;IAClD,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAa,CAAC;AACvB,CAAC"} | ||
| {"version":3,"file":"unref.js","sourceRoot":"","sources":["../../../src/utils/unref.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA6B,MAAM,cAAc,CAAC;AAQtE,MAAM,UAAU,KAAK,CAAI,CAAI,EAAE,OAAgB,KAAK;IAClD,IAAI,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;QACnB,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;QACxC,IAAI,WAAW,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CAAa,CAAC;AACvB,CAAC"} |
+1
-1
| { | ||
| "name": "@derivesome/core", | ||
| "version": "1.0.5", | ||
| "version": "1.0.6", | ||
| "description": "", | ||
@@ -5,0 +5,0 @@ "main": "./dist/cjs/index.js", |
@@ -12,1 +12,2 @@ export * from "./types"; | ||
| export * from "./string"; | ||
| export * from "./picking"; |
| import { has } from "./common"; | ||
| import { | ||
| Boxed, | ||
| SubscribeOptions, | ||
| Subscription, | ||
| VoidFunction, | ||
| } from "./common/types"; | ||
| import { SubscribeOptions, Subscription, VoidFunction } from "./common/types"; | ||
| import { PubSub } from "./pubsub"; | ||
@@ -18,3 +13,3 @@ | ||
| export function observable<T>(state: Boxed<T>, ps: PubSub<T>): Observable<T> { | ||
| export function observable<T>(getter: () => T, ps: PubSub<T>): Observable<T> { | ||
| const observe = ( | ||
@@ -25,3 +20,3 @@ fn: Subscription<T>, | ||
| if (options.immediate) { | ||
| fn(state.value); | ||
| fn(getter()); | ||
| } | ||
@@ -28,0 +23,0 @@ return ps.subscribe(fn, options.cleanup); |
+197
-0
@@ -96,1 +96,198 @@ import { describe, assert } from "vitest"; | ||
| }); | ||
| describe("ref with custom get/set", (it) => { | ||
| it("reads from and writes to external storage", () => { | ||
| const store = { value: 0 }; | ||
| const r = ref(0, { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| assert.strictEqual(r.get(), 0); | ||
| assert.strictEqual(store.value, 0); | ||
| r.set(42); | ||
| assert.strictEqual(r.get(), 42); | ||
| assert.strictEqual(store.value, 42); | ||
| }); | ||
| it("notifies subscribers through context", () => { | ||
| const store = { value: "a" }; | ||
| const r = ref("a", { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| let last = ""; | ||
| Context.runEffect(() => { | ||
| last = r.get(); | ||
| }); | ||
| assert.strictEqual(last, "a"); | ||
| r.set("b"); | ||
| assert.strictEqual(last, "b"); | ||
| r.set("c"); | ||
| assert.strictEqual(last, "c"); | ||
| }); | ||
| it("does not notify when value is unchanged", () => { | ||
| const store = { value: 1 }; | ||
| const r = ref(1, { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| let callCount = 0; | ||
| Context.runEffect(() => { | ||
| r.get(); | ||
| callCount++; | ||
| }); | ||
| assert.strictEqual(callCount, 1); | ||
| r.set(1); | ||
| assert.strictEqual(callCount, 1); | ||
| r.set(2); | ||
| assert.strictEqual(callCount, 2); | ||
| }); | ||
| it("supports functional setter", () => { | ||
| const store = { value: 10 }; | ||
| const r = ref(10, { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| r.set((prev) => prev + 5); | ||
| assert.strictEqual(r.get(), 15); | ||
| assert.strictEqual(store.value, 15); | ||
| r.set((prev) => prev * 2); | ||
| assert.strictEqual(r.get(), 30); | ||
| }); | ||
| it("get() reflects external source even if changed outside set()", () => { | ||
| const store = { value: "initial" }; | ||
| const r = ref("initial", { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| // mutate external store directly, bypassing ref.set() | ||
| store.value = "changed"; | ||
| assert.strictEqual(r.get(), "changed"); | ||
| }); | ||
| it("peek() returns state.value, not external source", () => { | ||
| const store = { value: "initial" }; | ||
| const r = ref("initial", { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| // mutate external store directly | ||
| store.value = "changed"; | ||
| // peek should still return the original initial value, not the external change | ||
| assert.strictEqual(r.peek(), "initial"); | ||
| // after going through set(), peek() syncs up | ||
| r.set("via-set"); | ||
| assert.strictEqual(r.peek(), "via-set"); | ||
| }); | ||
| it("works with derived", () => { | ||
| const store = { x: 2, y: 3 }; | ||
| const x = ref(2, { | ||
| get: () => store.x, | ||
| set: (v) => { | ||
| store.x = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| const y = ref(3, { | ||
| get: () => store.y, | ||
| set: (v) => { | ||
| store.y = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| const sum = derived(() => x.get() + y.get()); | ||
| assert.strictEqual(sum.peek(), 5); | ||
| x.set(10); | ||
| assert.strictEqual(sum.peek(), 13); | ||
| y.set(7); | ||
| assert.strictEqual(sum.peek(), 17); | ||
| }); | ||
| it("stops notifying after dispose", () => { | ||
| const store = { value: 0 }; | ||
| const r = ref(0, { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| store.value = v; | ||
| return v; | ||
| }, | ||
| }); | ||
| let last = 0; | ||
| Context.runEffect(() => { | ||
| last = r.get(); | ||
| }); | ||
| r.set(1); | ||
| assert.strictEqual(last, 1); | ||
| r.dispose(); | ||
| r.set(2); | ||
| assert.strictEqual(last, 1); | ||
| }); | ||
| it("uses the return value of cfg.set for state tracking", () => { | ||
| // cfg.set can transform the value (e.g. clamp it) | ||
| const store = { value: 5 }; | ||
| const r = ref(5, { | ||
| get: () => store.value, | ||
| set: (v) => { | ||
| const clamped = Math.max(0, Math.min(10, v)); | ||
| store.value = clamped; | ||
| return clamped; | ||
| }, | ||
| }); | ||
| r.set(20); | ||
| assert.strictEqual(r.get(), 10); | ||
| assert.strictEqual(store.value, 10); | ||
| r.set(-5); | ||
| assert.strictEqual(r.get(), 0); | ||
| assert.strictEqual(store.value, 0); | ||
| }); | ||
| }); |
+11
-10
@@ -6,3 +6,2 @@ import { has } from "./common"; | ||
| import { Context } from "./context"; | ||
| import { Effect } from "./effect"; | ||
| import { observable, Observable } from "./observable"; | ||
@@ -24,15 +23,16 @@ import { pubsub } from "./pubsub"; | ||
| export function ref<T>(value: T): Reference<T> { | ||
| export type RefInit<T> = { | ||
| get: () => T; | ||
| set: (value: T) => T; | ||
| }; | ||
| export function ref<T>(value: T, cfg?: RefInit<T>): Reference<T> { | ||
| const ps = pubsub<T>(); | ||
| const state: Boxed<T> = { value: maybeProxy(value) }; | ||
| const obs = observable<T>(state, ps); | ||
| const obs = observable<T>(() => state.value, ps); | ||
| const addEffectDependency = (fx: Effect) => { | ||
| ps.addEffect(fx.run, fx.cleanup); | ||
| }; | ||
| const get = (): T => { | ||
| const fx = Context.scope.current.effect; | ||
| if (fx) addEffectDependency(fx); | ||
| return state.value; | ||
| if (fx) ps.addEffect(fx.run, fx.cleanup); | ||
| return cfg ? cfg.get() : state.value; | ||
| }; | ||
@@ -42,3 +42,4 @@ | ||
| const prev = state.value; | ||
| const next = maybeProxy(isFunction(fn) ? fn(state.value) : fn); | ||
| const rawNext = maybeProxy(isFunction(fn) ? fn(state.value) : fn); | ||
| const next = cfg ? cfg.set(rawNext) : rawNext; | ||
| if (!compare(next, prev)) { | ||
@@ -45,0 +46,0 @@ state.value = next; |
| import { isReference, MaybeReference, Reference } from "../reference"; | ||
| export type Unref<T> = [T] extends [Reference<infer V>] ? V : [T] extends [MaybeReference<infer V>] ? V : T; | ||
| export type Unref<T> = [T] extends [Reference<infer V>] | ||
| ? V | ||
| : [T] extends [MaybeReference<infer V>] | ||
| ? V | ||
| : T; | ||
@@ -5,0 +9,0 @@ export function unref<T>(x: T, peek: boolean = false): Unref<T> { |
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is too big to display
Sorry, the diff of this file is not supported yet
3064030
43.75%308
5.84%4143
8.48%