@effect-app/vue 0.87.0-next.14 → 0.87.0-next.16

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/CHANGELOG.md CHANGED
@@ -1,5 +1,23 @@
1
1
  # @effect-app/vue
2
2
 
3
+ ## 0.87.0-next.16
4
+
5
+ ### Patch Changes
6
+
7
+ - 660d57a: upd
8
+ - Updated dependencies [660d57a]
9
+ - @effect-app/schema@0.150.0-next.11
10
+ - @effect-app/vue@0.87.0-next.16
11
+ - @effect-app/prelude@0.107.0-next.14
12
+
13
+ ## 0.87.0-next.15
14
+
15
+ ### Patch Changes
16
+
17
+ - 5f76678: reimplement vue form
18
+ - Updated dependencies [5f76678]
19
+ - @effect-app/vue@0.87.0-next.15
20
+
3
21
  ## 0.87.0-next.14
4
22
 
5
23
  ### Patch Changes
package/_cjs/form.cjs CHANGED
@@ -3,12 +3,24 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.buildFieldInfoFromFields = buildFieldInfoFromFields;
7
+ exports.buildFormFromSchema = void 0;
6
8
  exports.convertIn = convertIn;
7
9
  exports.convertOut = convertOut;
8
10
  exports.convertOutInt = convertOutInt;
9
- exports.translate = exports.customSchemaErrors = void 0;
11
+ exports.customSchemaErrors = void 0;
12
+ exports.getMetadataFromSchema = getMetadataFromSchema;
13
+ exports.translate = void 0;
14
+ var tsplus_module_1 = _interopRequireWildcard(require("@effect/schema/Parser"));
15
+ var tsplus_module_2 = _interopRequireWildcard(require("@effect-app/prelude"));
16
+ var tsplus_module_3 = _interopRequireWildcard(require("effect/Either"));
17
+ var tsplus_module_4 = _interopRequireWildcard(require("@effect-app/core/Function"));
18
+ var _schema = require("@effect-app/schema");
10
19
  var _intl = require("@formatjs/intl");
11
20
  var _vue = require("vue");
21
+ var JSONSchema = _interopRequireWildcard(require("@effect/schema/JSONSchema"));
22
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
23
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
12
24
  function convertIn(v, type) {
13
25
  return v === null ? "" : type === "text" ? v : `${v}`;
14
26
  }
@@ -20,6 +32,14 @@ function convertOutInt(v, type) {
20
32
  function convertOut(v, set, type) {
21
33
  return set(convertOutInt(v, type));
22
34
  }
35
+ function buildFieldInfoFromFields(fields) {
36
+ if (!_schema.AST.isTypeLiteral(fields.ast)) throw new Error("not a struct type");
37
+ return fields.ast.propertySignatures.reduce((prev, cur) => {
38
+ ;
39
+ prev[cur.name] = buildFieldInfo(cur);
40
+ return prev;
41
+ }, {});
42
+ }
23
43
  const f = Symbol();
24
44
  class PhantomTypeParameter {}
25
45
  // type GetSchemaFromProp<T> = T extends Field<infer S, any, any, any> ? S
@@ -29,4 +49,125 @@ const defaultIntl = (0, _intl.createIntl)({
29
49
  });
30
50
  const translate = exports.translate = (0, _vue.ref)(defaultIntl.formatMessage.bind(defaultIntl));
31
51
  const customSchemaErrors = exports.customSchemaErrors = (0, _vue.ref)(new Map());
52
+ function buildFieldInfo(property) {
53
+ const propertyKey = property.name;
54
+ const schema = _schema.S.make(property.type);
55
+ const metadata = getMetadataFromSchema(property.type); // TODO
56
+ const parse = tsplus_module_1.parseEither(schema);
57
+ const nullable = _schema.AST.isUnion(property.type) && property.type.types.includes(tsplus_module_2.Schema2.null.ast);
58
+ const realSelf = nullable && _schema.AST.isUnion(property.type) ? property.type.types.filter(_ => _ !== tsplus_module_2.Schema2.null.ast)[0] : property.type;
59
+ function renderError(e, v) {
60
+ const err = e.toString();
61
+ const custom = customSchemaErrors.value.get(realSelf);
62
+ return custom ? custom(err, e, v) : translate.value({
63
+ defaultMessage: "The entered value is not a valid {type}: {message}",
64
+ id: "validation.not_a_valid"
65
+ }, {
66
+ type: translate.value({
67
+ defaultMessage: (0, _vue.capitalize)(propertyKey.toString()),
68
+ id: `fieldNames.${String(propertyKey)}`
69
+ }),
70
+ message: err // TODO err.slice(err.indexOf("expected")) // TODO: this is not translated.
71
+ });
72
+ }
73
+ const stringRules = [v => v === null || metadata.minLength === undefined || v.length >= metadata.minLength || translate.value({
74
+ defaultMessage: "The field requires at least {minLength} characters",
75
+ id: "validation.string.minLength"
76
+ }, {
77
+ minLength: metadata.minLength
78
+ }), v => v === null || metadata.maxLength === undefined || v.length <= metadata.maxLength || translate.value({
79
+ defaultMessage: "The field cannot have more than {maxLength} characters",
80
+ id: "validation.string.maxLength"
81
+ }, {
82
+ maxLength: metadata.maxLength
83
+ })];
84
+ const numberRules = [v => v === null || metadata.minimum === undefined || metadata.minimumExclusive && v > metadata.minimum || !metadata.minimumExclusive && v >= metadata.minimum || translate.value({
85
+ defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
86
+ id: "validation.number.min"
87
+ }, {
88
+ isExclusive: metadata.minimumExclusive,
89
+ minimum: metadata.minimum
90
+ }), v => v === null || metadata.maximum === undefined || metadata.maximumExclusive && v < metadata.maximum || !metadata.maximumExclusive && v <= metadata.maximum || translate.value({
91
+ defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
92
+ id: "validation.number.max"
93
+ }, {
94
+ isExclusive: metadata.maximumExclusive,
95
+ maximum: metadata.maximum
96
+ })];
97
+ const parseRule = v => tsplus_module_4.pipe(parse(v), _ => tsplus_module_3.match(_, {
98
+ onLeft: _ => renderError(_, v),
99
+ onRight: () => true
100
+ }));
101
+ const rules = [...(metadata.type === "text" ? stringRules : numberRules), parseRule];
102
+ const info = {
103
+ type: metadata.type,
104
+ rules: [v => !metadata.required || v !== "" || translate.value({
105
+ defaultMessage: "The field cannot be empty",
106
+ id: "validation.empty"
107
+ }), v => {
108
+ const converted = convertOutInt(v, metadata.type);
109
+ for (const r of rules) {
110
+ const res = r(converted);
111
+ if (res !== true) {
112
+ return res;
113
+ }
114
+ }
115
+ return true;
116
+ }],
117
+ metadata
118
+ };
119
+ return info;
120
+ }
121
+ const buildFormFromSchema = (s, state, onSubmit) => {
122
+ const fields = buildFieldInfoFromFields(s);
123
+ const parse = tsplus_module_1.parseSync(s);
124
+ const isDirty = (0, _vue.ref)(false);
125
+ const isValid = (0, _vue.ref)(true);
126
+ const submit1 = onSubmit => async e => {
127
+ const r = await e;
128
+ if (!r.valid) return;
129
+ return onSubmit(parse(state.value));
130
+ };
131
+ const submit = submit1(onSubmit);
132
+ (0, _vue.watch)(state, v => {
133
+ // TODO: do better
134
+ isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value);
135
+ }, {
136
+ deep: true
137
+ });
138
+ const submitFromState = () => submit(Promise.resolve({
139
+ valid: isValid.value
140
+ }));
141
+ return {
142
+ fields,
143
+ submit,
144
+ submitFromState,
145
+ isDirty,
146
+ isValid
147
+ };
148
+ };
149
+ exports.buildFormFromSchema = buildFormFromSchema;
150
+ function getMetadataFromSchema(ast) {
151
+ const nullable = _schema.AST.isUnion(ast) && ast.types.includes(tsplus_module_2.Schema2.null.ast);
152
+ const realSelf = nullable && _schema.AST.isUnion(ast) ? ast.types.filter(_ => _ !== tsplus_module_2.Schema2.null.ast)[0] : ast;
153
+ let jschema;
154
+ try {
155
+ jschema = JSONSchema.to(_schema.S.make(realSelf));
156
+ } catch (err) {
157
+ jschema = {};
158
+ console.warn("error getting jsonschema from ", err, ast);
159
+ }
160
+ const isNumber = jschema.type === "number" || jschema.type === "integer";
161
+ const isInt = jschema.type === "integer";
162
+ return {
163
+ type: isInt ? "int" : isNumber ? "float" : "text",
164
+ minimum: jschema.minimum,
165
+ minimumExclusive: jschema.exclusiveMinimum,
166
+ maximum: jschema.maximum,
167
+ maximumExclusive: jschema.exclusiveMaximum,
168
+ minLength: jschema.minLength,
169
+ maxLength: jschema.maxLength,
170
+ required: !nullable
171
+ };
172
+ }
32
173
  //# sourceMappingURL=form.cjs.map
