@zeix/cause-effect 0.15.1 → 0.15.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/types/index.d.ts CHANGED
@@ -4,12 +4,13 @@
4
4
  * @author Esther Brunner
5
5
  */
6
6
  export { type Computed, type ComputedCallback, computed, isComputed, isComputedCallback, TYPE_COMPUTED, } from './src/computed';
7
- export { type DiffResult, diff, isEqual, type UnknownRecord, type UnknownRecordOrArray, } from './src/diff';
7
+ export { type DiffResult, diff, isEqual, type UnknownArray, type UnknownRecord, type UnknownRecordOrArray, } from './src/diff';
8
8
  export { type EffectCallback, effect, type MaybeCleanup } from './src/effect';
9
+ export { CircularDependencyError, InvalidSignalValueError, NullishSignalValueError, StoreKeyExistsError, StoreKeyRangeError, StoreKeyReadonlyError, } from './src/errors';
9
10
  export { type MatchHandlers, match } from './src/match';
10
11
  export { type ResolveResult, resolve } from './src/resolve';
11
12
  export { batch, type Cleanup, enqueue, flush, notify, observe, subscribe, type Updater, type Watcher, watch, } from './src/scheduler';
12
- export { isSignal, type MaybeSignal, type Signal, type SignalValues, toMutableSignal, toSignal, UNSET, type UnknownSignalRecord, } from './src/signal';
13
+ export { isMutableSignal, isSignal, type Signal, type SignalValues, toSignal, type UnknownSignalRecord, } from './src/signal';
13
14
  export { isState, type State, state, TYPE_STATE } from './src/state';
14
- export { isStore, type Store, type StoreAddEvent, type StoreChangeEvent, type StoreEventMap, type StoreRemoveEvent, store, TYPE_STORE, } from './src/store';
15
- export { CircularDependencyError, isAbortError, isAsyncFunction, isFunction, isNumber, isString, toError, } from './src/util';
15
+ export { isStore, type Store, type StoreAddEvent, type StoreChangeEvent, type StoreEventMap, type StoreRemoveEvent, type StoreSortEvent, store, TYPE_STORE, } from './src/store';
16
+ export { isAbortError, isAsyncFunction, isFunction, isNumber, isRecord, isRecordOrArray, isString, isSymbol, toError, UNSET, } from './src/util';
@@ -1,7 +1,9 @@
1
1
  type UnknownRecord = Record<string, unknown & {}>;
