@effect-app/vue 0.87.0-next.4 → 0.87.0-next.41

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.
@@ -1,11 +1,12 @@
1
- import { type drawError, type Field, getMetadataFromSchemaOrProp } from "@effect-app/prelude/schema"
2
- import type { AnyField, FromStruct, Schema, StructFields, To, ToStruct } from "@effect-app/schema"
3
- import { AST } from "@effect-app/schema/schema"
1
+ import { AST, S } from "@effect-app/schema"
2
+ import type { Schema } from "@effect-app/schema"
4
3
  import { createIntl, type IntlFormatters } from "@formatjs/intl"
5
- import type { Simplify } from "effect/Types"
6
4
  import type { Ref } from "vue"
7
5
  import { capitalize, ref, watch } from "vue"
8
6
 
7
+ import * as JSONSchema from "@effect/schema/JSONSchema"
8
+ import type { ParseError } from "@effect/schema/ParseResult"
9
+
9
10
  export function convertIn(v: string | null, type?: "text" | "float" | "int") {
10
11
  return v === null ? "" : type === "text" ? v : `${v}`
11
12
  }
@@ -20,19 +21,24 @@ export function convertOut(v: string, set: (v: unknown | null) => void, type?: "
20
21
  return set(convertOutInt(v, type))
21
22
  }
22
23
 
23
- export function buildFieldInfoFromFields<Fields extends StructFields>(
24
- fields: Fields
24
+ export function buildFieldInfoFromFields<From extends Record<PropertyKey, any>, To extends Record<PropertyKey, any>>(
25
+ fields: Schema<From, To>
25
26
  ) {
26
- return fields.$$.keys.reduce(
27
+ let ast = fields.ast
28
+ // todo: or look at from?
29
+ if (AST.isTransform(ast)) {
30
+ if (AST.isDeclaration(ast.to)) {
31
+ ast = ast.to.type
32
+ }
33
+ }
34
+ if (!AST.isTypeLiteral(ast)) throw new Error("not a struct type")
35
+ return ast.propertySignatures.reduce(
27
36
  (prev, cur) => {
28
- prev[cur] = buildFieldInfo(fields[cur] as AnyField, cur)
37
+ ;(prev as any)[cur.name] = buildFieldInfo(cur)
29
38
  return prev
30
39
  },
31
40
  {} as {
32
- [K in keyof Fields]: FieldInfo<
33
- Schema.From<GetSchemaFromProp<Fields[K]>>,
34
- Schema.To<GetSchemaFromProp<Fields[K]>>
35
- >
41
+ [K in keyof To]: FieldInfo<To[K]>
36
42
  }
37
43
  )
38
44
  }
@@ -52,43 +58,45 @@ abstract class PhantomTypeParameter<
52
58
  readonly [NameP in Identifier]: (_: InstantiatedType) => InstantiatedType
53
59
  }
54
60
  }