package/_cjs/form.cjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"form.cjs","names":["_intl","require","_vue","convertIn","v","type","convertOutInt","trim","c","parseFloat","parseInt","convertOut","set","f","Symbol","PhantomTypeParameter","defaultIntl","createIntl","locale","translate","exports","ref","formatMessage","bind","customSchemaErrors","Map"],"sources":["../_src/form.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;AACA,IAAAA,KAAA,GAAAC,OAAA;AACA,IAAAC,IAAA,GAAAD,OAAA;AAEM,SAAUE,SAASA,CAACC,CAAgB,EAAEC,IAA+B;EACzE,OAAOD,CAAC,KAAK,IAAI,GAAG,EAAE,GAAGC,IAAI,KAAK,MAAM,GAAGD,CAAC,GAAG,GAAGA,CAAC,EAAE;AACvD;AAEM,SAAUE,aAAaA,CAACF,CAAS,EAAEC,IAA+B;EACtED,CAAC,GAAGA,CAAC,IAAI,IAAI,GAAGA,CAAC,GAAGA,CAAC,CAACG,IAAI,EAAE;EAC5B,MAAMC,CAAC,GAAGJ,CAAC,KAAK,EAAE,GAAG,IAAI,GAAGC,IAAI,KAAK,OAAO,GAAGI,UAAU,CAACL,CAAC,CAAC,GAAGC,IAAI,KAAK,KAAK,GAAGK,QAAQ,CAACN,CAAC,CAAC,GAAGA,CAAC;EAC/F,OAAOI,CAAC;AACV;AAEM,SAAUG,UAAUA,CAACP,CAAS,EAAEQ,GAAgC,EAAEP,IAA+B;EACrG,OAAOO,GAAG,CAACN,aAAa,CAACF,CAAC,EAAEC,IAAI,CAAC,CAAC;AACpC;AAyBA,MAAMQ,CAAC,GAAGC,MAAM,EAAE;AAClB,MAAeC,oBAAoB;AAcnC;AACA;AAEA,MAAMC,WAAW,GAAG,IAAAC,gBAAU,EAAC;EAAEC,MAAM,EAAE;AAAI,CAAE,CAAC;AACzC,MAAMC,SAAS,GAAAC,OAAA,CAAAD,SAAA,GAAG,IAAAE,QAAG,EAAkCL,WAAW,CAACM,aAAa,CAACC,IAAI,CAACP,WAAW,CAAC,CAAC;AACnG,MAAMQ,kBAAkB,GAAAJ,OAAA,CAAAI,kBAAA,GAAG,IAAAH,QAAG,EACnC,IAAII,GAAG,EAAE,CACV"}
1
+ {"version":3,"file":"form.cjs","names":["_schema","require","_intl","_vue","JSONSchema","_interopRequireWildcard","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","convertIn","v","type","convertOutInt","trim","c","parseFloat","parseInt","convertOut","buildFieldInfoFromFields","fields","AST","isTypeLiteral","ast","Error","propertySignatures","reduce","prev","cur","name","buildFieldInfo","f","Symbol","PhantomTypeParameter","defaultIntl","createIntl","locale","translate","exports","ref","formatMessage","bind","customSchemaErrors","Map","property","propertyKey","schema","S","make","metadata","getMetadataFromSchema","parse","tsplus_module_1","parseEither","nullable","isUnion","types","includes","tsplus_module_2","Schema2","null","realSelf","filter","_","renderError","err","toString","custom","value","defaultMessage","id","capitalize","String","message","stringRules","minLength","undefined","length","maxLength","numberRules","minimum","minimumExclusive","isExclusive","maximum","maximumExclusive","parseRule","tsplus_module_4","pipe","tsplus_module_3","match","onLeft","onRight","rules","info","required","converted","res","buildFormFromSchema","s","state","onSubmit","parseSync","isDirty","isValid","submit1","valid","submit","watch","JSON","stringify","deep","submitFromState","Promise","resolve","jschema","to","console","warn","isNumber","isInt","exclusiveMinimum","exclusiveMaximum"],"sources":["../_src/form.ts"],"sourcesContent":[null],"mappings":"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"}
package/_src/form.ts CHANGED
@@ -1,6 +1,11 @@
1
+ import { AST, S } from "@effect-app/schema"
1
2
  import type { Schema } from "@effect-app/schema"
