@madojs/mado 0.5.0 → 0.6.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/AGENTS.md +49 -1
- package/CHANGELOG.md +188 -0
- package/MADO_V1_PLAN.md +179 -0
- package/README.md +53 -14
- package/ROADMAP.md +36 -5
- package/TODO.md +72 -0
- package/dist/src/forms.d.ts +41 -7
- package/dist/src/forms.js +334 -59
- package/dist/src/forms.js.map +1 -1
- package/dist/src/html/bindings.d.ts +41 -0
- package/dist/src/html/bindings.js +163 -6
- package/dist/src/html/bindings.js.map +1 -1
- package/dist/src/html.d.ts +2 -0
- package/dist/src/html.js +1 -0
- package/dist/src/html.js.map +1 -1
- package/dist/src/index.d.ts +6 -6
- package/dist/src/index.js +2 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/page.d.ts +56 -0
- package/dist/src/page.js +17 -0
- package/dist/src/page.js.map +1 -1
- package/dist/src/router/manifest.d.ts +16 -1
- package/dist/src/router/manifest.js +181 -38
- package/dist/src/router/manifest.js.map +1 -1
- package/dist/src/router/match.d.ts +7 -2
- package/dist/src/router/match.js +14 -4
- package/dist/src/router/match.js.map +1 -1
- package/dist/src/router/navigation.d.ts +10 -0
- package/dist/src/router/navigation.js +73 -12
- package/dist/src/router/navigation.js.map +1 -1
- package/dist/src/signal.d.ts +15 -1
- package/dist/src/signal.js +112 -16
- package/dist/src/signal.js.map +1 -1
- package/docs/en/02-project-layout.md +99 -40
- package/docs/en/05-why-mado.md +1 -1
- package/docs/en/06-for-backenders.md +1 -1
- package/docs/en/07-llm-pitfalls.md +1 -1
- package/docs/en/09-shadow-vs-light-dom.md +60 -0
- package/docs/en/10-app-architecture.md +141 -0
- package/docs/en/11-layouts.md +115 -0
- package/docs/en/12-auth-and-api.md +217 -0
- package/docs/en/13-deployment.md +192 -0
- package/docs/en/14-testing.md +82 -0
- package/docs/en/15-error-handling.md +100 -0
- package/docs/en/16-bake-cookbook.md +93 -0
- package/docs/en/README.md +7 -0
- package/docs/fr/05-why-mado.md +1 -1
- package/docs/fr/06-for-backenders.md +1 -1
- package/docs/fr/07-llm-pitfalls.md +1 -1
- package/docs/fr/09-shadow-vs-light-dom.md +63 -0
- package/docs/fr/10-app-architecture.md +61 -0
- package/docs/fr/11-layouts.md +35 -0
- package/docs/fr/12-auth-and-api.md +35 -0
- package/docs/fr/13-deployment.md +39 -0
- package/docs/fr/14-testing.md +41 -0
- package/docs/fr/15-error-handling.md +50 -0
- package/docs/fr/16-bake-cookbook.md +35 -0
- package/docs/fr/README.md +7 -0
- package/docs/ru/05-why-mado.md +2 -2
- package/docs/ru/06-for-backenders.md +1 -1
- package/docs/ru/09-shadow-vs-light-dom.md +60 -0
- package/docs/ru/10-app-architecture.md +100 -0
- package/docs/ru/11-layouts.md +47 -0
- package/docs/ru/12-auth-and-api.md +53 -0
- package/docs/ru/13-deployment.md +60 -0
- package/docs/ru/14-testing.md +50 -0
- package/docs/ru/15-error-handling.md +56 -0
- package/docs/ru/16-bake-cookbook.md +55 -0
- package/docs/ru/README.md +7 -0
- package/docs/uk/06-for-backenders.md +2 -2
- package/docs/uk/09-shadow-vs-light-dom.md +91 -24
- package/docs/uk/10-app-architecture.md +56 -0
- package/docs/uk/11-layouts.md +34 -0
- package/docs/uk/12-auth-and-api.md +34 -0
- package/docs/uk/13-deployment.md +39 -0
- package/docs/uk/14-testing.md +34 -0
- package/docs/uk/15-error-handling.md +32 -0
- package/docs/uk/16-bake-cookbook.md +36 -0
- package/docs/uk/README.md +7 -0
- package/llms.txt +24 -1
- package/package.json +3 -1
- package/scripts/_config.mjs +224 -0
- package/scripts/bake.mjs +217 -120
- package/scripts/bundle.mjs +110 -67
- package/scripts/cli.mjs +127 -16
- package/scripts/preview.mjs +22 -12
- package/server/serve.mjs +101 -11
- package/starters/admin/README.md +63 -0
- package/starters/admin/index.html +21 -0
- package/starters/admin/mado.config.json +22 -0
- package/starters/admin/package.json +22 -0
- package/starters/admin/public/favicon.svg +4 -0
- package/starters/admin/src/components/x-button.ts +55 -0
- package/starters/admin/src/components/x-input.ts +74 -0
- package/starters/admin/src/layouts/app.ts +101 -0
- package/starters/admin/src/layouts/auth.ts +41 -0
- package/starters/admin/src/lib/api.ts +133 -0
- package/starters/admin/src/lib/auth.ts +83 -0
- package/starters/admin/src/main.ts +15 -0
- package/starters/admin/src/pages/admin/dashboard.ts +48 -0
- package/starters/admin/src/pages/admin/order-detail.ts +78 -0
- package/starters/admin/src/pages/admin/orders.ts +117 -0
- package/starters/admin/src/pages/home.ts +25 -0
- package/starters/admin/src/pages/login.ts +70 -0
- package/starters/admin/src/pages/not-found.ts +12 -0
- package/starters/admin/src/routes.ts +40 -0
- package/starters/admin/src/styles/global.ts +86 -0
- package/starters/admin/tsconfig.json +15 -0
- package/starters/crud/README.md +14 -2
- package/starters/crud/mado.config.json +20 -0
- package/starters/crud/package.json +9 -4
- package/starters/crud/src/components/app-shell.ts +13 -8
- package/starters/crud/src/main.ts +1 -4
- package/starters/crud/src/pages/ticket-detail.ts +1 -0
- package/starters/crud/src/pages/ticket-new.ts +1 -0
- package/starters/crud/src/pages/tickets.ts +1 -0
- package/starters/crud/src/routes.ts +4 -2
- package/starters/minimal/README.md +4 -2
- package/starters/minimal/mado.config.json +20 -0
- package/starters/minimal/package.json +8 -3
- package/starters/minimal/src/components/app-counter.ts +1 -1
- package/starters/minimal/src/routes.ts +4 -2
package/TODO.md
ADDED
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# TODO
|
|
2
|
+
|
|
3
|
+
> The v0.6 product-surface push is complete. The closed tracker is archived in
|
|
4
|
+
> [`MADO_V1_PLAN.md`](./MADO_V1_PLAN.md). The items below are ideas for later
|
|
5
|
+
> releases and are not part of the v0.6 contract.
|
|
6
|
+
|
|
7
|
+
Ideas that are not commitments. Roadmap milestones live in `ROADMAP.md`.
|
|
8
|
+
|
|
9
|
+
## DX
|
|
10
|
+
|
|
11
|
+
- [ ] `npx mado create my-app` scaffold.
|
|
12
|
+
- [ ] `mado page <name>` / `mado component <name>` wrappers around templates.
|
|
13
|
+
- [ ] Split `scripts/cli.mjs` into small internal modules (`cli/init`,
|
|
14
|
+
`cli/run`, `cli/dev`, `cli/static-server`) before it becomes hard to read.
|
|
15
|
+
- [ ] Make `mado preview` and `mado bundle` work naturally inside generated
|
|
16
|
+
apps, not only inside the framework repository.
|
|
17
|
+
- [ ] Typed navigation inferred from route patterns.
|
|
18
|
+
- [ ] Optional VS Code extension for `html`` / `css`` highlighting.
|
|
19
|
+
|
|
20
|
+
## Runtime
|
|
21
|
+
|
|
22
|
+
- [ ] Optimistic mutation hook with rollback.
|
|
23
|
+
- [ ] `<x-async>` helper for resource loading/error shells.
|
|
24
|
+
- [ ] `liveResource()` over SSE / WebSocket.
|
|
25
|
+
- [ ] i18n helper once browser-native message formatting is realistic.
|
|
26
|
+
- [ ] Accessibility helpers: focus trap, live region, click outside.
|
|
27
|
+
|
|
28
|
+
## Styling
|
|
29
|
+
|
|
30
|
+
- [ ] Docs for `::part`, `::slotted()` and `:host-context()`.
|
|
31
|
+
- [ ] Optional tiny utilities stylesheet.
|
|
32
|
+
|
|
33
|
+
## Operations
|
|
34
|
+
|
|
35
|
+
- [ ] Benchmark against Lit / Solid / Preact.
|
|
36
|
+
- [ ] Decide package exports policy before v1: remove the wildcard export or
|
|
37
|
+
keep it documented as unstable internal deep imports.
|
|
38
|
+
- [ ] Add first-class size reporting for runtime budget (ESM graph,
|
|
39
|
+
bundled/minified, gzip, brotli) without counting docs/starters/package files.
|
|
40
|
+
- [ ] `eslint-plugin-mado` rules for common mistakes.
|
|
41
|
+
- [ ] CSP-friendly style mode.
|
|
42
|
+
- [ ] PWA scaffold.
|
|
43
|
+
- [ ] Schema validation hook for resources.
|
|
44
|
+
- [ ] Timeout / retry options for resource fetchers.
|
|
45
|
+
- [ ] Source-map notes and a minimal dev error overlay.
|
|
46
|
+
|
|
47
|
+
## Bake / Smart Static
|
|
48
|
+
|
|
49
|
+
- [ ] Webhook re-bake endpoint.
|
|
50
|
+
- [ ] Incremental bake cache.
|
|
51
|
+
- [ ] RSS / Atom feed generator.
|
|
52
|
+
- [ ] Nested-route bake support.
|
|
53
|
+
|
|
54
|
+
## Community
|
|
55
|
+
|
|
56
|
+
- [ ] Minimal landing site built with Mado.
|
|
57
|
+
- [ ] Case study: real React page → Mado + bake.
|
|
58
|
+
- [ ] Public live demo: CRUD starter and showcase hosted from Mado itself.
|
|
59
|
+
- [ ] Convert contribution-ready TODO items into GitHub issues with labels
|
|
60
|
+
(`good first issue`, `help wanted`, `docs`, `cli`, `ci`) after the first
|
|
61
|
+
public feedback round.
|
|
62
|
+
|
|
63
|
+
## Release / GitHub
|
|
64
|
+
|
|
65
|
+
- [ ] Configure npm Trusted Publishing for GitHub Actions after verifying the
|
|
66
|
+
first manual publishes.
|
|
67
|
+
- [ ] Decide the release flow: continue manual npm publish for patch releases or
|
|
68
|
+
publish from signed `v*` tags through `.github/workflows/release.yml`.
|
|
69
|
+
- [ ] Improve generated release notes: include PR links/authors when releases
|
|
70
|
+
start going through pull requests.
|
|
71
|
+
- [ ] Add a short maintainer-only release checklist outside public docs if the
|
|
72
|
+
manual flow stays in use.
|
package/dist/src/forms.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Forms without pain. Built on
|
|
2
|
+
* Forms without pain. Built on native `<form>` submit/input events plus a
|
|
3
|
+
* small schema validator whose rules mirror common HTML constraints.
|
|
3
4
|
*
|
|
4
5
|
* const f = useForm({
|
|
5
6
|
* email: { required: true, type: 'email' },
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
* `;
|
|
21
22
|
*
|
|
22
23
|
* What's inside:
|
|
23
|
-
* - validation
|
|
24
|
+
* - validation rules mirror common HTML constraints
|
|
24
25
|
* (required, min, max, pattern, type=email/url/number, etc.);
|
|
25
26
|
* - custom rules via a validate(values) function returning
|
|
26
27
|
* { field: 'msg' } or null;
|
|
@@ -31,10 +32,15 @@
|
|
|
31
32
|
* No Yup/Zod/Formik dependencies. If you really want them —
|
|
32
33
|
* pass your own validate(values) and wire it to anything.
|
|
33
34
|
*/
|
|
34
|
-
import { type Signal } from "./signal.js";
|
|
35
|
-
export type
|
|
35
|
+
import { type Signal, type Computed } from "./signal.js";
|
|
36
|
+
export type FormValue = string | number | boolean | null | undefined | FormValue[] | {
|
|
37
|
+
[key: string]: FormValue;
|
|
38
|
+
};
|
|
39
|
+
export type FormValues = Record<string, FormValue>;
|
|
36
40
|
export type FormErrors = Record<string, string | undefined>;
|
|
37
|
-
|
|
41
|
+
export type FieldValidator<V extends FormValues = FormValues> = (value: FormValue, values: V, path: string) => string | null | undefined;
|
|
42
|
+
export type AsyncFieldValidator<V extends FormValues = FormValues> = (value: FormValue, values: V, path: string) => Promise<string | null | undefined>;
|
|
43
|
+
/** Field declaration. Rules intentionally match common HTML constraints. */
|
|
38
44
|
export interface FieldSchema {
|
|
39
45
|
required?: boolean;
|
|
40
46
|
type?: "text" | "email" | "url" | "number" | "tel" | "password";
|
|
@@ -44,18 +50,39 @@ export interface FieldSchema {
|
|
|
44
50
|
maxLength?: number;
|
|
45
51
|
pattern?: string;
|
|
46
52
|
/** Default value */
|
|
47
|
-
default?:
|
|
53
|
+
default?: FormValue;
|
|
54
|
+
/** Synchronous custom validator for this field. */
|
|
55
|
+
validate?: FieldValidator;
|
|
56
|
+
/** Asynchronous custom validator for this field. */
|
|
57
|
+
validateAsync?: AsyncFieldValidator;
|
|
48
58
|
}
|
|
49
59
|
export type Schema = Record<string, FieldSchema>;
|
|
50
60
|
export interface UseFormOptions<V extends FormValues> {
|
|
51
61
|
/** Custom validator: returns errors or null. */
|
|
52
62
|
validate?: (values: V) => FormErrors | null;
|
|
63
|
+
/** Async custom validator, usually for server-backed uniqueness checks. */
|
|
64
|
+
validateAsync?: (values: V) => Promise<FormErrors | null>;
|
|
65
|
+
}
|
|
66
|
+
export interface FieldArrayApi<T extends FormValue = FormValue> {
|
|
67
|
+
/** Current array value. */
|
|
68
|
+
items: () => T[];
|
|
69
|
+
/** Field name helper: `items.0.title`. */
|
|
70
|
+
path(index: number, field?: string): string;
|
|
71
|
+
append(value: T): void;
|
|
72
|
+
prepend(value: T): void;
|
|
73
|
+
insert(index: number, value: T): void;
|
|
74
|
+
remove(index: number): void;
|
|
75
|
+
move(from: number, to: number): void;
|
|
76
|
+
replace(items: readonly T[]): void;
|
|
77
|
+
set(index: number, value: T): void;
|
|
53
78
|
}
|
|
54
79
|
export interface FormApi<V extends FormValues> {
|
|
55
80
|
values: Signal<V>;
|
|
56
81
|
errors: () => FormErrors;
|
|
57
82
|
touched: Signal<Record<string, boolean>>;
|
|
58
83
|
submitting: Signal<boolean>;
|
|
84
|
+
validating: Computed<boolean>;
|
|
85
|
+
validatingFields: Signal<Record<string, boolean>>;
|
|
59
86
|
isValid: () => boolean;
|
|
60
87
|
/** Binding for @input/@change: automatically picks up name+value+type. */
|
|
61
88
|
onInput: (e: Event) => void;
|
|
@@ -64,7 +91,14 @@ export interface FormApi<V extends FormValues> {
|
|
|
64
91
|
/** Submit wrapper: calls handler only if the form is valid. */
|
|
65
92
|
onSubmit: (handler: (values: V) => void | Promise<void>) => (e: Event) => void;
|
|
66
93
|
/** Set a field value programmatically. */
|
|
67
|
-
setField<K extends keyof V>(name: K, value: V[K]): void;
|
|
94
|
+
setField<K extends keyof V & string>(name: K, value: V[K]): void;
|
|
95
|
+
setField(name: string, value: FormValue): void;
|
|
96
|
+
/** Run async validators for a single field path. */
|
|
97
|
+
validateField(name: string): Promise<boolean>;
|
|
98
|
+
/** Run all sync + async validators and update errors. */
|
|
99
|
+
validate(): Promise<boolean>;
|
|
100
|
+
/** Helper for dynamic arrays stored under one form field. */
|
|
101
|
+
array<T extends FormValue = FormValue>(name: keyof V & string): FieldArrayApi<T>;
|
|
68
102
|
/** Reset to defaults. */
|
|
69
103
|
reset(): void;
|
|
70
104
|
}
|
package/dist/src/forms.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Forms without pain. Built on
|
|
2
|
+
* Forms without pain. Built on native `<form>` submit/input events plus a
|
|
3
|
+
* small schema validator whose rules mirror common HTML constraints.
|
|
3
4
|
*
|
|
4
5
|
* const f = useForm({
|
|
5
6
|
* email: { required: true, type: 'email' },
|
|
@@ -20,7 +21,7 @@
|
|
|
20
21
|
* `;
|
|
21
22
|
*
|
|
22
23
|
* What's inside:
|
|
23
|
-
* - validation
|
|
24
|
+
* - validation rules mirror common HTML constraints
|
|
24
25
|
* (required, min, max, pattern, type=email/url/number, etc.);
|
|
25
26
|
* - custom rules via a validate(values) function returning
|
|
26
27
|
* { field: 'msg' } or null;
|
|
@@ -38,60 +39,27 @@ export function useForm(schema, options = {}) {
|
|
|
38
39
|
for (const k in schema) {
|
|
39
40
|
const s = schema[k];
|
|
40
41
|
if (s.default !== undefined)
|
|
41
|
-
out[k] = s.default;
|
|
42
|
+
out[k] = cloneFormValue(s.default);
|
|
42
43
|
}
|
|
43
44
|
return out;
|
|
44
45
|
};
|
|
45
46
|
const values = signal(defaults());
|
|
46
47
|
const touched = signal({});
|
|
47
48
|
const submitting = signal(false);
|
|
48
|
-
const
|
|
49
|
+
const asyncErrors = signal({});
|
|
50
|
+
const validatingFields = signal({});
|
|
51
|
+
const validating = computed(() => Object.keys(validatingFields()).length > 0);
|
|
52
|
+
const fieldRuns = new Map();
|
|
53
|
+
let formRun = 0;
|
|
54
|
+
let formAsyncPaths = [];
|
|
55
|
+
const syncErrors = computed(() => {
|
|
49
56
|
const v = values();
|
|
50
57
|
const out = {};
|
|
51
|
-
for (const
|
|
52
|
-
const s = schema[
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
|
|
56
|
-
out[name] = "required field";
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
if (isEmpty)
|
|
60
|
-
continue;
|
|
61
|
-
if (s.type === "email" && typeof raw === "string") {
|
|
62
|
-
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(raw))
|
|
63
|
-
out[name] = "invalid email";
|
|
64
|
-
}
|
|
65
|
-
else if (s.type === "url" && typeof raw === "string") {
|
|
66
|
-
try {
|
|
67
|
-
new URL(raw);
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
out[name] = "invalid URL";
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else if (s.type === "number") {
|
|
74
|
-
const n = Number(raw);
|
|
75
|
-
if (Number.isNaN(n))
|
|
76
|
-
out[name] = "must be a number";
|
|
77
|
-
else {
|
|
78
|
-
if (s.min !== undefined && n < s.min)
|
|
79
|
-
out[name] = `minimum ${s.min}`;
|
|
80
|
-
if (s.max !== undefined && n > s.max)
|
|
81
|
-
out[name] = `maximum ${s.max}`;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
if (typeof raw === "string") {
|
|
85
|
-
if (s.minLength !== undefined && raw.length < s.minLength) {
|
|
86
|
-
out[name] = `minimum ${s.minLength} characters`;
|
|
87
|
-
}
|
|
88
|
-
if (s.maxLength !== undefined && raw.length > s.maxLength) {
|
|
89
|
-
out[name] = `maximum ${s.maxLength} characters`;
|
|
90
|
-
}
|
|
91
|
-
if (s.pattern && !new RegExp(s.pattern).test(raw)) {
|
|
92
|
-
out[name] = "invalid format";
|
|
93
|
-
}
|
|
94
|
-
}
|
|
58
|
+
for (const pattern in schema) {
|
|
59
|
+
const s = schema[pattern];
|
|
60
|
+
const paths = expandSchemaPath(v, pattern);
|
|
61
|
+
for (const name of paths)
|
|
62
|
+
validateSyncField(out, s, v, name);
|
|
95
63
|
}
|
|
96
64
|
if (options.validate) {
|
|
97
65
|
const custom = options.validate(v);
|
|
@@ -100,7 +68,150 @@ export function useForm(schema, options = {}) {
|
|
|
100
68
|
}
|
|
101
69
|
return out;
|
|
102
70
|
});
|
|
71
|
+
const errors = computed(() => ({
|
|
72
|
+
...syncErrors(),
|
|
73
|
+
...asyncErrors(),
|
|
74
|
+
}));
|
|
103
75
|
const isValid = computed(() => Object.keys(errors()).length === 0);
|
|
76
|
+
function validateSyncField(out, s, v, name) {
|
|
77
|
+
const raw = getPath(v, name);
|
|
78
|
+
const isEmpty = raw === undefined || raw === "" || raw === null;
|
|
79
|
+
if (s.required && isEmpty) {
|
|
80
|
+
out[name] = "required field";
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
if (isEmpty)
|
|
84
|
+
return;
|
|
85
|
+
if (s.type === "email" && typeof raw === "string") {
|
|
86
|
+
if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(raw))
|
|
87
|
+
out[name] = "invalid email";
|
|
88
|
+
}
|
|
89
|
+
else if (s.type === "url" && typeof raw === "string") {
|
|
90
|
+
try {
|
|
91
|
+
new URL(raw);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
out[name] = "invalid URL";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (s.type === "number") {
|
|
98
|
+
const n = Number(raw);
|
|
99
|
+
if (Number.isNaN(n))
|
|
100
|
+
out[name] = "must be a number";
|
|
101
|
+
else {
|
|
102
|
+
if (s.min !== undefined && n < s.min)
|
|
103
|
+
out[name] = `minimum ${s.min}`;
|
|
104
|
+
if (s.max !== undefined && n > s.max)
|
|
105
|
+
out[name] = `maximum ${s.max}`;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
if (typeof raw === "string") {
|
|
109
|
+
if (s.minLength !== undefined && raw.length < s.minLength) {
|
|
110
|
+
out[name] = `minimum ${s.minLength} characters`;
|
|
111
|
+
}
|
|
112
|
+
if (s.maxLength !== undefined && raw.length > s.maxLength) {
|
|
113
|
+
out[name] = `maximum ${s.maxLength} characters`;
|
|
114
|
+
}
|
|
115
|
+
if (s.pattern && !new RegExp(s.pattern).test(raw)) {
|
|
116
|
+
out[name] = "invalid format";
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (s.validate) {
|
|
120
|
+
const custom = s.validate(raw, v, name);
|
|
121
|
+
if (custom)
|
|
122
|
+
out[name] = custom;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const setFieldValidating = (name, enabled) => {
|
|
126
|
+
validatingFields.update((m) => {
|
|
127
|
+
if (enabled)
|
|
128
|
+
return { ...m, [name]: true };
|
|
129
|
+
const next = { ...m };
|
|
130
|
+
delete next[name];
|
|
131
|
+
return next;
|
|
132
|
+
});
|
|
133
|
+
};
|
|
134
|
+
const setAsyncErrors = (clearPaths, nextErrors) => {
|
|
135
|
+
asyncErrors.update((prev) => {
|
|
136
|
+
const next = { ...prev };
|
|
137
|
+
for (const path of clearPaths)
|
|
138
|
+
delete next[path];
|
|
139
|
+
for (const [path, message] of Object.entries(nextErrors)) {
|
|
140
|
+
if (message)
|
|
141
|
+
next[path] = message;
|
|
142
|
+
else
|
|
143
|
+
delete next[path];
|
|
144
|
+
}
|
|
145
|
+
return next;
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
const clearAsyncPrefix = (prefix) => {
|
|
149
|
+
asyncErrors.update((prev) => clearRecordPrefix(prev, prefix));
|
|
150
|
+
};
|
|
151
|
+
const validateField = async (name) => {
|
|
152
|
+
const matching = Object.entries(schema).filter(([pattern, s]) => s.validateAsync && schemaPathMatches(pattern, name));
|
|
153
|
+
const run = (fieldRuns.get(name) ?? 0) + 1;
|
|
154
|
+
fieldRuns.set(name, run);
|
|
155
|
+
setAsyncErrors([name], {});
|
|
156
|
+
if (matching.length === 0)
|
|
157
|
+
return !errors.peek()[name];
|
|
158
|
+
setFieldValidating(name, true);
|
|
159
|
+
const snapshot = values.peek();
|
|
160
|
+
const next = {};
|
|
161
|
+
try {
|
|
162
|
+
for (const [, s] of matching) {
|
|
163
|
+
const message = await s.validateAsync(getPath(snapshot, name), snapshot, name);
|
|
164
|
+
if (message) {
|
|
165
|
+
next[name] = message;
|
|
166
|
+
break;
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
catch (err) {
|
|
171
|
+
next[name] = "validation failed";
|
|
172
|
+
// eslint-disable-next-line no-console
|
|
173
|
+
console.error("[mado] field validator threw:", err);
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
if (fieldRuns.get(name) === run) {
|
|
177
|
+
setAsyncErrors([name], next);
|
|
178
|
+
setFieldValidating(name, false);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
return !errors.peek()[name];
|
|
182
|
+
};
|
|
183
|
+
const validateAll = async () => {
|
|
184
|
+
const run = ++formRun;
|
|
185
|
+
if (Object.keys(syncErrors.peek()).length > 0)
|
|
186
|
+
return false;
|
|
187
|
+
if (options.validateAsync)
|
|
188
|
+
setFieldValidating("$form", true);
|
|
189
|
+
const snapshot = values.peek();
|
|
190
|
+
const paths = concreteSchemaPaths(snapshot, schema);
|
|
191
|
+
await Promise.all(paths.map((path) => validateField(path)));
|
|
192
|
+
if (options.validateAsync) {
|
|
193
|
+
try {
|
|
194
|
+
const custom = await options.validateAsync(values.peek());
|
|
195
|
+
if (formRun === run) {
|
|
196
|
+
setAsyncErrors(formAsyncPaths, custom ?? {});
|
|
197
|
+
formAsyncPaths = Object.keys(custom ?? {});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
catch (err) {
|
|
201
|
+
if (formRun === run) {
|
|
202
|
+
setAsyncErrors(formAsyncPaths, { $form: "validation failed" });
|
|
203
|
+
formAsyncPaths = ["$form"];
|
|
204
|
+
}
|
|
205
|
+
// eslint-disable-next-line no-console
|
|
206
|
+
console.error("[mado] form validator threw:", err);
|
|
207
|
+
}
|
|
208
|
+
finally {
|
|
209
|
+
if (formRun === run)
|
|
210
|
+
setFieldValidating("$form", false);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
return Object.keys(errors.peek()).length === 0;
|
|
214
|
+
};
|
|
104
215
|
const readField = (el) => {
|
|
105
216
|
if (el instanceof HTMLInputElement) {
|
|
106
217
|
if (el.type === "checkbox")
|
|
@@ -115,12 +226,15 @@ export function useForm(schema, options = {}) {
|
|
|
115
226
|
errors,
|
|
116
227
|
touched,
|
|
117
228
|
submitting,
|
|
229
|
+
validating,
|
|
230
|
+
validatingFields,
|
|
118
231
|
isValid,
|
|
119
232
|
onInput(e) {
|
|
120
233
|
const t = e.target;
|
|
121
234
|
if (!t.name)
|
|
122
235
|
return;
|
|
123
|
-
|
|
236
|
+
api.setField(t.name, readField(t));
|
|
237
|
+
void validateField(t.name);
|
|
124
238
|
},
|
|
125
239
|
onBlur(e) {
|
|
126
240
|
const t = e.target;
|
|
@@ -135,27 +249,188 @@ export function useForm(schema, options = {}) {
|
|
|
135
249
|
const all = {};
|
|
136
250
|
for (const k in schema)
|
|
137
251
|
all[k] = true;
|
|
252
|
+
for (const k of concreteSchemaPaths(values.peek(), schema))
|
|
253
|
+
all[k] = true;
|
|
138
254
|
touched.set(all);
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
255
|
+
void (async () => {
|
|
256
|
+
if (!(await validateAll()))
|
|
257
|
+
return;
|
|
258
|
+
submitting.set(true);
|
|
259
|
+
try {
|
|
260
|
+
await handler(values.peek());
|
|
261
|
+
}
|
|
262
|
+
catch (err) {
|
|
263
|
+
// eslint-disable-next-line no-console
|
|
264
|
+
console.error("[mado] form submit threw:", err);
|
|
265
|
+
}
|
|
266
|
+
finally {
|
|
267
|
+
submitting.set(false);
|
|
268
|
+
}
|
|
269
|
+
})();
|
|
148
270
|
};
|
|
149
271
|
},
|
|
150
272
|
setField(name, value) {
|
|
151
|
-
values.update((v) => (
|
|
273
|
+
values.update((v) => setPath(v, name, value));
|
|
274
|
+
setAsyncErrors([name], {});
|
|
275
|
+
},
|
|
276
|
+
validateField,
|
|
277
|
+
validate: validateAll,
|
|
278
|
+
array(name) {
|
|
279
|
+
const read = () => {
|
|
280
|
+
const value = getPath(values.peek(), name);
|
|
281
|
+
return Array.isArray(value) ? value : [];
|
|
282
|
+
};
|
|
283
|
+
const write = (items) => {
|
|
284
|
+
values.update((v) => setPath(v, name, [...items]));
|
|
285
|
+
touched.update((m) => clearRecordPrefix(m, name));
|
|
286
|
+
clearAsyncPrefix(name);
|
|
287
|
+
};
|
|
288
|
+
const clamp = (index, length) => Math.max(0, Math.min(index, length));
|
|
289
|
+
return {
|
|
290
|
+
items: read,
|
|
291
|
+
path(index, field) {
|
|
292
|
+
return field ? `${name}.${index}.${field}` : `${name}.${index}`;
|
|
293
|
+
},
|
|
294
|
+
append(value) {
|
|
295
|
+
write([...read(), value]);
|
|
296
|
+
},
|
|
297
|
+
prepend(value) {
|
|
298
|
+
write([value, ...read()]);
|
|
299
|
+
},
|
|
300
|
+
insert(index, value) {
|
|
301
|
+
const items = read();
|
|
302
|
+
const at = clamp(index, items.length);
|
|
303
|
+
write([...items.slice(0, at), value, ...items.slice(at)]);
|
|
304
|
+
},
|
|
305
|
+
remove(index) {
|
|
306
|
+
const items = read();
|
|
307
|
+
if (index < 0 || index >= items.length)
|
|
308
|
+
return;
|
|
309
|
+
write(items.filter((_, i) => i !== index));
|
|
310
|
+
},
|
|
311
|
+
move(from, to) {
|
|
312
|
+
const items = read();
|
|
313
|
+
if (from < 0 || from >= items.length)
|
|
314
|
+
return;
|
|
315
|
+
const next = [...items];
|
|
316
|
+
const [item] = next.splice(from, 1);
|
|
317
|
+
next.splice(clamp(to, next.length), 0, item);
|
|
318
|
+
write(next);
|
|
319
|
+
},
|
|
320
|
+
replace(items) {
|
|
321
|
+
write(items);
|
|
322
|
+
},
|
|
323
|
+
set(index, value) {
|
|
324
|
+
const items = read();
|
|
325
|
+
if (index < 0 || index >= items.length)
|
|
326
|
+
return;
|
|
327
|
+
const next = [...items];
|
|
328
|
+
next[index] = value;
|
|
329
|
+
write(next);
|
|
330
|
+
},
|
|
331
|
+
};
|
|
152
332
|
},
|
|
153
333
|
reset() {
|
|
154
334
|
values.set(defaults());
|
|
155
335
|
touched.set({});
|
|
336
|
+
asyncErrors.set({});
|
|
337
|
+
validatingFields.set({});
|
|
338
|
+
formAsyncPaths = [];
|
|
156
339
|
submitting.set(false);
|
|
157
340
|
},
|
|
158
341
|
};
|
|
159
342
|
return api;
|
|
160
343
|
}
|
|
344
|
+
function cloneFormValue(value) {
|
|
345
|
+
if (Array.isArray(value))
|
|
346
|
+
return value.map(cloneFormValue);
|
|
347
|
+
if (value && typeof value === "object") {
|
|
348
|
+
const out = {};
|
|
349
|
+
for (const [k, v] of Object.entries(value))
|
|
350
|
+
out[k] = cloneFormValue(v);
|
|
351
|
+
return out;
|
|
352
|
+
}
|
|
353
|
+
return value;
|
|
354
|
+
}
|
|
355
|
+
function getPath(value, path) {
|
|
356
|
+
let current = value;
|
|
357
|
+
for (const part of splitPath(path)) {
|
|
358
|
+
if (current == null || typeof current !== "object")
|
|
359
|
+
return undefined;
|
|
360
|
+
current = current[part];
|
|
361
|
+
}
|
|
362
|
+
return current;
|
|
363
|
+
}
|
|
364
|
+
function setPath(root, path, value) {
|
|
365
|
+
return setPathParts(root, splitPath(path), value);
|
|
366
|
+
}
|
|
367
|
+
function setPathParts(current, parts, value) {
|
|
368
|
+
if (parts.length === 0)
|
|
369
|
+
return value;
|
|
370
|
+
const key = parts[0];
|
|
371
|
+
const rest = parts.slice(1);
|
|
372
|
+
const container = Array.isArray(current)
|
|
373
|
+
? [...current]
|
|
374
|
+
: current && typeof current === "object"
|
|
375
|
+
? { ...current }
|
|
376
|
+
: isArrayIndex(key)
|
|
377
|
+
? []
|
|
378
|
+
: {};
|
|
379
|
+
container[key] = setPathParts(container[key], rest, value);
|
|
380
|
+
return container;
|
|
381
|
+
}
|
|
382
|
+
function splitPath(path) {
|
|
383
|
+
return path.split(".").filter(Boolean);
|
|
384
|
+
}
|
|
385
|
+
function isArrayIndex(value) {
|
|
386
|
+
return /^(0|[1-9]\d*)$/.test(value);
|
|
387
|
+
}
|
|
388
|
+
function expandSchemaPath(values, pattern) {
|
|
389
|
+
if (!pattern.includes("*"))
|
|
390
|
+
return [pattern];
|
|
391
|
+
return expandParts(values, splitPath(pattern), []);
|
|
392
|
+
}
|
|
393
|
+
function expandParts(current, parts, prefix) {
|
|
394
|
+
if (parts.length === 0)
|
|
395
|
+
return [prefix.join(".")];
|
|
396
|
+
const [part, ...rest] = parts;
|
|
397
|
+
if (part === "*") {
|
|
398
|
+
if (!Array.isArray(current))
|
|
399
|
+
return [];
|
|
400
|
+
return current.flatMap((item, index) => expandParts(item, rest, [...prefix, String(index)]));
|
|
401
|
+
}
|
|
402
|
+
const next = current && typeof current === "object"
|
|
403
|
+
? current[part]
|
|
404
|
+
: undefined;
|
|
405
|
+
return expandParts(next, rest, [...prefix, part]);
|
|
406
|
+
}
|
|
407
|
+
function concreteSchemaPaths(values, schema) {
|
|
408
|
+
const paths = new Set();
|
|
409
|
+
for (const pattern in schema) {
|
|
410
|
+
for (const path of expandSchemaPath(values, pattern))
|
|
411
|
+
paths.add(path);
|
|
412
|
+
}
|
|
413
|
+
return [...paths];
|
|
414
|
+
}
|
|
415
|
+
function schemaPathMatches(pattern, path) {
|
|
416
|
+
const patternParts = splitPath(pattern);
|
|
417
|
+
const pathParts = splitPath(path);
|
|
418
|
+
if (patternParts.length !== pathParts.length)
|
|
419
|
+
return false;
|
|
420
|
+
for (let i = 0; i < patternParts.length; i++) {
|
|
421
|
+
const expected = patternParts[i];
|
|
422
|
+
if (expected !== "*" && expected !== pathParts[i])
|
|
423
|
+
return false;
|
|
424
|
+
}
|
|
425
|
+
return true;
|
|
426
|
+
}
|
|
427
|
+
function clearRecordPrefix(record, prefix) {
|
|
428
|
+
const next = { ...record };
|
|
429
|
+
const dotted = `${prefix}.`;
|
|
430
|
+
for (const key of Object.keys(next)) {
|
|
431
|
+
if (key === prefix || key.startsWith(dotted))
|
|
432
|
+
delete next[key];
|
|
433
|
+
}
|
|
434
|
+
return next;
|
|
435
|
+
}
|
|
161
436
|
//# sourceMappingURL=forms.js.map
|
package/dist/src/forms.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/forms.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"forms.js","sourceRoot":"","sources":["../../src/forms.ts"],"names":[],"mappings":"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"}
|