55
- export interface FieldInfo<Tin, Tout> extends PhantomTypeParameter<typeof f, { in: Tin; out: Tout }> {
61
+ export interface FieldInfo<Tout> extends PhantomTypeParameter<typeof f, { out: Tout }> {
56
62
  rules: ((v: string) => boolean | string)[]
57
63
  metadata: FieldMetadata
58
64
  type: "text" | "float" | "int" // todo; multi-line vs single line text
59
65
  }
60
66
 
61
- type GetSchemaFromProp<T> = T extends Field<infer S, any, any, any> ? S
62
- : never
67
+ // type GetSchemaFromProp<T> = T extends Field<infer S, any, any, any> ? S
68
+ // : never
63
69
 
64
70
  const defaultIntl = createIntl({ locale: "en" })
65
71
  export const translate = ref<IntlFormatters["formatMessage"]>(defaultIntl.formatMessage.bind(defaultIntl))
66
- export const customSchemaErrors = ref<Map<Schema<any, any>, (message: string, e: unknown, v: unknown) => string>>(
72
+ export const customSchemaErrors = ref<Map<AST.AST, (message: string, e: unknown, v: unknown) => string>>(
67
73
  new Map()
68
74
  )
69
75
 
70
76
  function buildFieldInfo(
71
- propOrSchema: Schema<any, any>,
72
- fieldKey: PropertyKey
73
- ): FieldInfo<any, any> {
74
- const metadata = getMetadataFromSchemaOrProp(propOrSchema) // TODO
75
- const schema = propOrSchema
77
+ property: AST.PropertySignature
78
+ ): FieldInfo<any> {
79
+ const propertyKey = property.name
80
+ const schema = S.make(property.type)
81
+ const metadata = getMetadataFromSchema(property.type) // TODO
76
82
  const parse = schema.parseEither
77
83
 
78
- const nullable = AST.isUnion(schema.ast) && schema.ast.types.includes(Schema2.null.ast)
84
+ const nullable = AST.isUnion(property.type) && property.type.types.includes(S.null.ast)
85
+ const realSelf = nullable && AST.isUnion(property.type)
86
+ ? property.type.types.filter((_) => _ !== S.null.ast)[0]!
87
+ : property.type
79
88
 
80
- function renderError(e: any, v: unknown) {
81
- const err = drawError(e)
82
- const custom = customSchemaErrors.value.get(schema)
83
- ?? (nullable?.self ? customSchemaErrors.value.get(nullable.self) : undefined)
89
+ function renderError(e: ParseError, v: unknown) {
90
+ const err = e.toString()
91
+ const custom = customSchemaErrors.value.get(realSelf)
84
92
  return custom ? custom(err, e, v) : translate.value(
85
93
  { defaultMessage: "The entered value is not a valid {type}: {message}", id: "validation.not_a_valid" },
86
94
  {
87
95
  type: translate.value({
88
- defaultMessage: capitalize(fieldKey.toString()),
89
- id: `fieldNames.${String(fieldKey)}`
96
+ defaultMessage: capitalize(propertyKey.toString()),
97
+ id: `fieldNames.${String(propertyKey)}`
90
98
  }),
91
- message: err.slice(err.indexOf("expected")) // TODO: this is not translated.
99
+ message: metadata.description ? "expected " + metadata.description : err.slice(err.indexOf("Expected")) // TODO: this is not translated.
92
100
  }
93
101
  )
94
102
  }
@@ -119,22 +127,28 @@ function buildFieldInfo(
119
127
  const numberRules = [
120
128
  (v: number | null) =>
121
129
  v === null
122
- || metadata.minimum === undefined
123
- || metadata.minimumExclusive && v > metadata.minimum
124
- || !metadata.minimumExclusive && v >= metadata.minimum
130
+ || (metadata.minimum === undefined && metadata.exclusiveMinimum === undefined)
131
+ || metadata.exclusiveMinimum !== undefined && v > metadata.exclusiveMinimum
132
+ || metadata.minimum !== undefined && v >= metadata.minimum
125
133
  || translate.value({
126
134
  defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
127
135
  id: "validation.number.min"
128
- }, { isExclusive: metadata.minimumExclusive, minimum: metadata.minimum }),
136
+ }, {
137
+ isExclusive: metadata.exclusiveMinimum !== undefined,
138
+ minimum: metadata.exclusiveMinimum ?? metadata.minimum
139
+ }),
129
140
  (v: number | null) =>
130
141
  v === null
131
- || metadata.maximum === undefined
132
- || metadata.maximumExclusive && v < metadata.maximum
133
- || !metadata.maximumExclusive && v <= metadata.maximum
142
+ || (metadata.maximum === undefined && metadata.exclusiveMaximum === undefined)
143
+ || metadata.exclusiveMaximum !== undefined && v < metadata.exclusiveMaximum
144
+ || metadata.maximum !== undefined && v <= metadata.maximum
134
145
  || translate.value({
135
146
  defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
136
147
  id: "validation.number.max"
137
- }, { isExclusive: metadata.maximumExclusive, maximum: metadata.maximum })
148
+ }, {
149
+ isExclusive: metadata.exclusiveMaximum !== undefined,
150
+ maximum: metadata.exclusiveMaximum ?? metadata.maximum
151
+ })
138
152
  ]
139
153
 
140
154
  const parseRule = (v: unknown) =>
@@ -144,10 +158,7 @@ function buildFieldInfo(
144
158
  _.match(
145
159
  {
146
160
  onLeft: (_) => renderError(_, v),
147
- onRight: ([_, optErr]) =>
148
- optErr.isSome()
149
- ? renderError(optErr.value, v)
150
- : true
161
+ onRight: () => true
151
162
  }
152
163
  )
153
164
  )
@@ -187,17 +198,18 @@ function buildFieldInfo(
187
198
  }
188
199
 
189
200
  export const buildFormFromSchema = <
190
- Fields extends StructFields,
201
+ From extends Record<PropertyKey, any>,
202
+ To extends Record<PropertyKey, any>,
191
203
  OnSubmitA
192
204
  >(
193
205
  s: Schema<
194
- Simplify<FromStruct<Fields>>,
195
- Simplify<ToStruct<Fields>>
206
+ From,
207
+ To
196
208
  >,
197
- state: Ref<FromStruct<Fields>>,
198
- onSubmit: (a: ToStruct<Fields>) => Promise<OnSubmitA>
209
+ state: Ref<From>,
210
+ onSubmit: (a: To) => Promise<OnSubmitA>
199
211
  ) => {
200
- const fields = buildFieldInfoFromFields(s.Api.fields)
212
+ const fields = buildFieldInfoFromFields(s)
201
213
  const parse = s.parseSync
202
214
  const isDirty = ref(false)
203
215
  const isValid = ref(true)
@@ -222,3 +234,44 @@ export const buildFormFromSchema = <
222
234
 
223
235
  return { fields, submit, submitFromState, isDirty, isValid }
224
236
  }
237
+
238
+ export function getMetadataFromSchema(
239
+ ast: AST.AST
240
+ ): {
241
+ type: "int" | "float" | "text"
242
+ minimum?: number
243
+ maximum?: number
244
+ exclusiveMinimum?: number
245
+ exclusiveMaximum?: number
246
+ minLength?: number
247
+ maxLength?: number
248
+ required: boolean
249
+ description?: string
250
+ } {
251
+ const nullable = AST.isUnion(ast) && ast.types.includes(S.null.ast)
252
+ const realSelf = nullable && AST.isUnion(ast)
253
+ ? ast.types.filter((_) => _ !== S.null.ast)[0]!
254
+ : ast
255
+
256
+ let jschema: any
257
+ try {
258
+ jschema = JSONSchema.to(S.make(realSelf)) as any
259
+ } catch (err) {
260
+ jschema = {}
261
+ console.warn("error getting jsonschema from ", err, ast)
262
+ }
263
+
264
+ const isNumber = jschema.type === "number" || jschema.type === "integer"
265
+ const isInt = jschema.type === "integer"
266
+ return {
267
+ type: isInt ? "int" as const : isNumber ? "float" as const : "text" as const,
268
+ minimum: jschema.minimum,
269
+ exclusiveMinimum: jschema.exclusiveMinimum,
270
+ maximum: jschema.maximum,
271
+ exclusiveMaximum: jschema.exclusiveMaximum,
272
+ minLength: jschema.minLength,
273
+ maxLength: jschema.maxLength,
274
+ description: jschema.description,
275
+ required: !nullable
276
+ }
277
+ }
package/_src/hooks.ts CHANGED
@@ -3,7 +3,7 @@ import type { ApiConfig, FetchResponse } from "@effect-app/prelude/client"
3
3
  import { InterruptedException } from "effect/Cause"
4
4
  import * as swrv from "swrv"
5
5
  import type { fetcherFn, IKey, IResponse } from "swrv/dist/types.js"
6
- import type { Ref } from "vue"
6
+ import type { ComputedRef, Ref } from "vue"
7
7
  import { computed, ref, shallowRef } from "vue"
8
8
  import { run } from "./internal.js"
9
9
 
@@ -64,10 +64,12 @@ export function useMutateWithArg<Arg, E, A>(
64
64
  return (arg: Arg) => mutate(self.mapPath(arg), fn(arg))
65
65
  }
66
66
 
67
+ export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T)
68
+
67
69
  // TODO: same trick with mutations/actions