2
3
  import { createIntl, type IntlFormatters } from "@formatjs/intl"
3
- import { ref } from "vue"
4
+ import type { Ref } from "vue"
5
+ import { capitalize, ref, watch } from "vue"
6
+
7
+ import * as JSONSchema from "@effect/schema/JSONSchema"
8
+ import type { ParseError } from "@effect/schema/ParseResult"
4
9
 
5
10
  export function convertIn(v: string | null, type?: "text" | "float" | "int") {
6
11
  return v === null ? "" : type === "text" ? v : `${v}`
@@ -16,22 +21,20 @@ export function convertOut(v: string, set: (v: unknown | null) => void, type?: "
16
21
  return set(convertOutInt(v, type))
17
22
  }
18
23
 
19
- // export function buildFieldInfoFromFields<Fields extends StructFields>(
20
- // fields: Fields
21
- // ) {
22
- // return fields.$$.keys.reduce(
23
- // (prev, cur) => {
24
- // prev[cur] = buildFieldInfo(fields[cur] as AnyField, cur)
25
- // return prev
26
- // },
27
- // {} as {
28
- // [K in keyof Fields]: FieldInfo<
29
- // Schema.From<GetSchemaFromProp<Fields[K]>>,
30
- // Schema.To<GetSchemaFromProp<Fields[K]>>
31
- // >
32
- // }
33
- // )
34
- // }
24
+ export function buildFieldInfoFromFields<From extends Record<PropertyKey, any>, To extends Record<PropertyKey, any>>(
25
+ fields: Schema<From, To>
26
+ ) {
27
+ if (!AST.isTypeLiteral(fields.ast)) throw new Error("not a struct type")
28
+ return fields.ast.propertySignatures.reduce(
29
+ (prev, cur) => {
30
+ ;(prev as any)[cur.name] = buildFieldInfo(cur)
31
+ return prev
32
+ },
33
+ {} as {
34
+ [K in keyof To]: FieldInfo<To[K]>
35
+ }
36
+ )
37
+ }
35
38
 
36
39
  export interface FieldMetadata {
37
40
  minLength: number | undefined
@@ -48,7 +51,7 @@ abstract class PhantomTypeParameter<
48
51
  readonly [NameP in Identifier]: (_: InstantiatedType) => InstantiatedType
49
52
  }
50
53
  }
