cross-state 0.6.3 → 0.6.4

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.
Files changed (56) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/hash.cjs +364 -282
  3. package/dist/cjs/hash.cjs.map +1 -1
  4. package/dist/cjs/immer.cjs +1 -1
  5. package/dist/cjs/immer.cjs.map +1 -1
  6. package/dist/cjs/index.cjs +175 -172
  7. package/dist/cjs/index.cjs.map +1 -1
  8. package/dist/cjs/react.cjs +44 -8
  9. package/dist/cjs/react.cjs.map +1 -1
  10. package/dist/es/hash.mjs +365 -283
  11. package/dist/es/hash.mjs.map +1 -1
  12. package/dist/es/immer.mjs +1 -1
  13. package/dist/es/immer.mjs.map +1 -1
  14. package/dist/es/index.mjs +178 -175
  15. package/dist/es/index.mjs.map +1 -1
  16. package/dist/es/react.mjs +53 -17
  17. package/dist/es/react.mjs.map +1 -1
  18. package/dist/types/core/cache.d.ts +56 -0
  19. package/dist/types/core/commonTypes.d.ts +5 -5
  20. package/dist/types/core/index.d.ts +5 -8
  21. package/dist/types/core/resourceGroup.d.ts +9 -6
  22. package/dist/types/core/store.d.ts +40 -21
  23. package/dist/types/immer/immerActions.d.ts +1 -1
  24. package/dist/types/index.d.ts +2 -2
  25. package/dist/types/lib/applyPatches.d.ts +2 -0
  26. package/dist/types/lib/cacheState.d.ts +19 -0
  27. package/dist/types/lib/calculationHelper.d.ts +3 -3
  28. package/dist/types/lib/clone.d.ts +1 -0
  29. package/dist/types/lib/debounce.d.ts +6 -0
  30. package/dist/types/lib/diff.d.ts +14 -7
  31. package/dist/types/lib/{cache.d.ts → instanceCache.d.ts} +1 -1
  32. package/dist/types/lib/makeSelector.d.ts +2 -1
  33. package/dist/types/lib/maybeAsync.d.ts +3 -0
  34. package/dist/types/lib/path.d.ts +14 -0
  35. package/dist/types/lib/propAccess.d.ts +5 -12
  36. package/dist/types/lib/queue.d.ts +4 -2
  37. package/dist/types/lib/standardMethods.d.ts +25 -0
  38. package/dist/types/lib/throttle.d.ts +2 -1
  39. package/dist/types/lib/typeHelpers.d.ts +8 -0
  40. package/dist/types/persist/index.d.ts +3 -0
  41. package/dist/types/persist/persist.d.ts +33 -0
  42. package/dist/types/persist/persistPathHelpers.d.ts +6 -0
  43. package/dist/types/persist/persistStorage.d.ts +14 -0
  44. package/dist/types/react/index.d.ts +3 -4
  45. package/dist/types/react/read.d.ts +3 -4
  46. package/dist/types/react/storeScope.d.ts +1 -1
  47. package/dist/types/react/useCache.d.ts +14 -0
  48. package/dist/types/react/useProp.d.ts +3 -3
  49. package/dist/types/react/useStore.d.ts +1 -1
  50. package/package.json +53 -44
  51. package/dist/types/core/derivedStore.d.ts +0 -38
  52. package/dist/types/core/fetchStore.d.ts +0 -76
  53. package/dist/types/core/once.d.ts +0 -13
  54. package/dist/types/lib/storeActions.d.ts +0 -28
  55. package/react.d.ts +0 -1
  56. package/react.js +0 -1
