@reckona/mreact-forms 0.0.1

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Tatsuo Kaniwa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,103 @@
1
+ # @reckona/mreact-forms
2
+
3
+ `@reckona/mreact-forms` provides form state and validation utilities for mreact.
4
+ It tracks field values, dirty/touched state, client validation, and server
5
+ errors through a small reactive API.
6
+
7
+ ## Basic Usage
8
+
9
+ ```ts
10
+ import { createForm } from "@reckona/mreact-forms";
11
+
12
+ const form = createForm({
13
+ initialValues: { email: "" },
14
+ validate: {
15
+ email(value) {
16
+ return value.includes("@") ? undefined : "Invalid email";
17
+ },
18
+ },
19
+ });
20
+
21
+ await form.field("email").setValue("ada@example.test");
22
+ await form.validate();
23
+ ```
24
+
25
+ ## Valibot And Standard Schema
26
+
27
+ `createForm` accepts Standard Schema compatible validators through the
28
+ `schema` option. Valibot and Zod v4 expose Standard Schema metadata directly,
29
+ so schemas can be passed without an adapter. The form state keeps input values,
30
+ while `submit()` receives the schema output after transforms run.
31
+
32
+ ```ts
33
+ import { createForm } from "@reckona/mreact-forms";
34
+ import * as v from "valibot";
35
+
36
+ const signupSchema = v.object({
37
+ email: v.pipe(v.string(), v.trim(), v.email("Enter a valid email.")),
38
+ seats: v.pipe(
39
+ v.string(),
40
+ v.trim(),
41
+ v.toNumber("Seats must be a number."),
42
+ v.integer("Seats must be a whole number."),
43
+ v.minValue(1, "Choose at least one seat."),
44
+ ),
45
+ });
46
+
47
+ type SignupValues = v.InferInput<typeof signupSchema>;
48
+ type SignupSubmitValues = v.InferOutput<typeof signupSchema>;
49
+
50
+ const signupForm = createForm<SignupValues, SignupSubmitValues>({
51
+ initialValues: { email: "", seats: "1" },
52
+ schema: signupSchema,
53
+ validateOn: ["blur", "submit"],
54
+ });
55
+
56
+ await signupForm.submit((values) => {
57
+ values.seats;
58
+ // ^ number
59
+ });
60
+ ```
61
+
62
+ The same pattern works with Zod v4:
63
+
64
+ ```ts
65
+ import { createForm } from "@reckona/mreact-forms";
66
+ import * as z from "zod/v4";
67
+
68
+ const inviteSchema = z.object({
69
+ email: z.string().trim().email("Enter a valid email."),
70
+ seats: z
71
+ .string()
72
+ .trim()
73
+ .transform((value) => Number(value))
74
+ .pipe(z.number().int().min(1)),
75
+ });
76
+
77
+ type InviteValues = z.input<typeof inviteSchema>;
78
+ type InviteSubmitValues = z.output<typeof inviteSchema>;
79
+
80
+ const inviteForm = createForm<InviteValues, InviteSubmitValues>({
81
+ initialValues: { email: "", seats: "1" },
82
+ schema: inviteSchema,
83
+ validateOn: ["blur", "submit"],
84
+ });
85
+
86
+ await inviteForm.submit((values) => {
87
+ values.seats;
88
+ // ^ number
89
+ });
90
+ ```
91
+
92
+ ## Core APIs
93
+
94
+ - `createForm()` creates reactive form state.
95
+ - `setServerErrors()` applies errors returned by a route handler or server action.
96
+ - `form.reset()` restores the initial values.
97
+ - The `schema` option connects forms to Standard Schema compatible validators such as zod and valibot.
98
+
99
+ ## Server Action And Route Handler Integration
100
+
101
+ Use client validation for fast feedback, then run server validation for
102
+ authorization rules, database constraints, and other trusted checks. Return
103
+ server errors to the form with `setServerErrors()`.
@@ -0,0 +1,79 @@
1
+ import { type ReadonlyCell } from "@reckona/mreact-reactive-core";
2
+ import { type StandardSchemaV1 } from "./standard-schema.js";
3
+ export type FormValues = Record<string, unknown>;
4
+ export type FieldName<TValues extends FormValues> = Extract<keyof TValues, string>;
5
+ export type FormErrors<TValues extends FormValues> = Partial<Record<FieldName<TValues> | "root", string[]>>;
6
+ export type FieldValidator<TValue, TValues extends FormValues> = (value: TValue, values: TValues) => readonly string[] | string | undefined | Promise<readonly string[] | string | undefined>;
7
+ export type FormValidateMode = "change" | "blur" | "submit";
8
+ export interface FormState<TValues extends FormValues> {
9
+ dirty: boolean;
10
+ errors: FormErrors<TValues>;
11
+ initialValues: TValues;
12
+ submitCount: number;
13
+ submitting: boolean;
14
+ touched: Partial<Record<FieldName<TValues>, boolean>>;
15
+ valid: boolean;
16
+ values: TValues;
17
+ }
18
+ export interface FieldState<TValue> {
19
+ dirty: boolean;
20
+ errors: string[];
21
+ touched: boolean;
22
+ value: TValue;
23
+ }
24
+ export interface FieldApi<TValues extends FormValues, Name extends FieldName<TValues>> {
25
+ readonly state: ReadonlyCell<FieldState<TValues[Name]>>;
26
+ blur(): Promise<void>;
27
+ setValue(value: TValues[Name]): Promise<void>;
28
+ }
29
+ interface BaseCreateFormOptions<TValues extends FormValues> {
30
+ initialValues: TValues;
31
+ validate?: Partial<{
32
+ [Name in FieldName<TValues>]: FieldValidator<TValues[Name], TValues>;
33
+ }> | undefined;
34
+ validateOn?: FormValidateMode | readonly FormValidateMode[] | undefined;
35
+ }
36
+ export interface CreateFormOptionsWithoutSchema<TValues extends FormValues> extends BaseCreateFormOptions<TValues> {
37
+ schema?: undefined;
38
+ }
39
+ export interface CreateFormOptionsWithSchema<TValues extends FormValues, TSubmitValues> extends BaseCreateFormOptions<TValues> {
40
+ schema: StandardSchemaV1<TValues, TSubmitValues>;
41
+ }
42
+ export type CreateFormOptions<TValues extends FormValues, TSubmitValues = TValues> = CreateFormOptionsWithoutSchema<TValues> | CreateFormOptionsWithSchema<TValues, TSubmitValues>;
43
+ export type FormValidationResult<TValues extends FormValues, TSubmitValues> = {
44
+ success: true;
45
+ value: TSubmitValues;
46
+ } | {
47
+ errors: FormErrors<TValues>;
48
+ success: false;
49
+ };
50
+ export type FormSubmitResult<TValues extends FormValues, TResult> = {
51
+ data: TResult;
52
+ status: "success";
53
+ } | {
54
+ errors: FormErrors<TValues>;
55
+ status: "invalid";
56
+ } | {
57
+ error: unknown;
58
+ status: "error";
59
+ };
60
+ export interface ServerActionErrors<TValues extends FormValues> {
61
+ fieldErrors?: Partial<Record<FieldName<TValues>, readonly string[]>> | undefined;
62
+ formErrors?: readonly string[] | undefined;
63
+ }
64
+ export interface FormApi<TValues extends FormValues, TSubmitValues> {
65
+ readonly state: ReadonlyCell<FormState<TValues>>;
66
+ field<Name extends FieldName<TValues>>(name: Name): FieldApi<TValues, Name>;
67
+ getValues(): TValues;
68
+ reset(values?: TValues): void;
69
+ setErrors(errors: FormErrors<TValues>): void;
70
+ setServerErrors(errors: ServerActionErrors<TValues>): void;
71
+ setValue<Name extends FieldName<TValues>>(name: Name, value: TValues[Name]): Promise<void>;
72
+ submit<TResult>(handler: (values: TSubmitValues) => Promise<TResult> | TResult): Promise<FormSubmitResult<TValues, TResult>>;
73
+ validate(): Promise<FormValidationResult<TValues, TSubmitValues>>;
74
+ }
75
+ export declare function createForm<TValues extends FormValues>(options: CreateFormOptionsWithoutSchema<TValues>): FormApi<TValues, TValues>;
76
+ export declare function createForm<TValues extends FormValues, TSubmitValues>(options: CreateFormOptionsWithSchema<TValues, TSubmitValues>): FormApi<TValues, TSubmitValues>;
77
+ export type { InferStandardSchemaInput, InferStandardSchemaOutput, StandardSchemaV1, } from "./standard-schema.js";
78
+ export { validateStandardSchema } from "./standard-schema.js";
79
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,219 @@
1
+ import { cell } from "@reckona/mreact-reactive-core";
2
+ import { validateStandardSchema } from "./standard-schema.js";
3
+ export function createForm(options) {
4
+ const validateOn = new Set(Array.isArray(options.validateOn) ? options.validateOn : [options.validateOn ?? "submit"]);
5
+ let initialValues = cloneValues(options.initialValues);
6
+ const state = cell({
7
+ dirty: false,
8
+ errors: {},
9
+ initialValues,
10
+ submitCount: 0,
11
+ submitting: false,
12
+ touched: {},
13
+ valid: true,
14
+ values: cloneValues(options.initialValues),
15
+ });
16
+ function commit(patch) {
17
+ const previous = state.get();
18
+ const next = {
19
+ ...previous,
20
+ ...patch,
21
+ };
22
+ next.dirty = isDirty(next.values, next.initialValues);
23
+ next.valid = hasNoErrors(next.errors);
24
+ state.set(next);
25
+ }
26
+ function setErrors(errors) {
27
+ commit({ errors: normalizeErrors(errors) });
28
+ }
29
+ async function validateField(name) {
30
+ const validator = options.validate?.[name];
31
+ if (validator === undefined) {
32
+ setFieldErrors(name, []);
33
+ return;
34
+ }
35
+ const values = state.get().values;
36
+ const errors = await validator(values[name], values);
37
+ setFieldErrors(name, normalizeFieldErrors(errors));
38
+ }
39
+ function setFieldErrors(name, errors) {
40
+ const current = state.get().errors;
41
+ setErrors({
42
+ ...current,
43
+ [name]: [...errors],
44
+ });
45
+ }
46
+ async function setValue(name, value) {
47
+ commit({
48
+ values: {
49
+ ...state.get().values,
50
+ [name]: value,
51
+ },
52
+ });
53
+ if (validateOn.has("change")) {
54
+ await validateField(name);
55
+ }
56
+ }
57
+ return {
58
+ state,
59
+ field(name) {
60
+ return {
61
+ state: {
62
+ get: () => fieldState(state.get(), name),
63
+ },
64
+ async blur() {
65
+ commit({
66
+ touched: {
67
+ ...state.get().touched,
68
+ [name]: true,
69
+ },
70
+ });
71
+ if (validateOn.has("blur")) {
72
+ await validateField(name);
73
+ }
74
+ },
75
+ setValue: (value) => setValue(name, value),
76
+ };
77
+ },
78
+ getValues() {
79
+ return state.get().values;
80
+ },
81
+ reset(values = initialValues) {
82
+ initialValues = cloneValues(values);
83
+ commit({
84
+ errors: {},
85
+ initialValues,
86
+ submitCount: 0,
87
+ submitting: false,
88
+ touched: {},
89
+ values: cloneValues(values),
90
+ });
91
+ },
92
+ setErrors,
93
+ setServerErrors(errors) {
94
+ const next = {};
95
+ for (const [name, messages] of Object.entries(errors.fieldErrors ?? {})) {
96
+ if (messages !== undefined && messages.length > 0) {
97
+ next[name] = [...messages];
98
+ }
99
+ }
100
+ if (errors.formErrors !== undefined && errors.formErrors.length > 0) {
101
+ next.root = [...errors.formErrors];
102
+ }
103
+ setErrors(next);
104
+ },
105
+ setValue,
106
+ async submit(handler) {
107
+ commit({
108
+ submitCount: state.get().submitCount + 1,
109
+ submitting: true,
110
+ });
111
+ const validation = await this.validate();
112
+ if (!validation.success) {
113
+ commit({ submitting: false });
114
+ return {
115
+ errors: validation.errors,
116
+ status: "invalid",
117
+ };
118
+ }
119
+ try {
120
+ const data = await handler(validation.value);
121
+ commit({ submitting: false });
122
+ return {
123
+ data,
124
+ status: "success",
125
+ };
126
+ }
127
+ catch (error) {
128
+ commit({ submitting: false });
129
+ return {
130
+ error,
131
+ status: "error",
132
+ };
133
+ }
134
+ },
135
+ async validate() {
136
+ const values = state.get().values;
137
+ const errors = {};
138
+ for (const name of Object.keys(options.validate ?? {})) {
139
+ const validator = options.validate?.[name];
140
+ if (validator === undefined) {
141
+ continue;
142
+ }
143
+ const fieldErrors = normalizeFieldErrors(await validator(values[name], values));
144
+ if (fieldErrors.length > 0) {
145
+ errors[name] = fieldErrors;
146
+ }
147
+ }
148
+ if (options.schema !== undefined) {
149
+ const result = await validateStandardSchema(options.schema, values);
150
+ if (!result.success) {
151
+ mergeIssueErrors(errors, result.issues);
152
+ }
153
+ else if (Object.keys(errors).length === 0) {
154
+ setErrors({});
155
+ return {
156
+ success: true,
157
+ value: result.value,
158
+ };
159
+ }
160
+ }
161
+ if (Object.keys(errors).length > 0) {
162
+ setErrors(errors);
163
+ return {
164
+ errors,
165
+ success: false,
166
+ };
167
+ }
168
+ setErrors({});
169
+ return {
170
+ success: true,
171
+ value: values,
172
+ };
173
+ },
174
+ };
175
+ }
176
+ function fieldState(formState, name) {
177
+ return {
178
+ dirty: !Object.is(formState.values[name], formState.initialValues[name]),
179
+ errors: [...(formState.errors[name] ?? [])],
180
+ touched: formState.touched[name] === true,
181
+ value: formState.values[name],
182
+ };
183
+ }
184
+ function mergeIssueErrors(errors, issues) {
185
+ for (const issue of issues) {
186
+ const key = issuePathKey(issue.path);
187
+ const name = (key ?? "root");
188
+ errors[name] = [...(errors[name] ?? []), issue.message];
189
+ }
190
+ }
191
+ function issuePathKey(path) {
192
+ const first = path?.[0];
193
+ if (first === undefined) {
194
+ return undefined;
195
+ }
196
+ return typeof first === "object" && first !== null && "key" in first
197
+ ? String(first.key)
198
+ : String(first);
199
+ }
200
+ function normalizeErrors(errors) {
201
+ return Object.fromEntries(Object.entries(errors).flatMap(([name, messages]) => messages === undefined || messages.length === 0 ? [] : [[name, [...messages]]]));
202
+ }
203
+ function hasNoErrors(errors) {
204
+ return Object.values(errors).every((messages) => messages === undefined || messages.length === 0);
205
+ }
206
+ function normalizeFieldErrors(errors) {
207
+ if (errors === undefined) {
208
+ return [];
209
+ }
210
+ return typeof errors === "string" ? [errors] : [...errors];
211
+ }
212
+ function isDirty(values, initialValues) {
213
+ return Object.keys(values).some((key) => !Object.is(values[key], initialValues[key]));
214
+ }
215
+ function cloneValues(values) {
216
+ return { ...values };
217
+ }
218
+ export { validateStandardSchema } from "./standard-schema.js";
219
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ export interface StandardSchemaV1<Input = unknown, Output = Input> {
2
+ readonly "~standard": StandardSchemaV1.Props<Input, Output>;
3
+ }
4
+ export declare namespace StandardSchemaV1 {
5
+ interface Props<Input = unknown, Output = Input> {
6
+ readonly version: 1;
7
+ readonly vendor: string;
8
+ readonly validate: (value: unknown, options?: Options | undefined) => Result<Output> | Promise<Result<Output>>;
9
+ readonly types?: Types<Input, Output> | undefined;
10
+ }
11
+ interface Options {
12
+ readonly libraryOptions?: Record<string, unknown> | undefined;
13
+ }
14
+ type Result<Output> = SuccessResult<Output> | FailureResult;
15
+ interface SuccessResult<Output> {
16
+ readonly value: Output;
17
+ readonly issues?: undefined;
18
+ }
19
+ interface FailureResult {
20
+ readonly issues: ReadonlyArray<Issue>;
21
+ }
22
+ interface Issue {
23
+ readonly message: string;
24
+ readonly path?: ReadonlyArray<PropertyKey | PathSegment> | undefined;
25
+ }
26
+ interface PathSegment {
27
+ readonly key: PropertyKey;
28
+ }
29
+ interface Types<Input = unknown, Output = Input> {
30
+ readonly input: Input;
31
+ readonly output: Output;
32
+ }
33
+ }
34
+ export type InferStandardSchemaInput<Schema> = Schema extends {
35
+ readonly "~standard": {
36
+ readonly types?: (infer Types) | undefined;
37
+ };
38
+ } ? NonNullable<Types> extends {
39
+ readonly input: infer Input;
40
+ } ? Input : never : never;
41
+ export type InferStandardSchemaOutput<Schema> = Schema extends {
42
+ readonly "~standard": {
43
+ readonly types?: (infer Types) | undefined;
44
+ };
45
+ } ? NonNullable<Types> extends {
46
+ readonly output: infer Output;
47
+ } ? Output : never : never;
48
+ export type StandardSchemaValidationResult<Output> = {
49
+ success: true;
50
+ value: Output;
51
+ } | {
52
+ issues: ReadonlyArray<StandardSchemaV1.Issue>;
53
+ success: false;
54
+ };
55
+ export declare function validateStandardSchema<Schema extends StandardSchemaV1>(schema: Schema, value: unknown): Promise<StandardSchemaValidationResult<InferStandardSchemaOutput<Schema>>>;
56
+ //# sourceMappingURL=standard-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-schema.d.ts","sourceRoot":"","sources":["../src/standard-schema.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;IAC/D,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;CAC7D;AAED,yBAAiB,gBAAgB,CAAC;IAChC,UAAiB,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QACpD,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;QACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,QAAQ,EAAE,CACjB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,KAC1B,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAC;KACnD;IAED,UAAiB,OAAO;QACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;KAC/D;IAED,KAAY,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;IAEnE,UAAiB,aAAa,CAAC,MAAM;QACnC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC;KAC7B;IAED,UAAiB,aAAa;QAC5B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,KAAK,CAAC,CAAC;KACvC;IAED,UAAiB,KAAK;QACpB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,WAAW,GAAG,WAAW,CAAC,GAAG,SAAS,CAAC;KACtE;IAED,UAAiB,WAAW;QAC1B,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAC;KAC3B;IAED,UAAiB,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QACpD,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;KACzB;CACF;AAED,MAAM,MAAM,wBAAwB,CAAC,MAAM,IAAI,MAAM,SAAS;IAC5D,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;CACtE,GACG,WAAW,CAAC,KAAK,CAAC,SAAS;IAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,KAAK,CAAA;CAAE,GACxD,KAAK,GACL,KAAK,GACP,KAAK,CAAC;AAEV,MAAM,MAAM,yBAAyB,CAAC,MAAM,IAAI,MAAM,SAAS;IAC7D,QAAQ,CAAC,WAAW,EAAE;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,GAAG,SAAS,CAAA;KAAE,CAAC;CACtE,GACG,WAAW,CAAC,KAAK,CAAC,SAAS;IAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,MAAM,CAAA;CAAE,GAC1D,MAAM,GACN,KAAK,GACP,KAAK,CAAC;AAEV,MAAM,MAAM,8BAA8B,CAAC,MAAM,IAC7C;IACE,OAAO,EAAE,IAAI,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,GACD;IACE,MAAM,EAAE,aAAa,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAAC;IAC9C,OAAO,EAAE,KAAK,CAAC;CAChB,CAAC;AAEN,wBAAsB,sBAAsB,CAAC,MAAM,SAAS,gBAAgB,EAC1E,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,GACb,OAAO,CAAC,8BAA8B,CAAC,yBAAyB,CAAC,MAAM,CAAC,CAAC,CAAC,CAY5E"}
@@ -0,0 +1,13 @@
1
+ export async function validateStandardSchema(schema, value) {
2
+ const result = await schema["~standard"].validate(value);
3
+ return result.issues === undefined
4
+ ? {
5
+ success: true,
6
+ value: result.value,
7
+ }
8
+ : {
9
+ issues: result.issues,
10
+ success: false,
11
+ };
12
+ }
13
+ //# sourceMappingURL=standard-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"standard-schema.js","sourceRoot":"","sources":["../src/standard-schema.ts"],"names":[],"mappings":"AAuEA,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,MAAc,EACd,KAAc;IAEd,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAEzD,OAAO,MAAM,CAAC,MAAM,KAAK,SAAS;QAChC,CAAC,CAAC;YACE,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,MAAM,CAAC,KAA0C;SACzD;QACH,CAAC,CAAC;YACE,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,OAAO,EAAE,KAAK;SACf,CAAC;AACR,CAAC"}
package/package.json ADDED
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "@reckona/mreact-forms",
3
+ "version": "0.0.1",
4
+ "description": "Reactive form state and validation utilities for mreact.",
5
+ "keywords": [
6
+ "forms",
7
+ "jsx",
8
+ "mreact",
9
+ "reactive",
10
+ "typescript",
11
+ "validation"
12
+ ],
13
+ "homepage": "https://github.com/t-k/mreact/tree/main/packages/forms#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/t-k/mreact/issues"
16
+ },
17
+ "license": "MIT",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/t-k/mreact.git",
21
+ "directory": "packages/forms"
22
+ },
23
+ "files": [
24
+ "dist/**/*.js",
25
+ "dist/**/*.js.map",
26
+ "dist/**/*.d.ts",
27
+ "dist/**/*.d.ts.map"
28
+ ],
29
+ "type": "module",
30
+ "sideEffects": false,
31
+ "types": "./dist/index.d.ts",
32
+ "exports": {
33
+ ".": {
34
+ "types": "./dist/index.d.ts",
35
+ "default": "./dist/index.js"
36
+ },
37
+ "./standard-schema": {
38
+ "types": "./dist/standard-schema.d.ts",
39
+ "default": "./dist/standard-schema.js"
40
+ }
41
+ },
42
+ "publishConfig": {
43
+ "access": "public"
44
+ },
45
+ "dependencies": {
46
+ "@reckona/mreact-reactive-core": "0.0.1"
47
+ }
48
+ }