68
70
  export function useSafeQueryWithArg<Arg, E, A>(
69
71
  self: ((arg: Arg) => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>) & { mapPath: (arg: Arg) => string },
70
- arg: Arg,
72
+ arg: Arg | WatchSource<Arg>,
71
73
  config?: swrv.IConfig<A, fetcherFn<A>> | undefined
72
74
  ) {
73
75
  return useSafeQueryWithArg_(self, self.mapPath, arg, config)
@@ -77,21 +79,29 @@ export function useSafeQuery<E, A>(
77
79
  self: Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>> & { mapPath: string },
78
80
  config?: swrv.IConfig<A, fetcherFn<A>> | undefined
79
81
  ) {
80
- return useSafeQuery_(self.mapPath, self, config)
82
+ return useSafeQuery_(self.mapPath, () => self, config)
81
83
  }
82
84
 
83
85
  export function useSafeQueryWithArg_<Arg, E, A>(
84
86
  self: (arg: Arg) => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>,
85
87
  mapPath: (arg: Arg) => string,
86
- arg: Arg,
88
+ arg: Arg | WatchSource<Arg>,
87
89
  config?: swrv.IConfig<A, fetcherFn<A>> | undefined
88
90
  ) {
89
- return useSafeQuery_(mapPath(arg), self(arg), config)
91
+ const arr = arg
92
+ const r: { value: Arg } = typeof arr === "function"
93
+ ? {
94
+ get value() {
95
+ return (arr as any)()
96
+ }
97
+ } as any
98
+ : ref(arg)
99
+ return useSafeQuery_(computed(() => mapPath(r.value)), () => self(r.value), config)
90
100
  }
91
101
 
92
102
  export function useSafeQuery_<E, A>(
93
- key: string,
94
- self: Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>,
103
+ key: string | WatchSource<string>,
104
+ self: () => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>,
95
105
  config?: swrv.IConfig<A, fetcherFn<A>> | undefined
96
106
  ) {
97
107
  // const [result, latestSuccess, execute] = make(self)
@@ -125,7 +135,7 @@ export function useSafeQuery_<E, A>(
125
135
  // }
126
136
 
127
137
  // const swr = useSWRV<A, E>(key, () => execWithInterruption().then(_ => _?.body as any)) // Effect.runPromise(self.provide(Layers))
128
- const swr = useSWRV<A, E>(key, () => run.value(self).then((_) => _.body), config)
138
+ const swr = useSWRV<A, E>(key, () => run.value(self()).then((_) => _.body), config)
129
139
  const result = computed(() =>
130
140
  swrToQuery({ data: swr.data.value, error: swr.error.value, isValidating: swr.isValidating.value })
131
141
  ) // ref<QueryResult<E, A>>()
@@ -1,4 +1,4 @@
1
- import type { REST, Schema } from "@effect-app/prelude/schema"
1
+ import type { REST, Schema } from "@effect-app/schema"
2
2
  import type { ParsedQuery } from "query-string"
3
3
 
4
4
  export function getQueryParam(search: ParsedQuery, param: string) {
package/dist/form.d.ts ADDED
@@ -0,0 +1,52 @@
1
+ import { AST } from "@effect-app/schema";
2
+ import type { Schema } from "@effect-app/schema";
3
+ import type { Ref } from "vue";
4
+ export declare function convertIn(v: string | null, type?: "text" | "float" | "int"): string;
5
+ export declare function convertOutInt(v: string, type?: "text" | "float" | "int"): string | number | null;
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]>; };
8
+ export interface FieldMetadata {
9
+ minLength: number | undefined;
10
+ maxLength: number | undefined;
11
+ required: boolean;
12
+ }
13
+ declare const f: unique symbol;
14
+ declare abstract class PhantomTypeParameter<Identifier extends keyof any, InstantiatedType> {
15
+ protected abstract readonly _: {
16
+ readonly [NameP in Identifier]: (_: InstantiatedType) => InstantiatedType;
17
+ };
18
+ }
19
+ export interface FieldInfo<Tout> extends PhantomTypeParameter<typeof f, {
20
+ out: Tout;
21
+ }> {
22
+ rules: ((v: string) => boolean | string)[];
23
+ metadata: FieldMetadata;
24
+ type: "text" | "float" | "int";
25
+ }
26
+ export declare const translate: Ref<{
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;
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)[];
29
+ }>;
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
+ exclusiveMinimum?: number;
45
+ exclusiveMaximum?: number;
46
+ minLength?: number;
47
+ maxLength?: number;
48
+ required: boolean;
49
+ description?: string;
50
+ };
51
+ export {};
52
+ //# sourceMappingURL=form.d.ts.map
@@ -0,0 +1 @@
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,0CAmBzB;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;AA8HD,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,MAAM,CAAA;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;IACjB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB,CA2BA"}
package/dist/form.js ADDED
@@ -0,0 +1,184 @@
1
+ import * as tsplus_module_1 from "@effect/schema/Parser";
2
+ import * as tsplus_module_2 from "effect/Either";
3
+ import * as tsplus_module_3 from "@effect-app/core/Function";
4
+ import { AST, S } from "@effect-app/schema";
5
+ import { createIntl } from "@formatjs/intl";
6
+ import { capitalize, ref, watch } from "vue";
7
+ import * as JSONSchema from "@effect/schema/JSONSchema";
8
+ export function convertIn(v, type) {
9
+ return v === null ? "" : type === "text" ? v : `${v}`;
10
+ }
11
+ export function convertOutInt(v, type) {
12
+ v = v == null ? v : v.trim();
13
+ const c = v === "" ? null : type === "float" ? parseFloat(v) : type === "int" ? parseInt(v) : v;
14
+ return c;
15
+ }
16
+ export function convertOut(v, set, type) {
17
+ return set(convertOutInt(v, type));
18
+ }
19
+ export function buildFieldInfoFromFields(fields) {
20
+ let ast = fields.ast;
21
+ // todo: or look at from?
22
+ if (AST.isTransform(ast)) {
23
+ if (AST.isDeclaration(ast.to)) {
24
+ ast = ast.to.type;
25
+ }
26
+ }
27
+ if (!AST.isTypeLiteral(ast))
28
+ throw new Error("not a struct type");
29
+ return ast.propertySignatures.reduce((prev, cur) => {
30
+ ;
31
+ prev[cur.name] = buildFieldInfo(cur);
32
+ return prev;
33
+ }, {});
34
+ }
35
+ const f = Symbol();
36
+ class PhantomTypeParameter {
37
+ }
38
+ // type GetSchemaFromProp<T> = T extends Field<infer S, any, any, any> ? S
39
+ // : never
40
+ const defaultIntl = createIntl({ locale: "en" });
41
+ export const translate = ref(defaultIntl.formatMessage.bind(defaultIntl));
42
+ export const customSchemaErrors = ref(new Map());
43
+ function buildFieldInfo(property) {
44
+ const propertyKey = property.name;
45
+ const schema = S.make(property.type);
46
+ const metadata = getMetadataFromSchema(property.type); // TODO
47
+ const parse = tsplus_module_1.parseEither(schema);
48
+ const nullable = AST.isUnion(property.type) && property.type.types.includes(S.null.ast);
49
+ const realSelf = nullable && AST.isUnion(property.type)
50
+ ? property.type.types.filter((_) => _ !== S.null.ast)[0]
51
+ : property.type;
52
+ function renderError(e, v) {
53
+ const err = e.toString();
54
+ const custom = customSchemaErrors.value.get(realSelf);
55
+ return custom ? custom(err, e, v) : translate.value({ defaultMessage: "The entered value is not a valid {type}: {message}", id: "validation.not_a_valid" }, {
56
+ type: translate.value({
57
+ defaultMessage: capitalize(propertyKey.toString()),
58
+ id: `fieldNames.${String(propertyKey)}`
59
+ }),
60
+ message: metadata.description ? "expected " + metadata.description : err.slice(err.indexOf("Expected")) // TODO: this is not translated.
61
+ });
62
+ }
63
+ const stringRules = [
64
+ (v) => v === null
65
+ || metadata.minLength === undefined
66
+ || v.length >= metadata.minLength
67
+ || translate.value({
68
+ defaultMessage: "The field requires at least {minLength} characters",
69
+ id: "validation.string.minLength"
70
+ }, {
71
+ minLength: metadata.minLength
72
+ }),
73
+ (v) => v === null
74
+ || metadata.maxLength === undefined
75
+ || v.length <= metadata.maxLength
76
+ || translate.value({
77
+ defaultMessage: "The field cannot have more than {maxLength} characters",
78
+ id: "validation.string.maxLength"
79
+ }, {
80
+ maxLength: metadata.maxLength
81
+ })
82
+ ];
83
+ const numberRules = [
84
+ (v) => v === null
85
+ || (metadata.minimum === undefined && metadata.exclusiveMinimum === undefined)
86
+ || metadata.exclusiveMinimum !== undefined && v > metadata.exclusiveMinimum
87
+ || metadata.minimum !== undefined && v >= metadata.minimum
88
+ || translate.value({
89
+ defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
90
+ id: "validation.number.min"
91
+ }, {
92
+ isExclusive: metadata.exclusiveMinimum !== undefined,
93
+ minimum: metadata.exclusiveMinimum ?? metadata.minimum
94
+ }),
95
+ (v) => v === null
96
+ || (metadata.maximum === undefined && metadata.exclusiveMaximum === undefined)
97
+ || metadata.exclusiveMaximum !== undefined && v < metadata.exclusiveMaximum
98
+ || metadata.maximum !== undefined && v <= metadata.maximum
99
+ || translate.value({
100
+ defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
101
+ id: "validation.number.max"
102
+ }, {
103
+ isExclusive: metadata.exclusiveMaximum !== undefined,
104
+ maximum: metadata.exclusiveMaximum ?? metadata.maximum
105
+ })
106
+ ];
107
+ const parseRule = (v) => tsplus_module_3.pipe(parse(v), (_) => tsplus_module_2.match(_, {
108
+ onLeft: (_) => renderError(_, v),
109
+ onRight: () => true
110
+ }));
111
+ const rules = [
112
+ ...(metadata.type === "text"
113
+ ? stringRules
114
+ : numberRules),
115
+ parseRule
116
+ ];
117
+ const info = {
118
+ type: metadata.type,
119
+ rules: [
120
+ (v) => !metadata.required
121
+ || v !== ""
122
+ || translate.value({ defaultMessage: "The field cannot be empty", id: "validation.empty" }),
123
+ (v) => {
124
+ const converted = convertOutInt(v, metadata.type);
125
+ for (const r of rules) {
126
+ const res = r(converted);
127
+ if (res !== true) {
128
+ return res;
129
+ }
130
+ }
131
+ return true;
132
+ }
133
+ ],
134
+ metadata
135
+ };
136
+ return info;
137
+ }
138
+ export const buildFormFromSchema = (s, state, onSubmit) => {
139
+ const fields = buildFieldInfoFromFields(s);
140
+ const parse = tsplus_module_1.parseSync(s);
141
+ const isDirty = ref(false);
142
+ const isValid = ref(true);
143
+ const submit1 = (onSubmit) => async (e) => {
144
+ const r = await e;
145
+ if (!r.valid)
146
+ return;
147
+ return onSubmit(parse(state.value));
148
+ };
149
+ const submit = submit1(onSubmit);
150
+ watch(state, (v) => {
151
+ // TODO: do better
152
+ isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value);
153
+ }, { deep: true });
154
+ const submitFromState = () => submit(Promise.resolve({ valid: isValid.value }));
155
+ return { fields, submit, submitFromState, isDirty, isValid };
156
+ };
157
+ export function getMetadataFromSchema(ast) {
158
+ const nullable = AST.isUnion(ast) && ast.types.includes(S.null.ast);
159
+ const realSelf = nullable && AST.isUnion(ast)
160
+ ? ast.types.filter((_) => _ !== S.null.ast)[0]
161
+ : ast;
162
+ let jschema;
163
+ try {
164
+ jschema = JSONSchema.to(S.make(realSelf));
165
+ }
166
+ catch (err) {
167
+ jschema = {};
168
+ console.warn("error getting jsonschema from ", err, ast);
169
+ }
170
+ const isNumber = jschema.type === "number" || jschema.type === "integer";
171
+ const isInt = jschema.type === "integer";
172
+ return {
173
+ type: isInt ? "int" : isNumber ? "float" : "text",
174
+ minimum: jschema.minimum,
175
+ exclusiveMinimum: jschema.exclusiveMinimum,
176
+ maximum: jschema.maximum,
177
+ exclusiveMaximum: jschema.exclusiveMaximum,
178
+ minLength: jschema.minLength,
179
+ maxLength: jschema.maxLength,
180
+ description: jschema.description,
181
+ required: !nullable
182
+ };
183
+ }
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL19zcmMvZm9ybS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxNQUFNLG9CQUFvQixDQUFBO0FBRTNDLE9BQU8sRUFBRSxVQUFVLEVBQXVCLE1BQU0sZ0JBQWdCLENBQUE7QUFFaEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsS0FBSyxFQUFFLE1BQU0sS0FBSyxDQUFBO0FBRTVDLE9BQU8sS0FBSyxVQUFVLE1BQU0sMkJBQTJCLENBQUE7QUFHdkQsTUFBTSxVQUFVLFNBQVMsQ0FBQyxDQUFnQixFQUFFLElBQStCO0lBQ3pFLE9BQU8sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUE7QUFDdkQsQ0FBQztBQUVELE1BQU0sVUFBVSxhQUFhLENBQUMsQ0FBUyxFQUFFLElBQStCO0lBQ3RFLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0YsT0FBTyxDQUFDLENBQUE7QUFDVixDQUFDO0FBRUQsTUFBTSxVQUFVLFVBQVUsQ0FBQyxDQUFTLEVBQUUsR0FBZ0MsRUFB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
package/dist/hooks.d.ts CHANGED
@@ -8,7 +8,7 @@ import { Done, Initial, Loading } from "@effect-app/prelude/client";
8
8
  import type { ApiConfig, FetchResponse } from "@effect-app/prelude/client";