@@ -1,7 +1,14 @@
1
- export interface Patch {
2
- op: 'replace' | 'remove' | 'add';
3
- path: (string | number)[];
4
- value?: any;
5
- prevValue?: any;
6
- }
7
- export declare function diff(a: any, b: any, prefix?: (string | number)[]): Iterable<Patch>;
1
+ import type { KeyType } from './path';
2
+ export type Patch = {
3
+ op: 'add';
4
+ path: KeyType[];
5
+ value: any;
6
+ } | {
7
+ op: 'remove';
8
+ path: KeyType[];
9
+ } | {
10
+ op: 'replace';
11
+ path: KeyType[];
12
+ value: any;
13
+ };
14
+ export declare function diff(a: any, b: any): [patches: Patch[], reversePatches: Patch[]];
@@ -1,4 +1,4 @@
1
- export declare class Cache<Args extends any[], T extends object> {
1
+ export declare class InstanceCache<Args extends any[], T extends object> {
2
2
  private factory;
3
3
  private cacheTime?;
4
4
  private cache;
@@ -1 +1,2 @@
1
- export declare function makeSelector<T, S>(selector?: ((value: T) => S) | string): (value: T) => S;
1
+ import type { Path } from './path';
2
+ export declare function makeSelector<T, S>(selector?: ((value: T) => S) | Path<any>): (value: T) => S;
@@ -0,0 +1,3 @@
1
+ import type { MaybePromise } from './maybePromise';
2
+ export declare function maybeAsync<T, R>(value: MaybePromise<T>, action: (value: T) => MaybePromise<R>): MaybePromise<R>;
3
+ export declare function maybeAsyncArray<T>(values: (() => MaybePromise<T>)[]): MaybePromise<T[]>;
@@ -0,0 +1,14 @@
1
+ import type { ArrayToStringPath, Array_, Object_, OptionalPropertyOf, StringToArrayPath, StringToNumber } from './typeHelpers';
2
+ export type KeyType = string | number;
3
+ export type GetKeys<T extends Object_ | Array_> = T extends Array_ ? T extends readonly [] ? never : '0' extends keyof T ? StringToNumber<keyof T> : number : keyof T;
4
+ export type PathAsArray<T, Optional = false> = 0 extends 1 & T ? KeyType[] : T extends never ? never : T extends Object_ | Array_ ? {
5
+ [K in GetKeys<T>]: (Optional extends true ? (K extends OptionalPropertyOf<T> ? [K] : never) : [K]) | [K, ...PathAsArray<T[K], Optional>];
6
+ }[GetKeys<T>] : T extends Map<infer K extends KeyType, infer V> ? [K] | [K, ...PathAsArray<V, Optional>] : T extends Set<any> ? [number] : never;
7
+ export type PathAsString<T, Optional = false> = ArrayToStringPath<PathAsArray<T, Optional>>;
8
+ export type Path<T, Optional = false> = PathAsString<T, Optional> | PathAsArray<T, Optional>;
9
+ export type Value<T, P> = 0 extends 1 & T ? any : P extends string ? Value<T, StringToArrayPath<P>> : P extends [infer First extends KeyType, ...infer Rest extends KeyType[]] ? T extends Object_ ? Record<any, any> extends T ? Value<T[First], Rest> | undefined : Value<T[First], Rest> : T extends Array_ ? any[] extends T ? Value<T[First & keyof T], Rest> | undefined : Value<T[First & keyof T], Rest> : T extends Map<any, infer V> | Set<infer V> ? Value<V, Rest> | undefined : never : T;
10
+ export type WildcardPathAsArray<T> = [] | (0 extends 1 & T ? KeyType[] : T extends never ? never : T extends Object_ | Array_ ? {
11
+ [K in GetKeys<T>]: ['*'] | [K] | [K, ...WildcardPathAsArray<T[K]>];
12
+ }[GetKeys<T>] : T extends Map<infer K extends KeyType, infer V> ? ['*'] | [K] | [K, ...WildcardPathAsArray<V>] : T extends Set<any> ? ['*'] | [number] : never);
13
+ export type WildcardPathAsString<T> = ArrayToStringPath<WildcardPathAsArray<T>>;
14
+ export type WildcardPath<T> = WildcardPathAsString<T> | WildcardPathAsArray<T>;
@@ -1,13 +1,6 @@
1
1
  import type { Update } from '../core/commonTypes';
2
- type FilterKey<T> = T extends string | number ? T : never;
3
- type FilterString<T> = T extends string ? T : never;
4
- export type Obj = Record<string | number, unknown>;
5
- export type Arr = readonly unknown[];
6
- type GetKeys<T> = T extends Arr ? T extends readonly [] ? never : '0' extends keyof T ? keyof T & `${number}` : number : keyof T;
7
- export type Path<T> = 0 extends 1 & T ? string : T extends never ? never : T extends Obj | Arr ? FilterString<keyof {
8
- [K in FilterKey<GetKeys<T>> as `${K}` | (T[K] extends Obj | Arr | undefined | null ? `${K}.${Path<NonNullable<T[K]>>}` : never)]: 0;
9
- }> : never;
10
- export type Value<T, P extends string> = P extends `${infer K}.${infer Rest}` ? T[K & keyof T] extends Obj | Arr ? Value<T[K & keyof T], Rest> : T[K & keyof T] extends Obj | Arr | undefined | null ? Value<NonNullable<T[K & keyof T]>, Rest> | undefined : never : T[P & keyof T];
11
- export declare function get<T, P extends Path<T>>(obj: T, path: P): Value<T, P>;
12
- export declare function set<T, P extends Path<T>>(obj: T, path: P, value: Update<Value<T, P>>, rootPath?: P): T;
13
- export {};
2
+ import type { Path, Value } from './path';
3
+ export declare function castArrayPath(path: string | KeyType[]): KeyType[];
4
+ export declare function get<T, P extends Path<T>>(object: T, path: P): Value<T, P>;
5
+ export declare function set<T, P extends Path<T>>(object: T, path: P, value: Update<Value<T, P>>, rootPath?: P): T;
6
+ export declare function remove<T, P extends Path<T, true>>(object: T, path: P): T;
@@ -1,9 +1,11 @@
1
1
  import type { MaybePromise } from './maybePromise';
2
2
  type Action<T> = () => MaybePromise<T>;
3
3
  export interface Queue {
4
- <T>(action: Action<T>): Promise<T>;
4
+ <T>(action: Action<T>, ref?: any): Promise<T>;
5
5
  clear: () => void;
6
- whenDone: Promise<void>;
6
+ whenDone: () => Promise<void>;
7
+ size: number;
8
+ getRefs: () => any[];
7
9
  }
8
10
  export declare function queue(): Queue;
9
11
  export {};
@@ -0,0 +1,25 @@
1
+ import type { Store } from '../core/store';
2
+ type Function_ = (...args: any) => any;
3
+ export declare const arrayMethods: {
4
+ splice: <T extends any[]>(this: Store<T>, ...args: T["splice"] extends Function_ ? Parameters<T["splice"]> : never) => T["splice"] extends Function_ ? ReturnType<T["splice"]> : never;
5
+ push: <T_1 extends any[]>(this: Store<T_1>, ...args: T_1["push"] extends Function_ ? Parameters<T_1["push"]> : never) => T_1["push"] extends Function_ ? ReturnType<T_1["push"]> : never;
6
+ pop: <T_2 extends any[]>(this: Store<T_2>, ...args: T_2["pop"] extends Function_ ? Parameters<T_2["pop"]> : never) => T_2["pop"] extends Function_ ? ReturnType<T_2["pop"]> : never;
7
+ shift: <T_3 extends any[]>(this: Store<T_3>, ...args: T_3["shift"] extends Function_ ? Parameters<T_3["shift"]> : never) => T_3["shift"] extends Function_ ? ReturnType<T_3["shift"]> : never;
8
+ unshift: <T_4 extends any[]>(this: Store<T_4>, ...args: T_4["unshift"] extends Function_ ? Parameters<T_4["unshift"]> : never) => T_4["unshift"] extends Function_ ? ReturnType<T_4["unshift"]> : never;
9
+ reverse: <T_5 extends any[]>(this: Store<T_5>, ...args: T_5["reverse"] extends Function_ ? Parameters<T_5["reverse"]> : never) => T_5["reverse"] extends Function_ ? ReturnType<T_5["reverse"]> : never;
10
+ sort: <T_6 extends any[]>(this: Store<T_6>, ...args: T_6["sort"] extends Function_ ? Parameters<T_6["sort"]> : never) => T_6["sort"] extends Function_ ? ReturnType<T_6["sort"]> : never;
11
+ };
12
+ export declare const recordMethods: {
13
+ delete<T extends Record<any, any>, K_1 extends Exclude<{ [K in keyof T]: T extends Record<K, T[K]> ? never : K; }[keyof T], undefined>>(this: Store<T>, key: K_1): void;
14
+ clear<T_1 extends Record<any, any>>(this: Store<Partial<T_1>>): void;
15
+ };
16
+ export declare const mapMethods: {
17
+ delete<K, V>(this: Store<Map<K, V>>, key: K): boolean;
18
+ clear<K_1, V_1>(this: Store<Map<K_1, V_1>>): void;
19
+ };
20
+ export declare const setMethods: {
21
+ add<T>(this: Store<Set<T>>, value: T): void;
22
+ delete<T_1>(this: Store<Set<T_1>>, value: T_1): void;
23
+ clear<T_2>(this: Store<Set<T_2>>): void;
24
+ };
25
+ export {};
@@ -1 +1,2 @@
1
- export declare function throttle<Args extends any[]>(fn: (...args: Args) => void, ms: number): (...args: Args) => void;
1
+ import type { Duration } from '../core';
2
+ export declare function throttle<Args extends any[]>(action: (...args: Args) => void, duration: Duration): (...args: Args) => void;
@@ -0,0 +1,8 @@
1
+ export type Object_ = Record<string | number, unknown>;
2
+ export type Array_ = readonly unknown[];
3
+ export type StringToNumber<T> = T extends `${infer K extends number}` ? K : never;
4
+ export type ArrayToStringPath<T> = T extends [] ? '' : T extends [infer First extends string, ...infer Rest] ? First extends `${string}.${string}` ? never : Rest['length'] extends 0 ? First : `${First}.${ArrayToStringPath<Rest>}` : never;
5
+ export type StringToArrayPath<T> = T extends '' ? [] : T extends `${infer First}.${infer Rest}` ? [First, ...StringToArrayPath<Rest>] : [T];
6
+ export type OptionalPropertyOf<T> = Exclude<{
7
+ [K in keyof T]: T extends Record<K, T[K]> ? never : K;
8
+ }[keyof T], undefined>;
@@ -0,0 +1,3 @@
1
+ export { persist } from './persist';
2
+ export type { Persist, PersistOptions } from './persist';
3
+ export type { PersistStorage, PersistStorageBase, PersistStorageWithKeys, PersistStorageWithLength, } from './persistStorage';
@@ -0,0 +1,33 @@
1
+ import { type PersistStorage, type PersistStorageWithKeys } from './persistStorage';
2
+ import { type Cancel, type Store } from '../core';
3
+ import type { KeyType, WildcardPath } from '../lib/path';
4
+ export interface PersistOptions<T> {
5
+ id: string;
6
+ storage: PersistStorage;
7
+ paths?: WildcardPath<T>[] | {
8
+ path: WildcardPath<T>;
9
+ throttleMs?: number;
10
+ }[];
11
+ throttleMs?: number;
12
+ }
13
+ export declare class Persist<T> {
14
+ readonly store: Store<T>;
15
+ readonly options: PersistOptions<T>;
16
+ storage: PersistStorageWithKeys;
17
+ paths: {
18
+ path: KeyType[];
19
+ throttleMs?: number;
20
+ }[];
21
+ channel: BroadcastChannel;
22
+ queue: import("../lib/queue").Queue;
23
+ handles: Set<Cancel>;
24
+ stopped: boolean;
25
+ updateInProgress?: [any, any];
26
+ constructor(store: Store<T>, options: PersistOptions<T>);
27
+ watchStore(): void;
28
+ watchStorage(): Promise<void>;
29
+ load(path: KeyType[]): import("../lib/maybePromise").MaybePromise<void>;
30
+ save(path: KeyType[]): import("../lib/maybePromise").MaybePromise<unknown[]>;
31
+ stop(): Promise<void>;
32
+ }
33
+ export declare function persist<T>(store: Store<T>, options: PersistOptions<T>): Persist<T>;
@@ -0,0 +1,6 @@
1
+ import type { KeyType } from '../lib/path';
2
+ export declare const isAncestor: (ancestor: KeyType[], path: KeyType[]) => boolean;
3
+ export declare const split: (value: any, path: KeyType[]) => [value: unknown, subValues: {
4
+ path: KeyType[];
5
+ value: unknown;
6
+ }[]];
@@ -0,0 +1,14 @@
1
+ export interface PersistStorageBase {
2
+ getItem: (key: string) => string | null | Promise<string | null>;
3
+ setItem: (key: string, value: string) => unknown | Promise<unknown>;
4
+ removeItem: (key: string) => unknown | Promise<unknown>;
5
+ }
6
+ export interface PersistStorageWithKeys extends PersistStorageBase {
7
+ keys: () => string[] | Promise<string[]>;
8
+ }
9
+ export interface PersistStorageWithLength extends PersistStorageBase {
10
+ length: number | (() => number | Promise<number>);
11
+ key: (keyIndex: number) => string | null | Promise<string | null>;
12
+ }
13
+ export type PersistStorage = PersistStorageBase & (PersistStorageWithKeys | PersistStorageWithLength);
14
+ export declare function normalizeStorage(storage: PersistStorage): PersistStorageWithKeys;
@@ -1,6 +1,5 @@
1
1
  export { read } from './read';
2
- export { StoreScopeProvider, useStoreScope } from './storeScope';
3
- export type { StoreScopeProps } from './storeScope';
2
+ export { type StoreScopeProps, StoreScopeProvider, useStoreScope } from './storeScope';
3
+ export { useCache, type UseCacheArray, type UseCacheValue } from './useCache';
4
4
  export { useProp } from './useProp';
5
- export { useStore } from './useStore';
6
- export type { UseStoreOptions } from './useStore';
5
+ export { useStore, type UseStoreOptions } from './useStore';
@@ -1,4 +1,3 @@
1
- import type { FetchStore } from '../core/fetchStore';
2
- import type { SubscribeOptions } from '../core/commonTypes';
3
- export type UseStoreOptions = Omit<SubscribeOptions, 'runNow'>;
4
- export declare function read<T>(store: FetchStore<T>, options?: UseStoreOptions): T;
1
+ import type { UseStoreOptions } from './useStore';
2
+ import type { Cache } from '../core';
3
+ export declare function read<T>(cache: Cache<T>, options?: UseStoreOptions): T;
@@ -1,6 +1,6 @@
1
+ import type { Context, ReactNode } from '../react';
1
2
  import type { Store } from '../core/store';
2
3
  import type { StoreScope } from '../core/storeScope';
3
- import type { Context, ReactNode } from '../react';
4
4
  export type StoreScopeProps<T> = {
5
5
  scope: StoreScope<T>;
6
6
  store?: Store<T>;
@@ -0,0 +1,14 @@
1
+ import type { UseStoreOptions } from './useStore';
2
+ import type { CacheState } from '../lib/cacheState';
3
+ import type { Cache } from '../core';
4
+ export type UseCacheArray<T> = [
5
+ value: T | undefined,
6
+ error: unknown | undefined,
7
+ isUpdating: boolean,
8
+ isStale: boolean
9
+ ];
10
+ export type UseCacheValue<T> = UseCacheArray<T> & CacheState<T>;
11
+ export interface UseCacheOptions extends UseStoreOptions {
12
+ passive?: boolean;
13
+ }
14
+ export declare function useCache<T>(cache: Cache<T>, { passive, ...options }?: UseCacheOptions): UseCacheValue<T>;
@@ -1,4 +1,4 @@
1
- import type { Store } from '../core/store';
2
- import type { UpdateFn } from '../core/commonTypes';
3
1
  import type { UseStoreOptions } from './useStore';
4
- export declare function useProp<T>(store: Store<T>, options?: UseStoreOptions): [value: T, setValue: UpdateFn<T>];
2
+ import type { Store } from '../core/store';
3
+ import type { UpdateFunction } from '../core/commonTypes';
4
+ export declare function useProp<T>(store: Store<T>, options?: UseStoreOptions): [value: T, setValue: UpdateFunction<T>];
@@ -1,4 +1,4 @@
1
1
  import type { SubscribeOptions } from '../core/commonTypes';
2
2
  import type { Store } from '../core/store';
3
- export type UseStoreOptions = Omit<SubscribeOptions, 'runNow'>;
3
+ export type UseStoreOptions = Omit<SubscribeOptions, 'runNow' | 'passive'>;
4
4
  export declare function useStore<T>(store: Store<T>, options?: UseStoreOptions): T;
package/package.json CHANGED
@@ -1,12 +1,23 @@
1
1
  {
2
2
  "name": "cross-state",
3
- "type": "module",
4
- "repository": "schummar/schummar-state",
5
- "version": "0.6.3",
3
+ "version": "0.6.4",
6
4
  "description": "(React) state library",
5
+ "license": "ISC",
6
+ "repository": "schummar/schummar-state",
7
+ "author": {
8
+ "name": "Marco Schumacher",
9
+ "email": "marco@schumacher.dev"
10
+ },
11
+ "type": "module",
7
12
  "sideEffects": false,
13
+ "files": [
14
+ "dist",
15
+ "react.js",
16
+ "react.d.ts"
17
+ ],
8
18
  "main": "dist/cjs/index.cjs",
9
19
  "module": "dist/es/index.mjs",
20
+ "types": "dist/types/index.d.ts",
10
21
  "exports": {
11
22
  ".": {
12
23
  "import": "./dist/es/index.mjs",
@@ -24,7 +35,6 @@
24
35
  "default": "./dist/es/immer.mjs"
25
36
  }
26
37
  },
27
- "types": "dist/types/index.d.ts",
28
38
  "typesVersions": {
29
39
  "*": {
30
40
  "*": [
@@ -38,11 +48,6 @@
38
48
  ]
39
49
  }
40
50
  },
41
- "author": {
42
- "name": "Marco Schumacher",
43
- "email": "marco@schumacher.dev"
44
- },
45
- "license": "ISC",
46
51
  "scripts": {
47
52
  "start": "tsc --watch",
48
53
  "build": "runp -k build:clean :p build:compile:*",
@@ -50,7 +55,7 @@
50
55
  "build:compile:js": "vite build",
51
56
  "build:compile:types": "tsc && tsc-alias",
52
57
  "lint": "runp lint:*",
53
- "lint:eslint": "eslint src",
58
+ "lint:eslint": "lint",
54
59
  "lint:tsc": "tsc --noEmit --emitDeclarationOnly false",
55
60
  "lint:tsc:tests": "tsc --noEmit --emitDeclarationOnly false -p test/tsconfig.json",
56
61
  "prepublishOnly": "runp lint test build",
@@ -58,33 +63,6 @@
58
63
  "test:watch": "node --expose-gc node_modules/vitest/vitest.mjs",
59
64
  "test:export": "pnpm test:watch run --coverage --reporter=verbose --reporter=junit --outputFile=test/testResults.xml"
60
65
  },
61
- "devDependencies": {
62
- "@schummar/runp": "1.8.2",
63
- "@testing-library/react": "13.4.0",
64
- "@types/react": "18.0.26",
65
- "@types/react-dom": "18.0.10",
66
- "@types/use-sync-external-store": "0.0.3",
67
- "@typescript-eslint/eslint-plugin": "5.48.1",
68
- "@typescript-eslint/parser": "5.48.1",
69
- "@vitejs/plugin-react": "3.0.1",
70
- "@vitest/coverage-c8": "0.27.1",
71
- "eslint": "8.32.0",
72
- "eslint-plugin-import": "2.27.4",
73
- "fast-equals": "4.0.3",
74
- "happy-dom": "8.1.4",
75
- "immer": "9.0.18",
76
- "prettier": "2.8.3",
77
- "react": "18.2.0",
78
- "react-dom": "18.2.0",
79
- "rimraf": "4.0.7",
80
- "semantic-release": "20.0.2",
81
- "tsc-alias": "^1.8.2",
82
- "typescript": "4.9.4",
83
- "use-sync-external-store": "1.2.0",
84
- "vite": "4.0.4",
85
- "vite-tsconfig-paths": "4.0.3",
86
- "vitest": "0.27.1"
87
- },
88
66
  "peerDependencies": {
89
67
  "@types/react": ">=16.8.0",
90
68
  "immer": ">=9.0.0",
@@ -101,12 +79,43 @@
101
79
  "optional": true
102
80
  }
103
81
  },
104
- "files": [
105
- "dist",
106
- "react.js",
107
- "react.d.ts"
108
- ],
82
+ "devDependencies": {
83
+ "@schummar/eslint-config": "github:schummar/eslint-config",
84
+ "@schummar/prettier-config": "github:schummar/prettier-config",
85
+ "@schummar/runp": "1.9.3",
86
+ "@testing-library/react": "14.0.0",
87
+ "@types/react": "18.0.28",
88
+ "@types/react-dom": "18.0.11",
89
+ "@types/seedrandom": "3.0.5",
90
+ "@types/use-sync-external-store": "0.0.3",
91
+ "@vitejs/plugin-react": "3.1.0",
92
+ "@vitest/coverage-c8": "0.29.2",
93
+ "eslint": "8.35.0",
94
+ "fast-equals": "4.0.3",
95
+ "happy-dom": "8.9.0",
96
+ "immer": "9.0.19",
97
+ "jsdom": "21.1.0",
98
+ "prettier": "2.8.4",
99
+ "react": "18.2.0",
100
+ "react-dom": "18.2.0",
101
+ "rimraf": "4.1.2",
102
+ "seedrandom": "3.0.5",
103
+ "semantic-release": "20.1.1",
104
+ "tsc-alias": "1.8.2",
105
+ "typescript": "4.9.5",
106
+ "use-sync-external-store": "1.2.0",
107
+ "vite": "4.1.4",
108
+ "vite-tsconfig-paths": "4.0.5",
109
+ "vitest": "0.29.2"
110
+ },
109
111
  "volta": {
110
- "node": "18.9.0"
111
- }
112
+ "node": "18.13.0",
113
+ "pnpm": "7.28.0"
114
+ },
115
+ "eslintConfig": {
116
+ "extends": [
117
+ "@schummar/eslint-config"
118
+ ]
119
+ },
120
+ "prettier": "@schummar/prettier-config"
112
121
  }
@@ -1,38 +0,0 @@
1
- import { CalculationHelper } from '../lib/calculationHelper';
2
- import type { Cancel, Selector, Update, Use } from './commonTypes';
3
- import type { StoreOptions } from './store';
4
- import { Store } from './store';
5
- export declare class DerivedStore<T> extends Store<T> {
6
- protected calculate: (this: {
7
- use: Use;
8
- }, fns: {
9
- use: Use;
10
- }) => T;
11
- protected readonly options: StoreOptions;
12
- protected derivedFrom?: {
13
- store: Store<any>;
14
- selectors: (Selector<any, any> | string)[];
15
- } | undefined;
16
- calculationHelper: CalculationHelper<T>;
17
- protected valid: boolean;
18
- protected check?: () => void;
19
- protected cancel?: Cancel;
20
- constructor(calculate: (this: {
21
- use: Use;
22
- }, fns: {
23
- use: Use;
24
- }) => T, options?: StoreOptions, derivedFrom?: {
25
- store: Store<any>;
26
- selectors: (Selector<any, any> | string)[];
27
- } | undefined);
28
- get(): T;
29
- update(update: Update<T>): void;
30
- protected invalidate(): void;
31
- }
32
- declare function _derivedStore<T>(calculate: (this: {
33
- use: Use;
34
- }, fns: {
35
- use: Use;
36
- }) => T, options?: StoreOptions): DerivedStore<T>;
37
- export declare const derivedStore: typeof _derivedStore;
38
- export {};
@@ -1,76 +0,0 @@
1
- import { CalculationHelper } from '../lib/calculationHelper';
2
- import type { Path, Value } from '../lib/propAccess';
3
- import type { Cancel, Duration, Listener, Selector, SubscribeOptions, Update, Use, UseFetch } from './commonTypes';
4
- import type { ResourceGroup } from './resourceGroup';
5
- import { Store } from './store';
6
- type Common<T> = {
7
- isUpdating: false;
8
- update?: undefined;
9
- ref: unknown;
10
- } | {
11
- isUpdating: true;
12
- update: Promise<T>;
13
- ref: unknown;
14
- };
15
- type WithValue<T> = {
16
- status: 'value';
17
- value: T;
18
- error?: undefined;
19
- isStale: boolean;
20
- } & Common<T>;
21
- type WithError<T> = {
22
- status: 'error';
23
- value?: undefined;
24
- error: unknown;
25
- isStale: boolean;
26
- } & Common<T>;
27
- type Pending<T> = {
28
- status: 'pending';
29
- value?: undefined;
30
- error?: undefined;
31
- isStale: true;
32
- } & Common<T>;
33
- export type FetchStoreState<T> = WithValue<T> | WithError<T> | Pending<T>;
34
- export interface FetchOptions {
35
- cache?: 'updateWhenStale' | 'backgroundUpdate' | 'forceUpdate';
36
- }
37
- export interface FetchFn<T, Args extends any[] = []> {
38
- (this: {
39
- use: Use;
40
- useFetch: UseFetch;
41
- }, ...args: Args): Promise<T>;
42
- }
43
- export interface FetchStoreOptions<T> {
44
- invalidateAfter?: Duration | ((state: FetchStoreState<T>) => Duration);
45
- clearAfter?: Duration | ((state: FetchStoreState<T>) => Duration);
46
- resourceGroup?: ResourceGroup | ResourceGroup[];
47
- retain?: number;
48
- clearUnusedAfter?: Duration;
49
- }
50
- export declare class FetchStore<T> extends Store<FetchStoreState<T>> {
51
- protected fetchFn: FetchFn<T>;
52
- protected options: FetchStoreOptions<T>;
53
- calculationHelper: CalculationHelper<T>;
54
- constructor(fetchFn: FetchFn<T>, options?: FetchStoreOptions<T>);
55
- update(value: Update<FetchStoreState<T>>): void;
56
- fetch(options?: FetchOptions): Promise<T>;
57
- setValue(value: T | Promise<T>): void;
58
- protected setPromise(promise: Promise<T>): void;
59
- setError(error: unknown): void;
60
- invalidate(): void;
61
- clear(): void;
62
- sub(listener: Listener<FetchStoreState<T>>, options?: SubscribeOptions): Cancel;
63
- mapValue<S>(selector: Selector<T, S>): FetchStore<S>;
64
- mapValue<P extends Path<T>>(selector: P): FetchStore<Value<T, P>>;
65
- }
66
- declare function create<T>(fetch: FetchFn<T>, options?: FetchStoreOptions<T>): FetchStore<T>;
67
- declare function withArgs<T, Args extends any[]>(fetch: FetchFn<T, Args>, options?: FetchStoreOptions<T>): {
68
- (...args: Args): FetchStore<T>;
69
- invalidate: () => void;
70
- clear: () => void;
71
- };
72
- export declare const fetchStore: typeof create & {
73
- withArgs: typeof withArgs;
74
- defaultOptions: FetchStoreOptions<unknown>;
75
- };
76
- export {};
@@ -1,13 +0,0 @@
1
- import type { Cancel, Listener } from './commonTypes';
2
- interface Subscribe<T> {
3
- (listener: Listener<T>, options?: {
4
- runNow?: boolean;
5
- }): Cancel;
6
- }
7
- export declare function once<T, S extends T>(subscribe: Subscribe<T>, condition: (value: T) => value is S): Promise<S>;
8
- export declare function once<T>(subscribe: Subscribe<T>, condition?: (value: T) => boolean): Promise<T>;
9
- export declare function onceValue<T>(subscribe: Subscribe<{
10
- value?: T;
11
- error?: unknown;
12
- }>): Promise<T>;
13
- export {};
@@ -1,28 +0,0 @@
1
- import type { Update, UpdateFrom } from '../core/commonTypes';
2
- import type { Store } from '../core/store';
3
- type Fn = (...args: any) => any;
4
- export declare const arrayActions: {
5
- splice: <T extends any[]>(this: Store<T>, ...args: T["splice"] extends Fn ? Parameters<T["splice"]> : never) => T["splice"] extends Fn ? ReturnType<T["splice"]> : never;
6
- push: <T_1 extends any[]>(this: Store<T_1>, ...args: T_1["push"] extends Fn ? Parameters<T_1["push"]> : never) => T_1["push"] extends Fn ? ReturnType<T_1["push"]> : never;
7
- pop: <T_2 extends any[]>(this: Store<T_2>, ...args: T_2["pop"] extends Fn ? Parameters<T_2["pop"]> : never) => T_2["pop"] extends Fn ? ReturnType<T_2["pop"]> : never;
8
- shift: <T_3 extends any[]>(this: Store<T_3>, ...args: T_3["shift"] extends Fn ? Parameters<T_3["shift"]> : never) => T_3["shift"] extends Fn ? ReturnType<T_3["shift"]> : never;
9
- unshift: <T_4 extends any[]>(this: Store<T_4>, ...args: T_4["unshift"] extends Fn ? Parameters<T_4["unshift"]> : never) => T_4["unshift"] extends Fn ? ReturnType<T_4["unshift"]> : never;
10
- reverse: <T_5 extends any[]>(this: Store<T_5>, ...args: T_5["reverse"] extends Fn ? Parameters<T_5["reverse"]> : never) => T_5["reverse"] extends Fn ? ReturnType<T_5["reverse"]> : never;
11
- sort: <T_6 extends any[]>(this: Store<T_6>, ...args: T_6["sort"] extends Fn ? Parameters<T_6["sort"]> : never) => T_6["sort"] extends Fn ? ReturnType<T_6["sort"]> : never;
12
- };
13
- export declare const recordActions: {
14
- set<T extends Record<any, any>, K extends keyof T>(this: Store<T>, key: K, value: Update<T[K]>): Store<T>;
15
- delete<T_1 extends Record<any, any>, K_2 extends Exclude<{ [K_1 in keyof T_1]: T_1 extends Record<K_1, T_1[K_1]> ? never : K_1; }[keyof T_1], undefined>>(this: Store<T_1>, key: K_2): void;
16
- clear<T_2 extends Record<any, any>>(this: Store<Partial<T_2>>): void;
17
- };
18
- export declare const mapActions: {
19
- set<K, V>(this: Store<Map<K, V>>, key: K, value: UpdateFrom<V, [V | undefined]>): Store<Map<K, V>>;
20
- delete<K_1, V_1>(this: Store<Map<K_1, V_1>>, key: K_1): boolean;
21
- clear<K_2, V_2>(this: Store<Map<K_2, V_2>>): void;
22
- };
23
- export declare const setActions: {
24
- add<T>(this: Store<Set<T>>, value: T): void;
25
- delete<T_1>(this: Store<Set<T_1>>, value: T_1): void;
26
- clear<T_2>(this: Store<Set<T_2>>): void;
27
- };
28
- export {};
package/react.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './dist/types/react';
package/react.js DELETED
@@ -1 +0,0 @@
1
- module.exports = require('./dist/cjs/react.cjs');