@vielzeug/forge 2.3.1 → 3.1.0
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/README.md +17 -16
- package/dist/_field.cjs +1 -1
- package/dist/_field.cjs.map +1 -1
- package/dist/_field.d.ts +13 -10
- package/dist/_field.d.ts.map +1 -1
- package/dist/_field.js +33 -33
- package/dist/_field.js.map +1 -1
- package/dist/_notify.cjs +1 -1
- package/dist/_notify.cjs.map +1 -1
- package/dist/_notify.d.ts +6 -5
- package/dist/_notify.d.ts.map +1 -1
- package/dist/_notify.js +22 -8
- package/dist/_notify.js.map +1 -1
- package/dist/core/path.cjs +1 -1
- package/dist/core/path.cjs.map +1 -1
- package/dist/core/path.d.ts +23 -12
- package/dist/core/path.d.ts.map +1 -1
- package/dist/core/path.js +172 -114
- package/dist/core/path.js.map +1 -1
- package/dist/dom.cjs +1 -1
- package/dist/dom.cjs.map +1 -1
- package/dist/dom.d.ts +5 -6
- package/dist/dom.d.ts.map +1 -1
- package/dist/dom.js +7 -7
- package/dist/dom.js.map +1 -1
- package/dist/errors.cjs +1 -1
- package/dist/errors.cjs.map +1 -1
- package/dist/errors.d.ts +6 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +10 -2
- package/dist/errors.js.map +1 -1
- package/dist/forge.cjs +1 -1
- package/dist/forge.cjs.map +1 -1
- package/dist/forge.iife.js +1 -1
- package/dist/forge.iife.js.map +1 -1
- package/dist/forge.js +1 -1
- package/dist/forge.js.map +1 -1
- package/dist/form-data.cjs +1 -1
- package/dist/form-data.cjs.map +1 -1
- package/dist/form-data.d.ts +2 -2
- package/dist/form-data.d.ts.map +1 -1
- package/dist/form-data.js +23 -16
- package/dist/form-data.js.map +1 -1
- package/dist/form.cjs +1 -1
- package/dist/form.cjs.map +1 -1
- package/dist/form.d.ts +1 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +136 -86
- package/dist/form.js.map +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/persist.cjs +2 -0
- package/dist/persist.cjs.map +1 -0
- package/dist/persist.d.ts +18 -0
- package/dist/persist.d.ts.map +1 -0
- package/dist/persist.js +19 -0
- package/dist/persist.js.map +1 -0
- package/dist/plain.cjs +2 -0
- package/dist/plain.cjs.map +1 -0
- package/dist/plain.d.ts +21 -0
- package/dist/plain.d.ts.map +1 -0
- package/dist/plain.js +9 -0
- package/dist/plain.js.map +1 -0
- package/dist/schema.cjs +2 -0
- package/dist/schema.cjs.map +1 -0
- package/dist/schema.d.ts +22 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +26 -0
- package/dist/schema.js.map +1 -0
- package/dist/types.d.ts +28 -20
- package/dist/types.d.ts.map +1 -1
- package/package.json +26 -34
- package/dist/spell.cjs +0 -2
- package/dist/spell.cjs.map +0 -1
- package/dist/spell.d.ts +0 -5
- package/dist/spell.d.ts.map +0 -1
- package/dist/spell.js +0 -48
- package/dist/spell.js.map +0 -1
- package/dist/vault.cjs +0 -2
- package/dist/vault.cjs.map +0 -1
- package/dist/vault.d.ts +0 -10
- package/dist/vault.d.ts.map +0 -1
- package/dist/vault.js +0 -14
- package/dist/vault.js.map +0 -1
package/dist/types.d.ts
CHANGED
|
@@ -1,18 +1,26 @@
|
|
|
1
1
|
export type Unsubscribe = () => void;
|
|
2
2
|
export type MaybePromise<T> = T | PromiseLike<T>;
|
|
3
|
-
|
|
3
|
+
/**
|
|
4
|
+
* `Date`, `File`, and `Blob` are built-in atomic leaves. Dates are cloned and exposed
|
|
5
|
+
* without mutator methods; browser binary values preserve identity. Other values must be
|
|
6
|
+
* finite JSON primitives, plain objects, or dense arrays.
|
|
7
|
+
*/
|
|
8
|
+
export type Atomic = Date | File | Blob;
|
|
9
|
+
type DateMutator = Extract<keyof Date, `set${string}`>;
|
|
10
|
+
export type ReadonlyDate = Omit<Date, DateMutator>;
|
|
11
|
+
export type ReadonlyDeep<T> = T extends Date ? ReadonlyDate : T extends File | Blob ? T : T extends readonly (infer Item)[] ? readonly ReadonlyDeep<Item>[] : T extends Record<string, unknown> ? {
|
|
4
12
|
readonly [K in keyof T]: ReadonlyDeep<T[K]>;
|
|
5
13
|
} : T;
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
fields?: FormErrors<TValues>;
|
|
11
|
-
formError?: string;
|
|
14
|
+
/** A single flat validation issue. `path: []` denotes a form-level error. */
|
|
15
|
+
export type ValidationIssue = Readonly<{
|
|
16
|
+
path: readonly (string | number)[];
|
|
17
|
+
message: string;
|
|
12
18
|
}>;
|
|
13
|
-
export type FormValidator<TValues extends Record<string, unknown>> = (values: ReadonlyDeep<TValues>, signal: AbortSignal) => MaybePromise<
|
|
19
|
+
export type FormValidator<TValues extends Record<string, unknown>> = (values: ReadonlyDeep<TValues>, signal: AbortSignal) => MaybePromise<readonly ValidationIssue[] | undefined>;
|
|
14
20
|
export type FormOptions<TValues extends Record<string, unknown>> = Readonly<{
|
|
15
21
|
initialValues: TValues;
|
|
22
|
+
/** Applied before immutable() at every write boundary (init, set, patch, reset, field.set). */
|
|
23
|
+
normalize?: (value: unknown) => unknown;
|
|
16
24
|
onSubscriberError?: (error: unknown) => void;
|
|
17
25
|
validate?: FormValidator<NoInfer<TValues>>;
|
|
18
26
|
}>;
|
|
@@ -25,31 +33,29 @@ export type FieldState<V> = Readonly<{
|
|
|
25
33
|
touched: boolean;
|
|
26
34
|
value: ReadonlyDeep<V>;
|
|
27
35
|
}>;
|
|
28
|
-
export type FormState
|
|
29
|
-
errors: FormErrors<TValues> | undefined;
|
|
36
|
+
export type FormState = Readonly<{
|
|
30
37
|
formError: string | undefined;
|
|
31
38
|
hasErrors: boolean;
|
|
39
|
+
issues: readonly ValidationIssue[] | undefined;
|
|
32
40
|
submitCount: number;
|
|
33
41
|
submitting: boolean;
|
|
34
42
|
touched: boolean;
|
|
35
43
|
validity: 'invalid' | 'unknown' | 'valid';
|
|
36
44
|
validating: boolean;
|
|
37
45
|
}>;
|
|
38
|
-
export type ValidationResult
|
|
46
|
+
export type ValidationResult = Readonly<{
|
|
39
47
|
status: 'aborted';
|
|
40
48
|
}> | Readonly<{
|
|
41
49
|
status: 'valid';
|
|
42
50
|
}> | Readonly<{
|
|
43
|
-
|
|
44
|
-
formError: string | undefined;
|
|
51
|
+
issues: readonly ValidationIssue[];
|
|
45
52
|
status: 'invalid';
|
|
46
53
|
}>;
|
|
47
|
-
export type SubmitResult<TResult = void
|
|
54
|
+
export type SubmitResult<TResult = void> = Readonly<{
|
|
48
55
|
status: 'aborted';
|
|
49
56
|
}> | Readonly<{
|
|
57
|
+
issues: readonly ValidationIssue[];
|
|
50
58
|
status: 'invalid';
|
|
51
|
-
errors: FormErrors<TValues> | undefined;
|
|
52
|
-
formError: string | undefined;
|
|
53
59
|
}> | Readonly<{
|
|
54
60
|
status: 'ok';
|
|
55
61
|
value: TResult;
|
|
@@ -76,12 +82,14 @@ export type Form<TValues extends Record<string, unknown>> = {
|
|
|
76
82
|
dispose(): void;
|
|
77
83
|
readonly disposed: boolean;
|
|
78
84
|
field<K extends keyof TValues & string>(key: K): Field<TValues[K]>;
|
|
85
|
+
patch(next: Partial<TValues>): void;
|
|
86
|
+
patch(updater: (previous: ReadonlyDeep<TValues>) => Partial<TValues>): void;
|
|
79
87
|
reset(next?: TValues): void;
|
|
80
88
|
set(next: TValues | ((previous: ReadonlyDeep<TValues>) => TValues)): void;
|
|
81
|
-
readonly state: FormState
|
|
82
|
-
submit<TResult = void>(handler: (values: ReadonlyDeep<TValues>, signal: AbortSignal) => MaybePromise<TResult>, signal?: AbortSignal): Promise<SubmitResult<TResult
|
|
83
|
-
subscribe(listener: (state: FormState
|
|
84
|
-
validate(signal?: AbortSignal): Promise<ValidationResult
|
|
89
|
+
readonly state: FormState;
|
|
90
|
+
submit<TResult = void>(handler: (values: ReadonlyDeep<TValues>, signal: AbortSignal) => MaybePromise<TResult>, signal?: AbortSignal): Promise<SubmitResult<TResult>>;
|
|
91
|
+
subscribe(listener: (state: FormState) => void, options?: SubscribeOptions): Unsubscribe;
|
|
92
|
+
validate(signal?: AbortSignal): Promise<ValidationResult>;
|
|
85
93
|
readonly value: ReadonlyDeep<TValues>;
|
|
86
94
|
};
|
|
87
95
|
export {};
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,MAAM,YAAY,CAAC,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAEjD,MAAM,MAAM,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vielzeug/forge",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.1.0",
|
|
4
|
+
"description": "Typed form state, validation, submission",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "https://github.com/helmuthdu/vielzeug",
|
|
@@ -33,15 +33,15 @@
|
|
|
33
33
|
"require": "./dist/form-data.cjs",
|
|
34
34
|
"types": "./dist/form-data.d.ts"
|
|
35
35
|
},
|
|
36
|
-
"./
|
|
37
|
-
"import": "./dist/
|
|
38
|
-
"require": "./dist/
|
|
39
|
-
"types": "./dist/
|
|
36
|
+
"./persist": {
|
|
37
|
+
"import": "./dist/persist.js",
|
|
38
|
+
"require": "./dist/persist.cjs",
|
|
39
|
+
"types": "./dist/persist.d.ts"
|
|
40
40
|
},
|
|
41
|
-
"./
|
|
42
|
-
"import": "./dist/
|
|
43
|
-
"require": "./dist/
|
|
44
|
-
"types": "./dist/
|
|
41
|
+
"./schema": {
|
|
42
|
+
"import": "./dist/schema.js",
|
|
43
|
+
"require": "./dist/schema.cjs",
|
|
44
|
+
"types": "./dist/schema.d.ts"
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"typesVersions": {
|
|
@@ -52,11 +52,11 @@
|
|
|
52
52
|
"form-data": [
|
|
53
53
|
"dist/form-data.d.ts"
|
|
54
54
|
],
|
|
55
|
-
"
|
|
56
|
-
"dist/
|
|
55
|
+
"persist": [
|
|
56
|
+
"dist/persist.d.ts"
|
|
57
57
|
],
|
|
58
|
-
"
|
|
59
|
-
"dist/
|
|
58
|
+
"schema": [
|
|
59
|
+
"dist/schema.d.ts"
|
|
60
60
|
]
|
|
61
61
|
}
|
|
62
62
|
},
|
|
@@ -66,34 +66,26 @@
|
|
|
66
66
|
"registry": "https://registry.npmjs.org/"
|
|
67
67
|
},
|
|
68
68
|
"scripts": {
|
|
69
|
-
"build": "vite build && pnpm run build:bundle && pnpm run build:types",
|
|
69
|
+
"build": "vite build && pnpm --silent run build:bundle && pnpm --silent run build:types && pnpm --silent run test:types && pnpm --silent run verify:exports",
|
|
70
70
|
"build:bundle": "vite build --config vite.bundle.config.ts",
|
|
71
71
|
"build:types": "tsc -p tsconfig.declarations.json",
|
|
72
72
|
"fix": "biome check --write src",
|
|
73
73
|
"lint": "biome ci src",
|
|
74
|
-
"prepublishOnly": "pnpm run build",
|
|
74
|
+
"prepublishOnly": "pnpm --silent run build",
|
|
75
75
|
"preview": "vite preview",
|
|
76
|
-
"test": "vitest"
|
|
76
|
+
"test": "vitest",
|
|
77
|
+
"test:types": "tsc -p tsconfig.type-tests.json",
|
|
78
|
+
"verify:exports": "node verify-exports.mjs"
|
|
77
79
|
},
|
|
78
|
-
"dependencies": {
|
|
79
|
-
|
|
80
|
-
"@vielzeug/spell": "2.3.0",
|
|
81
|
-
"@vielzeug/vault": "2.5.0"
|
|
82
|
-
},
|
|
83
|
-
"peerDependenciesMeta": {
|
|
84
|
-
"@vielzeug/spell": {
|
|
85
|
-
"optional": true
|
|
86
|
-
},
|
|
87
|
-
"@vielzeug/vault": {
|
|
88
|
-
"optional": true
|
|
89
|
-
}
|
|
80
|
+
"dependencies": {
|
|
81
|
+
"@vielzeug/arsenal": "3.0.0"
|
|
90
82
|
},
|
|
91
83
|
"devDependencies": {
|
|
92
|
-
"@types/node": "^26.
|
|
93
|
-
"@vielzeug/spell": "
|
|
94
|
-
"@vielzeug/vault": "
|
|
84
|
+
"@types/node": "^26.4.1",
|
|
85
|
+
"@vielzeug/spell": "3.1.0",
|
|
86
|
+
"@vielzeug/vault": "3.0.1",
|
|
95
87
|
"typescript": "^6.0.3",
|
|
96
|
-
"vite": "^8.2.
|
|
97
|
-
"vitest": "^
|
|
88
|
+
"vite": "^8.2.2",
|
|
89
|
+
"vitest": "^5.0.0"
|
|
98
90
|
}
|
|
99
91
|
}
|
package/dist/spell.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./core/path.cjs");function t(e){return e.code===`invalid_union`}function n(e,t){return t.aborted?Promise.resolve(void 0):new Promise((n,r)=>{let i=()=>n(void 0);t.addEventListener(`abort`,i,{once:!0}),e.then(e=>{t.removeEventListener(`abort`,i),n(e)},e=>{t.removeEventListener(`abort`,i),r(e)})})}function r(e,t){return t.map(t=>({...t,path:[...e,...t.path]}))}function i(i){return async(a,o)=>{let s=await n(i.safeParseAsync(a),o);if(!s||s.success)return;let c=s.error.issues.flatMap(e=>{if(!t(e))return[e];let n=s.error.bestMatch(e);return n?r(e.path,n):[e]}),l={},u;for(let t of c){if(t.path.length===0){u??=t.message;continue}l=e.writeError(l,t.path,t.message)}let d={fields:Object.keys(l).length===0?void 0:l,formError:u};return d.fields===void 0&&d.formError===void 0?void 0:d}}exports.customValidator=i;
|
|
2
|
-
//# sourceMappingURL=spell.cjs.map
|
package/dist/spell.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spell.cjs","names":[],"sources":["../src/spell.ts"],"sourcesContent":["import type { AnySchema, Issue, SchemaMode } from '@vielzeug/spell';\nimport type { ErrorTree } from './core/path';\nimport { writeError } from './core/path';\nimport type { FormErrors, FormValidator, ValidationErrors } from './types';\n\ntype UnionIssue = Extract<Issue, { code: 'invalid_union' }>;\n\nfunction isUnionIssue(issue: Issue): issue is UnionIssue {\n return issue.code === 'invalid_union';\n}\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T | undefined> {\n if (signal.aborted) return Promise.resolve(undefined);\n\n return new Promise((resolve, reject) => {\n const abort = () => resolve(undefined);\n\n signal.addEventListener('abort', abort, { once: true });\n void promise.then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n}\n\nfunction prefixIssues(path: readonly (string | number)[], issues: readonly Issue[]): Issue[] {\n return issues.map((issue) => ({ ...issue, path: [...path, ...issue.path] }));\n}\n\n/** Adapts a Spell Schema into Forge's full-form validator without transforming form values. */\nexport function customValidator<TValues extends Record<string, unknown>>(\n schema: AnySchema<unknown, TValues, SchemaMode>,\n): FormValidator<TValues> {\n return async (values, signal) => {\n const result = await abortable(schema.safeParseAsync(values), signal);\n\n if (!result || result.success) return undefined;\n\n const issues = result.error.issues.flatMap((issue) => {\n if (!isUnionIssue(issue)) return [issue];\n\n const bestMatch = result.error.bestMatch(issue);\n\n return bestMatch ? prefixIssues(issue.path, bestMatch) : [issue];\n });\n let fields: ErrorTree = {};\n let formError: string | undefined;\n\n for (const issue of issues) {\n if (issue.path.length === 0) {\n formError ??= issue.message;\n continue;\n }\n\n fields = writeError(fields, issue.path, issue.message);\n }\n\n const errors: ValidationErrors<TValues> = {\n fields: Object.keys(fields).length === 0 ? undefined : (fields as FormErrors<TValues>),\n formError,\n };\n\n return errors.fields === undefined && errors.formError === undefined ? undefined : errors;\n };\n}\n"],"mappings":"sGAOA,SAAS,EAAa,EAAmC,CACvD,OAAO,EAAM,OAAS,eACxB,CAEA,SAAS,EAAa,EAAqB,EAA6C,CAGtF,OAFI,EAAO,QAAgB,QAAQ,QAAQ,IAAA,EAAS,EAE7C,IAAI,SAAS,EAAS,IAAW,CACtC,IAAM,MAAc,EAAQ,IAAA,EAAS,EAErC,EAAO,iBAAiB,QAAS,EAAO,CAAE,KAAM,EAAK,CAAC,EACtD,EAAa,KACV,GAAU,CACT,EAAO,oBAAoB,QAAS,CAAK,EACzC,EAAQ,CAAK,CACf,EACC,GAAmB,CAClB,EAAO,oBAAoB,QAAS,CAAK,EACzC,EAAO,CAAK,CACd,CACF,CACF,CAAC,CACH,CAEA,SAAS,EAAa,EAAoC,EAAmC,CAC3F,OAAO,EAAO,IAAK,IAAW,CAAE,GAAG,EAAO,KAAM,CAAC,GAAG,EAAM,GAAG,EAAM,IAAI,CAAE,EAAE,CAC7E,CAGA,SAAgB,EACd,EACwB,CACxB,OAAO,MAAO,EAAQ,IAAW,CAC/B,IAAM,EAAS,MAAM,EAAU,EAAO,eAAe,CAAM,EAAG,CAAM,EAEpE,GAAI,CAAC,GAAU,EAAO,QAAS,OAE/B,IAAM,EAAS,EAAO,MAAM,OAAO,QAAS,GAAU,CACpD,GAAI,CAAC,EAAa,CAAK,EAAG,MAAO,CAAC,CAAK,EAEvC,IAAM,EAAY,EAAO,MAAM,UAAU,CAAK,EAE9C,OAAO,EAAY,EAAa,EAAM,KAAM,CAAS,EAAI,CAAC,CAAK,CACjE,CAAC,EACG,EAAoB,CAAC,EACrB,EAEJ,IAAK,IAAM,KAAS,EAAQ,CAC1B,GAAI,EAAM,KAAK,SAAW,EAAG,CAC3B,IAAc,EAAM,QACpB,QACF,CAEA,EAAS,EAAA,WAAW,EAAQ,EAAM,KAAM,EAAM,OAAO,CACvD,CAEA,IAAM,EAAoC,CACxC,OAAQ,OAAO,KAAK,CAAM,CAAC,CAAC,SAAW,EAAI,IAAA,GAAa,EACxD,WACF,EAEA,OAAO,EAAO,SAAW,IAAA,IAAa,EAAO,YAAc,IAAA,GAAY,IAAA,GAAY,CACrF,CACF"}
|
package/dist/spell.d.ts
DELETED
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
import type { AnySchema, SchemaMode } from '@vielzeug/spell';
|
|
2
|
-
import type { FormValidator } from './types';
|
|
3
|
-
/** Adapts a Spell Schema into Forge's full-form validator without transforming form values. */
|
|
4
|
-
export declare function customValidator<TValues extends Record<string, unknown>>(schema: AnySchema<unknown, TValues, SchemaMode>): FormValidator<TValues>;
|
|
5
|
-
//# sourceMappingURL=spell.d.ts.map
|
package/dist/spell.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spell.d.ts","sourceRoot":"","sources":["../src/spell.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAS,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAGpE,OAAO,KAAK,EAAc,aAAa,EAAoB,MAAM,SAAS,CAAC;AAgC3E,+FAA+F;AAC/F,wBAAgB,eAAe,CAAC,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrE,MAAM,EAAE,SAAS,CAAC,OAAO,EAAE,OAAO,EAAE,UAAU,CAAC,GAC9C,aAAa,CAAC,OAAO,CAAC,CAgCxB"}
|
package/dist/spell.js
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { writeError as e } from "./core/path.js";
|
|
2
|
-
//#region src/spell.ts
|
|
3
|
-
function t(e) {
|
|
4
|
-
return e.code === "invalid_union";
|
|
5
|
-
}
|
|
6
|
-
function n(e, t) {
|
|
7
|
-
return t.aborted ? Promise.resolve(void 0) : new Promise((n, r) => {
|
|
8
|
-
let i = () => n(void 0);
|
|
9
|
-
t.addEventListener("abort", i, { once: !0 }), e.then((e) => {
|
|
10
|
-
t.removeEventListener("abort", i), n(e);
|
|
11
|
-
}, (e) => {
|
|
12
|
-
t.removeEventListener("abort", i), r(e);
|
|
13
|
-
});
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
function r(e, t) {
|
|
17
|
-
return t.map((t) => ({
|
|
18
|
-
...t,
|
|
19
|
-
path: [...e, ...t.path]
|
|
20
|
-
}));
|
|
21
|
-
}
|
|
22
|
-
function i(i) {
|
|
23
|
-
return async (a, o) => {
|
|
24
|
-
let s = await n(i.safeParseAsync(a), o);
|
|
25
|
-
if (!s || s.success) return;
|
|
26
|
-
let c = s.error.issues.flatMap((e) => {
|
|
27
|
-
if (!t(e)) return [e];
|
|
28
|
-
let n = s.error.bestMatch(e);
|
|
29
|
-
return n ? r(e.path, n) : [e];
|
|
30
|
-
}), l = {}, u;
|
|
31
|
-
for (let t of c) {
|
|
32
|
-
if (t.path.length === 0) {
|
|
33
|
-
u ??= t.message;
|
|
34
|
-
continue;
|
|
35
|
-
}
|
|
36
|
-
l = e(l, t.path, t.message);
|
|
37
|
-
}
|
|
38
|
-
let d = {
|
|
39
|
-
fields: Object.keys(l).length === 0 ? void 0 : l,
|
|
40
|
-
formError: u
|
|
41
|
-
};
|
|
42
|
-
return d.fields === void 0 && d.formError === void 0 ? void 0 : d;
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
//#endregion
|
|
46
|
-
export { i as customValidator };
|
|
47
|
-
|
|
48
|
-
//# sourceMappingURL=spell.js.map
|
package/dist/spell.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spell.js","names":[],"sources":["../src/spell.ts"],"sourcesContent":["import type { AnySchema, Issue, SchemaMode } from '@vielzeug/spell';\nimport type { ErrorTree } from './core/path';\nimport { writeError } from './core/path';\nimport type { FormErrors, FormValidator, ValidationErrors } from './types';\n\ntype UnionIssue = Extract<Issue, { code: 'invalid_union' }>;\n\nfunction isUnionIssue(issue: Issue): issue is UnionIssue {\n return issue.code === 'invalid_union';\n}\n\nfunction abortable<T>(promise: Promise<T>, signal: AbortSignal): Promise<T | undefined> {\n if (signal.aborted) return Promise.resolve(undefined);\n\n return new Promise((resolve, reject) => {\n const abort = () => resolve(undefined);\n\n signal.addEventListener('abort', abort, { once: true });\n void promise.then(\n (value) => {\n signal.removeEventListener('abort', abort);\n resolve(value);\n },\n (error: unknown) => {\n signal.removeEventListener('abort', abort);\n reject(error);\n },\n );\n });\n}\n\nfunction prefixIssues(path: readonly (string | number)[], issues: readonly Issue[]): Issue[] {\n return issues.map((issue) => ({ ...issue, path: [...path, ...issue.path] }));\n}\n\n/** Adapts a Spell Schema into Forge's full-form validator without transforming form values. */\nexport function customValidator<TValues extends Record<string, unknown>>(\n schema: AnySchema<unknown, TValues, SchemaMode>,\n): FormValidator<TValues> {\n return async (values, signal) => {\n const result = await abortable(schema.safeParseAsync(values), signal);\n\n if (!result || result.success) return undefined;\n\n const issues = result.error.issues.flatMap((issue) => {\n if (!isUnionIssue(issue)) return [issue];\n\n const bestMatch = result.error.bestMatch(issue);\n\n return bestMatch ? prefixIssues(issue.path, bestMatch) : [issue];\n });\n let fields: ErrorTree = {};\n let formError: string | undefined;\n\n for (const issue of issues) {\n if (issue.path.length === 0) {\n formError ??= issue.message;\n continue;\n }\n\n fields = writeError(fields, issue.path, issue.message);\n }\n\n const errors: ValidationErrors<TValues> = {\n fields: Object.keys(fields).length === 0 ? undefined : (fields as FormErrors<TValues>),\n formError,\n };\n\n return errors.fields === undefined && errors.formError === undefined ? undefined : errors;\n };\n}\n"],"mappings":";;AAOA,SAAS,EAAa,GAAmC;CACvD,OAAO,EAAM,SAAS;AACxB;AAEA,SAAS,EAAa,GAAqB,GAA6C;CAGtF,OAFI,EAAO,UAAgB,QAAQ,QAAQ,KAAA,CAAS,IAE7C,IAAI,SAAS,GAAS,MAAW;EACtC,IAAM,UAAc,EAAQ,KAAA,CAAS;EAGrC,AADA,EAAO,iBAAiB,SAAS,GAAO,EAAE,MAAM,GAAK,CAAC,GACtD,EAAa,MACV,MAAU;GAET,AADA,EAAO,oBAAoB,SAAS,CAAK,GACzC,EAAQ,CAAK;EACf,IACC,MAAmB;GAElB,AADA,EAAO,oBAAoB,SAAS,CAAK,GACzC,EAAO,CAAK;EACd,CACF;CACF,CAAC;AACH;AAEA,SAAS,EAAa,GAAoC,GAAmC;CAC3F,OAAO,EAAO,KAAK,OAAW;EAAE,GAAG;EAAO,MAAM,CAAC,GAAG,GAAM,GAAG,EAAM,IAAI;CAAE,EAAE;AAC7E;AAGA,SAAgB,EACd,GACwB;CACxB,OAAO,OAAO,GAAQ,MAAW;EAC/B,IAAM,IAAS,MAAM,EAAU,EAAO,eAAe,CAAM,GAAG,CAAM;EAEpE,IAAI,CAAC,KAAU,EAAO,SAAS;EAE/B,IAAM,IAAS,EAAO,MAAM,OAAO,SAAS,MAAU;GACpD,IAAI,CAAC,EAAa,CAAK,GAAG,OAAO,CAAC,CAAK;GAEvC,IAAM,IAAY,EAAO,MAAM,UAAU,CAAK;GAE9C,OAAO,IAAY,EAAa,EAAM,MAAM,CAAS,IAAI,CAAC,CAAK;EACjE,CAAC,GACG,IAAoB,CAAC,GACrB;EAEJ,KAAK,IAAM,KAAS,GAAQ;GAC1B,IAAI,EAAM,KAAK,WAAW,GAAG;IAC3B,MAAc,EAAM;IACpB;GACF;GAEA,IAAS,EAAW,GAAQ,EAAM,MAAM,EAAM,OAAO;EACvD;EAEA,IAAM,IAAoC;GACxC,QAAQ,OAAO,KAAK,CAAM,CAAC,CAAC,WAAW,IAAI,KAAA,IAAa;GACxD;EACF;EAEA,OAAO,EAAO,WAAW,KAAA,KAAa,EAAO,cAAc,KAAA,IAAY,KAAA,IAAY;CACrF;AACF"}
|
package/dist/vault.cjs
DELETED
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});async function e(e,t,n,r,i){let a=await t.get(n,r);if(!a)return!1;let o=i.fromRecord(a);return o?(e.reset(o),!0):!1}async function t(e,t,n,r){await t.put(n,r.toRecord(e.value))}exports.loadForm=e,exports.saveForm=t;
|
|
2
|
-
//# sourceMappingURL=vault.cjs.map
|
package/dist/vault.cjs.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.cjs","names":[],"sources":["../src/vault.ts"],"sourcesContent":["import type { AnySchema, KeyOf, RecordOf, VaultStore } from '@vielzeug/vault';\n\nimport type { Form, ReadonlyDeep } from './types';\n\nexport type FormDraftCodec<\n TValues extends Record<string, unknown>,\n S extends AnySchema,\n K extends keyof S & string,\n> = Readonly<{\n fromRecord(record: RecordOf<S, K>): TValues | undefined;\n toRecord(values: ReadonlyDeep<TValues>): RecordOf<S, K>;\n}>;\n\n/** Explicit save/load avoids hidden autosave, migration, and persistence-policy side effects. */\nexport async function loadForm<\n TValues extends Record<string, unknown>,\n S extends AnySchema,\n K extends keyof S & string,\n>(\n form: Form<TValues>,\n adapter: VaultStore<S>,\n table: K,\n key: KeyOf<S, K>,\n codec: FormDraftCodec<TValues, S, K>,\n): Promise<boolean> {\n const record = await adapter.get(table, key);\n\n if (!record) return false;\n\n const values = codec.fromRecord(record);\n\n if (!values) return false;\n\n form.reset(values);\n\n return true;\n}\n\nexport async function saveForm<\n TValues extends Record<string, unknown>,\n S extends AnySchema,\n K extends keyof S & string,\n>(form: Form<TValues>, adapter: VaultStore<S>, table: K, codec: FormDraftCodec<TValues, S, K>): Promise<void> {\n await adapter.put(table, codec.toRecord(form.value));\n}\n"],"mappings":"mEAcA,eAAsB,EAKpB,EACA,EACA,EACA,EACA,EACkB,CAClB,IAAM,EAAS,MAAM,EAAQ,IAAI,EAAO,CAAG,EAE3C,GAAI,CAAC,EAAQ,MAAO,GAEpB,IAAM,EAAS,EAAM,WAAW,CAAM,EAMtC,OAJK,GAEL,EAAK,MAAM,CAAM,EAEV,IAJa,EAKtB,CAEA,eAAsB,EAIpB,EAAqB,EAAwB,EAAU,EAAqD,CAC5G,MAAM,EAAQ,IAAI,EAAO,EAAM,SAAS,EAAK,KAAK,CAAC,CACrD"}
|
package/dist/vault.d.ts
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
import type { AnySchema, KeyOf, RecordOf, VaultStore } from '@vielzeug/vault';
|
|
2
|
-
import type { Form, ReadonlyDeep } from './types';
|
|
3
|
-
export type FormDraftCodec<TValues extends Record<string, unknown>, S extends AnySchema, K extends keyof S & string> = Readonly<{
|
|
4
|
-
fromRecord(record: RecordOf<S, K>): TValues | undefined;
|
|
5
|
-
toRecord(values: ReadonlyDeep<TValues>): RecordOf<S, K>;
|
|
6
|
-
}>;
|
|
7
|
-
/** Explicit save/load avoids hidden autosave, migration, and persistence-policy side effects. */
|
|
8
|
-
export declare function loadForm<TValues extends Record<string, unknown>, S extends AnySchema, K extends keyof S & string>(form: Form<TValues>, adapter: VaultStore<S>, table: K, key: KeyOf<S, K>, codec: FormDraftCodec<TValues, S, K>): Promise<boolean>;
|
|
9
|
-
export declare function saveForm<TValues extends Record<string, unknown>, S extends AnySchema, K extends keyof S & string>(form: Form<TValues>, adapter: VaultStore<S>, table: K, codec: FormDraftCodec<TValues, S, K>): Promise<void>;
|
|
10
|
-
//# sourceMappingURL=vault.d.ts.map
|
package/dist/vault.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.d.ts","sourceRoot":"","sources":["../src/vault.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,KAAK,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAElD,MAAM,MAAM,cAAc,CACxB,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,IACxB,QAAQ,CAAC;IACX,UAAU,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,GAAG,SAAS,CAAC;IACxD,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACzD,CAAC,CAAC;AAEH,iGAAiG;AACjG,wBAAsB,QAAQ,CAC5B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAE1B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EACnB,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EACtB,KAAK,EAAE,CAAC,EACR,GAAG,EAAE,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAChB,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,GACnC,OAAO,CAAC,OAAO,CAAC,CAYlB;AAED,wBAAsB,QAAQ,CAC5B,OAAO,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvC,CAAC,SAAS,SAAS,EACnB,CAAC,SAAS,MAAM,CAAC,GAAG,MAAM,EAC1B,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,cAAc,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAE5G"}
|
package/dist/vault.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
//#region src/vault.ts
|
|
2
|
-
async function e(e, t, n, r, i) {
|
|
3
|
-
let a = await t.get(n, r);
|
|
4
|
-
if (!a) return !1;
|
|
5
|
-
let o = i.fromRecord(a);
|
|
6
|
-
return o ? (e.reset(o), !0) : !1;
|
|
7
|
-
}
|
|
8
|
-
async function t(e, t, n, r) {
|
|
9
|
-
await t.put(n, r.toRecord(e.value));
|
|
10
|
-
}
|
|
11
|
-
//#endregion
|
|
12
|
-
export { e as loadForm, t as saveForm };
|
|
13
|
-
|
|
14
|
-
//# sourceMappingURL=vault.js.map
|
package/dist/vault.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vault.js","names":[],"sources":["../src/vault.ts"],"sourcesContent":["import type { AnySchema, KeyOf, RecordOf, VaultStore } from '@vielzeug/vault';\n\nimport type { Form, ReadonlyDeep } from './types';\n\nexport type FormDraftCodec<\n TValues extends Record<string, unknown>,\n S extends AnySchema,\n K extends keyof S & string,\n> = Readonly<{\n fromRecord(record: RecordOf<S, K>): TValues | undefined;\n toRecord(values: ReadonlyDeep<TValues>): RecordOf<S, K>;\n}>;\n\n/** Explicit save/load avoids hidden autosave, migration, and persistence-policy side effects. */\nexport async function loadForm<\n TValues extends Record<string, unknown>,\n S extends AnySchema,\n K extends keyof S & string,\n>(\n form: Form<TValues>,\n adapter: VaultStore<S>,\n table: K,\n key: KeyOf<S, K>,\n codec: FormDraftCodec<TValues, S, K>,\n): Promise<boolean> {\n const record = await adapter.get(table, key);\n\n if (!record) return false;\n\n const values = codec.fromRecord(record);\n\n if (!values) return false;\n\n form.reset(values);\n\n return true;\n}\n\nexport async function saveForm<\n TValues extends Record<string, unknown>,\n S extends AnySchema,\n K extends keyof S & string,\n>(form: Form<TValues>, adapter: VaultStore<S>, table: K, codec: FormDraftCodec<TValues, S, K>): Promise<void> {\n await adapter.put(table, codec.toRecord(form.value));\n}\n"],"mappings":";AAcA,eAAsB,EAKpB,GACA,GACA,GACA,GACA,GACkB;CAClB,IAAM,IAAS,MAAM,EAAQ,IAAI,GAAO,CAAG;CAE3C,IAAI,CAAC,GAAQ,OAAO;CAEpB,IAAM,IAAS,EAAM,WAAW,CAAM;CAMtC,OAJK,KAEL,EAAK,MAAM,CAAM,GAEV,MAJa;AAKtB;AAEA,eAAsB,EAIpB,GAAqB,GAAwB,GAAU,GAAqD;CAC5G,MAAM,EAAQ,IAAI,GAAO,EAAM,SAAS,EAAK,KAAK,CAAC;AACrD"}
|