@kontsedal/olas-core 0.0.1 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +72 -10
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +72 -12
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +72 -12
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +71 -11
- package/dist/index.mjs.map +1 -1
- package/dist/{root-BCZDC5Fv.mjs → root-Cnkb3I--.mjs} +556 -28
- package/dist/root-Cnkb3I--.mjs.map +1 -0
- package/dist/{root-DXV1gVbQ.cjs → root-D_xAdcom.cjs} +556 -28
- package/dist/root-D_xAdcom.cjs.map +1 -0
- package/dist/testing.cjs +2 -1
- package/dist/testing.cjs.map +1 -1
- package/dist/testing.d.cts +2 -1
- package/dist/testing.d.cts.map +1 -1
- package/dist/testing.d.mts +2 -1
- package/dist/testing.d.mts.map +1 -1
- package/dist/testing.mjs +2 -1
- package/dist/testing.mjs.map +1 -1
- package/dist/{types-CffZ1QXt.d.cts → types-CRn4UoLn.d.mts} +196 -8
- package/dist/types-CRn4UoLn.d.mts.map +1 -0
- package/dist/{types-DSlDowpE.d.mts → types-r_TVaRkD.d.cts} +196 -8
- package/dist/types-r_TVaRkD.d.cts.map +1 -0
- package/package.json +1 -1
- package/src/controller/index.ts +6 -0
- package/src/controller/instance.ts +317 -3
- package/src/controller/types.ts +151 -0
- package/src/emitter.ts +34 -3
- package/src/forms/field.ts +42 -9
- package/src/forms/form-types.ts +37 -0
- package/src/forms/form.ts +165 -5
- package/src/forms/index.ts +12 -1
- package/src/forms/standard-schema.ts +37 -0
- package/src/forms/validators.ts +31 -0
- package/src/index.ts +20 -4
- package/src/query/entry.ts +10 -3
- package/src/query/infinite.ts +8 -1
- package/src/query/structural-share.ts +114 -0
- package/src/query/types.ts +15 -2
- package/src/query/use.ts +47 -13
- package/src/signals/readonly.ts +3 -3
- package/src/testing.ts +2 -0
- package/src/timing/debounced.ts +24 -4
- package/src/timing/throttled.ts +22 -3
- package/src/utils.ts +8 -4
- package/dist/root-BCZDC5Fv.mjs.map +0 -1
- package/dist/root-DXV1gVbQ.cjs.map +0 -1
- package/dist/types-CffZ1QXt.d.cts.map +0 -1
- package/dist/types-DSlDowpE.d.mts.map +0 -1
package/dist/testing.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_root = require("./root-
|
|
2
|
+
const require_root = require("./root-D_xAdcom.cjs");
|
|
3
3
|
//#region src/testing.ts
|
|
4
4
|
/**
|
|
5
5
|
* Construct an isolated root wrapping a single controller. The returned object
|
|
@@ -48,6 +48,7 @@ function fakeField(initial, overrides) {
|
|
|
48
48
|
reset: overrides?.reset ?? (() => value$.set(currentInitial)),
|
|
49
49
|
markTouched: overrides?.markTouched ?? (() => touched$.set(true)),
|
|
50
50
|
revalidate: overrides?.revalidate ?? (async () => errors$.peek().length === 0),
|
|
51
|
+
setErrors: overrides?.setErrors ?? ((errs) => errors$.set([...errs])),
|
|
51
52
|
dispose: overrides?.dispose ?? (() => {})
|
|
52
53
|
};
|
|
53
54
|
}
|
package/dist/testing.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.cjs","names":["createRootWithProps","signal","computed"],"sources":["../src/testing.ts"],"sourcesContent":["import { createRootWithProps } from './controller/root'\nimport type { ControllerDef, Field, Root, RootOptions } from './controller/types'\nimport type { AsyncState, AsyncStatus } from './query/types'\nimport { computed, type ReadSignal, type Signal, signal } from './signals'\n\n/**\n * Construct an isolated root wrapping a single controller. The returned object\n * is the controller's api plus the standard Root lifecycle controls\n * (`dispose`, `suspend`, `resume`, `__debug`).\n *\n * Equivalent to defining a tiny root wrapper, but ergonomic in tests.\n */\nexport function createTestController<\n Props,\n Api,\n TDeps extends Record<string, unknown> = Record<string, unknown>,\n>(\n def: ControllerDef<Props, Api>,\n options: {\n deps: TDeps\n props: Props\n onError?: RootOptions<TDeps>['onError']\n },\n): Root<Api> {\n return createRootWithProps<Props, Api, TDeps>(def, options.props, {\n deps: options.deps,\n onError: options.onError,\n })\n}\n\n/**\n * Shape-correct fake `Field<T>` for UI tests. Pass an initial value plus any\n * overrides for the read-only signals. The returned object satisfies `Field<T>`\n * so it can be passed straight into `useField(...)` or any component that\n * accepts a real field. See spec §20.10.\n */\nexport function fakeField<T>(\n initial: T,\n overrides?: Partial<{\n errors: string[]\n isValid: boolean\n isDirty: boolean\n touched: boolean\n isValidating: boolean\n set: (value: T) => void\n setAsInitial: (value: T) => void\n reset: () => void\n markTouched: () => void\n revalidate: () => Promise<boolean>\n dispose: () => void\n }>,\n): Field<T> {\n const value$: Signal<T> = signal(initial)\n const errors$: Signal<string[]> = signal(overrides?.errors ?? [])\n const touched$: Signal<boolean> = signal(overrides?.touched ?? false)\n const dirty$: Signal<boolean> = signal(overrides?.isDirty ?? false)\n const validating$: Signal<boolean> = signal(overrides?.isValidating ?? false)\n const isValid$: ReadSignal<boolean> =\n overrides?.isValid !== undefined\n ? signal(overrides.isValid)\n : computed(() => errors$.value.length === 0 && !validating$.value)\n\n let currentInitial = initial\n const set = overrides?.set ?? ((next: T) => value$.set(next))\n const setAsInitial =\n overrides?.setAsInitial ??\n ((next: T) => {\n currentInitial = next\n value$.set(next)\n dirty$.set(false)\n })\n const fake: Field<T> = {\n get value() {\n return value$.value\n },\n peek: () => value$.peek(),\n subscribe: (handler) => value$.subscribe(handler),\n errors: errors$,\n isValid: isValid$,\n isDirty: dirty$,\n touched: touched$,\n isValidating: validating$,\n set,\n setAsInitial,\n reset: overrides?.reset ?? (() => value$.set(currentInitial)),\n markTouched: overrides?.markTouched ?? (() => touched$.set(true)),\n revalidate: overrides?.revalidate ?? (async () => errors$.peek().length === 0),\n dispose: overrides?.dispose ?? (() => {}),\n }\n return fake\n}\n\n/**\n * Shape-correct fake `AsyncState<T>` for UI tests. Pass overrides for any of\n * the signal-backed properties; everything else falls back to inert defaults.\n * The returned object satisfies `AsyncState<T>` so it can stand in for a real\n * query subscription in component tests. See spec §20.10.\n */\nexport function fakeAsyncState<T>(\n overrides?: Partial<{\n data: T | undefined\n error: unknown | undefined\n status: AsyncStatus\n isLoading: boolean\n isFetching: boolean\n isStale: boolean\n lastUpdatedAt: number | undefined\n hasPendingMutations: boolean\n refetch: () => Promise<T>\n reset: () => void\n firstValue: () => Promise<T>\n }>,\n): AsyncState<T> {\n const data$: ReadSignal<T | undefined> = signal(overrides?.data)\n const error$: ReadSignal<unknown | undefined> = signal(overrides?.error)\n const status$: ReadSignal<AsyncStatus> = signal(\n overrides?.status ?? (overrides?.data !== undefined ? 'success' : 'idle'),\n )\n const isLoading$: ReadSignal<boolean> = signal(overrides?.isLoading ?? false)\n const isFetching$: ReadSignal<boolean> = signal(overrides?.isFetching ?? false)\n const isStale$: ReadSignal<boolean> = signal(overrides?.isStale ?? false)\n const lastUpdatedAt$: ReadSignal<number | undefined> = signal(overrides?.lastUpdatedAt)\n const hasPendingMutations$: ReadSignal<boolean> = signal(overrides?.hasPendingMutations ?? false)\n\n const refetch = overrides?.refetch ?? (async () => data$.peek() as T)\n const reset = overrides?.reset ?? (() => {})\n const firstValue = overrides?.firstValue ?? (async () => data$.peek() as T)\n\n return {\n data: data$,\n error: error$,\n status: status$,\n isLoading: isLoading$,\n isFetching: isFetching$,\n isStale: isStale$,\n lastUpdatedAt: lastUpdatedAt$,\n hasPendingMutations: hasPendingMutations$,\n refetch,\n reset,\n firstValue,\n }\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,qBAKd,KACA,SAKW;CACX,OAAOA,aAAAA,oBAAuC,KAAK,QAAQ,OAAO;EAChE,MAAM,QAAQ;EACd,SAAS,QAAQ;CACnB,CAAC;AACH;;;;;;;AAQA,SAAgB,UACd,SACA,
|
|
1
|
+
{"version":3,"file":"testing.cjs","names":["createRootWithProps","signal","computed"],"sources":["../src/testing.ts"],"sourcesContent":["import { createRootWithProps } from './controller/root'\nimport type { ControllerDef, Field, Root, RootOptions } from './controller/types'\nimport type { AsyncState, AsyncStatus } from './query/types'\nimport { computed, type ReadSignal, type Signal, signal } from './signals'\n\n/**\n * Construct an isolated root wrapping a single controller. The returned object\n * is the controller's api plus the standard Root lifecycle controls\n * (`dispose`, `suspend`, `resume`, `__debug`).\n *\n * Equivalent to defining a tiny root wrapper, but ergonomic in tests.\n */\nexport function createTestController<\n Props,\n Api,\n TDeps extends Record<string, unknown> = Record<string, unknown>,\n>(\n def: ControllerDef<Props, Api>,\n options: {\n deps: TDeps\n props: Props\n onError?: RootOptions<TDeps>['onError']\n },\n): Root<Api> {\n return createRootWithProps<Props, Api, TDeps>(def, options.props, {\n deps: options.deps,\n onError: options.onError,\n })\n}\n\n/**\n * Shape-correct fake `Field<T>` for UI tests. Pass an initial value plus any\n * overrides for the read-only signals. The returned object satisfies `Field<T>`\n * so it can be passed straight into `useField(...)` or any component that\n * accepts a real field. See spec §20.10.\n */\nexport function fakeField<T>(\n initial: T,\n overrides?: Partial<{\n errors: string[]\n isValid: boolean\n isDirty: boolean\n touched: boolean\n isValidating: boolean\n set: (value: T) => void\n setAsInitial: (value: T) => void\n reset: () => void\n markTouched: () => void\n revalidate: () => Promise<boolean>\n setErrors: (errors: ReadonlyArray<string>) => void\n dispose: () => void\n }>,\n): Field<T> {\n const value$: Signal<T> = signal(initial)\n const errors$: Signal<string[]> = signal(overrides?.errors ?? [])\n const touched$: Signal<boolean> = signal(overrides?.touched ?? false)\n const dirty$: Signal<boolean> = signal(overrides?.isDirty ?? false)\n const validating$: Signal<boolean> = signal(overrides?.isValidating ?? false)\n const isValid$: ReadSignal<boolean> =\n overrides?.isValid !== undefined\n ? signal(overrides.isValid)\n : computed(() => errors$.value.length === 0 && !validating$.value)\n\n let currentInitial = initial\n const set = overrides?.set ?? ((next: T) => value$.set(next))\n const setAsInitial =\n overrides?.setAsInitial ??\n ((next: T) => {\n currentInitial = next\n value$.set(next)\n dirty$.set(false)\n })\n const fake: Field<T> = {\n get value() {\n return value$.value\n },\n peek: () => value$.peek(),\n subscribe: (handler) => value$.subscribe(handler),\n errors: errors$,\n isValid: isValid$,\n isDirty: dirty$,\n touched: touched$,\n isValidating: validating$,\n set,\n setAsInitial,\n reset: overrides?.reset ?? (() => value$.set(currentInitial)),\n markTouched: overrides?.markTouched ?? (() => touched$.set(true)),\n revalidate: overrides?.revalidate ?? (async () => errors$.peek().length === 0),\n setErrors: overrides?.setErrors ?? ((errs) => errors$.set([...errs])),\n dispose: overrides?.dispose ?? (() => {}),\n }\n return fake\n}\n\n/**\n * Shape-correct fake `AsyncState<T>` for UI tests. Pass overrides for any of\n * the signal-backed properties; everything else falls back to inert defaults.\n * The returned object satisfies `AsyncState<T>` so it can stand in for a real\n * query subscription in component tests. See spec §20.10.\n */\nexport function fakeAsyncState<T>(\n overrides?: Partial<{\n data: T | undefined\n error: unknown | undefined\n status: AsyncStatus\n isLoading: boolean\n isFetching: boolean\n isStale: boolean\n lastUpdatedAt: number | undefined\n hasPendingMutations: boolean\n refetch: () => Promise<T>\n reset: () => void\n firstValue: () => Promise<T>\n }>,\n): AsyncState<T> {\n const data$: ReadSignal<T | undefined> = signal(overrides?.data)\n const error$: ReadSignal<unknown | undefined> = signal(overrides?.error)\n const status$: ReadSignal<AsyncStatus> = signal(\n overrides?.status ?? (overrides?.data !== undefined ? 'success' : 'idle'),\n )\n const isLoading$: ReadSignal<boolean> = signal(overrides?.isLoading ?? false)\n const isFetching$: ReadSignal<boolean> = signal(overrides?.isFetching ?? false)\n const isStale$: ReadSignal<boolean> = signal(overrides?.isStale ?? false)\n const lastUpdatedAt$: ReadSignal<number | undefined> = signal(overrides?.lastUpdatedAt)\n const hasPendingMutations$: ReadSignal<boolean> = signal(overrides?.hasPendingMutations ?? false)\n\n const refetch = overrides?.refetch ?? (async () => data$.peek() as T)\n const reset = overrides?.reset ?? (() => {})\n const firstValue = overrides?.firstValue ?? (async () => data$.peek() as T)\n\n return {\n data: data$,\n error: error$,\n status: status$,\n isLoading: isLoading$,\n isFetching: isFetching$,\n isStale: isStale$,\n lastUpdatedAt: lastUpdatedAt$,\n hasPendingMutations: hasPendingMutations$,\n refetch,\n reset,\n firstValue,\n }\n}\n"],"mappings":";;;;;;;;;;AAYA,SAAgB,qBAKd,KACA,SAKW;CACX,OAAOA,aAAAA,oBAAuC,KAAK,QAAQ,OAAO;EAChE,MAAM,QAAQ;EACd,SAAS,QAAQ;CACnB,CAAC;AACH;;;;;;;AAQA,SAAgB,UACd,SACA,WAcU;CACV,MAAM,SAAoBC,aAAAA,OAAO,OAAO;CACxC,MAAM,UAA4BA,aAAAA,OAAO,WAAW,UAAU,CAAC,CAAC;CAChE,MAAM,WAA4BA,aAAAA,OAAO,WAAW,WAAW,KAAK;CACpE,MAAM,SAA0BA,aAAAA,OAAO,WAAW,WAAW,KAAK;CAClE,MAAM,cAA+BA,aAAAA,OAAO,WAAW,gBAAgB,KAAK;CAC5E,MAAM,WACJ,WAAW,YAAY,KAAA,IACnBA,aAAAA,OAAO,UAAU,OAAO,IACxBC,aAAAA,eAAe,QAAQ,MAAM,WAAW,KAAK,CAAC,YAAY,KAAK;CAErE,IAAI,iBAAiB;CA4BrB,OAAO;EAlBL,IAAI,QAAQ;GACV,OAAO,OAAO;EAChB;EACA,YAAY,OAAO,KAAK;EACxB,YAAY,YAAY,OAAO,UAAU,OAAO;EAChD,QAAQ;EACR,SAAS;EACT,SAAS;EACT,SAAS;EACT,cAAc;EACd,KAnBU,WAAW,SAAS,SAAY,OAAO,IAAI,IAAI;EAoBzD,cAlBA,WAAW,kBACT,SAAY;GACZ,iBAAiB;GACjB,OAAO,IAAI,IAAI;GACf,OAAO,IAAI,KAAK;EAClB;EAcA,OAAO,WAAW,gBAAgB,OAAO,IAAI,cAAc;EAC3D,aAAa,WAAW,sBAAsB,SAAS,IAAI,IAAI;EAC/D,YAAY,WAAW,eAAe,YAAY,QAAQ,KAAK,EAAE,WAAW;EAC5E,WAAW,WAAW,eAAe,SAAS,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC;EACnE,SAAS,WAAW,kBAAkB,CAAC;CAE/B;AACZ;;;;;;;AAQA,SAAgB,eACd,WAae;CACf,MAAM,QAAmCD,aAAAA,OAAO,WAAW,IAAI;CAe/D,OAAO;EACL,MAAM;EACN,OAhB8CA,aAAAA,OAAO,WAAW,KAgBpD;EACZ,QAhBuCA,aAAAA,OACvC,WAAW,WAAW,WAAW,SAAS,KAAA,IAAY,YAAY,OAepD;EACd,WAdsCA,aAAAA,OAAO,WAAW,aAAa,KAcjD;EACpB,YAduCA,aAAAA,OAAO,WAAW,cAAc,KAcjD;EACtB,SAdoCA,aAAAA,OAAO,WAAW,WAAW,KAcjD;EAChB,eAdqDA,aAAAA,OAAO,WAAW,aAc3C;EAC5B,qBAdgDA,aAAAA,OAAO,WAAW,uBAAuB,KAcjD;EACxC,SAbc,WAAW,YAAY,YAAY,MAAM,KAAK;EAc5D,OAbY,WAAW,gBAAgB,CAAC;EAcxC,YAbiB,WAAW,eAAe,YAAY,MAAM,KAAK;CAcpE;AACF"}
|
package/dist/testing.d.cts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { F as AsyncStatus, P as AsyncState, d as Field, m as RootOptions, p as Root, s as ControllerDef } from "./types-r_TVaRkD.cjs";
|
|
2
2
|
|
|
3
3
|
//#region src/testing.d.ts
|
|
4
4
|
/**
|
|
@@ -30,6 +30,7 @@ declare function fakeField<T>(initial: T, overrides?: Partial<{
|
|
|
30
30
|
reset: () => void;
|
|
31
31
|
markTouched: () => void;
|
|
32
32
|
revalidate: () => Promise<boolean>;
|
|
33
|
+
setErrors: (errors: ReadonlyArray<string>) => void;
|
|
33
34
|
dispose: () => void;
|
|
34
35
|
}>): Field<T>;
|
|
35
36
|
/**
|
package/dist/testing.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.cts","names":[],"sources":["../src/testing.ts"],"mappings":";;;;AAYA;;;;;;iBAAgB,oBAAA,2BAGA,MAAA,oBAA0B,MAAA,kBAAA,CAExC,GAAA,EAAK,aAAA,CAAc,KAAA,EAAO,GAAA,GAC1B,OAAA;EACE,IAAA,EAAM,KAAA;EACN,KAAA,EAAO,KAAA;EACP,OAAA,GAAU,WAAA,CAAY,KAAA;AAAA,IAEvB,IAAA,CAAK,GAAA;;;;;;;iBAaQ,SAAA,GAAA,CACd,OAAA,EAAS,CAAA,EACT,SAAA,GAAY,OAAA;EACV,MAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;EACA,YAAA;EACA,GAAA,GAAM,KAAA,EAAO,CAAA;EACb,YAAA,GAAe,KAAA,EAAO,CAAA;EACtB,KAAA;EACA,WAAA;EACA,UAAA,QAAkB,OAAA;EAClB,OAAA;AAAA,KAED,KAAA,CAAM,CAAA
|
|
1
|
+
{"version":3,"file":"testing.d.cts","names":[],"sources":["../src/testing.ts"],"mappings":";;;;AAYA;;;;;;iBAAgB,oBAAA,2BAGA,MAAA,oBAA0B,MAAA,kBAAA,CAExC,GAAA,EAAK,aAAA,CAAc,KAAA,EAAO,GAAA,GAC1B,OAAA;EACE,IAAA,EAAM,KAAA;EACN,KAAA,EAAO,KAAA;EACP,OAAA,GAAU,WAAA,CAAY,KAAA;AAAA,IAEvB,IAAA,CAAK,GAAA;;;;;;;iBAaQ,SAAA,GAAA,CACd,OAAA,EAAS,CAAA,EACT,SAAA,GAAY,OAAA;EACV,MAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;EACA,YAAA;EACA,GAAA,GAAM,KAAA,EAAO,CAAA;EACb,YAAA,GAAe,KAAA,EAAO,CAAA;EACtB,KAAA;EACA,WAAA;EACA,UAAA,QAAkB,OAAA;EAClB,SAAA,GAAY,MAAA,EAAQ,aAAA;EACpB,OAAA;AAAA,KAED,KAAA,CAAM,CAAA;;;;;;AA7BE;iBA6EK,cAAA,GAAA,CACd,SAAA,GAAY,OAAA;EACV,IAAA,EAAM,CAAA;EACN,KAAA;EACA,MAAA,EAAQ,WAAA;EACR,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;EACA,mBAAA;EACA,OAAA,QAAe,OAAA,CAAQ,CAAA;EACvB,KAAA;EACA,UAAA,QAAkB,OAAA,CAAQ,CAAA;AAAA,KAE3B,UAAA,CAAW,CAAA"}
|
package/dist/testing.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { F as AsyncStatus, P as AsyncState, d as Field, m as RootOptions, p as Root, s as ControllerDef } from "./types-CRn4UoLn.mjs";
|
|
2
2
|
|
|
3
3
|
//#region src/testing.d.ts
|
|
4
4
|
/**
|
|
@@ -30,6 +30,7 @@ declare function fakeField<T>(initial: T, overrides?: Partial<{
|
|
|
30
30
|
reset: () => void;
|
|
31
31
|
markTouched: () => void;
|
|
32
32
|
revalidate: () => Promise<boolean>;
|
|
33
|
+
setErrors: (errors: ReadonlyArray<string>) => void;
|
|
33
34
|
dispose: () => void;
|
|
34
35
|
}>): Field<T>;
|
|
35
36
|
/**
|
package/dist/testing.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.d.mts","names":[],"sources":["../src/testing.ts"],"mappings":";;;;AAYA;;;;;;iBAAgB,oBAAA,2BAGA,MAAA,oBAA0B,MAAA,kBAAA,CAExC,GAAA,EAAK,aAAA,CAAc,KAAA,EAAO,GAAA,GAC1B,OAAA;EACE,IAAA,EAAM,KAAA;EACN,KAAA,EAAO,KAAA;EACP,OAAA,GAAU,WAAA,CAAY,KAAA;AAAA,IAEvB,IAAA,CAAK,GAAA;;;;;;;iBAaQ,SAAA,GAAA,CACd,OAAA,EAAS,CAAA,EACT,SAAA,GAAY,OAAA;EACV,MAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;EACA,YAAA;EACA,GAAA,GAAM,KAAA,EAAO,CAAA;EACb,YAAA,GAAe,KAAA,EAAO,CAAA;EACtB,KAAA;EACA,WAAA;EACA,UAAA,QAAkB,OAAA;EAClB,OAAA;AAAA,KAED,KAAA,CAAM,CAAA
|
|
1
|
+
{"version":3,"file":"testing.d.mts","names":[],"sources":["../src/testing.ts"],"mappings":";;;;AAYA;;;;;;iBAAgB,oBAAA,2BAGA,MAAA,oBAA0B,MAAA,kBAAA,CAExC,GAAA,EAAK,aAAA,CAAc,KAAA,EAAO,GAAA,GAC1B,OAAA;EACE,IAAA,EAAM,KAAA;EACN,KAAA,EAAO,KAAA;EACP,OAAA,GAAU,WAAA,CAAY,KAAA;AAAA,IAEvB,IAAA,CAAK,GAAA;;;;;;;iBAaQ,SAAA,GAAA,CACd,OAAA,EAAS,CAAA,EACT,SAAA,GAAY,OAAA;EACV,MAAA;EACA,OAAA;EACA,OAAA;EACA,OAAA;EACA,YAAA;EACA,GAAA,GAAM,KAAA,EAAO,CAAA;EACb,YAAA,GAAe,KAAA,EAAO,CAAA;EACtB,KAAA;EACA,WAAA;EACA,UAAA,QAAkB,OAAA;EAClB,SAAA,GAAY,MAAA,EAAQ,aAAA;EACpB,OAAA;AAAA,KAED,KAAA,CAAM,CAAA;;;;;;AA7BE;iBA6EK,cAAA,GAAA,CACd,SAAA,GAAY,OAAA;EACV,IAAA,EAAM,CAAA;EACN,KAAA;EACA,MAAA,EAAQ,WAAA;EACR,SAAA;EACA,UAAA;EACA,OAAA;EACA,aAAA;EACA,mBAAA;EACA,OAAA,QAAe,OAAA,CAAQ,CAAA;EACvB,KAAA;EACA,UAAA,QAAkB,OAAA,CAAQ,CAAA;AAAA,KAE3B,UAAA,CAAW,CAAA"}
|
package/dist/testing.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { f as signal, n as createRootWithProps, u as computed } from "./root-
|
|
1
|
+
import { f as signal, n as createRootWithProps, u as computed } from "./root-Cnkb3I--.mjs";
|
|
2
2
|
//#region src/testing.ts
|
|
3
3
|
/**
|
|
4
4
|
* Construct an isolated root wrapping a single controller. The returned object
|
|
@@ -47,6 +47,7 @@ function fakeField(initial, overrides) {
|
|
|
47
47
|
reset: overrides?.reset ?? (() => value$.set(currentInitial)),
|
|
48
48
|
markTouched: overrides?.markTouched ?? (() => touched$.set(true)),
|
|
49
49
|
revalidate: overrides?.revalidate ?? (async () => errors$.peek().length === 0),
|
|
50
|
+
setErrors: overrides?.setErrors ?? ((errs) => errors$.set([...errs])),
|
|
50
51
|
dispose: overrides?.dispose ?? (() => {})
|
|
51
52
|
};
|
|
52
53
|
}
|
package/dist/testing.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.mjs","names":[],"sources":["../src/testing.ts"],"sourcesContent":["import { createRootWithProps } from './controller/root'\nimport type { ControllerDef, Field, Root, RootOptions } from './controller/types'\nimport type { AsyncState, AsyncStatus } from './query/types'\nimport { computed, type ReadSignal, type Signal, signal } from './signals'\n\n/**\n * Construct an isolated root wrapping a single controller. The returned object\n * is the controller's api plus the standard Root lifecycle controls\n * (`dispose`, `suspend`, `resume`, `__debug`).\n *\n * Equivalent to defining a tiny root wrapper, but ergonomic in tests.\n */\nexport function createTestController<\n Props,\n Api,\n TDeps extends Record<string, unknown> = Record<string, unknown>,\n>(\n def: ControllerDef<Props, Api>,\n options: {\n deps: TDeps\n props: Props\n onError?: RootOptions<TDeps>['onError']\n },\n): Root<Api> {\n return createRootWithProps<Props, Api, TDeps>(def, options.props, {\n deps: options.deps,\n onError: options.onError,\n })\n}\n\n/**\n * Shape-correct fake `Field<T>` for UI tests. Pass an initial value plus any\n * overrides for the read-only signals. The returned object satisfies `Field<T>`\n * so it can be passed straight into `useField(...)` or any component that\n * accepts a real field. See spec §20.10.\n */\nexport function fakeField<T>(\n initial: T,\n overrides?: Partial<{\n errors: string[]\n isValid: boolean\n isDirty: boolean\n touched: boolean\n isValidating: boolean\n set: (value: T) => void\n setAsInitial: (value: T) => void\n reset: () => void\n markTouched: () => void\n revalidate: () => Promise<boolean>\n dispose: () => void\n }>,\n): Field<T> {\n const value$: Signal<T> = signal(initial)\n const errors$: Signal<string[]> = signal(overrides?.errors ?? [])\n const touched$: Signal<boolean> = signal(overrides?.touched ?? false)\n const dirty$: Signal<boolean> = signal(overrides?.isDirty ?? false)\n const validating$: Signal<boolean> = signal(overrides?.isValidating ?? false)\n const isValid$: ReadSignal<boolean> =\n overrides?.isValid !== undefined\n ? signal(overrides.isValid)\n : computed(() => errors$.value.length === 0 && !validating$.value)\n\n let currentInitial = initial\n const set = overrides?.set ?? ((next: T) => value$.set(next))\n const setAsInitial =\n overrides?.setAsInitial ??\n ((next: T) => {\n currentInitial = next\n value$.set(next)\n dirty$.set(false)\n })\n const fake: Field<T> = {\n get value() {\n return value$.value\n },\n peek: () => value$.peek(),\n subscribe: (handler) => value$.subscribe(handler),\n errors: errors$,\n isValid: isValid$,\n isDirty: dirty$,\n touched: touched$,\n isValidating: validating$,\n set,\n setAsInitial,\n reset: overrides?.reset ?? (() => value$.set(currentInitial)),\n markTouched: overrides?.markTouched ?? (() => touched$.set(true)),\n revalidate: overrides?.revalidate ?? (async () => errors$.peek().length === 0),\n dispose: overrides?.dispose ?? (() => {}),\n }\n return fake\n}\n\n/**\n * Shape-correct fake `AsyncState<T>` for UI tests. Pass overrides for any of\n * the signal-backed properties; everything else falls back to inert defaults.\n * The returned object satisfies `AsyncState<T>` so it can stand in for a real\n * query subscription in component tests. See spec §20.10.\n */\nexport function fakeAsyncState<T>(\n overrides?: Partial<{\n data: T | undefined\n error: unknown | undefined\n status: AsyncStatus\n isLoading: boolean\n isFetching: boolean\n isStale: boolean\n lastUpdatedAt: number | undefined\n hasPendingMutations: boolean\n refetch: () => Promise<T>\n reset: () => void\n firstValue: () => Promise<T>\n }>,\n): AsyncState<T> {\n const data$: ReadSignal<T | undefined> = signal(overrides?.data)\n const error$: ReadSignal<unknown | undefined> = signal(overrides?.error)\n const status$: ReadSignal<AsyncStatus> = signal(\n overrides?.status ?? (overrides?.data !== undefined ? 'success' : 'idle'),\n )\n const isLoading$: ReadSignal<boolean> = signal(overrides?.isLoading ?? false)\n const isFetching$: ReadSignal<boolean> = signal(overrides?.isFetching ?? false)\n const isStale$: ReadSignal<boolean> = signal(overrides?.isStale ?? false)\n const lastUpdatedAt$: ReadSignal<number | undefined> = signal(overrides?.lastUpdatedAt)\n const hasPendingMutations$: ReadSignal<boolean> = signal(overrides?.hasPendingMutations ?? false)\n\n const refetch = overrides?.refetch ?? (async () => data$.peek() as T)\n const reset = overrides?.reset ?? (() => {})\n const firstValue = overrides?.firstValue ?? (async () => data$.peek() as T)\n\n return {\n data: data$,\n error: error$,\n status: status$,\n isLoading: isLoading$,\n isFetching: isFetching$,\n isStale: isStale$,\n lastUpdatedAt: lastUpdatedAt$,\n hasPendingMutations: hasPendingMutations$,\n refetch,\n reset,\n firstValue,\n }\n}\n"],"mappings":";;;;;;;;;AAYA,SAAgB,qBAKd,KACA,SAKW;CACX,OAAO,oBAAuC,KAAK,QAAQ,OAAO;EAChE,MAAM,QAAQ;EACd,SAAS,QAAQ;CACnB,CAAC;AACH;;;;;;;AAQA,SAAgB,UACd,SACA,
|
|
1
|
+
{"version":3,"file":"testing.mjs","names":[],"sources":["../src/testing.ts"],"sourcesContent":["import { createRootWithProps } from './controller/root'\nimport type { ControllerDef, Field, Root, RootOptions } from './controller/types'\nimport type { AsyncState, AsyncStatus } from './query/types'\nimport { computed, type ReadSignal, type Signal, signal } from './signals'\n\n/**\n * Construct an isolated root wrapping a single controller. The returned object\n * is the controller's api plus the standard Root lifecycle controls\n * (`dispose`, `suspend`, `resume`, `__debug`).\n *\n * Equivalent to defining a tiny root wrapper, but ergonomic in tests.\n */\nexport function createTestController<\n Props,\n Api,\n TDeps extends Record<string, unknown> = Record<string, unknown>,\n>(\n def: ControllerDef<Props, Api>,\n options: {\n deps: TDeps\n props: Props\n onError?: RootOptions<TDeps>['onError']\n },\n): Root<Api> {\n return createRootWithProps<Props, Api, TDeps>(def, options.props, {\n deps: options.deps,\n onError: options.onError,\n })\n}\n\n/**\n * Shape-correct fake `Field<T>` for UI tests. Pass an initial value plus any\n * overrides for the read-only signals. The returned object satisfies `Field<T>`\n * so it can be passed straight into `useField(...)` or any component that\n * accepts a real field. See spec §20.10.\n */\nexport function fakeField<T>(\n initial: T,\n overrides?: Partial<{\n errors: string[]\n isValid: boolean\n isDirty: boolean\n touched: boolean\n isValidating: boolean\n set: (value: T) => void\n setAsInitial: (value: T) => void\n reset: () => void\n markTouched: () => void\n revalidate: () => Promise<boolean>\n setErrors: (errors: ReadonlyArray<string>) => void\n dispose: () => void\n }>,\n): Field<T> {\n const value$: Signal<T> = signal(initial)\n const errors$: Signal<string[]> = signal(overrides?.errors ?? [])\n const touched$: Signal<boolean> = signal(overrides?.touched ?? false)\n const dirty$: Signal<boolean> = signal(overrides?.isDirty ?? false)\n const validating$: Signal<boolean> = signal(overrides?.isValidating ?? false)\n const isValid$: ReadSignal<boolean> =\n overrides?.isValid !== undefined\n ? signal(overrides.isValid)\n : computed(() => errors$.value.length === 0 && !validating$.value)\n\n let currentInitial = initial\n const set = overrides?.set ?? ((next: T) => value$.set(next))\n const setAsInitial =\n overrides?.setAsInitial ??\n ((next: T) => {\n currentInitial = next\n value$.set(next)\n dirty$.set(false)\n })\n const fake: Field<T> = {\n get value() {\n return value$.value\n },\n peek: () => value$.peek(),\n subscribe: (handler) => value$.subscribe(handler),\n errors: errors$,\n isValid: isValid$,\n isDirty: dirty$,\n touched: touched$,\n isValidating: validating$,\n set,\n setAsInitial,\n reset: overrides?.reset ?? (() => value$.set(currentInitial)),\n markTouched: overrides?.markTouched ?? (() => touched$.set(true)),\n revalidate: overrides?.revalidate ?? (async () => errors$.peek().length === 0),\n setErrors: overrides?.setErrors ?? ((errs) => errors$.set([...errs])),\n dispose: overrides?.dispose ?? (() => {}),\n }\n return fake\n}\n\n/**\n * Shape-correct fake `AsyncState<T>` for UI tests. Pass overrides for any of\n * the signal-backed properties; everything else falls back to inert defaults.\n * The returned object satisfies `AsyncState<T>` so it can stand in for a real\n * query subscription in component tests. See spec §20.10.\n */\nexport function fakeAsyncState<T>(\n overrides?: Partial<{\n data: T | undefined\n error: unknown | undefined\n status: AsyncStatus\n isLoading: boolean\n isFetching: boolean\n isStale: boolean\n lastUpdatedAt: number | undefined\n hasPendingMutations: boolean\n refetch: () => Promise<T>\n reset: () => void\n firstValue: () => Promise<T>\n }>,\n): AsyncState<T> {\n const data$: ReadSignal<T | undefined> = signal(overrides?.data)\n const error$: ReadSignal<unknown | undefined> = signal(overrides?.error)\n const status$: ReadSignal<AsyncStatus> = signal(\n overrides?.status ?? (overrides?.data !== undefined ? 'success' : 'idle'),\n )\n const isLoading$: ReadSignal<boolean> = signal(overrides?.isLoading ?? false)\n const isFetching$: ReadSignal<boolean> = signal(overrides?.isFetching ?? false)\n const isStale$: ReadSignal<boolean> = signal(overrides?.isStale ?? false)\n const lastUpdatedAt$: ReadSignal<number | undefined> = signal(overrides?.lastUpdatedAt)\n const hasPendingMutations$: ReadSignal<boolean> = signal(overrides?.hasPendingMutations ?? false)\n\n const refetch = overrides?.refetch ?? (async () => data$.peek() as T)\n const reset = overrides?.reset ?? (() => {})\n const firstValue = overrides?.firstValue ?? (async () => data$.peek() as T)\n\n return {\n data: data$,\n error: error$,\n status: status$,\n isLoading: isLoading$,\n isFetching: isFetching$,\n isStale: isStale$,\n lastUpdatedAt: lastUpdatedAt$,\n hasPendingMutations: hasPendingMutations$,\n refetch,\n reset,\n firstValue,\n }\n}\n"],"mappings":";;;;;;;;;AAYA,SAAgB,qBAKd,KACA,SAKW;CACX,OAAO,oBAAuC,KAAK,QAAQ,OAAO;EAChE,MAAM,QAAQ;EACd,SAAS,QAAQ;CACnB,CAAC;AACH;;;;;;;AAQA,SAAgB,UACd,SACA,WAcU;CACV,MAAM,SAAoB,OAAO,OAAO;CACxC,MAAM,UAA4B,OAAO,WAAW,UAAU,CAAC,CAAC;CAChE,MAAM,WAA4B,OAAO,WAAW,WAAW,KAAK;CACpE,MAAM,SAA0B,OAAO,WAAW,WAAW,KAAK;CAClE,MAAM,cAA+B,OAAO,WAAW,gBAAgB,KAAK;CAC5E,MAAM,WACJ,WAAW,YAAY,KAAA,IACnB,OAAO,UAAU,OAAO,IACxB,eAAe,QAAQ,MAAM,WAAW,KAAK,CAAC,YAAY,KAAK;CAErE,IAAI,iBAAiB;CA4BrB,OAAO;EAlBL,IAAI,QAAQ;GACV,OAAO,OAAO;EAChB;EACA,YAAY,OAAO,KAAK;EACxB,YAAY,YAAY,OAAO,UAAU,OAAO;EAChD,QAAQ;EACR,SAAS;EACT,SAAS;EACT,SAAS;EACT,cAAc;EACd,KAnBU,WAAW,SAAS,SAAY,OAAO,IAAI,IAAI;EAoBzD,cAlBA,WAAW,kBACT,SAAY;GACZ,iBAAiB;GACjB,OAAO,IAAI,IAAI;GACf,OAAO,IAAI,KAAK;EAClB;EAcA,OAAO,WAAW,gBAAgB,OAAO,IAAI,cAAc;EAC3D,aAAa,WAAW,sBAAsB,SAAS,IAAI,IAAI;EAC/D,YAAY,WAAW,eAAe,YAAY,QAAQ,KAAK,EAAE,WAAW;EAC5E,WAAW,WAAW,eAAe,SAAS,QAAQ,IAAI,CAAC,GAAG,IAAI,CAAC;EACnE,SAAS,WAAW,kBAAkB,CAAC;CAE/B;AACZ;;;;;;;AAQA,SAAgB,eACd,WAae;CACf,MAAM,QAAmC,OAAO,WAAW,IAAI;CAe/D,OAAO;EACL,MAAM;EACN,OAhB8C,OAAO,WAAW,KAgBpD;EACZ,QAhBuC,OACvC,WAAW,WAAW,WAAW,SAAS,KAAA,IAAY,YAAY,OAepD;EACd,WAdsC,OAAO,WAAW,aAAa,KAcjD;EACpB,YAduC,OAAO,WAAW,cAAc,KAcjD;EACtB,SAdoC,OAAO,WAAW,WAAW,KAcjD;EAChB,eAdqD,OAAO,WAAW,aAc3C;EAC5B,qBAdgD,OAAO,WAAW,uBAAuB,KAcjD;EACxC,SAbc,WAAW,YAAY,YAAY,MAAM,KAAK;EAc5D,OAbY,WAAW,gBAAgB,CAAC;EAcxC,YAbiB,WAAW,eAAe,YAAY,MAAM,KAAK;CAcpE;AACF"}
|
|
@@ -15,13 +15,27 @@ type Emitter<T> = {
|
|
|
15
15
|
once(handler: (value: T) => void): () => void; /** Tear down the emitter. Subsequent `emit` / `on` / `once` are no-ops. */
|
|
16
16
|
dispose(): void;
|
|
17
17
|
};
|
|
18
|
+
/**
|
|
19
|
+
* Optional escape hatch for emit-time handler throws. If supplied, a thrown
|
|
20
|
+
* handler is reported here and emission continues with the remaining handlers
|
|
21
|
+
* (spec §20.6 — one throwing handler must not block the rest). If absent,
|
|
22
|
+
* the throw is logged via `console.error`.
|
|
23
|
+
*/
|
|
24
|
+
type EmitterErrorReporter = (err: unknown) => void;
|
|
18
25
|
/**
|
|
19
26
|
* Create a standalone emitter. Handlers persist until explicitly unsubscribed
|
|
20
27
|
* (or the emitter is disposed). Use this for emitters that live outside any
|
|
21
28
|
* single controller — typically in deps. Use `ctx.emitter()` for emitters that
|
|
22
29
|
* should auto-clean with a controller.
|
|
30
|
+
*
|
|
31
|
+
* Pass `onError` to receive emit-time handler throws (spec §20.6 — one
|
|
32
|
+
* throwing handler must not block the rest of the fan-out). `ctx.emitter()`
|
|
33
|
+
* wires this to the root's `onError` so deps-level emitters get isolation
|
|
34
|
+
* by default when constructed via `ctx`.
|
|
23
35
|
*/
|
|
24
|
-
declare function createEmitter<T = void>(
|
|
36
|
+
declare function createEmitter<T = void>(options?: {
|
|
37
|
+
onError?: EmitterErrorReporter;
|
|
38
|
+
}): Emitter<T>;
|
|
25
39
|
//#endregion
|
|
26
40
|
//#region src/errors.d.ts
|
|
27
41
|
/**
|
|
@@ -129,7 +143,21 @@ type Form<S extends FormSchema> = {
|
|
|
129
143
|
readonly isValid: ReadSignal<boolean>;
|
|
130
144
|
readonly isDirty: ReadSignal<boolean>;
|
|
131
145
|
readonly touched: ReadSignal<boolean>;
|
|
132
|
-
readonly isValidating: ReadSignal<boolean>;
|
|
146
|
+
readonly isValidating: ReadSignal<boolean>;
|
|
147
|
+
/**
|
|
148
|
+
* `true` while a `submit(...)` is in flight. Clears when the handler
|
|
149
|
+
* resolves, throws, or pre-submit validation fails.
|
|
150
|
+
*/
|
|
151
|
+
readonly isSubmitting: ReadSignal<boolean>; /** Number of times `submit(...)` has been called. Bumps before the handler runs. */
|
|
152
|
+
readonly submitCount: ReadSignal<number>;
|
|
153
|
+
/**
|
|
154
|
+
* The thrown value from the most recent failed submission, if any.
|
|
155
|
+
* Cleared at the start of each new `submit(...)` call and on `reset()`.
|
|
156
|
+
* Note that a validation failure ("submit blocked because the form is
|
|
157
|
+
* invalid") is NOT a thrown error — `submitError` stays whatever it
|
|
158
|
+
* was, and the returned promise resolves with `{ ok: false }`.
|
|
159
|
+
*/
|
|
160
|
+
readonly submitError: ReadSignal<unknown>; /** Deep-merge a partial value into the form, batched. */
|
|
133
161
|
set(partial: DeepPartial<FormValue<S>>): void;
|
|
134
162
|
/**
|
|
135
163
|
* Re-seat the form's leaves from `partial` as their new initials —
|
|
@@ -140,7 +168,29 @@ type Form<S extends FormSchema> = {
|
|
|
140
168
|
resetWithInitial(partial: DeepPartial<FormValue<S>>): void; /** Reset every leaf to its initial value. */
|
|
141
169
|
reset(): void; /** Mark every leaf as touched (so error messages appear). */
|
|
142
170
|
markAllTouched(): void; /** Re-run every leaf's validators. Resolves with true if all leaves are valid. */
|
|
143
|
-
validate(): Promise<boolean>;
|
|
171
|
+
validate(): Promise<boolean>;
|
|
172
|
+
/**
|
|
173
|
+
* Run a submission. Pre-validates the form (unless `validateBeforeSubmit: false`),
|
|
174
|
+
* then calls `handler(value)`. Maintains `isSubmitting` / `submitCount` /
|
|
175
|
+
* `submitError`. Returns `{ ok, data?, error? }` — see `FormImpl.submit`
|
|
176
|
+
* for the full contract.
|
|
177
|
+
*/
|
|
178
|
+
submit(handler: (value: FormValue<S>) => unknown | Promise<unknown>, options?: {
|
|
179
|
+
validateBeforeSubmit?: boolean;
|
|
180
|
+
resetOnSuccess?: boolean;
|
|
181
|
+
onError?: 'rethrow' | 'capture';
|
|
182
|
+
}): Promise<{
|
|
183
|
+
ok: boolean;
|
|
184
|
+
data?: unknown;
|
|
185
|
+
error?: unknown;
|
|
186
|
+
}>;
|
|
187
|
+
/**
|
|
188
|
+
* Pin externally-sourced errors on specific fields. Keys are dot-separated
|
|
189
|
+
* paths through nested forms / field arrays (numeric segments are array
|
|
190
|
+
* indices). Errors land in each field's `serverErrors` channel — kept
|
|
191
|
+
* separate from validator output and auto-cleared on the next user write.
|
|
192
|
+
*/
|
|
193
|
+
setErrors(errors: Record<string, ReadonlyArray<string>>): void; /** Idempotent. Called by the owning controller's dispose. */
|
|
144
194
|
dispose(): void;
|
|
145
195
|
};
|
|
146
196
|
/**
|
|
@@ -310,8 +360,12 @@ type Query<Args extends unknown[], T> = {
|
|
|
310
360
|
type QuerySubscription<T> = AsyncState<T>;
|
|
311
361
|
/**
|
|
312
362
|
* Options passed to `ctx.use(query, opts)` to control the subscription
|
|
313
|
-
* (reactive key, enabled-gating). The `key` thunk reads signals —
|
|
314
|
-
* when they change re-keys the subscription.
|
|
363
|
+
* (reactive key, enabled-gating). The `key` thunk reads signals —
|
|
364
|
+
* re-evaluating when they change re-keys the subscription.
|
|
365
|
+
*
|
|
366
|
+
* A `select` projection that maps the underlying data shape to a view
|
|
367
|
+
* shape is accepted via a dedicated overload on `Ctx.use` rather than this
|
|
368
|
+
* options bag — the overload threads `T → U` types through cleanly.
|
|
315
369
|
*/
|
|
316
370
|
type UseOptions<Args extends readonly unknown[]> = {
|
|
317
371
|
key?: () => Args;
|
|
@@ -754,6 +808,10 @@ interface AmbientDeps {
|
|
|
754
808
|
* `ctx.field(initial, validators?)`. Spec §8, §20.7.
|
|
755
809
|
*/
|
|
756
810
|
type Field<T> = ReadSignal<T> & {
|
|
811
|
+
/**
|
|
812
|
+
* All errors currently surfaced on this field — validator errors first,
|
|
813
|
+
* server errors after. See `setErrors` for the server-error channel.
|
|
814
|
+
*/
|
|
757
815
|
errors: ReadSignal<string[]>;
|
|
758
816
|
isValid: ReadSignal<boolean>;
|
|
759
817
|
isDirty: ReadSignal<boolean>;
|
|
@@ -770,7 +828,16 @@ type Field<T> = ReadSignal<T> & {
|
|
|
770
828
|
setAsInitial(value: T): void;
|
|
771
829
|
reset(): void;
|
|
772
830
|
markTouched(): void;
|
|
773
|
-
revalidate(): Promise<boolean>;
|
|
831
|
+
revalidate(): Promise<boolean>;
|
|
832
|
+
/**
|
|
833
|
+
* Pin externally-sourced errors on the field — typically server-side
|
|
834
|
+
* validation results returned from a failed submit. These errors live in
|
|
835
|
+
* a separate channel from validator output, so a re-run of local
|
|
836
|
+
* validators (triggered by a new value or `revalidate()`) does NOT clear
|
|
837
|
+
* them. They're cleared automatically the next time the user writes to
|
|
838
|
+
* the field (via `set`), or explicitly via `setErrors([])` / `reset()`.
|
|
839
|
+
*/
|
|
840
|
+
setErrors(errors: ReadonlyArray<string>): void; /** Idempotent. Called by the owning controller's dispose. */
|
|
774
841
|
dispose(): void;
|
|
775
842
|
};
|
|
776
843
|
/**
|
|
@@ -789,6 +856,76 @@ type ControllerDef<Props, Api> = {
|
|
|
789
856
|
type CtrlProps<C> = C extends ControllerDef<infer P, unknown> ? P : never;
|
|
790
857
|
/** Extract a controller's Api type. */
|
|
791
858
|
type CtrlApi<C> = C extends ControllerDef<unknown, infer A> ? A : never;
|
|
859
|
+
/**
|
|
860
|
+
* The reactive surface returned by `ctx.collection(...)`. `items` is the
|
|
861
|
+
* canonical ordered view (source-order, with any construction-failed items
|
|
862
|
+
* filtered out); `size` mirrors `items.length`; `get` / `has` are
|
|
863
|
+
* imperative key lookups. SPEC §11.1.
|
|
864
|
+
*/
|
|
865
|
+
type Collection<K, Api> = {
|
|
866
|
+
readonly items: ReadSignal<ReadonlyArray<{
|
|
867
|
+
readonly key: K;
|
|
868
|
+
readonly api: Api;
|
|
869
|
+
}>>;
|
|
870
|
+
readonly size: ReadSignal<number>;
|
|
871
|
+
get(key: K): Api | undefined;
|
|
872
|
+
has(key: K): boolean;
|
|
873
|
+
};
|
|
874
|
+
/**
|
|
875
|
+
* Homogeneous form of `ctx.collection`: one controller def for every item,
|
|
876
|
+
* with `propsOf` projecting each item to the controller's `Props`. Construct
|
|
877
|
+
* happens once per new key — `propsOf` is **not** re-applied for unchanged
|
|
878
|
+
* keys.
|
|
879
|
+
*/
|
|
880
|
+
type CollectionHomogeneousOptions<Item, K, Props, Api, TDeps = AmbientDeps> = {
|
|
881
|
+
readonly source: ReadSignal<readonly Item[]>;
|
|
882
|
+
readonly keyOf: (item: Item) => K;
|
|
883
|
+
readonly controller: ControllerDef<Props, Api>;
|
|
884
|
+
readonly propsOf: (item: Item) => Props;
|
|
885
|
+
readonly factory?: never;
|
|
886
|
+
readonly propsFor?: never;
|
|
887
|
+
readonly deps?: Partial<TDeps>;
|
|
888
|
+
};
|
|
889
|
+
/**
|
|
890
|
+
* Heterogeneous form of `ctx.collection`: a single `factory` decides per-item
|
|
891
|
+
* which controller + props to construct. When a key's factory result picks a
|
|
892
|
+
* *different* controller than last time, the existing child is disposed and
|
|
893
|
+
* the new one constructed (type-discriminant rebuild).
|
|
894
|
+
*
|
|
895
|
+
* `R` is the factory's *return type* (typically inferred as the union of the
|
|
896
|
+
* branches' `{ controller, props }` shapes). `Api` is then projected out as
|
|
897
|
+
* the union of every branch's controller Api via `CollectionFactoryApi<R>` —
|
|
898
|
+
* unlike a single `Api` generic, the union doesn't collapse to the first
|
|
899
|
+
* branch.
|
|
900
|
+
*/
|
|
901
|
+
type CollectionFactoryOptions<Item, K, R, TDeps = AmbientDeps> = {
|
|
902
|
+
readonly source: ReadSignal<readonly Item[]>;
|
|
903
|
+
readonly keyOf: (item: Item) => K;
|
|
904
|
+
readonly controller?: never;
|
|
905
|
+
readonly propsOf?: never;
|
|
906
|
+
readonly factory: (item: Item) => R;
|
|
907
|
+
readonly deps?: Partial<TDeps>;
|
|
908
|
+
};
|
|
909
|
+
/** Constraint for the factory form's return shape. */
|
|
910
|
+
type CollectionFactoryResult = {
|
|
911
|
+
controller: ControllerDef<any, any>;
|
|
912
|
+
props: any;
|
|
913
|
+
};
|
|
914
|
+
/** Extract the union of every branch's controller Api. Distributes over R. */
|
|
915
|
+
type CollectionFactoryApi<R> = R extends {
|
|
916
|
+
controller: ControllerDef<any, infer A>;
|
|
917
|
+
} ? A : never;
|
|
918
|
+
/**
|
|
919
|
+
* Handle returned by `ctx.lazyChild(...)`. `status` walks `idle → loading →
|
|
920
|
+
* (ready | error)`; `api` becomes defined once `status === 'ready'`. SPEC §16.5.
|
|
921
|
+
*/
|
|
922
|
+
type LazyChild<Api> = {
|
|
923
|
+
readonly status: ReadSignal<'idle' | 'loading' | 'ready' | 'error'>;
|
|
924
|
+
readonly api: ReadSignal<Api | undefined>;
|
|
925
|
+
readonly error: ReadSignal<unknown | undefined>;
|
|
926
|
+
load(): Promise<Api>;
|
|
927
|
+
dispose(): void;
|
|
928
|
+
};
|
|
792
929
|
/**
|
|
793
930
|
* `ctx` is the lifecycle-bound surface every controller factory receives.
|
|
794
931
|
* Every primitive constructed through `ctx` is owned by the controller and
|
|
@@ -806,6 +943,11 @@ type Ctx<TDeps = AmbientDeps> = {
|
|
|
806
943
|
}): LocalCache<T>;
|
|
807
944
|
use<Args extends unknown[], T>(source: Query<Args, T>, keyOrOptions?: (() => Args) | UseOptions<Args>): QuerySubscription<T>;
|
|
808
945
|
use<Args extends unknown[], TPage, TItem>(source: InfiniteQuery<Args, TPage, TItem>, keyOrOptions?: (() => Args) | UseOptions<Args>): InfiniteQuerySubscription<TPage, TItem>;
|
|
946
|
+
use<Args extends unknown[], T, U>(source: Query<Args, T>, options: {
|
|
947
|
+
key?: () => Args;
|
|
948
|
+
enabled?: () => boolean;
|
|
949
|
+
select: (data: T) => U;
|
|
950
|
+
}): QuerySubscription<U>;
|
|
809
951
|
mutation<V, R>(spec: MutationSpec<V, R>): Mutation<V, R>;
|
|
810
952
|
emitter<T = void>(): Emitter<T>;
|
|
811
953
|
field<T>(initial: T, validators?: ReadonlyArray<Validator<T>>): Field<T>;
|
|
@@ -840,6 +982,52 @@ type Ctx<TDeps = AmbientDeps> = {
|
|
|
840
982
|
suspend: () => void;
|
|
841
983
|
resume: () => void;
|
|
842
984
|
};
|
|
985
|
+
/**
|
|
986
|
+
* Ephemeral child controller bound to either (a) the explicit `dispose()`
|
|
987
|
+
* call returned in the tuple, or (b) the parent's disposal — whichever
|
|
988
|
+
* comes first. Same lifecycle semantics as `ctx.attach` minus suspend /
|
|
989
|
+
* resume (sessions are short-lived, not pause-able). Returns a `[api,
|
|
990
|
+
* dispose]` tuple so the api shape is exactly the controller's return
|
|
991
|
+
* type, with no wrapper to unpack.
|
|
992
|
+
*
|
|
993
|
+
* Use cases: modal forms, inline edit sessions, wizards, command palette.
|
|
994
|
+
* SPEC §11.1.
|
|
995
|
+
*/
|
|
996
|
+
session<Props, Api>(def: ControllerDef<Props, Api>, props: Props, options?: {
|
|
997
|
+
deps?: Partial<TDeps>;
|
|
998
|
+
}): readonly [api: Api, dispose: () => void];
|
|
999
|
+
/**
|
|
1000
|
+
* Diff-by-key set of child controllers driven by a reactive `source`.
|
|
1001
|
+
* On every change to `source`, the collection:
|
|
1002
|
+
* - **new keys** → construct a child via `controller` + `propsOf(item)`
|
|
1003
|
+
* (or `factory(item)` for the heterogeneous form);
|
|
1004
|
+
* - **removed keys** → dispose that child;
|
|
1005
|
+
* - **unchanged keys** → leave it alone (`propsOf` is NOT re-applied).
|
|
1006
|
+
*
|
|
1007
|
+
* For per-item type-discriminated children, use the `factory` form —
|
|
1008
|
+
* type changes for an existing key dispose and reconstruct.
|
|
1009
|
+
*
|
|
1010
|
+
* Construction errors (factory or controller throw) are routed to
|
|
1011
|
+
* `onError` with `kind: 'construction'` and the item is **skipped** —
|
|
1012
|
+
* the collection's surface shows one fewer entry. The diff loop does
|
|
1013
|
+
* not re-throw. SPEC §11.1, §12.1.6.
|
|
1014
|
+
*/
|
|
1015
|
+
collection<Item, K, Props, Api>(options: CollectionHomogeneousOptions<Item, K, Props, Api, TDeps>): Collection<K, Api>;
|
|
1016
|
+
collection<Item, K, R extends CollectionFactoryResult>(options: CollectionFactoryOptions<Item, K, R, TDeps>): Collection<K, CollectionFactoryApi<R>>;
|
|
1017
|
+
/**
|
|
1018
|
+
* Code-split child controller. The loader is invoked on `load()`
|
|
1019
|
+
* (idempotent), then the controller is constructed with the supplied
|
|
1020
|
+
* `props`. `status` / `api` / `error` are reactive signals; subscribe
|
|
1021
|
+
* via `use(child.api)` in your view layer.
|
|
1022
|
+
*
|
|
1023
|
+
* Parent disposal disposes the loaded child (if any) and flags any
|
|
1024
|
+
* in-flight load so its eventual settle is dropped on the floor.
|
|
1025
|
+
* Construction or import failures route through `onError` with
|
|
1026
|
+
* `kind: 'construction'`. SPEC §16.5.
|
|
1027
|
+
*/
|
|
1028
|
+
lazyChild<Props, Api>(loader: () => Promise<ControllerDef<Props, Api>>, props: Props, options?: {
|
|
1029
|
+
deps?: Partial<TDeps>;
|
|
1030
|
+
}): LazyChild<Api>;
|
|
843
1031
|
effect(fn: () => void | (() => void)): void;
|
|
844
1032
|
on<T>(emitter: Emitter<T>, handler: (value: T) => void): void;
|
|
845
1033
|
provide<T>(scope: Scope<T>, value: T): void;
|
|
@@ -884,5 +1072,5 @@ type Root<Api> = Api & {
|
|
|
884
1072
|
readonly __debug: DebugBus;
|
|
885
1073
|
};
|
|
886
1074
|
//#endregion
|
|
887
|
-
export {
|
|
888
|
-
//# sourceMappingURL=types-
|
|
1075
|
+
export { FormErrors as $, DebugEvent as A, QuerySpec as B, SetDataEvent as C, MutationSpec as D, MutationConcurrency as E, AsyncStatus as F, UseOptions as G, RetryDelay as H, DehydratedEntry as I, FieldArrayItemErrors as J, DeepPartial as K, DehydratedState as L, InfiniteQuerySpec as M, InfiniteQuerySubscription as N, DebugBus as O, AsyncState as P, Form as Q, LocalCache as R, RegisteredQuery as S, Mutation as T, RetryPolicy as U, QuerySubscription as V, Snapshot as W, FieldArrayValidator as X, FieldArrayOptions as Y, FieldArrayValue as Z, defineScope as _, CollectionFactoryResult as a, Validator as at, QueryClientPlugin as b, CtrlApi as c, Signal as ct, Field as d, EmitterErrorReporter as dt, FormOptions as et, LazyChild as f, createEmitter as ft, ScopeOptions as g, Scope as h, CollectionFactoryOptions as i, ItemInitial as it, InfiniteQuery as j, DebugCacheEntry as k, CtrlProps as l, ErrorContext as lt, RootOptions as m, Collection as n, FormValidator as nt, CollectionHomogeneousOptions as o, Computed as ot, Root as p, FieldArray as q, CollectionFactoryApi as r, FormValue as rt, ControllerDef as s, ReadSignal as st, AmbientDeps as t, FormSchema as tt, Ctx as u, Emitter as ut, GcEvent as v, lookupRegisteredQuery as w, QueryClientPluginApi as x, InvalidateEvent as y, Query as z };
|
|
1076
|
+
//# sourceMappingURL=types-CRn4UoLn.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types-CRn4UoLn.d.mts","names":[],"sources":["../src/emitter.ts","../src/errors.ts","../src/signals/types.ts","../src/forms/types.ts","../src/forms/form-types.ts","../src/query/types.ts","../src/query/infinite.ts","../src/devtools.ts","../src/query/mutation.ts","../src/query/plugin.ts","../src/scope.ts","../src/controller/types.ts"],"mappings":"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"}
|