Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

@derivesome/core

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@derivesome/core - npm Package Compare versions

Comparing version
1.0.5
to
1.0.6
+12
dist/cjs/common/picking.d.ts
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

+1
-0

@@ -12,2 +12,3 @@ export * from "./types";

export * from "./string";
export * from "./picking";
//# sourceMappingURL=index.d.ts.map
+1
-1

@@ -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"}
{
"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);

@@ -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);
});
});

@@ -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