9
9
  import * as swrv from "swrv";
10
10
  import type { fetcherFn, IResponse } from "swrv/dist/types.js";
11
- import type { Ref } from "vue";
11
+ import type { ComputedRef, Ref } from "vue";
12
12
  export { isFailed, isInitializing, isSuccess } from "@effect-app/prelude/client";
13
13
  type MutateType = {
14
14
  <Data>(key: string, res: Data | Promise<Data>, cache?: swrv.SWRVCache<Omit<IResponse<any, any>, "mutate">>, ttl?: number): Promise<{
@@ -32,16 +32,17 @@ export declare function useMutateWithArg<Arg, E, A>(self: ((arg: Arg) => Effect<
32
32
  error: any;
33
33
  isValidating: any;
34
34
  }>;
35
+ export type WatchSource<T = any> = Ref<T> | ComputedRef<T> | (() => T);
35
36
  export declare function useSafeQueryWithArg<Arg, E, A>(self: ((arg: Arg) => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>) & {
36
37
  mapPath: (arg: Arg) => string;
37
- }, arg: Arg, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [import("vue").ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, import("vue").ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
38
+ }, arg: Arg | WatchSource<Arg>, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
38
39
  export declare function useSafeQuery<E, A>(self: Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>> & {
39
40
  mapPath: string;
40
- }, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [import("vue").ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, import("vue").ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
41
- export declare function useSafeQueryWithArg_<Arg, E, A>(self: (arg: Arg) => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>, mapPath: (arg: Arg) => string, arg: Arg, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [import("vue").ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, import("vue").ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
42
- export declare function useSafeQuery_<E, A>(key: string, self: Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [import("vue").ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, import("vue").ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
43
- export declare function useSafeQueryLegacy<E, A>(self: Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>): readonly [import("vue").ShallowRef<import("@effect-app/prelude/client").QueryResult<E, A>>, import("vue").ComputedRef<A | undefined>, () => Promise<void | import("effect/Exit").Exit<never, Initial | Loading | import("@effect-app/prelude/client").Refreshing<E, A> | Done<E, A>>>];
44
- export declare function make<R, E, A>(self: Effect<R, E, FetchResponse<A>>): readonly [import("vue").ShallowRef<import("@effect-app/prelude/client").QueryResult<E, A>>, import("vue").ComputedRef<A | undefined>, import("effect/Effect").Effect<R, never, Initial | Loading | import("@effect-app/prelude/client").Refreshing<E, A> | Done<E, A>>];
41
+ }, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
42
+ export declare function useSafeQueryWithArg_<Arg, E, A>(self: (arg: Arg) => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>, mapPath: (arg: Arg) => string, arg: Arg | WatchSource<Arg>, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
43
+ export declare function useSafeQuery_<E, A>(key: string | WatchSource<string>, self: () => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>, config?: swrv.IConfig<A, fetcherFn<A>> | undefined): readonly [ComputedRef<import("@effect-app/prelude/client").QueryResult<E, A>>, ComputedRef<A | undefined>, () => Promise<void>, IResponse<A, E>];
44
+ export declare function useSafeQueryLegacy<E, A>(self: Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>): readonly [import("vue").ShallowRef<import("@effect-app/prelude/client").QueryResult<E, A>>, ComputedRef<A | undefined>, () => Promise<void | import("effect/Exit").Exit<never, Initial | Loading | import("@effect-app/prelude/client").Refreshing<E, A> | Done<E, A>>>];
45
+ export declare function make<R, E, A>(self: Effect<R, E, FetchResponse<A>>): readonly [import("vue").ShallowRef<import("@effect-app/prelude/client").QueryResult<E, A>>, ComputedRef<A | undefined>, import("effect/Effect").Effect<R, never, Initial | Loading | import("@effect-app/prelude/client").Refreshing<E, A> | Done<E, A>>];
45
46
  export interface MutationInitial {
46
47
  readonly _tag: "Initial";
47
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../_src/hooks.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../_src/hooks.ts"],"names":[],"mappings":"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"}