2
- type UnknownRecordOrArray = {
3
- [x: string | number]: unknown & {};
2
+ type UnknownArray = ReadonlyArray<unknown & {}>;
3
+ type ArrayToRecord<T extends UnknownArray> = {
4
+ [key: string]: T extends Array<infer U extends {}> ? U : never;
4
5
  };
6
+ type UnknownRecordOrArray = UnknownRecord | ArrayToRecord<UnknownArray>;
5
7
  type DiffResult<T extends UnknownRecordOrArray = UnknownRecord> = {
6
8
  changed: boolean;
7
9
  add: Partial<T>;
@@ -27,4 +29,4 @@ declare const isEqual: <T>(a: T, b: T, visited?: WeakSet<object>) => boolean;
27
29
  * @returns {DiffResult<T>} The result of the comparison
28
30
  */
29
31
  declare const diff: <T extends UnknownRecordOrArray>(oldObj: T, newObj: T) => DiffResult<T>;
30
- export { type DiffResult, diff, isEqual, type UnknownRecord, type UnknownRecordOrArray, };
32
+ export { type ArrayToRecord, type DiffResult, diff, isEqual, type UnknownRecord, type UnknownArray, type UnknownRecordOrArray, };
@@ -0,0 +1,19 @@
1
+ declare class CircularDependencyError extends Error {
2
+ constructor(where: string);
3
+ }
4
+ declare class InvalidSignalValueError extends TypeError {
5
+ constructor(where: string, value: string);
6
+ }
7
+ declare class NullishSignalValueError extends TypeError {
8
+ constructor(where: string);
9
+ }
10
+ declare class StoreKeyExistsError extends Error {
11
+ constructor(key: string, value: string);
12
+ }
13
+ declare class StoreKeyRangeError extends RangeError {
14
+ constructor(index: number);
15
+ }
16
+ declare class StoreKeyReadonlyError extends Error {
17
+ constructor(key: string, value: string);
18
+ }
19
+ export { CircularDependencyError, InvalidSignalValueError, NullishSignalValueError, StoreKeyExistsError, StoreKeyRangeError, StoreKeyReadonlyError, };
@@ -1,7 +1,7 @@
1
1
  import type { ResolveResult } from './resolve';
2
2
  import type { SignalValues, UnknownSignalRecord } from './signal';
3
3
  type MatchHandlers<S extends UnknownSignalRecord> = {
4
- ok?: (values: SignalValues<S>) => void;
4
+ ok: (values: SignalValues<S>) => void;
5
5
  err?: (errors: readonly Error[]) => void;
6
6
  nil?: () => void;
7
7
  };
@@ -1,4 +1,4 @@
1
- import { type SignalValues, type UnknownSignalRecord } from './signal';
1
+ import type { SignalValues, UnknownSignalRecord } from './signal';
2
2
  type ResolveResult<S extends UnknownSignalRecord> = {
3
3
  ok: true;
4
4
  values: SignalValues<S>;
@@ -4,14 +4,12 @@ import { type Store } from './store';
4
4
  type Signal<T extends {}> = {
5
5
  get(): T;
6
6
  };
7
- type MaybeSignal<T extends {}> = T | Signal<T> | ComputedCallback<T>;
8
7
  type UnknownSignalRecord = Record<string, Signal<unknown & {}>>;
9
8
  type SignalValues<S extends UnknownSignalRecord> = {
10
9
  [K in keyof S]: S[K] extends Signal<infer T> ? T : never;
11
10
  };
12
- declare const UNSET: any;
13
11
  /**
14
- * Check whether a value is a Signal or not
12
+ * Check whether a value is a Signal
15
13
  *
16
14
  * @since 0.9.0
17
15
  * @param {unknown} value - value to check
@@ -19,26 +17,21 @@ declare const UNSET: any;
19
17
  */
20
18
  declare const isSignal: <T extends {}>(value: unknown) => value is Signal<T>;
21
19
  /**
22
- * Convert a value to a Signal if it's not already a Signal
20
+ * Check whether a value is a State or Store
23
21
  *
24
- * @since 0.9.6
25
- * @param {T} value - value to convert
26
- * @returns {Signal<T>} - Signal instance
22
+ * @since 0.15.2
23
+ * @param {unknown} value - value to check
24
+ * @returns {boolean} - true if value is a State or Store, false otherwise
27
25
  */
28
- declare function toSignal<T extends {}>(value: T[]): Store<Record<string, T>>;
29
- declare function toSignal<T extends {}>(value: (() => T) | ((abort: AbortSignal) => Promise<T>)): Computed<T>;
30
- declare function toSignal<T extends {}>(value: T): T extends Store<infer U> ? Store<U> : T extends State<infer U> ? State<U> : T extends Computed<infer U> ? Computed<U> : T extends Signal<infer U> ? Signal<U> : T extends Record<string, unknown & {}> ? Store<{
31
- [K in keyof T]: T[K];
32
- }> : State<T>;
26
+ declare const isMutableSignal: <T extends {}>(value: unknown) => value is State<T> | Store<T>;
33
27
  /**
34
- * Convert a value to a mutable Signal if it's not already a Signal
28
+ * Convert a value to a Signal if it's not already a Signal
35
29
  *
36
- * @since 0.15.0
30
+ * @since 0.9.6
37
31
  * @param {T} value - value to convert
38
- * @returns {State<T> | Store<T>} - Signal instance
32
+ * @returns {Signal<T>} - Signal instance
39
33
  */
40
- declare function toMutableSignal<T extends {}>(value: T[]): Store<Record<string, T>>;
41
- declare function toMutableSignal<T extends {}>(value: T): T extends Store<infer U> ? Store<U> : T extends State<infer U> ? State<U> : T extends Record<string, unknown & {}> ? Store<{
34
+ declare function toSignal<T extends {}>(value: T): T extends Store<infer U> ? Store<U> : T extends State<infer U> ? State<U> : T extends Computed<infer U> ? Computed<U> : T extends Signal<infer U> ? Signal<U> : T extends ReadonlyArray<infer U extends {}> ? Store<U[]> : T extends Record<string, unknown & {}> ? Store<{
42
35
  [K in keyof T]: T[K];
43
- }> : State<T>;
44
- export { type Signal, type MaybeSignal, type UnknownSignalRecord, type SignalValues, UNSET, isSignal, toSignal, toMutableSignal, };
36
+ }> : T extends ComputedCallback<infer U extends {}> ? Computed<U> : State<T>;
37
+ export { type Signal, type UnknownSignalRecord, type SignalValues, isSignal, isMutableSignal, toSignal, };
@@ -1,43 +1,61 @@
1
- import { type UnknownRecord, type UnknownRecordOrArray } from './diff';
2
- import { type Signal } from './signal';
1
+ import { type UnknownArray, type UnknownRecord, type UnknownRecordOrArray } from './diff';
3
2
  import { type State } from './state';
4
- declare const TYPE_STORE = "Store";
5
- interface StoreAddEvent<T extends UnknownRecordOrArray> extends CustomEvent {
6
- type: 'store-add';
7
- detail: Partial<T>;
8
- }
9
- interface StoreChangeEvent<T extends UnknownRecordOrArray> extends CustomEvent {
10
- type: 'store-change';
11
- detail: Partial<T>;
12
- }
13
- interface StoreRemoveEvent<T extends UnknownRecordOrArray> extends CustomEvent {
14
- type: 'store-remove';
15
- detail: Partial<T>;
16
- }
17
- type StoreEventMap<T extends UnknownRecordOrArray> = {
3
+ type ArrayItem<T> = T extends readonly (infer U extends {})[] ? U : never;
4
+ type StoreEventMap<T extends UnknownRecord | UnknownArray> = {
18
5
  'store-add': StoreAddEvent<T>;
19
6
  'store-change': StoreChangeEvent<T>;
20
7
  'store-remove': StoreRemoveEvent<T>;
8
+ 'store-sort': StoreSortEvent;
21
9
  };
22
- interface StoreEventTarget<T extends UnknownRecordOrArray> extends EventTarget {
10
+ interface StoreEventTarget<T extends UnknownRecord | UnknownArray> extends EventTarget {
23
11
  addEventListener<K extends keyof StoreEventMap<T>>(type: K, listener: (event: StoreEventMap<T>[K]) => void, options?: boolean | AddEventListenerOptions): void;
24
- addEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | AddEventListenerOptions): void;
25
12
  removeEventListener<K extends keyof StoreEventMap<T>>(type: K, listener: (event: StoreEventMap<T>[K]) => void, options?: boolean | EventListenerOptions): void;
26
- removeEventListener(type: string, listener: EventListenerOrEventListenerObject, options?: boolean | EventListenerOptions): void;
27
13
  dispatchEvent(event: Event): boolean;
28
14
  }
29
- type Store<T extends UnknownRecordOrArray = UnknownRecord> = {
30
- [K in keyof T]: T[K] extends UnknownRecord ? Store<T[K]> : State<T[K]>;
31
- } & StoreEventTarget<T> & {
32
- [Symbol.toStringTag]: 'Store';
33
- [Symbol.iterator](): IterableIterator<[keyof T, Signal<T[keyof T]>]>;
34
- add<K extends keyof T>(key: K, value: T[K]): void;
15
+ interface BaseStore<T extends UnknownRecord | UnknownArray> extends StoreEventTarget<T> {
16
+ readonly [Symbol.toStringTag]: 'Store';
35
17
  get(): T;
36
- remove<K extends keyof T>(key: K): void;
37
18
  set(value: T): void;
38
- update(updater: (value: T) => T): void;
39
- size: State<number>;
19
+ update(fn: (value: T) => T): void;
20
+ sort<U = T extends UnknownArray ? ArrayItem<T> : T[Extract<keyof T, string>]>(compareFn?: (a: U, b: U) => number): void;
21
+ readonly size: State<number>;
22
+ }
23
+ type RecordStore<T extends UnknownRecord> = BaseStore<T> & {
24
+ [K in keyof T]: T[K] extends readonly unknown[] | Record<string, unknown> ? Store<T[K]> : State<T[K]>;
25
+ } & {
26
+ add<K extends Extract<keyof T, string>>(key: K, value: T[K]): void;
27
+ remove<K extends Extract<keyof T, string>>(key: K): void;
28
+ [Symbol.iterator](): IterableIterator<[
29
+ Extract<keyof T, string>,
30
+ T[Extract<keyof T, string>] extends readonly unknown[] | Record<string, unknown> ? Store<T[Extract<keyof T, string>]> : State<T[Extract<keyof T, string>]>
31
+ ]>;
32
+ };
33
+ type ArrayStore<T extends UnknownArray> = BaseStore<T> & {
34
+ readonly length: number;
35
+ [n: number]: ArrayItem<T> extends readonly unknown[] | Record<string, unknown> ? Store<ArrayItem<T>> : State<ArrayItem<T>>;
36
+ add(value: ArrayItem<T>): void;
37
+ remove(index: number): void;
38
+ [Symbol.iterator](): IterableIterator<ArrayItem<T> extends readonly unknown[] | Record<string, unknown> ? Store<ArrayItem<T>> : State<ArrayItem<T>>>;
39
+ readonly [Symbol.isConcatSpreadable]: boolean;
40
40
  };
41
+ interface StoreAddEvent<T extends UnknownRecord | UnknownArray> extends CustomEvent {
42
+ type: 'store-add';
43
+ detail: Partial<T>;
44
+ }
45
+ interface StoreChangeEvent<T extends UnknownRecord | UnknownArray> extends CustomEvent {
46
+ type: 'store-change';
47
+ detail: Partial<T>;
48
+ }
49
+ interface StoreRemoveEvent<T extends UnknownRecord | UnknownArray> extends CustomEvent {
50
+ type: 'store-remove';
51
+ detail: Partial<T>;
52
+ }
53
+ interface StoreSortEvent extends CustomEvent {
54
+ type: 'store-sort';
55
+ detail: string[];
56
+ }
57
+ type Store<T> = T extends UnknownRecord ? RecordStore<T> : T extends UnknownArray ? ArrayStore<T> : never;
58
+ declare const TYPE_STORE = "Store";
41
59
  /**
42
60
  * Create a new store with deeply nested reactive properties
43
61
  *
@@ -50,7 +68,7 @@ type Store<T extends UnknownRecordOrArray = UnknownRecord> = {
50
68
  * @param {T} initialValue - initial object or array value of the store
51
69
  * @returns {Store<T>} - new store with reactive properties that preserves the original type T
52
70
  */
53
- declare const store: <T extends UnknownRecordOrArray>(initialValue: T) => Store<T>;
71
+ declare const store: <T extends UnknownRecord | UnknownArray>(initialValue: T) => Store<T>;
54
72
  /**
55
73
  * Check if the provided value is a Store instance
56
74
  *
@@ -59,4 +77,4 @@ declare const store: <T extends UnknownRecordOrArray>(initialValue: T) => Store<
59
77
  * @returns {boolean} - true if the value is a Store instance, false otherwise
60
78
  */
61
79
  declare const isStore: <T extends UnknownRecordOrArray>(value: unknown) => value is Store<T>;
62
- export { TYPE_STORE, isStore, store, type Store, type StoreAddEvent, type StoreChangeEvent, type StoreRemoveEvent, type StoreEventMap, };
80
+ export { TYPE_STORE, isStore, store, type Store, type StoreAddEvent, type StoreChangeEvent, type StoreRemoveEvent, type StoreSortEvent, type StoreEventMap, };
@@ -1,14 +1,17 @@
1
+ declare const UNSET: any;
1
2
  declare const isString: (value: unknown) => value is string;
2
3
  declare const isNumber: (value: unknown) => value is number;
4
+ declare const isSymbol: (value: unknown) => value is symbol;
3
5
  declare const isFunction: <T>(fn: unknown) => fn is (...args: unknown[]) => T;
4
6
  declare const isAsyncFunction: <T>(fn: unknown) => fn is (...args: unknown[]) => Promise<T>;
7
+ declare const isDefinedObject: (value: unknown) => value is Record<string, unknown>;
5
8
  declare const isObjectOfType: <T>(value: unknown, type: string) => value is T;
6
9
  declare const isRecord: <T extends Record<string, unknown>>(value: unknown) => value is T;
7
- declare const validArrayIndexes: (keys: Array<PropertyKey>) => number[] | null;
10
+ declare const isRecordOrArray: <T extends Record<string | number, unknown> | ReadonlyArray<unknown>>(value: unknown) => value is T;
8
11
  declare const hasMethod: <T extends object & Record<string, (...args: unknown[]) => unknown>>(obj: T, methodName: string) => obj is T & Record<string, (...args: unknown[]) => unknown>;
9
12
  declare const isAbortError: (error: unknown) => boolean;
10
13
  declare const toError: (reason: unknown) => Error;
11
- declare class CircularDependencyError extends Error {
12
- constructor(where: string);
13
- }
14
- export { isString, isNumber, isFunction, isAsyncFunction, isObjectOfType, isRecord, validArrayIndexes, hasMethod, isAbortError, toError, CircularDependencyError, };
14
+ declare const arrayToRecord: <T>(array: T[]) => Record<string, T>;
15
+ declare const recordToArray: <T>(record: Record<string | number, T>) => Record<string, T> | T[];
16
+ declare const valueString: (value: unknown) => string;
17
+ export { UNSET, isString, isNumber, isSymbol, isFunction, isAsyncFunction, isDefinedObject, isObjectOfType, isRecord, isRecordOrArray, hasMethod, isAbortError, toError, arrayToRecord, recordToArray, valueString, };
package/index.d.ts DELETED
@@ -1,36 +0,0 @@
1
- /**
2
- * @name Cause & Effect
3
- * @version 0.14.2
4
- * @author Esther Brunner
5
- */
6
- export {
7
- type Computed,
8
- type ComputedCallback,
9
- computed,
10
- isComputed,
11
- TYPE_COMPUTED,
12
- } from './src/computed'
13
- export { type EffectMatcher, type MaybeCleanup, effect } from './src/effect'
14
- export {
15
- batch,
16
- type Cleanup,
17
- enqueue,
18
- flush,
19
- notify,
20
- observe,
21
- subscribe,
22
- type Updater,
23
- type Watcher,
24
- watch,
25
- } from './src/scheduler'
26
- export {
27
- isComputedCallback,
28
- isSignal,
29
- type MaybeSignal,
30
- type Signal,
31
- type SignalValues,
32
- toSignal,
33
- UNSET,
34
- } from './src/signal'
35
- export { isState, type State, state, TYPE_STATE } from './src/state'
36
- export { CircularDependencyError, isFunction } from './src/util'
@@ -1 +0,0 @@
1
- export {};