51
- export interface FieldInfo<Tin, Tout> extends PhantomTypeParameter<typeof f, { in: Tin; out: Tout }> {
54
+ export interface FieldInfo<Tout> extends PhantomTypeParameter<typeof f, { out: Tout }> {
52
55
  rules: ((v: string) => boolean | string)[]
53
56
  metadata: FieldMetadata
54
57
  type: "text" | "float" | "int" // todo; multi-line vs single line text
@@ -59,162 +62,201 @@ export interface FieldInfo<Tin, Tout> extends PhantomTypeParameter<typeof f, { i
59
62
 
60
63
  const defaultIntl = createIntl({ locale: "en" })
61
64
  export const translate = ref<IntlFormatters["formatMessage"]>(defaultIntl.formatMessage.bind(defaultIntl))
62
- export const customSchemaErrors = ref<Map<Schema<any, any>, (message: string, e: unknown, v: unknown) => string>>(
65
+ export const customSchemaErrors = ref<Map<AST.AST, (message: string, e: unknown, v: unknown) => string>>(
63
66
  new Map()
64
67
  )
65
68
 
66
- // function buildFieldInfo(
67
- // propOrSchema: Schema<any, any>,
68
- // fieldKey: PropertyKey
69
- // ): FieldInfo<any, any> {
70
- // const metadata = getMetadataFromSchemaOrProp(propOrSchema) // TODO
71
- // const schema = propOrSchema
72
- // const parse = schema.parseEither
73
-
74
- // const nullable = AST.isUnion(schema.ast) && schema.ast.types.includes(Schema2.null.ast)
75
-
76
- // function renderError(e: any, v: unknown) {
77
- // const err = drawError(e)
78
- // const custom = customSchemaErrors.value.get(schema)
79
- // ?? (nullable?.self ? customSchemaErrors.value.get(nullable.self) : undefined)
80
- // return custom ? custom(err, e, v) : translate.value(
81
- // { defaultMessage: "The entered value is not a valid {type}: {message}", id: "validation.not_a_valid" },
82
- // {
83
- // type: translate.value({
84
- // defaultMessage: capitalize(fieldKey.toString()),
85
- // id: `fieldNames.${String(fieldKey)}`
86
- // }),
87
- // message: err.slice(err.indexOf("expected")) // TODO: this is not translated.
88
- // }
89
- // )
90
- // }
91
-
92
- // const stringRules = [
93
- // (v: string | null) =>
94
- // v === null
95
- // || metadata.minLength === undefined
96
- // || v.length >= metadata.minLength
97
- // || translate.value({
98
- // defaultMessage: "The field requires at least {minLength} characters",
99
- // id: "validation.string.minLength"
100
- // }, {
101
- // minLength: metadata.minLength
102
- // }),
103
- // (v: string | null) =>
104
- // v === null
105
- // || metadata.maxLength === undefined
106
- // || v.length <= metadata.maxLength
107
- // || translate.value({
108
- // defaultMessage: "The field cannot have more than {maxLength} characters",
109
- // id: "validation.string.maxLength"
110
- // }, {
111
- // maxLength: metadata.maxLength
112
- // })
113
- // ]
114
-
115
- // const numberRules = [
116
- // (v: number | null) =>
117
- // v === null
118
- // || metadata.minimum === undefined
119
- // || metadata.minimumExclusive && v > metadata.minimum
120
- // || !metadata.minimumExclusive && v >= metadata.minimum
121
- // || translate.value({
122
- // defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
123
- // id: "validation.number.min"
124
- // }, { isExclusive: metadata.minimumExclusive, minimum: metadata.minimum }),
125
- // (v: number | null) =>
126
- // v === null
127
- // || metadata.maximum === undefined
128
- // || metadata.maximumExclusive && v < metadata.maximum
129
- // || !metadata.maximumExclusive && v <= metadata.maximum
130
- // || translate.value({
131
- // defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
132
- // id: "validation.number.max"
133
- // }, { isExclusive: metadata.maximumExclusive, maximum: metadata.maximum })
134
- // ]
135
-
136
- // const parseRule = (v: unknown) =>
137
- // pipe(
138
- // parse(v),
139
- // (_) =>
140
- // _.match(
141
- // {
142
- // onLeft: (_) => renderError(_, v),
143
- // onRight: ([_, optErr]) =>
144
- // optErr.isSome()
145
- // ? renderError(optErr.value, v)
146
- // : true
147
- // }
148
- // )
149
- // )
150
-
151
- // type UnknownRule = (v: unknown) => boolean | string
152
- // const rules: UnknownRule[] = [
153
- // ...(metadata.type === "text"
154
- // ? stringRules
155
- // : numberRules) as UnknownRule[],
156
- // parseRule as UnknownRule
157
- // ]
158
-
159
- // const info = {
160
- // type: metadata.type,
161
- // rules: [
162
- // (v: string) =>
163
- // !metadata.required
164
- // || v !== ""
165
- // || translate.value({ defaultMessage: "The field cannot be empty", id: "validation.empty" }),
166
- // (v: string) => {
167
- // const converted = convertOutInt(v, metadata.type)
168
-
169
- // for (const r of rules) {
170
- // const res = r(converted)
171
- // if (res !== true) {
172
- // return res
173
- // }
174
- // }
175
-
176
- // return true
177
- // }
178
- // ],
179
- // metadata
180
- // }
181
-
182
- // return info as any
183
- // }
184
-
185
- // export const buildFormFromSchema = <
186
- // Fields extends StructFields,
187
- // OnSubmitA
188
- // >(
189
- // s: Schema<
190
- // Simplify<FromStruct<Fields>>,
191
- // Simplify<ToStruct<Fields>>
192
- // >,
193
- // state: Ref<FromStruct<Fields>>,
194
- // onSubmit: (a: ToStruct<Fields>) => Promise<OnSubmitA>
195
- // ) => {
196
- // const fields = buildFieldInfoFromFields(s.Api.fields)
197
- // const parse = s.parseSync
198
- // const isDirty = ref(false)
199
- // const isValid = ref(true)
200
-
201
- // const submit1 = <A>(onSubmit: (a: To) => Promise<A>) => async <T extends Promise<{ valid: boolean }>>(e: T) => {
202
- // const r = await e
203
- // if (!r.valid) return
204
- // return onSubmit(parse(state.value))
205
- // }
206
- // const submit = submit1(onSubmit)
207
-
208
- // watch(
209
- // state,
210
- // (v) => {
211
- // // TODO: do better
212
- // isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value)
213
- // },
214
- // { deep: true }
215
- // )
216
-
217
- // const submitFromState = () => submit(Promise.resolve({ valid: isValid.value }))
218
-
219
- // return { fields, submit, submitFromState, isDirty, isValid }
220
- // }
69
+ function buildFieldInfo(
70
+ property: AST.PropertySignature
71
+ ): FieldInfo<any> {
72
+ const propertyKey = property.name
73
+ const schema = S.make(property.type)
74
+ const metadata = getMetadataFromSchema(property.type) // TODO
75
+ const parse = schema.parseEither
76
+
77
+ const nullable = AST.isUnion(property.type) && property.type.types.includes(Schema2.null.ast)
78
+ const realSelf = nullable && AST.isUnion(property.type)
79
+ ? property.type.types.filter((_) => _ !== Schema2.null.ast)[0]!
80
+ : property.type
81
+
82
+ function renderError(e: ParseError, v: unknown) {
83
+ const err = e.toString()
84
+ const custom = customSchemaErrors.value.get(realSelf)
85
+ return custom ? custom(err, e, v) : translate.value(
86
+ { defaultMessage: "The entered value is not a valid {type}: {message}", id: "validation.not_a_valid" },
87
+ {
88
+ type: translate.value({
89
+ defaultMessage: capitalize(propertyKey.toString()),
90
+ id: `fieldNames.${String(propertyKey)}`
91
+ }),
92
+ message: err // TODO err.slice(err.indexOf("expected")) // TODO: this is not translated.
93
+ }
94
+ )
95
+ }
96
+
97
+ const stringRules = [
98
+ (v: string | null) =>
99
+ v === null
100
+ || metadata.minLength === undefined
101
+ || v.length >= metadata.minLength
102
+ || translate.value({
103
+ defaultMessage: "The field requires at least {minLength} characters",
104
+ id: "validation.string.minLength"
105
+ }, {
106
+ minLength: metadata.minLength
107
+ }),
108
+ (v: string | null) =>
109
+ v === null
110
+ || metadata.maxLength === undefined
111
+ || v.length <= metadata.maxLength
112
+ || translate.value({
113
+ defaultMessage: "The field cannot have more than {maxLength} characters",
114
+ id: "validation.string.maxLength"
115
+ }, {
116
+ maxLength: metadata.maxLength
117
+ })
118
+ ]
119
+
120
+ const numberRules = [
121
+ (v: number | null) =>
122
+ v === null
123
+ || metadata.minimum === undefined
124
+ || metadata.minimumExclusive && v > metadata.minimum
125
+ || !metadata.minimumExclusive && v >= metadata.minimum
126
+ || translate.value({
127
+ defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
128
+ id: "validation.number.min"
129
+ }, { isExclusive: metadata.minimumExclusive, minimum: metadata.minimum }),
130
+ (v: number | null) =>
131
+ v === null
132
+ || metadata.maximum === undefined
133
+ || metadata.maximumExclusive && v < metadata.maximum
134
+ || !metadata.maximumExclusive && v <= metadata.maximum
135
+ || translate.value({
136
+ defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
137
+ id: "validation.number.max"
138
+ }, { isExclusive: metadata.maximumExclusive, maximum: metadata.maximum })
139
+ ]
140
+
141
+ const parseRule = (v: unknown) =>
142
+ pipe(
143
+ parse(v),
144
+ (_) =>
145
+ _.match(
146
+ {
147
+ onLeft: (_) => renderError(_, v),
148
+ onRight: () => true
149
+ }
150
+ )
151
+ )
152
+
153
+ type UnknownRule = (v: unknown) => boolean | string
154
+ const rules: UnknownRule[] = [
155
+ ...(metadata.type === "text"
156
+ ? stringRules
157
+ : numberRules) as UnknownRule[],
158
+ parseRule as UnknownRule
159
+ ]
160
+
161
+ const info = {
162
+ type: metadata.type,
163
+ rules: [
164
+ (v: string) =>
165
+ !metadata.required
166
+ || v !== ""
167
+ || translate.value({ defaultMessage: "The field cannot be empty", id: "validation.empty" }),
168
+ (v: string) => {
169
+ const converted = convertOutInt(v, metadata.type)
170
+
171
+ for (const r of rules) {
172
+ const res = r(converted)
173
+ if (res !== true) {
174
+ return res
175
+ }
176
+ }
177
+
178
+ return true
179
+ }
180
+ ],
181
+ metadata
182
+ }
183
+
184
+ return info as any
185
+ }
186
+
187
+ export const buildFormFromSchema = <
188
+ From extends Record<PropertyKey, any>,
189
+ To extends Record<PropertyKey, any>,
190
+ OnSubmitA
191
+ >(
192
+ s: Schema<
193
+ From,
194
+ To
195
+ >,
196
+ state: Ref<From>,
197
+ onSubmit: (a: To) => Promise<OnSubmitA>
198
+ ) => {
199
+ const fields = buildFieldInfoFromFields(s)
200
+ const parse = s.parseSync
201
+ const isDirty = ref(false)
202
+ const isValid = ref(true)
203
+
204
+ const submit1 = <A>(onSubmit: (a: To) => Promise<A>) => async <T extends Promise<{ valid: boolean }>>(e: T) => {
205
+ const r = await e
206
+ if (!r.valid) return
207
+ return onSubmit(parse(state.value))
208
+ }
209
+ const submit = submit1(onSubmit)
210
+
211
+ watch(
212
+ state,
213
+ (v) => {
214
+ // TODO: do better
215
+ isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value)
216
+ },
217
+ { deep: true }
218
+ )
219
+
220
+ const submitFromState = () => submit(Promise.resolve({ valid: isValid.value }))
221
+
222
+ return { fields, submit, submitFromState, isDirty, isValid }
223
+ }
224
+
225
+ export function getMetadataFromSchema(
226
+ ast: AST.AST
227
+ ): {
228
+ type: "int" | "float" | "text"
229
+ minimum?: number
230
+ maximum?: number
231
+ minimumExclusive?: boolean
232
+ maximumExclusive?: boolean
233
+ minLength?: number
234
+ maxLength?: number
235
+ required: boolean
236
+ } {
237
+ const nullable = AST.isUnion(ast) && ast.types.includes(Schema2.null.ast)
238
+ const realSelf = nullable && AST.isUnion(ast)
239
+ ? ast.types.filter((_) => _ !== Schema2.null.ast)[0]!
240
+ : ast
241
+
242
+ let jschema: any
243
+ try {
244
+ jschema = JSONSchema.to(S.make(realSelf)) as any
245
+ } catch (err) {
246
+ jschema = {}
247
+ console.warn("error getting jsonschema from ", err, ast)
248
+ }
249
+
250
+ const isNumber = jschema.type === "number" || jschema.type === "integer"
251
+ const isInt = jschema.type === "integer"
252
+ return {
253
+ type: isInt ? "int" as const : isNumber ? "float" as const : "text" as const,
254
+ minimum: jschema.minimum,
255
+ minimumExclusive: jschema.exclusiveMinimum,
256
+ maximum: jschema.maximum,
257
+ maximumExclusive: jschema.exclusiveMaximum,
258
+ minLength: jschema.minLength,
259
+ maxLength: jschema.maxLength,
260
+ required: !nullable
261
+ }
262
+ }
package/dist/form.d.ts CHANGED
@@ -1,7 +1,10 @@
1
+ import { AST } from "@effect-app/schema";
1
2
  import type { Schema } from "@effect-app/schema";
3
+ import type { Ref } from "vue";
2
4
  export declare function convertIn(v: string | null, type?: "text" | "float" | "int"): string;
3
5
  export declare function convertOutInt(v: string, type?: "text" | "float" | "int"): string | number | null;
4
6
  export declare function convertOut(v: string, set: (v: unknown | null) => void, type?: "text" | "float" | "int"): void;
7
+ export declare function buildFieldInfoFromFields<From extends Record<PropertyKey, any>, To extends Record<PropertyKey, any>>(fields: Schema<From, To>): { [K in keyof To]: FieldInfo<To[K]>; };
5
8
  export interface FieldMetadata {
6
9
  minLength: number | undefined;
7
10
  maxLength: number | undefined;
@@ -13,18 +16,36 @@ declare abstract class PhantomTypeParameter<Identifier extends keyof any, Instan
13
16
  readonly [NameP in Identifier]: (_: InstantiatedType) => InstantiatedType;
14
17
  };
15
18
  }
16
- export interface FieldInfo<Tin, Tout> extends PhantomTypeParameter<typeof f, {
17
- in: Tin;
19
+ export interface FieldInfo<Tout> extends PhantomTypeParameter<typeof f, {
18
20
  out: Tout;
19
21
  }> {
20
22
  rules: ((v: string) => boolean | string)[];
21
23
  metadata: FieldMetadata;
22
24
  type: "text" | "float" | "int";
23
25
  }
24
- export declare const translate: import("vue").Ref<{
26
+ export declare const translate: Ref<{
25
27
  (descriptor: import("@formatjs/intl").MessageDescriptor, values?: Record<string, import("intl-messageformat").PrimitiveType | import("intl-messageformat").FormatXMLElementFn<string, string>> | undefined, opts?: import("intl-messageformat").Options | undefined): string;
26
28
  <T extends unknown>(descriptor: import("@formatjs/intl").MessageDescriptor, values?: Record<string, import("intl-messageformat").PrimitiveType | T | import("intl-messageformat").FormatXMLElementFn<T>> | undefined, opts?: import("intl-messageformat").Options | undefined): string | T | (string | T)[];
27
29
  }>;
28
- export declare const customSchemaErrors: import("vue").Ref<Map<Schema<any, any>, (message: string, e: unknown, v: unknown) => string>>;
30
+ export declare const customSchemaErrors: Ref<Map<AST.AST, (message: string, e: unknown, v: unknown) => string>>;
31
+ export declare const buildFormFromSchema: <From extends Record<PropertyKey, any>, To extends Record<PropertyKey, any>, OnSubmitA>(s: Schema<From, To>, state: Ref<From>, onSubmit: (a: To) => Promise<OnSubmitA>) => {
32
+ fields: { [K in keyof To]: FieldInfo<To[K]>; };
33
+ submit: <T extends Promise<{
34
+ valid: boolean;
35
+ }>>(e: T) => Promise<OnSubmitA | undefined>;
36
+ submitFromState: () => Promise<OnSubmitA | undefined>;
37
+ isDirty: Ref<boolean>;
38
+ isValid: Ref<boolean>;
39
+ };
40
+ export declare function getMetadataFromSchema(ast: AST.AST): {
41
+ type: "int" | "float" | "text";
42
+ minimum?: number;
43
+ maximum?: number;
44
+ minimumExclusive?: boolean;
45
+ maximumExclusive?: boolean;
46
+ minLength?: number;
47
+ maxLength?: number;
48
+ required: boolean;
49
+ };
29
50
  export {};
30
51
  //# sourceMappingURL=form.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../_src/form.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAIhD,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,UAE1E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,0BAIvE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,QAEtG;AAmBD,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,QAAA,MAAM,CAAC,eAAW,CAAA;AAClB,uBAAe,oBAAoB,CACjC,UAAU,SAAS,MAAM,GAAG,EAC5B,gBAAgB;IAEhB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;QAC7B,QAAQ,EAAE,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE,gBAAgB,KAAK,gBAAgB;KAC1E,CAAA;CACF;AACD,MAAM,WAAW,SAAS,CAAC,GAAG,EAAE,IAAI,CAAE,SAAQ,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAAE,EAAE,EAAE,GAAG,CAAC;IAAC,GAAG,EAAE,IAAI,CAAA;CAAE,CAAC;IAClG,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1C,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;CAC/B;AAMD,eAAO,MAAM,SAAS;;;EAAoF,CAAA;AAC1G,eAAO,MAAM,kBAAkB,oDAAuC,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,MAAM,EAE9G,CAAA"}
1
+ {"version":3,"file":"form.d.ts","sourceRoot":"","sources":["../_src/form.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAK,MAAM,oBAAoB,CAAA;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAEhD,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;AAM9B,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,UAE1E;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,0BAIvE;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,GAAG,IAAI,KAAK,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,QAEtG;AAED,wBAAgB,wBAAwB,CAAC,IAAI,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EAAE,EAAE,SAAS,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,EACjH,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,0CAYzB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;IAC7B,QAAQ,EAAE,OAAO,CAAA;CAClB;AAED,QAAA,MAAM,CAAC,eAAW,CAAA;AAClB,uBAAe,oBAAoB,CACjC,UAAU,SAAS,MAAM,GAAG,EAC5B,gBAAgB;IAEhB,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE;QAC7B,QAAQ,EAAE,KAAK,IAAI,UAAU,GAAG,CAAC,CAAC,EAAE,gBAAgB,KAAK,gBAAgB;KAC1E,CAAA;CACF;AACD,MAAM,WAAW,SAAS,CAAC,IAAI,CAAE,SAAQ,oBAAoB,CAAC,OAAO,CAAC,EAAE;IAAE,GAAG,EAAE,IAAI,CAAA;CAAE,CAAC;IACpF,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,OAAO,GAAG,MAAM,CAAC,EAAE,CAAA;IAC1C,QAAQ,EAAE,aAAa,CAAA;IACvB,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAAA;CAC/B;AAMD,eAAO,MAAM,SAAS;;;EAAoF,CAAA;AAC1G,eAAO,MAAM,kBAAkB,6BAA8B,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,MAAM,EAErG,CAAA;AAwHD,eAAO,MAAM,mBAAmB,6FAK3B,OACD,IAAI,EACJ,EAAE,CACH,SACM,IAAI,IAAI,CAAC,gBACF,EAAE,KAAK,QAAQ,SAAS,CAAC;;;eAOmD,OAAO;;;;;CAmBlG,CAAA;AAED,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,GAAG,CAAC,GAAG,GACX;IACD,IAAI,EAAE,KAAK,GAAG,OAAO,GAAG,MAAM,CAAA;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;CAClB,CA0BA"}
package/dist/form.js CHANGED
@@ -1,5 +1,11 @@
1
+ import * as tsplus_module_1 from "@effect/schema/Parser";
2
+ import * as tsplus_module_2 from "@effect-app/prelude";
3
+ import * as tsplus_module_3 from "effect/Either";
4
+ import * as tsplus_module_4 from "@effect-app/core/Function";
5
+ import { AST, S } from "@effect-app/schema";
1
6
  import { createIntl } from "@formatjs/intl";
2
- import { ref } from "vue";
7
+ import { capitalize, ref, watch } from "vue";
8
+ import * as JSONSchema from "@effect/schema/JSONSchema";
3
9
  export function convertIn(v, type) {
4
10
  return v === null ? "" : type === "text" ? v : `${v}`;
5
11
  }
@@ -11,6 +17,15 @@ export function convertOutInt(v, type) {
11
17
  export function convertOut(v, set, type) {
12
18
  return set(convertOutInt(v, type));
13
19
  }
20
+ export function buildFieldInfoFromFields(fields) {
21
+ if (!AST.isTypeLiteral(fields.ast))
22
+ throw new Error("not a struct type");
23
+ return fields.ast.propertySignatures.reduce((prev, cur) => {
24
+ ;
25
+ prev[cur.name] = buildFieldInfo(cur);
26
+ return prev;
27
+ }, {});
28
+ }
14
29
  const f = Symbol();
15
30
  class PhantomTypeParameter {
16
31
  }
@@ -19,4 +34,138 @@ class PhantomTypeParameter {
19
34
  const defaultIntl = createIntl({ locale: "en" });
20
35
  export const translate = ref(defaultIntl.formatMessage.bind(defaultIntl));
21
36
  export const customSchemaErrors = ref(new Map());
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL19zcmMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLGdCQUFnQixDQUFBO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFFekIsTUFBTSxVQUFVLFNBQVMsQ0FBQyxDQUFnQixFQUFFLElBQStCO0lBQ3pFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBUyxFQUFFLElBQStCO0lBQ3RFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0YsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxDQUFTLEVBQUUsR0FBZ0MsRUFBRSxJQUErQjtJQUNyRyxPQUFPLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7QUFDcEMsQ0FBQztBQXlCRCxNQUFNLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQTtBQUNsQixNQUFlLG9CQUFvQjtDQU9sQztBQU9ELDBFQUEwRTtBQUMxRSxZQUFZO0FBRVosTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7QUFDaEQsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBa0MsV0FBVyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQTtBQUMxRyxNQUFNLENBQUMsTUFBTSxrQkFBa0IsR0FBRyxHQUFHLENBQ25DLElBQUksR0FBRyxFQUFFLENBQ1YsQ0FBQSJ9
37
+ function buildFieldInfo(property) {
38
+ const propertyKey = property.name;
39
+ const schema = S.make(property.type);
40
+ const metadata = getMetadataFromSchema(property.type); // TODO
41
+ const parse = tsplus_module_1.parseEither(schema);
42
+ const nullable = AST.isUnion(property.type) && property.type.types.includes(tsplus_module_2.Schema2.null.ast);
43
+ const realSelf = nullable && AST.isUnion(property.type)
44
+ ? property.type.types.filter((_) => _ !== tsplus_module_2.Schema2.null.ast)[0]
45
+ : property.type;
46
+ function renderError(e, v) {
47
+ const err = e.toString();
48
+ const custom = customSchemaErrors.value.get(realSelf);
49
+ return custom ? custom(err, e, v) : translate.value({ defaultMessage: "The entered value is not a valid {type}: {message}", id: "validation.not_a_valid" }, {
50
+ type: translate.value({
51
+ defaultMessage: capitalize(propertyKey.toString()),
52
+ id: `fieldNames.${String(propertyKey)}`
53
+ }),
54
+ message: err // TODO err.slice(err.indexOf("expected")) // TODO: this is not translated.
55
+ });
56
+ }
57
+ const stringRules = [
58
+ (v) => v === null
59
+ || metadata.minLength === undefined
60
+ || v.length >= metadata.minLength
61
+ || translate.value({
62
+ defaultMessage: "The field requires at least {minLength} characters",
63
+ id: "validation.string.minLength"
64
+ }, {
65
+ minLength: metadata.minLength
66
+ }),
67
+ (v) => v === null
68
+ || metadata.maxLength === undefined
69
+ || v.length <= metadata.maxLength
70
+ || translate.value({
71
+ defaultMessage: "The field cannot have more than {maxLength} characters",
72
+ id: "validation.string.maxLength"
73
+ }, {
74
+ maxLength: metadata.maxLength
75
+ })
76
+ ];
77
+ const numberRules = [
78
+ (v) => v === null
79
+ || metadata.minimum === undefined
80
+ || metadata.minimumExclusive && v > metadata.minimum
81
+ || !metadata.minimumExclusive && v >= metadata.minimum
82
+ || translate.value({
83
+ defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
84
+ id: "validation.number.min"
85
+ }, { isExclusive: metadata.minimumExclusive, minimum: metadata.minimum }),
86
+ (v) => v === null
87
+ || metadata.maximum === undefined
88
+ || metadata.maximumExclusive && v < metadata.maximum
89
+ || !metadata.maximumExclusive && v <= metadata.maximum
90
+ || translate.value({
91
+ defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
92
+ id: "validation.number.max"
93
+ }, { isExclusive: metadata.maximumExclusive, maximum: metadata.maximum })
94
+ ];
95
+ const parseRule = (v) => tsplus_module_4.pipe(parse(v), (_) => tsplus_module_3.match(_, {
96
+ onLeft: (_) => renderError(_, v),
97
+ onRight: () => true
98
+ }));
99
+ const rules = [
100
+ ...(metadata.type === "text"
101
+ ? stringRules
102
+ : numberRules),
103
+ parseRule
104
+ ];
105
+ const info = {
106
+ type: metadata.type,
107
+ rules: [
108
+ (v) => !metadata.required
109
+ || v !== ""
110
+ || translate.value({ defaultMessage: "The field cannot be empty", id: "validation.empty" }),
111
+ (v) => {
112
+ const converted = convertOutInt(v, metadata.type);
113
+ for (const r of rules) {
114
+ const res = r(converted);
115
+ if (res !== true) {
116
+ return res;
117
+ }
118
+ }
119
+ return true;
120
+ }
121
+ ],
122
+ metadata
123
+ };
124
+ return info;
125
+ }
126
+ export const buildFormFromSchema = (s, state, onSubmit) => {
127
+ const fields = buildFieldInfoFromFields(s);
128
+ const parse = tsplus_module_1.parseSync(s);
129
+ const isDirty = ref(false);
130
+ const isValid = ref(true);
131
+ const submit1 = (onSubmit) => async (e) => {
132
+ const r = await e;
133
+ if (!r.valid)
134
+ return;
135
+ return onSubmit(parse(state.value));
136
+ };
137
+ const submit = submit1(onSubmit);
138
+ watch(state, (v) => {
139
+ // TODO: do better
140
+ isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value);
141
+ }, { deep: true });
142
+ const submitFromState = () => submit(Promise.resolve({ valid: isValid.value }));
143
+ return { fields, submit, submitFromState, isDirty, isValid };
144
+ };
145
+ export function getMetadataFromSchema(ast) {
146
+ const nullable = AST.isUnion(ast) && ast.types.includes(tsplus_module_2.Schema2.null.ast);
147
+ const realSelf = nullable && AST.isUnion(ast)
148
+ ? ast.types.filter((_) => _ !== tsplus_module_2.Schema2.null.ast)[0]
149
+ : ast;
150
+ let jschema;
151
+ try {
152
+ jschema = JSONSchema.to(S.make(realSelf));
153
+ }
154
+ catch (err) {
155
+ jschema = {};
156
+ console.warn("error getting jsonschema from ", err, ast);
157
+ }
158
+ const isNumber = jschema.type === "number" || jschema.type === "integer";
159
+ const isInt = jschema.type === "integer";
160
+ return {
161
+ type: isInt ? "int" : isNumber ? "float" : "text",
162
+ minimum: jschema.minimum,
163
+ minimumExclusive: jschema.exclusiveMinimum,
164
+ maximum: jschema.maximum,
165
+ maximumExclusive: jschema.exclusiveMaximum,
166
+ minLength: jschema.minLength,
167
+ maxLength: jschema.maxLength,
168
+ required: !nullable
169
+ };
170
+ }
171
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL19zcmMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7O0FBQUEsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUF1QixNQUFNLGdCQUFnQixDQUFBO0FBRWhFLE9BQU8sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLEtBQUssRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUU1QyxPQUFPLEtBQUssVUFBVSxNQUFNLDJCQUEyQixDQUFBO0FBR3ZELE1BQU0sVUFBVSxTQUFTLENBQUMsQ0FBZ0IsRUFBRSxJQUErQjtJQUN6RSxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO0FBQ3ZELENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLENBQVMsRUFBRSxJQUErQjtJQUN0RSxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQy9GLE9BQU8sQ0FBQyxDQUFBO0FBQ1YsQ0FBQztBQUVELE1BQU0sVUFBVSxVQUFVLENBQUMsQ0FBUyxFQUFFLEdBQWdDLEVB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/vue",
3
- "version": "0.87.0-next.14",
3
+ "version": "0.87.0-next.16",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "dependencies": {
@@ -12,10 +12,10 @@
12
12
  "query-string": "^8.1.0",
13
13
  "swrv": "^1.0.4",
14
14
  "vue": "^3.3.13",
15
- "@effect-app/prelude": "0.107.0-next.13",
16
- "@effect-app/vue": "0.87.0-next.14",
17
- "@effect-app/core": "0.97.0-next.4",
18
- "@effect-app/schema": "0.150.0-next.10"
15
+ "@effect-app/schema": "0.150.0-next.11",
16
+ "@effect-app/vue": "0.87.0-next.16",
17
+ "@effect-app/prelude": "0.107.0-next.14",
18
+ "@effect-app/core": "0.97.0-next.4"
19
19
  },
20
20
  "devDependencies": {
21
21
  "@rollup/pluginutils": "^5.1.0",