@playfast/reform-forms 1.2.1 → 1.3.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/dist/form.d.ts +12 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +85 -0
- package/dist/form.js.map +1 -0
- package/dist/formMake.d.ts +9 -0
- package/dist/formMake.d.ts.map +1 -0
- package/dist/formMake.js +55 -0
- package/dist/formMake.js.map +1 -0
- package/dist/formState.d.ts +34 -0
- package/dist/formState.d.ts.map +1 -0
- package/dist/formState.js +96 -0
- package/dist/formState.js.map +1 -0
- package/dist/formTypes.d.ts +190 -0
- package/dist/formTypes.d.ts.map +1 -0
- package/dist/formTypes.js +2 -0
- package/dist/formTypes.js.map +1 -0
- package/dist/formView.d.ts +6 -0
- package/dist/formView.d.ts.map +1 -0
- package/dist/formView.js +136 -0
- package/dist/formView.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/path.d.ts +36 -0
- package/dist/path.d.ts.map +1 -0
- package/dist/path.js +113 -0
- package/dist/path.js.map +1 -0
- package/dist/validation.d.ts +12 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +20 -0
- package/dist/validation.js.map +1 -0
- package/package.json +17 -5
package/dist/form.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Layer, Schema as S } from 'effect';
|
|
2
|
+
import { State } from '@playfast/reform';
|
|
3
|
+
import { Bus, Reducers } from '@playfast/reform/internal';
|
|
4
|
+
import { error } from './validation.js';
|
|
5
|
+
import type { DecodedOfSchema, FormClass, FormLiveConfig, FormState, InputRecord, InputsObject, RuntimeConfig, ValuesOfSchema } from './formTypes.js';
|
|
6
|
+
export { error };
|
|
7
|
+
export { arrayKeysFor } from './formState.js';
|
|
8
|
+
export { make } from './formMake.js';
|
|
9
|
+
export { view } from './formView.js';
|
|
10
|
+
export type { AnyForm, ArrayBinding, ArrayItemView, Decoded, FieldBinding, FieldLimitations, FieldLimitationsExternalApi, FormClass, FormLiveConfig, FormManifest, FormManifestReflection, FormSchemaReflection, FormState, FormView, FormVisitor, Inputs, Limitations, RuntimeConfig, Values, View, } from './formTypes.js';
|
|
11
|
+
export declare const live: <N extends string, Schema extends S.Schema.AnyNoContext, FormInputs extends InputRecord, R = never>(form: FormClass<N, Schema, FormInputs>, config: FormLiveConfig<ValuesOfSchema<Schema>, DecodedOfSchema<Schema>, InputsObject<FormInputs>, R>) => Layer.Layer<State.StateStore<`${N}/state`, FormState<ValuesOfSchema<Schema>>> | RuntimeConfig<ValuesOfSchema<Schema>, DecodedOfSchema<Schema>, InputsObject<FormInputs>>, never, Bus | Reducers | R>;
|
|
12
|
+
//# sourceMappingURL=form.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwC,KAAK,EAAU,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AACzF,OAAO,EAAW,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAA;AACzD,OAAO,EAAE,KAAK,EAAoC,MAAM,cAAc,CAAA;AAUtE,OAAO,KAAK,EACV,eAAe,EACf,SAAS,EACT,cAAc,EACd,SAAS,EACT,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,EAAE,CAAA;AAChB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,YAAY,EACV,OAAO,EACP,YAAY,EACZ,aAAa,EACb,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,2BAA2B,EAC3B,SAAS,EACT,cAAc,EACd,YAAY,EACZ,sBAAsB,EACtB,oBAAoB,EACpB,SAAS,EACT,QAAQ,EACR,WAAW,EACX,MAAM,EACN,WAAW,EACX,aAAa,EACb,MAAM,EACN,IAAI,GACL,MAAM,aAAa,CAAA;AAEpB,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EACpC,UAAU,SAAS,WAAW,EAC9B,CAAC,GAAG,KAAK,EAET,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EACtC,QAAQ,cAAc,CACpB,cAAc,CAAC,MAAM,CAAC,EACtB,eAAe,CAAC,MAAM,CAAC,EACvB,YAAY,CAAC,UAAU,CAAC,EACxB,CAAC,CACF,KACA,KAAK,CAAC,KAAK,CACV,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GACjE,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,EAC1F,KAAK,EACL,GAAG,GAAG,QAAQ,GAAG,CAAC,CA6GnB,CAAA"}
|
package/dist/form.js
ADDED
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { Effect, Function as Fn, Layer, Option, Schema as S } from 'effect';
|
|
2
|
+
import { Reducer, State } from '@playfast/reform';
|
|
3
|
+
import { Bus, Reducers } from '@playfast/reform/internal';
|
|
4
|
+
import { error, normalizeErrors } from './validation.js';
|
|
5
|
+
import { appendAtPath, initialState, markTouched, moveAtPath, removeAtPath, setAtPath, swapAtPath, } from './formState.js';
|
|
6
|
+
export { error };
|
|
7
|
+
export { arrayKeysFor } from './formState.js';
|
|
8
|
+
export { make } from './formMake.js';
|
|
9
|
+
export { view } from './formView.js';
|
|
10
|
+
export const live = (form, config) => {
|
|
11
|
+
const configTag = form.config;
|
|
12
|
+
const configLayer = Layer.effect(configTag, Effect.map(Effect.context(), (context) => {
|
|
13
|
+
const runtimeConfig = {
|
|
14
|
+
initial: config.initial,
|
|
15
|
+
validate: (ctx) => {
|
|
16
|
+
const validationOutput = config.validate?.(ctx);
|
|
17
|
+
const effect = Effect.isEffect(validationOutput)
|
|
18
|
+
? validationOutput
|
|
19
|
+
: Effect.succeed(validationOutput);
|
|
20
|
+
return Fn.unsafeCoerce(Effect.map(Effect.provide(effect, context), (rawErrors) => normalizeErrors(rawErrors)));
|
|
21
|
+
},
|
|
22
|
+
submit: (ctx) => {
|
|
23
|
+
const submitOutput = config.submit?.(ctx);
|
|
24
|
+
const effect = Effect.isEffect(submitOutput) ? submitOutput : Effect.succeed(submitOutput);
|
|
25
|
+
return Fn.unsafeCoerce(Effect.asVoid(Effect.provide(effect, context)));
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
return config.limit === undefined ? runtimeConfig : { ...runtimeConfig, limit: config.limit };
|
|
29
|
+
}));
|
|
30
|
+
const reducerLayer = Reducer.live(form.reducer, (state, event) => {
|
|
31
|
+
if (event._tag === form.events.set.tag) {
|
|
32
|
+
return 'path' in event && 'value' in event
|
|
33
|
+
? setAtPath({ state, path: event.path, value: event.value })
|
|
34
|
+
: state;
|
|
35
|
+
}
|
|
36
|
+
if (event._tag === form.events.blur.tag) {
|
|
37
|
+
return 'path' in event
|
|
38
|
+
? { ...state, touched: markTouched(state.touched, event.path) }
|
|
39
|
+
: state;
|
|
40
|
+
}
|
|
41
|
+
if (event._tag === form.events.reset.tag) {
|
|
42
|
+
return initialState(state.initialValues);
|
|
43
|
+
}
|
|
44
|
+
if (event._tag === form.events.validationFinished.tag) {
|
|
45
|
+
return 'errors' in event
|
|
46
|
+
? { ...state, errors: event.errors, validationCount: state.validationCount + 1 }
|
|
47
|
+
: state;
|
|
48
|
+
}
|
|
49
|
+
if (event._tag === form.events.submitAttempted.tag) {
|
|
50
|
+
return { ...state, submitCount: state.submitCount + 1 };
|
|
51
|
+
}
|
|
52
|
+
if (event._tag === form.events.submitSucceeded.tag) {
|
|
53
|
+
if (!('values' in event)) {
|
|
54
|
+
return state;
|
|
55
|
+
}
|
|
56
|
+
return {
|
|
57
|
+
...state,
|
|
58
|
+
lastSubmittedValues: Option.some(Fn.unsafeCoerce(event.values)),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
if (event._tag === form.events.append.tag) {
|
|
62
|
+
return 'path' in event && 'value' in event
|
|
63
|
+
? appendAtPath({ state, path: event.path, value: event.value })
|
|
64
|
+
: state;
|
|
65
|
+
}
|
|
66
|
+
if (event._tag === form.events.remove.tag) {
|
|
67
|
+
return 'path' in event && 'index' in event
|
|
68
|
+
? removeAtPath({ state, path: event.path, index: event.index })
|
|
69
|
+
: state;
|
|
70
|
+
}
|
|
71
|
+
if (event._tag === form.events.move.tag) {
|
|
72
|
+
return 'path' in event && 'from' in event && 'to' in event
|
|
73
|
+
? moveAtPath({ state, path: event.path, from: event.from, to: event.to })
|
|
74
|
+
: state;
|
|
75
|
+
}
|
|
76
|
+
if (event._tag === form.events.swap.tag) {
|
|
77
|
+
return 'path' in event && 'a' in event && 'b' in event
|
|
78
|
+
? swapAtPath({ state, path: event.path, first: event.a, second: event.b })
|
|
79
|
+
: state;
|
|
80
|
+
}
|
|
81
|
+
return state;
|
|
82
|
+
});
|
|
83
|
+
return Layer.mergeAll(configLayer, reducerLayer).pipe(Layer.provideMerge(State.live(form.state, initialState(config.initial))));
|
|
84
|
+
};
|
|
85
|
+
//# sourceMappingURL=form.js.map
|
package/dist/form.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"form.js","sourceRoot":"","sources":["../src/form.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Schema as S } from 'effect';
|
|
2
|
+
import type { FormClass, InputRecord } from './formTypes.js';
|
|
3
|
+
interface MakeConfig<Schema extends S.Schema.AnyNoContext, Inputs extends InputRecord> {
|
|
4
|
+
readonly schema: Schema;
|
|
5
|
+
readonly inputs?: Inputs;
|
|
6
|
+
}
|
|
7
|
+
export declare const make: <const N extends string, Schema extends S.Schema.AnyNoContext, const Inputs extends InputRecord = {}>(name: N, config: MakeConfig<Schema, Inputs>) => FormClass<N, Schema, Inputs>;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=formMake.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formMake.d.ts","sourceRoot":"","sources":["../src/formMake.ts"],"names":[],"mappings":"AAAA,OAAO,EAAmC,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAErE,OAAO,KAAK,EAEV,SAAS,EAKT,WAAW,EAIZ,MAAM,aAAa,CAAA;AAEpB,UAAU,UAAU,CAAC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,SAAS,WAAW;IACnF,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IAEvB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,eAAO,MAAM,IAAI,GACf,KAAK,CAAC,CAAC,SAAS,MAAM,EACtB,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EACpC,KAAK,CAAC,MAAM,SAAS,WAAW,GAAG,EAAE,EAErC,MAAM,CAAC,EACP,QAAQ,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,KACjC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAkE7B,CAAA"}
|
package/dist/formMake.js
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Context, Function as Fn, Option, Schema as S } from 'effect';
|
|
2
|
+
import { Event, Reducer, State } from '@playfast/reform';
|
|
3
|
+
export const make = (name, config) => {
|
|
4
|
+
const valuesSchema = S.encodedSchema(config.schema);
|
|
5
|
+
const stringRecord = S.Record({ key: S.String, value: S.String });
|
|
6
|
+
const stateSchema = S.Struct({
|
|
7
|
+
values: valuesSchema,
|
|
8
|
+
initialValues: valuesSchema,
|
|
9
|
+
touched: S.Record({ key: S.String, value: S.Boolean }),
|
|
10
|
+
errors: stringRecord,
|
|
11
|
+
dirtyPaths: S.Array(S.String),
|
|
12
|
+
submitCount: S.Number,
|
|
13
|
+
validationCount: S.Number,
|
|
14
|
+
lastSubmittedValues: S.OptionFromSelf(valuesSchema),
|
|
15
|
+
arrayKeys: S.Record({ key: S.String, value: S.Array(S.String) }),
|
|
16
|
+
});
|
|
17
|
+
const state = State.make(`${name}/state`, stateSchema, { title: `${name} form state` });
|
|
18
|
+
const events = {
|
|
19
|
+
set: Event.make(`${name}/SetField`, S.Struct({ path: S.String, value: S.Unknown })),
|
|
20
|
+
blur: Event.make(`${name}/BlurField`, S.Struct({ path: S.String })),
|
|
21
|
+
reset: Event.make(`${name}/Reset`, S.Struct({})),
|
|
22
|
+
validationFinished: Event.make(`${name}/ValidationFinished`, S.Struct({
|
|
23
|
+
errors: S.Record({ key: S.String, value: S.String }),
|
|
24
|
+
})),
|
|
25
|
+
submitAttempted: Event.make(`${name}/SubmitAttempted`, S.Struct({})),
|
|
26
|
+
submitSucceeded: Event.make(`${name}/SubmitSucceeded`, S.Struct({ values: S.Unknown })),
|
|
27
|
+
append: Event.make(`${name}/AppendItem`, S.Struct({ path: S.String, value: S.Unknown })),
|
|
28
|
+
remove: Event.make(`${name}/RemoveItem`, S.Struct({ path: S.String, index: S.Number })),
|
|
29
|
+
move: Event.make(`${name}/MoveItem`, S.Struct({ path: S.String, from: S.Number, to: S.Number })),
|
|
30
|
+
swap: Event.make(`${name}/SwapItems`, S.Struct({ path: S.String, a: S.Number, b: S.Number })),
|
|
31
|
+
};
|
|
32
|
+
const reducer = Reducer.make(`${name}/FormReducer`, {
|
|
33
|
+
states: [state],
|
|
34
|
+
events: Object.values(events),
|
|
35
|
+
});
|
|
36
|
+
const runtimeConfig = Context.GenericTag(`reform/form/${name}/config`);
|
|
37
|
+
const inputs = Fn.unsafeCoerce(Option.getOrElse(Option.fromNullable(config.inputs), () => ({})));
|
|
38
|
+
class FormImpl {
|
|
39
|
+
static manifest = {
|
|
40
|
+
kind: 'Form',
|
|
41
|
+
name,
|
|
42
|
+
schema: config.schema,
|
|
43
|
+
inputs,
|
|
44
|
+
};
|
|
45
|
+
static state = state;
|
|
46
|
+
static config = runtimeConfig;
|
|
47
|
+
static events = events;
|
|
48
|
+
static reducer = reducer;
|
|
49
|
+
static capture(visitor) {
|
|
50
|
+
return visitor.visit(FormImpl);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return FormImpl;
|
|
54
|
+
};
|
|
55
|
+
//# sourceMappingURL=formMake.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formMake.js","sourceRoot":"","sources":["../src/formMake.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { FormState } from './formTypes.js';
|
|
2
|
+
export declare const arrayKeysFor: (source: unknown, path?: string) => Record<string, ReadonlyArray<string>>;
|
|
3
|
+
export declare const initialState: <Values>(initial: Values) => FormState<Values>;
|
|
4
|
+
export declare const markTouched: (touched: Readonly<Record<string, boolean>>, path: string) => Readonly<Record<string, boolean>>;
|
|
5
|
+
interface ArrayLookup {
|
|
6
|
+
readonly source: unknown;
|
|
7
|
+
readonly path: string;
|
|
8
|
+
}
|
|
9
|
+
interface PathInput<Values> {
|
|
10
|
+
readonly state: FormState<Values>;
|
|
11
|
+
readonly path: string;
|
|
12
|
+
}
|
|
13
|
+
interface SetPathInput<Values> extends PathInput<Values> {
|
|
14
|
+
readonly value: unknown;
|
|
15
|
+
}
|
|
16
|
+
interface RemovePathInput<Values> extends PathInput<Values> {
|
|
17
|
+
readonly index: number;
|
|
18
|
+
}
|
|
19
|
+
interface MovePathInput<Values> extends PathInput<Values> {
|
|
20
|
+
readonly from: number;
|
|
21
|
+
readonly to: number;
|
|
22
|
+
}
|
|
23
|
+
interface SwapPathInput<Values> extends PathInput<Values> {
|
|
24
|
+
readonly first: number;
|
|
25
|
+
readonly second: number;
|
|
26
|
+
}
|
|
27
|
+
export declare const currentArray: (input: ArrayLookup) => ReadonlyArray<unknown>;
|
|
28
|
+
export declare const setAtPath: <Values>(input: SetPathInput<Values>) => FormState<Values>;
|
|
29
|
+
export declare const appendAtPath: <Values>(input: SetPathInput<Values>) => FormState<Values>;
|
|
30
|
+
export declare const removeAtPath: <Values>(input: RemovePathInput<Values>) => FormState<Values>;
|
|
31
|
+
export declare const moveAtPath: <Values>(input: MovePathInput<Values>) => FormState<Values>;
|
|
32
|
+
export declare const swapAtPath: <Values>(input: SwapPathInput<Values>) => FormState<Values>;
|
|
33
|
+
export {};
|
|
34
|
+
//# sourceMappingURL=formState.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formState.d.ts","sourceRoot":"","sources":["../src/formState.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAK5C,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,EAAE,aAAS,KAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAmB7F,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,EAAE,SAAS,MAAM,KAAG,SAAS,CAAC,MAAM,CAUrE,CAAA;AAEF,eAAO,MAAM,WAAW,GACtB,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC1C,MAAM,MAAM,KACX,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAmC,CAAA;AAEtE,UAAU,WAAW;IACnB,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAOD,UAAU,SAAS,CAAC,MAAM;IACxB,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAA;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED,UAAU,YAAY,CAAC,MAAM,CAAE,SAAQ,SAAS,CAAC,MAAM,CAAC;IACtD,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;CACxB;AAED,UAAU,eAAe,CAAC,MAAM,CAAE,SAAQ,SAAS,CAAC,MAAM,CAAC;IACzD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;CACvB;AAED,UAAU,aAAa,CAAC,MAAM,CAAE,SAAQ,SAAS,CAAC,MAAM,CAAC;IACvD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;CACpB;AAED,UAAU,aAAa,CAAC,MAAM,CAAE,SAAQ,SAAS,CAAC,MAAM,CAAC;IACvD,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAQD,eAAO,MAAM,YAAY,GAAI,OAAO,WAAW,KAAG,aAAa,CAAC,OAAO,CAGtE,CAAA;AAYD,eAAO,MAAM,SAAS,GAAI,MAAM,EAAE,OAAO,YAAY,CAAC,MAAM,CAAC,KAAG,SAAS,CAAC,MAAM,CACM,CAAA;AAEtF,eAAO,MAAM,YAAY,GAAI,MAAM,EAAE,OAAO,YAAY,CAAC,MAAM,CAAC,KAAG,SAAS,CAAC,MAAM,CAUlF,CAAA;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,EAAE,OAAO,eAAe,CAAC,MAAM,CAAC,KAAG,SAAS,CAAC,MAAM,CAgBrF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,KAAG,SAAS,CAAC,MAAM,CAajF,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,MAAM,EAAE,OAAO,aAAa,CAAC,MAAM,CAAC,KAAG,SAAS,CAAC,MAAM,CA2BjF,CAAA"}
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import { Function as Fn, Option, Record } from 'effect';
|
|
2
|
+
import { getNestedValue, moveAt, recalculateDirtyPaths, replaceAt, setNestedValue, } from './path.js';
|
|
3
|
+
const arrayKeyCounter = { current: 0 };
|
|
4
|
+
const makeArrayKey = () => `form-item-${arrayKeyCounter.current++}`;
|
|
5
|
+
export const arrayKeysFor = (source, path = '') => {
|
|
6
|
+
const out = {};
|
|
7
|
+
const visit = (node) => {
|
|
8
|
+
if (Array.isArray(node.current)) {
|
|
9
|
+
out[node.path] = node.current.map(() => makeArrayKey());
|
|
10
|
+
node.current.forEach((element, index) => visit({ current: element, path: `${node.path}[${index}]` }));
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
if (node.current !== null && typeof node.current === 'object') {
|
|
14
|
+
Record.toEntries(Fn.unsafeCoerce(node.current)).forEach(([key, child]) => visit({ current: child, path: node.path.length === 0 ? key : `${node.path}.${key}` }));
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
visit({ current: source, path });
|
|
18
|
+
return out;
|
|
19
|
+
};
|
|
20
|
+
export const initialState = (initial) => ({
|
|
21
|
+
values: initial,
|
|
22
|
+
initialValues: initial,
|
|
23
|
+
touched: {},
|
|
24
|
+
errors: {},
|
|
25
|
+
dirtyPaths: [],
|
|
26
|
+
submitCount: 0,
|
|
27
|
+
validationCount: 0,
|
|
28
|
+
lastSubmittedValues: Option.none(),
|
|
29
|
+
arrayKeys: arrayKeysFor(initial),
|
|
30
|
+
});
|
|
31
|
+
export const markTouched = (touched, path) => ({ ...touched, [path]: true });
|
|
32
|
+
const withValues = (state, nextValues) => ({
|
|
33
|
+
...state,
|
|
34
|
+
values: nextValues,
|
|
35
|
+
dirtyPaths: recalculateDirtyPaths(state.initialValues, nextValues),
|
|
36
|
+
});
|
|
37
|
+
export const currentArray = (input) => {
|
|
38
|
+
const current = getNestedValue(input.source, input.path);
|
|
39
|
+
return Array.isArray(current) ? current : [];
|
|
40
|
+
};
|
|
41
|
+
const updateKeys = (state, path, transform) => {
|
|
42
|
+
const existing = state.arrayKeys[path] ?? currentArray({ source: state.values, path }).map(() => makeArrayKey());
|
|
43
|
+
return { ...state.arrayKeys, [path]: transform(existing) };
|
|
44
|
+
};
|
|
45
|
+
export const setAtPath = (input) => withValues(input.state, setNestedValue(input.state.values, input.path, input.value));
|
|
46
|
+
export const appendAtPath = (input) => {
|
|
47
|
+
const elements = currentArray({ source: input.state.values, path: input.path });
|
|
48
|
+
const nextValues = setNestedValue(input.state.values, input.path, [...elements, input.value]);
|
|
49
|
+
return {
|
|
50
|
+
...withValues(input.state, nextValues),
|
|
51
|
+
arrayKeys: updateKeys(Fn.unsafeCoerce(input.state), input.path, (keys) => [
|
|
52
|
+
...keys,
|
|
53
|
+
makeArrayKey(),
|
|
54
|
+
]),
|
|
55
|
+
};
|
|
56
|
+
};
|
|
57
|
+
export const removeAtPath = (input) => {
|
|
58
|
+
const elements = currentArray({ source: input.state.values, path: input.path });
|
|
59
|
+
if (input.index < 0 || input.index >= elements.length) {
|
|
60
|
+
return input.state;
|
|
61
|
+
}
|
|
62
|
+
const nextValues = setNestedValue(input.state.values, input.path, elements.filter((_, position) => position !== input.index));
|
|
63
|
+
return {
|
|
64
|
+
...withValues(input.state, nextValues),
|
|
65
|
+
arrayKeys: updateKeys(Fn.unsafeCoerce(input.state), input.path, (keys) => keys.filter((_, position) => position !== input.index)),
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
export const moveAtPath = (input) => {
|
|
69
|
+
const elements = currentArray({ source: input.state.values, path: input.path });
|
|
70
|
+
const next = moveAt(elements, input.from, input.to);
|
|
71
|
+
if (next === elements) {
|
|
72
|
+
return input.state;
|
|
73
|
+
}
|
|
74
|
+
const nextValues = setNestedValue(input.state.values, input.path, next);
|
|
75
|
+
return {
|
|
76
|
+
...withValues(input.state, nextValues),
|
|
77
|
+
arrayKeys: updateKeys(Fn.unsafeCoerce(input.state), input.path, (keys) => moveAt(keys, input.from, input.to)),
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
export const swapAtPath = (input) => {
|
|
81
|
+
const elements = currentArray({ source: input.state.values, path: input.path });
|
|
82
|
+
if (input.first < 0 ||
|
|
83
|
+
input.second < 0 ||
|
|
84
|
+
input.first >= elements.length ||
|
|
85
|
+
input.second >= elements.length ||
|
|
86
|
+
input.first === input.second) {
|
|
87
|
+
return input.state;
|
|
88
|
+
}
|
|
89
|
+
const swapped = replaceAt(replaceAt(elements, input.first, elements[input.second]), input.second, elements[input.first]);
|
|
90
|
+
const nextValues = setNestedValue(input.state.values, input.path, swapped);
|
|
91
|
+
return {
|
|
92
|
+
...withValues(input.state, nextValues),
|
|
93
|
+
arrayKeys: updateKeys(Fn.unsafeCoerce(input.state), input.path, (keys) => replaceAt(replaceAt(keys, input.first, keys[input.second] ?? makeArrayKey()), input.second, keys[input.first] ?? makeArrayKey())),
|
|
94
|
+
};
|
|
95
|
+
};
|
|
96
|
+
//# sourceMappingURL=formState.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formState.js","sourceRoot":"","sources":["../src/formState.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import type { Context, Effect, Option, Schema as S } from 'effect';
|
|
2
|
+
import type { Event, Reducer, State } from '@playfast/reform';
|
|
3
|
+
import type { AnySource, SourceName, SourceValue as ReformSourceValue } from '@playfast/reform/internal';
|
|
4
|
+
import type { ArrayItem, ArrayPath, FieldPath, PathValue, VariantPath, VariantValue } from './path.js';
|
|
5
|
+
import type { FormError, FormErrors } from './validation.js';
|
|
6
|
+
export interface FieldLimitationsExternalApi<A = unknown> {
|
|
7
|
+
readonly required?: boolean;
|
|
8
|
+
readonly disabled?: boolean;
|
|
9
|
+
readonly readonly?: boolean;
|
|
10
|
+
readonly visible?: boolean;
|
|
11
|
+
readonly min?: number;
|
|
12
|
+
readonly max?: number;
|
|
13
|
+
readonly minLength?: number;
|
|
14
|
+
readonly maxLength?: number;
|
|
15
|
+
readonly minItems?: number;
|
|
16
|
+
readonly maxItems?: number;
|
|
17
|
+
readonly options?: ReadonlyArray<A>;
|
|
18
|
+
readonly meta?: Readonly<Record<string, unknown>>;
|
|
19
|
+
}
|
|
20
|
+
export type FieldLimitations<A = unknown> = FieldLimitationsExternalApi<A>;
|
|
21
|
+
export type Limitations = Readonly<Record<string, FieldLimitations>>;
|
|
22
|
+
export interface FormState<Values> {
|
|
23
|
+
readonly values: Values;
|
|
24
|
+
readonly initialValues: Values;
|
|
25
|
+
readonly touched: Readonly<Record<string, boolean>>;
|
|
26
|
+
readonly errors: FormErrors;
|
|
27
|
+
readonly dirtyPaths: ReadonlyArray<string>;
|
|
28
|
+
readonly submitCount: number;
|
|
29
|
+
readonly validationCount: number;
|
|
30
|
+
readonly lastSubmittedValues: Option.Option<Values>;
|
|
31
|
+
readonly arrayKeys: Readonly<Record<string, ReadonlyArray<string>>>;
|
|
32
|
+
}
|
|
33
|
+
export interface FieldBinding<A> {
|
|
34
|
+
readonly path: string;
|
|
35
|
+
readonly value: A;
|
|
36
|
+
readonly set: (value: A | ((prev: A) => A)) => void;
|
|
37
|
+
readonly blur: () => void;
|
|
38
|
+
readonly error: Option.Option<string>;
|
|
39
|
+
readonly dirty: boolean;
|
|
40
|
+
readonly touched: boolean;
|
|
41
|
+
readonly validating: boolean;
|
|
42
|
+
readonly limitations: FieldLimitations<A>;
|
|
43
|
+
}
|
|
44
|
+
export interface ArrayItemView<Item> {
|
|
45
|
+
readonly key: string;
|
|
46
|
+
readonly index: number;
|
|
47
|
+
readonly value: Item;
|
|
48
|
+
readonly remove: () => void;
|
|
49
|
+
readonly move: (to: number) => void;
|
|
50
|
+
}
|
|
51
|
+
export interface ArrayBinding<Item> {
|
|
52
|
+
readonly path: string;
|
|
53
|
+
readonly items: ReadonlyArray<ArrayItemView<Item>>;
|
|
54
|
+
readonly append: (value?: Item) => void;
|
|
55
|
+
readonly remove: (index: number) => void;
|
|
56
|
+
readonly move: (from: number, to: number) => void;
|
|
57
|
+
readonly swap: (a: number, b: number) => void;
|
|
58
|
+
readonly limitations: FieldLimitations<ReadonlyArray<Item>>;
|
|
59
|
+
}
|
|
60
|
+
export interface FormView<Values, Inputs = {}> {
|
|
61
|
+
readonly values: Values;
|
|
62
|
+
readonly inputs: Inputs;
|
|
63
|
+
readonly errors: FormErrors;
|
|
64
|
+
readonly dirty: boolean;
|
|
65
|
+
readonly canSubmit: boolean;
|
|
66
|
+
readonly submitCount: number;
|
|
67
|
+
readonly validationCount: number;
|
|
68
|
+
readonly lastSubmittedValues: Option.Option<Values>;
|
|
69
|
+
readonly submit: () => void;
|
|
70
|
+
readonly reset: () => void;
|
|
71
|
+
readonly validate: () => void;
|
|
72
|
+
readonly field: <P extends FieldPath<Values>>(path: P) => FieldBinding<PathValue<Values, P>>;
|
|
73
|
+
readonly array: <P extends ArrayPath<Values>>(path: P) => ArrayBinding<ArrayItem<Values, P>>;
|
|
74
|
+
readonly variantValue: <P extends VariantPath<Values>>(path: P) => VariantValue<Values, P>;
|
|
75
|
+
}
|
|
76
|
+
export type InputRecord = Readonly<Record<string, AnySource>>;
|
|
77
|
+
export type InputsObject<Inputs extends InputRecord> = {
|
|
78
|
+
readonly [K in keyof Inputs as SourceName<Inputs[K]>]: ReformSourceValue<Inputs[K]>;
|
|
79
|
+
};
|
|
80
|
+
export type InputStores<Inputs extends InputRecord> = {
|
|
81
|
+
[K in keyof Inputs]: Inputs[K] extends {
|
|
82
|
+
readonly store: Context.Tag<infer Service, infer _Store>;
|
|
83
|
+
} ? Service : never;
|
|
84
|
+
}[keyof Inputs];
|
|
85
|
+
export type ValuesOfSchema<Schema extends S.Schema.AnyNoContext> = S.Schema.Encoded<Schema>;
|
|
86
|
+
export type DecodedOfSchema<Schema extends S.Schema.AnyNoContext> = S.Schema.Type<Schema>;
|
|
87
|
+
export interface RuntimeConfig<Values, Decoded, Inputs> {
|
|
88
|
+
readonly initial: Values;
|
|
89
|
+
readonly limit?: (ctx: {
|
|
90
|
+
readonly values: Values;
|
|
91
|
+
readonly inputs: Inputs;
|
|
92
|
+
}) => Limitations;
|
|
93
|
+
readonly validate: (ctx: {
|
|
94
|
+
readonly values: Values;
|
|
95
|
+
readonly decoded: Decoded;
|
|
96
|
+
readonly inputs: Inputs;
|
|
97
|
+
}) => Effect.Effect<ReadonlyArray<FormError>, never, never>;
|
|
98
|
+
readonly submit: (ctx: {
|
|
99
|
+
readonly values: Values;
|
|
100
|
+
readonly decoded: Decoded;
|
|
101
|
+
readonly inputs: Inputs;
|
|
102
|
+
}) => Effect.Effect<void, unknown, never>;
|
|
103
|
+
}
|
|
104
|
+
export interface FormLiveConfig<Values, Decoded, Inputs, R = never> {
|
|
105
|
+
readonly initial: Values;
|
|
106
|
+
readonly limit?: (ctx: {
|
|
107
|
+
readonly values: Values;
|
|
108
|
+
readonly inputs: Inputs;
|
|
109
|
+
}) => Limitations;
|
|
110
|
+
readonly validate?: (ctx: {
|
|
111
|
+
readonly values: Values;
|
|
112
|
+
readonly decoded: Decoded;
|
|
113
|
+
readonly inputs: Inputs;
|
|
114
|
+
}) => void | FormError | ReadonlyArray<FormError> | Effect.Effect<void | FormError | ReadonlyArray<FormError>, never, R>;
|
|
115
|
+
readonly submit?: (ctx: {
|
|
116
|
+
readonly values: Values;
|
|
117
|
+
readonly decoded: Decoded;
|
|
118
|
+
readonly inputs: Inputs;
|
|
119
|
+
}) => void | Effect.Effect<unknown, unknown, R>;
|
|
120
|
+
}
|
|
121
|
+
export interface FormSchemaReflection {
|
|
122
|
+
readonly ast: S.Schema<unknown, unknown, unknown>['ast'];
|
|
123
|
+
}
|
|
124
|
+
export interface FormManifestReflection<N extends string> {
|
|
125
|
+
readonly kind: 'Form';
|
|
126
|
+
readonly name: N;
|
|
127
|
+
readonly schema: FormSchemaReflection;
|
|
128
|
+
readonly inputs: InputRecord;
|
|
129
|
+
}
|
|
130
|
+
export interface FormManifest<N extends string, Schema extends S.Schema.AnyNoContext, Inputs extends InputRecord> extends FormManifestReflection<N> {
|
|
131
|
+
readonly schema: Schema;
|
|
132
|
+
readonly inputs: Inputs;
|
|
133
|
+
}
|
|
134
|
+
export interface FormEvents {
|
|
135
|
+
readonly set: Event.EventClass<string, {
|
|
136
|
+
readonly path: string;
|
|
137
|
+
readonly value: unknown;
|
|
138
|
+
}>;
|
|
139
|
+
readonly blur: Event.EventClass<string, {
|
|
140
|
+
readonly path: string;
|
|
141
|
+
}>;
|
|
142
|
+
readonly reset: Event.EventClass<string, {}>;
|
|
143
|
+
readonly validationFinished: Event.EventClass<string, {
|
|
144
|
+
readonly errors: FormErrors;
|
|
145
|
+
}>;
|
|
146
|
+
readonly submitAttempted: Event.EventClass<string, {}>;
|
|
147
|
+
readonly submitSucceeded: Event.EventClass<string, {
|
|
148
|
+
readonly values: unknown;
|
|
149
|
+
}>;
|
|
150
|
+
readonly append: Event.EventClass<string, {
|
|
151
|
+
readonly path: string;
|
|
152
|
+
readonly value: unknown;
|
|
153
|
+
}>;
|
|
154
|
+
readonly remove: Event.EventClass<string, {
|
|
155
|
+
readonly path: string;
|
|
156
|
+
readonly index: number;
|
|
157
|
+
}>;
|
|
158
|
+
readonly move: Event.EventClass<string, {
|
|
159
|
+
readonly path: string;
|
|
160
|
+
readonly from: number;
|
|
161
|
+
readonly to: number;
|
|
162
|
+
}>;
|
|
163
|
+
readonly swap: Event.EventClass<string, {
|
|
164
|
+
readonly path: string;
|
|
165
|
+
readonly a: number;
|
|
166
|
+
readonly b: number;
|
|
167
|
+
}>;
|
|
168
|
+
}
|
|
169
|
+
export interface FormVisitor<Result> {
|
|
170
|
+
readonly visit: <N extends string, Schema extends S.Schema.AnyNoContext, Inputs extends InputRecord>(form: FormClass<N, Schema, Inputs>) => Result;
|
|
171
|
+
}
|
|
172
|
+
export interface AnyForm {
|
|
173
|
+
new (): {};
|
|
174
|
+
readonly manifest: FormManifestReflection<string>;
|
|
175
|
+
readonly capture: <Result>(visitor: FormVisitor<Result>) => Result;
|
|
176
|
+
}
|
|
177
|
+
export interface FormClass<N extends string, Schema extends S.Schema.AnyNoContext, Inputs extends InputRecord> {
|
|
178
|
+
new (): {};
|
|
179
|
+
readonly manifest: FormManifest<N, Schema, Inputs>;
|
|
180
|
+
readonly capture: <Result>(visitor: FormVisitor<Result>) => Result;
|
|
181
|
+
readonly state: State.StateClass<`${N}/state`, FormState<ValuesOfSchema<Schema>>>;
|
|
182
|
+
readonly config: Context.Tag<RuntimeConfig<ValuesOfSchema<Schema>, DecodedOfSchema<Schema>, InputsObject<Inputs>>, RuntimeConfig<ValuesOfSchema<Schema>, DecodedOfSchema<Schema>, InputsObject<Inputs>>>;
|
|
183
|
+
readonly events: FormEvents;
|
|
184
|
+
readonly reducer: Reducer.StateReducerClass<State.StateClass<`${N}/state`, FormState<ValuesOfSchema<Schema>>>, ReadonlyArray<Event.AnyEvent>>;
|
|
185
|
+
}
|
|
186
|
+
export type Values<F> = F extends FormClass<infer _Name, infer Schema, infer _Inputs> ? ValuesOfSchema<Schema> : never;
|
|
187
|
+
export type Decoded<F> = F extends FormClass<infer _Name, infer Schema, infer _Inputs> ? DecodedOfSchema<Schema> : never;
|
|
188
|
+
export type Inputs<F> = F extends FormClass<infer _Name, infer _Schema, infer Inputs> ? InputsObject<Inputs> : never;
|
|
189
|
+
export type View<F> = FormView<Values<F>, Inputs<F>>;
|
|
190
|
+
//# sourceMappingURL=formTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formTypes.d.ts","sourceRoot":"","sources":["../src/formTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC,EAAE,MAAM,QAAQ,CAAA;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAC7D,OAAO,KAAK,EACV,SAAS,EACT,UAAU,EACV,WAAW,IAAI,iBAAiB,EACjC,MAAM,2BAA2B,CAAA;AAClC,OAAO,KAAK,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,YAAY,EACb,MAAM,QAAQ,CAAA;AACf,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzD,MAAM,WAAW,2BAA2B,CAAC,CAAC,GAAG,OAAO;IACtD,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,CAAC,CAAC,CAAA;IACnC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;CAClD;AAED,MAAM,MAAM,gBAAgB,CAAC,CAAC,GAAG,OAAO,IAAI,2BAA2B,CAAC,CAAC,CAAC,CAAA;AAE1E,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAA;AAEpE,MAAM,WAAW,SAAS,CAAC,MAAM;IAC/B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACnD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC,MAAM,CAAC,CAAA;IAC1C,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;CACpE;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;IACjB,QAAQ,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,IAAI,CAAA;IACnD,QAAQ,CAAC,IAAI,EAAE,MAAM,IAAI,CAAA;IACzB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAA;IAC5B,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,aAAa,CAAC,IAAI;IACjC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAA;IACpB,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC;AAED,MAAM,WAAW,YAAY,CAAC,IAAI;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,IAAI,KAAK,IAAI,CAAA;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,KAAK,IAAI,CAAA;IACjD,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;IAC7C,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAA;CAC5D;AAED,MAAM,WAAW,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,EAAE;IAC3C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;IACvB,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAA;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAA;IAChC,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;IACnD,QAAQ,CAAC,MAAM,EAAE,MAAM,IAAI,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,IAAI,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,CAAA;IAC7B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5F,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;IAC5F,QAAQ,CAAC,YAAY,EAAE,CAAC,CAAC,SAAS,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA;CAC3F;AAED,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAA;AAE7D,MAAM,MAAM,YAAY,CAAC,MAAM,SAAS,WAAW,IAAI;IACrD,QAAQ,EAAE,CAAC,IAAI,MAAM,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;CACpF,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,MAAM,SAAS,WAAW,IAAI;KACnD,CAAC,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,SAAS;QACrC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,EAAE,MAAM,MAAM,CAAC,CAAA;KACzD,GACG,OAAO,GACP,KAAK;CACV,CAAC,MAAM,MAAM,CAAC,CAAA;AAEf,MAAM,MAAM,cAAc,CAAC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;AAC3F,MAAM,MAAM,eAAe,CAAC,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAEzF,MAAM,WAAW,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,WAAW,CAAA;IAC3F,QAAQ,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,KAAK,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;IAC3D,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,CAAA;CAC1C;AAED,MAAM,WAAW,cAAc,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,KAAK;IAChE,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IAExB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,GAAG,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KAAE,KAAK,WAAW,CAAA;IAE3F,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE;QACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,KACG,IAAI,GACJ,SAAS,GACT,aAAa,CAAC,SAAS,CAAC,GACxB,MAAM,CAAC,MAAM,CAAC,IAAI,GAAG,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAExE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE;QACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;QACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,CAAA;CAChD;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,KAAK,CAAC,CAAA;CACzD;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC,SAAS,MAAM;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,MAAM,EAAE,oBAAoB,CAAA;IACrC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;CAC7B;AAED,MAAM,WAAW,YAAY,CAC3B,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EACpC,MAAM,SAAS,WAAW,CAC1B,SAAQ,sBAAsB,CAAC,CAAC,CAAC;IACjC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,MAAM,WAAW,UAAU;IACzB,QAAQ,CAAC,GAAG,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC1F,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IAC5C,QAAQ,CAAC,kBAAkB,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;KAAE,CAAC,CAAA;IACtF,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;IACtD,QAAQ,CAAC,eAAe,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAChF,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAA;IAC7F,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IAC5F,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAC7B,MAAM,EACN;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;KAAE,CACtE,CAAA;IACD,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,UAAU,CAC7B,MAAM,EACN;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAClE,CAAA;CACF;AAED,MAAM,WAAW,WAAW,CAAC,MAAM;IACjC,QAAQ,CAAC,KAAK,EAAE,CACd,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EACpC,MAAM,SAAS,WAAW,EAE1B,IAAI,EAAE,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,KAC/B,MAAM,CAAA;CACZ;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,CAAC,MAAM,CAAC,CAAA;IACjD,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;CACnE;AAED,MAAM,WAAW,SAAS,CACxB,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EACpC,MAAM,SAAS,WAAW;IAE1B,QAAQ,EAAE,CAAA;IACV,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;IAClD,QAAQ,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,KAAK,MAAM,CAAA;IAClE,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA;IACjF,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAC1B,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,EACpF,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC,CACrF,CAAA;IACD,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,iBAAiB,CACzC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,EACjE,aAAa,CAAC,KAAK,CAAC,QAAQ,CAAC,CAC9B,CAAA;CACF;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,IAClB,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,EAAE,MAAM,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;AAEhG,MAAM,MAAM,OAAO,CAAC,CAAC,IACnB,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,EAAE,MAAM,MAAM,EAAE,MAAM,OAAO,CAAC,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;AAEjG,MAAM,MAAM,MAAM,CAAC,CAAC,IAClB,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,EAAE,MAAM,OAAO,EAAE,MAAM,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC,GAAG,KAAK,CAAA;AAE9F,MAAM,MAAM,IAAI,CAAC,CAAC,IAAI,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formTypes.js","sourceRoot":"","sources":["../src/formTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Effect, Schema as S } from 'effect';
|
|
2
|
+
import { Bus } from '@playfast/reform/internal';
|
|
3
|
+
import { State } from '@playfast/reform';
|
|
4
|
+
import type { DecodedOfSchema, FormClass, FormState, FormView, InputRecord, InputsObject, InputStores, RuntimeConfig, ValuesOfSchema } from './formTypes.js';
|
|
5
|
+
export declare const view: <N extends string, Schema extends S.Schema.AnyNoContext, FormInputs extends InputRecord>(form: FormClass<N, Schema, FormInputs>) => Effect.Effect<FormView<ValuesOfSchema<Schema>, InputsObject<FormInputs>>, never, State.StateStore<`${N}/state`, FormState<ValuesOfSchema<Schema>>> | RuntimeConfig<ValuesOfSchema<Schema>, DecodedOfSchema<Schema>, InputsObject<FormInputs>> | Bus | InputStores<FormInputs>>;
|
|
6
|
+
//# sourceMappingURL=formView.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formView.d.ts","sourceRoot":"","sources":["../src/formView.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,MAAM,EAMN,MAAM,IAAI,CAAC,EACZ,MAAM,QAAQ,CAAA;AAEf,OAAO,EAEL,GAAG,EAKJ,MAAM,2BAA2B,CAAA;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAA;AAWxC,OAAO,KAAK,EAEV,eAAe,EAGf,SAAS,EACT,SAAS,EACT,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,WAAW,EAEX,aAAa,EACb,cAAc,EACf,MAAM,aAAa,CAAA;AAsCpB,eAAO,MAAM,IAAI,GACf,CAAC,SAAS,MAAM,EAChB,MAAM,SAAS,CAAC,CAAC,MAAM,CAAC,YAAY,EACpC,UAAU,SAAS,WAAW,EAE9B,MAAM,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,KACrC,MAAM,CAAC,MAAM,CACd,QAAQ,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,EAC1D,KAAK,EACH,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,GACjE,aAAa,CAAC,cAAc,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,MAAM,CAAC,EAAE,YAAY,CAAC,UAAU,CAAC,CAAC,GACxF,GAAG,GACH,WAAW,CAAC,UAAU,CAAC,CA4IvB,CAAA"}
|
package/dist/formView.js
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
import { Context, Effect, Either, Function as Fn, Option, Record, Runtime, Schema as S, } from 'effect';
|
|
2
|
+
import { Event } from '@playfast/reform';
|
|
3
|
+
import { Bus, CurrentTracker, } from '@playfast/reform/internal';
|
|
4
|
+
import { State } from '@playfast/reform';
|
|
5
|
+
import { getNestedValue, isPathOrParentDirty, } from './path.js';
|
|
6
|
+
import { errorsToRecord, firstError, routeParseError } from './validation.js';
|
|
7
|
+
import { currentArray } from './formState.js';
|
|
8
|
+
const readInput = Effect.fn('forms.readInput')(function* (source) {
|
|
9
|
+
const store = yield* Context.GenericTag(source.store.key);
|
|
10
|
+
const tracker = yield* Effect.serviceOption(CurrentTracker);
|
|
11
|
+
if (Option.isSome(tracker)) {
|
|
12
|
+
tracker.value.add(store);
|
|
13
|
+
}
|
|
14
|
+
return store.getSnapshot();
|
|
15
|
+
});
|
|
16
|
+
const readInputs = (inputs) => Fn.unsafeCoerce(Effect.gen(function* () {
|
|
17
|
+
const pairs = yield* Effect.forEach(Object.values(inputs), (source) => Effect.map(readInput(source), (snapshot) => [
|
|
18
|
+
source.name,
|
|
19
|
+
snapshot,
|
|
20
|
+
]));
|
|
21
|
+
return Record.fromEntries(pairs);
|
|
22
|
+
}));
|
|
23
|
+
const limitationsFor = (limitations, path) => Fn.unsafeCoerce(Option.getOrElse(Option.fromNullable(limitations[path]), () => ({})));
|
|
24
|
+
const trigger = (eventTrigger) => eventTrigger;
|
|
25
|
+
// oxlint-disable-next-line reform-rules/prefer-effect-fn -- public generic view preserves the exact form state/config/input requirements verbatim
|
|
26
|
+
export const view = (form) => Effect.gen(function* () {
|
|
27
|
+
const state = yield* form.state;
|
|
28
|
+
const runtimeConfig = yield* form.config;
|
|
29
|
+
const inputs = yield* readInputs(form.manifest.inputs);
|
|
30
|
+
const limitations = Option.getOrElse(Option.fromNullable(runtimeConfig.limit?.({ values: state.values, inputs })), () => ({}));
|
|
31
|
+
const setField = yield* trigger(form.events.set.trigger);
|
|
32
|
+
const blurField = yield* trigger(form.events.blur.trigger);
|
|
33
|
+
const reset = yield* trigger(form.events.reset.trigger);
|
|
34
|
+
const append = yield* trigger(form.events.append.trigger);
|
|
35
|
+
const remove = yield* trigger(form.events.remove.trigger);
|
|
36
|
+
const move = yield* trigger(form.events.move.trigger);
|
|
37
|
+
const swap = yield* trigger(form.events.swap.trigger);
|
|
38
|
+
const runtime = yield* Effect.runtime();
|
|
39
|
+
const schema = form.manifest.schema;
|
|
40
|
+
const decodeEither = S.decodeUnknownEither(schema, { errors: 'all' })(state.values);
|
|
41
|
+
const canSubmit = Either.isRight(decodeEither) && Record.keys(state.errors).length === 0;
|
|
42
|
+
// oxlint-disable-next-line reform-rules/prefer-effect-fn -- local closure whose inferred R must flow into the parent view gen; Effect.fn would force an explicit Return annotation over the erased AnyForm requirements
|
|
43
|
+
const runValidation = (publishSubmitAttempt) => Effect.gen(function* () {
|
|
44
|
+
if (publishSubmitAttempt) {
|
|
45
|
+
yield* Event.dispatch(form.events.submitAttempted, {});
|
|
46
|
+
}
|
|
47
|
+
const decoded = S.decodeUnknownEither(schema, { errors: 'all' })(state.values);
|
|
48
|
+
if (Either.isLeft(decoded)) {
|
|
49
|
+
yield* Event.dispatch(form.events.validationFinished, {
|
|
50
|
+
errors: routeParseError(decoded.left),
|
|
51
|
+
});
|
|
52
|
+
return Option.none();
|
|
53
|
+
}
|
|
54
|
+
const custom = yield* runtimeConfig.validate({
|
|
55
|
+
values: state.values,
|
|
56
|
+
decoded: decoded.right,
|
|
57
|
+
inputs,
|
|
58
|
+
});
|
|
59
|
+
const errors = errorsToRecord(custom);
|
|
60
|
+
yield* Event.dispatch(form.events.validationFinished, { errors });
|
|
61
|
+
return Record.keys(errors).length === 0
|
|
62
|
+
? Option.some(decoded.right)
|
|
63
|
+
: Option.none();
|
|
64
|
+
});
|
|
65
|
+
const submit = () => {
|
|
66
|
+
Runtime.runFork(runtime)(Effect.gen(function* () {
|
|
67
|
+
const decoded = yield* runValidation(true);
|
|
68
|
+
if (Option.isNone(decoded)) {
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
yield* runtimeConfig.submit({ values: state.values, decoded: decoded.value, inputs });
|
|
72
|
+
yield* Event.dispatch(form.events.submitSucceeded, { values: state.values });
|
|
73
|
+
}).pipe(Effect.catchAllCause((cause) => Effect.logError('reform form submit failed', cause))));
|
|
74
|
+
};
|
|
75
|
+
const validate = () => {
|
|
76
|
+
Runtime.runFork(runtime)(runValidation(false));
|
|
77
|
+
};
|
|
78
|
+
const field = (path) => {
|
|
79
|
+
const fieldValue = Fn.unsafeCoerce(getNestedValue(state.values, path));
|
|
80
|
+
return {
|
|
81
|
+
path,
|
|
82
|
+
value: fieldValue,
|
|
83
|
+
set: (next) => {
|
|
84
|
+
if (typeof next === 'function') {
|
|
85
|
+
const updater = Fn.unsafeCoerce(next);
|
|
86
|
+
setField({ path, value: updater(fieldValue) });
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
setField({ path, value: next });
|
|
90
|
+
},
|
|
91
|
+
blur: () => blurField({ path }),
|
|
92
|
+
error: firstError(state.errors, path),
|
|
93
|
+
dirty: isPathOrParentDirty(state.dirtyPaths, path),
|
|
94
|
+
touched: state.touched[path] === true,
|
|
95
|
+
validating: false,
|
|
96
|
+
limitations: limitationsFor(limitations, path),
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
const array = (path) => {
|
|
100
|
+
const arrayValues = Fn.unsafeCoerce(currentArray({ source: state.values, path }));
|
|
101
|
+
const keys = state.arrayKeys[path] ?? arrayValues.map((_, index) => `${path}-${index}`);
|
|
102
|
+
return {
|
|
103
|
+
path,
|
|
104
|
+
items: arrayValues.map((element, index) => ({
|
|
105
|
+
value: element,
|
|
106
|
+
index,
|
|
107
|
+
key: keys[index] ?? `${path}-${index}`,
|
|
108
|
+
remove: () => remove({ path, index }),
|
|
109
|
+
move: (to) => move({ path, from: index, to }),
|
|
110
|
+
})),
|
|
111
|
+
append: (element) => append({ path, value: element }),
|
|
112
|
+
remove: (index) => remove({ path, index }),
|
|
113
|
+
move: (from, to) => move({ path, from, to }),
|
|
114
|
+
swap: (first, second) => swap({ path, a: first, b: second }),
|
|
115
|
+
limitations: limitationsFor(limitations, path),
|
|
116
|
+
};
|
|
117
|
+
};
|
|
118
|
+
const formView = Fn.unsafeCoerce({
|
|
119
|
+
values: state.values,
|
|
120
|
+
inputs,
|
|
121
|
+
errors: state.errors,
|
|
122
|
+
dirty: state.dirtyPaths.length > 0,
|
|
123
|
+
canSubmit,
|
|
124
|
+
submitCount: state.submitCount,
|
|
125
|
+
validationCount: state.validationCount,
|
|
126
|
+
lastSubmittedValues: state.lastSubmittedValues,
|
|
127
|
+
submit,
|
|
128
|
+
reset: () => reset({}),
|
|
129
|
+
validate,
|
|
130
|
+
field,
|
|
131
|
+
array,
|
|
132
|
+
variantValue: (path) => Fn.unsafeCoerce(getNestedValue(state.values, path)),
|
|
133
|
+
});
|
|
134
|
+
return formView;
|
|
135
|
+
});
|
|
136
|
+
//# sourceMappingURL=formView.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"formView.js","sourceRoot":"","sources":["../src/formView.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * as Form from './form.js';
|
|
2
|
+
export type { ArrayBinding, ArrayItemView, AnyForm, FieldBinding, FieldLimitations, FormClass, FormLiveConfig, FormManifest, RuntimeConfig, FormState, FormView, Inputs, Limitations, Values, View, } from './form.js';
|
|
3
|
+
export { arrayKeysFor as unsafeArrayKeysFor, error, live, make, view } from './form.js';
|
|
4
|
+
export type { ArrayItem, ArrayPath, FieldPath, PathValue, VariantBody, VariantCase, VariantPath, VariantTag, VariantValue, } from './path.js';
|
|
5
|
+
export { getNestedValue, isPathOrParentDirty, joinPath, moveAt, recalculateDirtyPaths, schemaPathToFieldPath, setNestedValue, } from './path.js';
|
|
6
|
+
export type { FormError, FormErrors } from './validation.js';
|
|
7
|
+
export { errorsToRecord, firstError, normalizeErrors, routeParseError } from './validation.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAC9B,YAAY,EACV,YAAY,EACZ,aAAa,EACb,OAAO,EACP,YAAY,EACZ,gBAAgB,EAChB,SAAS,EACT,cAAc,EACd,YAAY,EACZ,aAAa,EACb,SAAS,EACT,QAAQ,EACR,MAAM,EACN,WAAW,EACX,MAAM,EACN,IAAI,GACL,MAAM,QAAQ,CAAA;AACf,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AACpF,YAAY,EACV,SAAS,EACT,SAAS,EACT,SAAS,EACT,SAAS,EACT,WAAW,EACX,WAAW,EACX,WAAW,EACX,UAAU,EACV,YAAY,GACb,MAAM,QAAQ,CAAA;AACf,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,GACf,MAAM,QAAQ,CAAA;AACf,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AACzD,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * as Form from './form.js';
|
|
2
|
+
export { arrayKeysFor as unsafeArrayKeysFor, error, live, make, view } from './form.js';
|
|
3
|
+
export { getNestedValue, isPathOrParentDirty, joinPath, moveAt, recalculateDirtyPaths, schemaPathToFieldPath, setNestedValue, } from './path.js';
|
|
4
|
+
export { errorsToRecord, firstError, normalizeErrors, routeParseError } from './validation.js';
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,QAAQ,CAAA;AAkB9B,OAAO,EAAE,YAAY,IAAI,kBAAkB,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAA;AAYpF,OAAO,EACL,cAAc,EACd,mBAAmB,EACnB,QAAQ,EACR,MAAM,EACN,qBAAqB,EACrB,qBAAqB,EACrB,cAAc,GACf,MAAM,QAAQ,CAAA;AAEf,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
|
package/dist/path.d.ts
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export type Primitive = string | number | boolean | bigint | symbol | null | undefined | Date;
|
|
2
|
+
type StringKey<T> = Extract<keyof T, string>;
|
|
3
|
+
type Tagged = {
|
|
4
|
+
readonly _tag: string;
|
|
5
|
+
};
|
|
6
|
+
type IsTagged<T> = T extends Tagged ? true : false;
|
|
7
|
+
export type FieldPath<T> = T extends Primitive ? never : {
|
|
8
|
+
readonly [K in StringKey<T>]: T[K] extends ReadonlyArray<unknown> ? never : IsTagged<T[K]> extends true ? never : T[K] extends Primitive ? K : T[K] extends object ? K | `${K}.${FieldPath<T[K]>}` : K;
|
|
9
|
+
}[StringKey<T>];
|
|
10
|
+
export type ArrayPath<T> = T extends Primitive ? never : {
|
|
11
|
+
readonly [K in StringKey<T>]: T[K] extends ReadonlyArray<unknown> ? K : IsTagged<T[K]> extends true ? never : T[K] extends object ? `${K}.${ArrayPath<T[K]>}` : never;
|
|
12
|
+
}[StringKey<T>];
|
|
13
|
+
export type VariantPath<T> = T extends Primitive ? never : {
|
|
14
|
+
readonly [K in StringKey<T>]: IsTagged<T[K]> extends true ? K : T[K] extends ReadonlyArray<unknown> ? never : T[K] extends object ? `${K}.${VariantPath<T[K]>}` : never;
|
|
15
|
+
}[StringKey<T>];
|
|
16
|
+
export type PathValue<T, P extends string> = P extends `${infer Head}.${infer Tail}` ? Head extends keyof T ? PathValue<T[Head], Tail> : never : P extends keyof T ? T[P] : never;
|
|
17
|
+
export type ArrayItem<T, P extends string> = PathValue<T, P> extends ReadonlyArray<infer Item> ? Item : never;
|
|
18
|
+
export type VariantValue<T, P extends string> = PathValue<T, P>;
|
|
19
|
+
export type VariantTag<V> = V extends {
|
|
20
|
+
readonly _tag: infer Tag;
|
|
21
|
+
} ? Extract<Tag, string> : never;
|
|
22
|
+
export type VariantCase<V, Tag extends string> = Extract<V, {
|
|
23
|
+
readonly _tag: Tag;
|
|
24
|
+
}>;
|
|
25
|
+
export type VariantBody<V, Tag extends string> = Omit<VariantCase<V, Tag>, '_tag'>;
|
|
26
|
+
export declare const schemaPathToFieldPath: (path: ReadonlyArray<PropertyKey>) => string;
|
|
27
|
+
export declare const joinPath: (prefix: string, path: string) => string;
|
|
28
|
+
export declare const isPathUnderRoot: (path: string, rootPath: string) => boolean;
|
|
29
|
+
export declare const isPathOrParentDirty: (dirtyPaths: ReadonlyArray<string>, path: string) => boolean;
|
|
30
|
+
export declare const getNestedValue: (source: unknown, path: string) => unknown;
|
|
31
|
+
export declare const setNestedValue: <T>(target: T, path: string, nextValue: unknown) => T;
|
|
32
|
+
export declare const recalculateDirtyPaths: (initial: unknown, currentValues: unknown, rootPath?: string) => ReadonlyArray<string>;
|
|
33
|
+
export declare const replaceAt: <A>(elements: ReadonlyArray<A>, index: number, replacement: A) => ReadonlyArray<A>;
|
|
34
|
+
export declare const moveAt: <A>(elements: ReadonlyArray<A>, from: number, to: number) => ReadonlyArray<A>;
|
|
35
|
+
export {};
|
|
36
|
+
//# sourceMappingURL=path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.d.ts","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"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"}
|
package/dist/path.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
import { Equal, Function as Fn, Option, Order, Record, String as Str } from 'effect';
|
|
2
|
+
import { lastIndexOf as lastIndexOfOpt } from 'effect/String';
|
|
3
|
+
import { sort as sortArray } from 'effect/Array';
|
|
4
|
+
const BRACKET_NOTATION_REGEX = /\[(\d+)\]/g;
|
|
5
|
+
const NO_INDEX = -1;
|
|
6
|
+
const asRecord = (source) => Fn.unsafeCoerce(source);
|
|
7
|
+
export const schemaPathToFieldPath = (path) => path
|
|
8
|
+
.map((segment, index) => index === 0
|
|
9
|
+
? String(segment)
|
|
10
|
+
: typeof segment === 'number'
|
|
11
|
+
? `[${segment}]`
|
|
12
|
+
: `.${String(segment)}`)
|
|
13
|
+
.join('');
|
|
14
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional path API
|
|
15
|
+
export const joinPath = (prefix, path) => prefix.length === 0 ? path : path.length === 0 ? prefix : `${prefix}.${path}`;
|
|
16
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional path API
|
|
17
|
+
export const isPathUnderRoot = (path, rootPath) => path === rootPath || path.startsWith(`${rootPath}.`) || path.startsWith(`${rootPath}[`);
|
|
18
|
+
export const isPathOrParentDirty = (dirtyPaths, path) => {
|
|
19
|
+
const isDirty = (candidate) => {
|
|
20
|
+
if (dirtyPaths.includes(candidate)) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
const lastDot = Option.getOrElse(lastIndexOfOpt('.')(candidate), () => NO_INDEX);
|
|
24
|
+
const lastBracket = Option.getOrElse(lastIndexOfOpt('[')(candidate), () => NO_INDEX);
|
|
25
|
+
const splitIndex = Math.max(lastDot, lastBracket);
|
|
26
|
+
if (splitIndex === NO_INDEX) {
|
|
27
|
+
return false;
|
|
28
|
+
}
|
|
29
|
+
return isDirty(candidate.substring(0, splitIndex));
|
|
30
|
+
};
|
|
31
|
+
return isDirty(path);
|
|
32
|
+
};
|
|
33
|
+
const pathParts = (path) => path === '' ? [] : Str.split('.')(path.replace(BRACKET_NOTATION_REGEX, '.$1'));
|
|
34
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional path accessor
|
|
35
|
+
export const getNestedValue = (source, path) => pathParts(path).reduce((current, part) => current === null || current === undefined || typeof current !== 'object'
|
|
36
|
+
? undefined
|
|
37
|
+
: asRecord(current)[part], source);
|
|
38
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional path setter
|
|
39
|
+
export const setNestedValue = (target, path, nextValue) => {
|
|
40
|
+
const parts = pathParts(path);
|
|
41
|
+
if (parts.length === 0) {
|
|
42
|
+
return Fn.unsafeCoerce(nextValue);
|
|
43
|
+
}
|
|
44
|
+
const root = Array.isArray(target) ? [...target] : { ...asRecord(target) };
|
|
45
|
+
const descend = (current, depth) => {
|
|
46
|
+
const part = parts[depth];
|
|
47
|
+
if (part === undefined) {
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
if (depth === parts.length - 1) {
|
|
51
|
+
current[part] = nextValue;
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
54
|
+
const next = current[part];
|
|
55
|
+
const copy = Array.isArray(next) ? [...next] : { ...asRecord(next) };
|
|
56
|
+
current[part] = copy;
|
|
57
|
+
descend(asRecord(copy), depth + 1);
|
|
58
|
+
};
|
|
59
|
+
descend(asRecord(root), 0);
|
|
60
|
+
return Fn.unsafeCoerce(root);
|
|
61
|
+
};
|
|
62
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional diff over arbitrary form values
|
|
63
|
+
export const recalculateDirtyPaths = (initial, currentValues, rootPath = '') => {
|
|
64
|
+
const visit = (node) => {
|
|
65
|
+
const { current, original, path } = node;
|
|
66
|
+
if (Equal.equals(current, original)) {
|
|
67
|
+
return [];
|
|
68
|
+
}
|
|
69
|
+
if (Array.isArray(current) || Array.isArray(original)) {
|
|
70
|
+
const currentItems = Array.isArray(current) ? current : [];
|
|
71
|
+
const originalItems = Array.isArray(original) ? original : [];
|
|
72
|
+
const lengthChanged = currentItems.length !== originalItems.length && path.length > 0;
|
|
73
|
+
const length = Math.max(currentItems.length, originalItems.length);
|
|
74
|
+
const childPaths = Array.from({ length }, (_, index) => visit({
|
|
75
|
+
current: currentItems[index],
|
|
76
|
+
original: originalItems[index],
|
|
77
|
+
path: path.length === 0 ? `[${index}]` : `${path}[${index}]`,
|
|
78
|
+
})).flat();
|
|
79
|
+
return lengthChanged ? [path, ...childPaths] : childPaths;
|
|
80
|
+
}
|
|
81
|
+
if (current !== null &&
|
|
82
|
+
original !== null &&
|
|
83
|
+
typeof current === 'object' &&
|
|
84
|
+
typeof original === 'object') {
|
|
85
|
+
const currentRecord = asRecord(current);
|
|
86
|
+
const originalRecord = asRecord(original);
|
|
87
|
+
const keys = Array.from(new Set([...Record.keys(currentRecord), ...Record.keys(originalRecord)]));
|
|
88
|
+
return keys.flatMap((key) => visit({
|
|
89
|
+
current: currentRecord[key],
|
|
90
|
+
original: originalRecord[key],
|
|
91
|
+
path: path.length === 0 ? key : `${path}.${key}`,
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
return path.length > 0 ? [path] : [];
|
|
95
|
+
};
|
|
96
|
+
const dirty = visit({
|
|
97
|
+
current: rootPath.length === 0 ? currentValues : getNestedValue(currentValues, rootPath),
|
|
98
|
+
original: rootPath.length === 0 ? initial : getNestedValue(initial, rootPath),
|
|
99
|
+
path: rootPath,
|
|
100
|
+
});
|
|
101
|
+
return sortArray(Order.string)(Array.from(new Set(dirty)));
|
|
102
|
+
};
|
|
103
|
+
export const replaceAt = (elements, index, replacement) => elements.map((element, position) => (position === index ? replacement : element));
|
|
104
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional array move
|
|
105
|
+
export const moveAt = (elements, from, to) => {
|
|
106
|
+
if (from < 0 || from >= elements.length || to < 0 || to > elements.length || from === to) {
|
|
107
|
+
return elements;
|
|
108
|
+
}
|
|
109
|
+
const moved = elements[from];
|
|
110
|
+
const without = elements.filter((_, index) => index !== from);
|
|
111
|
+
return moved === undefined ? without : [...without.slice(0, to), moved, ...without.slice(to)];
|
|
112
|
+
};
|
|
113
|
+
//# sourceMappingURL=path.js.map
|
package/dist/path.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path.js","sourceRoot":"","sources":["../src/path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Option, ParseResult } from 'effect';
|
|
2
|
+
export interface FormError {
|
|
3
|
+
readonly path: string;
|
|
4
|
+
readonly message: string;
|
|
5
|
+
}
|
|
6
|
+
export type FormErrors = Readonly<Record<string, string>>;
|
|
7
|
+
export declare const error: (path: string, message: string) => FormError;
|
|
8
|
+
export declare const normalizeErrors: (input: void | FormError | ReadonlyArray<FormError>) => ReadonlyArray<FormError>;
|
|
9
|
+
export declare const errorsToRecord: (errors: ReadonlyArray<FormError>) => FormErrors;
|
|
10
|
+
export declare const routeParseError: (parseError: ParseResult.ParseError) => FormErrors;
|
|
11
|
+
export declare const firstError: (errors: FormErrors, path: string) => Option.Option<string>;
|
|
12
|
+
//# sourceMappingURL=validation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.d.ts","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,MAAM,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAG1D,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;AAGzD,eAAO,MAAM,KAAK,GAAI,MAAM,MAAM,EAAE,SAAS,MAAM,KAAG,SAAgC,CAAA;AAEtF,eAAO,MAAM,eAAe,GAC1B,OAAO,IAAI,GAAG,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC,KACjD,aAAa,CAAC,SAAS,CAKzB,CAAA;AAED,eAAO,MAAM,cAAc,GAAI,QAAQ,aAAa,CAAC,SAAS,CAAC,KAAG,UAK/D,CAAA;AAEH,eAAO,MAAM,eAAe,GAAI,YAAY,WAAW,CAAC,UAAU,KAAG,UAOlE,CAAA;AAEH,eAAO,MAAM,UAAU,GAAI,QAAQ,UAAU,EAAE,MAAM,MAAM,KAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAGjF,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Array as Arr, Option, ParseResult } from 'effect';
|
|
2
|
+
import { schemaPathToFieldPath } from './path.js';
|
|
3
|
+
// oxlint-disable-next-line reform-rules/no-multiple-primitive-params -- public positional FormError constructor; (path, message) is the documented API
|
|
4
|
+
export const error = (path, message) => ({ path, message });
|
|
5
|
+
export const normalizeErrors = (input) => {
|
|
6
|
+
if (input === undefined) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
return Arr.ensure(input);
|
|
10
|
+
};
|
|
11
|
+
export const errorsToRecord = (errors) => errors.reduce((accumulated, entry) => entry.path in accumulated ? accumulated : { ...accumulated, [entry.path]: entry.message }, {});
|
|
12
|
+
export const routeParseError = (parseError) => ParseResult.ArrayFormatter.formatErrorSync(parseError).reduce((accumulated, issue) => {
|
|
13
|
+
const path = schemaPathToFieldPath(issue.path);
|
|
14
|
+
return path in accumulated ? accumulated : { ...accumulated, [path]: issue.message };
|
|
15
|
+
}, {});
|
|
16
|
+
export const firstError = (errors, path) => {
|
|
17
|
+
const message = errors[path];
|
|
18
|
+
return message === undefined ? Option.none() : Option.some(message);
|
|
19
|
+
};
|
|
20
|
+
//# sourceMappingURL=validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation.js","sourceRoot":"","sources":["../src/validation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,IAAI,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAA;AAC1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,QAAQ,CAAA;AAS9C,uJAAuJ;AACvJ,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,IAAY,EAAE,OAAe,EAAa,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;AAEtF,MAAM,CAAC,MAAM,eAAe,GAAG,CAC7B,KAAkD,EACxB,EAAE;IAC5B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,OAAO,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;AAC1B,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAAgC,EAAc,EAAE,CAC7E,MAAM,CAAC,MAAM,CACX,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE,CACrB,KAAK,CAAC,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,EAC3F,EAAE,CACH,CAAA;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAAkC,EAAc,EAAE,CAChF,WAAW,CAAC,cAAc,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC,MAAM,CAC3D,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;IACrB,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9C,OAAO,IAAI,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,CAAA;AACtF,CAAC,EACD,EAAE,CACH,CAAA;AAEH,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,MAAkB,EAAE,IAAY,EAAyB,EAAE;IACpF,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;IAC5B,OAAO,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;AACrE,CAAC,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@playfast/reform-forms",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"description": "Headless, schema-driven form state for reform — values, validation, field limitations, list operations, and submit flow, rendering nothing.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"effect",
|
|
@@ -21,15 +21,26 @@
|
|
|
21
21
|
"directory": "packages/forms"
|
|
22
22
|
},
|
|
23
23
|
"files": [
|
|
24
|
+
"dist",
|
|
24
25
|
"src",
|
|
25
26
|
"README.md"
|
|
26
27
|
],
|
|
27
28
|
"type": "module",
|
|
28
29
|
"sideEffects": false,
|
|
30
|
+
"main": "./dist/index.js",
|
|
31
|
+
"types": "./dist/index.d.ts",
|
|
29
32
|
"exports": {
|
|
30
33
|
"./package.json": "./package.json",
|
|
31
|
-
".":
|
|
32
|
-
|
|
34
|
+
".": {
|
|
35
|
+
"playfast-src": "./src/index.ts",
|
|
36
|
+
"types": "./dist/index.d.ts",
|
|
37
|
+
"default": "./dist/index.js"
|
|
38
|
+
},
|
|
39
|
+
"./*": {
|
|
40
|
+
"playfast-src": "./src/*.ts",
|
|
41
|
+
"types": "./dist/*.d.ts",
|
|
42
|
+
"default": "./dist/*.js"
|
|
43
|
+
}
|
|
33
44
|
},
|
|
34
45
|
"publishConfig": {
|
|
35
46
|
"access": "public"
|
|
@@ -37,12 +48,13 @@
|
|
|
37
48
|
"scripts": {
|
|
38
49
|
"clean": "rm -rf dist .tsbuildinfo",
|
|
39
50
|
"check": "tsc --noEmit",
|
|
40
|
-
"build": "tsc -p tsconfig.build.json",
|
|
51
|
+
"build": "rm -rf dist .tsbuildinfo && tsc -p tsconfig.build.json && bun ../../scripts/fix-esm-extensions.ts dist",
|
|
41
52
|
"test": "vitest run",
|
|
42
53
|
"test:watch": "vitest",
|
|
43
54
|
"coverage": "vitest run --coverage",
|
|
44
55
|
"lint": "oxlint src",
|
|
45
|
-
"lint:fix": "oxlint --fix src"
|
|
56
|
+
"lint:fix": "oxlint --fix src",
|
|
57
|
+
"prepack": "bun run build"
|
|
46
58
|
},
|
|
47
59
|
"peerDependencies": {
|
|
48
60
|
"@playfast/reform": "*",
|