@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.
- package/CHANGELOG.md +329 -0
- package/_cjs/form.cjs +180 -0
- package/_cjs/form.cjs.map +1 -0
- package/_cjs/hooks.cjs +9 -3
- package/_cjs/hooks.cjs.map +1 -1
- package/_src/{form.ts.bak → form.ts} +100 -47
- package/_src/hooks.ts +18 -8
- package/_src/routeParams.ts +1 -1
- package/dist/form.d.ts +52 -0
- package/dist/form.d.ts.map +1 -0
- package/dist/form.js +184 -0
- package/dist/hooks.d.ts +8 -7
- package/dist/hooks.d.ts.map +1 -1
- package/dist/hooks.js +12 -4
- package/dist/routeParams.d.ts +1 -1
- package/dist/routeParams.d.ts.map +1 -1
- package/package.json +19 -9
|
@@ -1,11 +1,12 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import type {
|
|
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<
|
|
24
|
-
fields:
|
|
24
|
+
export function buildFieldInfoFromFields<From extends Record<PropertyKey, any>, To extends Record<PropertyKey, any>>(
|
|
25
|
+
fields: Schema<From, To>
|
|
25
26
|
) {
|
|
26
|
-
|
|
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(
|
|
37
|
+
;(prev as any)[cur.name] = buildFieldInfo(cur)
|
|
29
38
|
return prev
|
|
30
39
|
},
|
|
31
40
|
{} as {
|
|
32
|
-
[K in keyof
|
|
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<
|
|
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
|
-
|
|
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<
|
|
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
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
const
|
|
75
|
-
const
|
|
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(
|
|
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:
|
|
81
|
-
const err =
|
|
82
|
-
const custom = customSchemaErrors.value.get(
|
|
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(
|
|
89
|
-
id: `fieldNames.${String(
|
|
96
|
+
defaultMessage: capitalize(propertyKey.toString()),
|
|
97
|
+
id: `fieldNames.${String(propertyKey)}`
|
|
90
98
|
}),
|
|
91
|
-
message: err.slice(err.indexOf("
|
|
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.
|
|
124
|
-
||
|
|
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
|
-
}, {
|
|
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.
|
|
133
|
-
||
|
|
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
|
-
}, {
|
|
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: (
|
|
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
|
-
|
|
201
|
+
From extends Record<PropertyKey, any>,
|
|
202
|
+
To extends Record<PropertyKey, any>,
|
|
191
203
|
OnSubmitA
|
|
192
204
|
>(
|
|
193
205
|
s: Schema<
|
|
194
|
-
|
|
195
|
-
|
|
206
|
+
From,
|
|
207
|
+
To
|
|
196
208
|
>,
|
|
197
|
-
state: Ref<
|
|
198
|
-
onSubmit: (a:
|
|
209
|
+
state: Ref<From>,
|
|
210
|
+
onSubmit: (a: To) => Promise<OnSubmitA>
|
|
199
211
|
) => {
|
|
200
|
-
const fields = buildFieldInfoFromFields(s
|
|
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
|
-
|
|
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>>()
|
package/_src/routeParams.ts
CHANGED
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
|
|
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 [
|
|
41
|
-
export declare function useSafeQueryWithArg_<Arg, E, A>(self: (arg: Arg) => Effect<ApiConfig | HttpClient.Default, E, FetchResponse<A>>, mapPath: (arg: Arg) => string, arg: Arg
|
|
42
|
-
export declare function useSafeQuery_<E, A>(key: string
|
|
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>>,
|
|
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>>,
|
|
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
|
}
|
package/dist/hooks.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../_src/hooks.ts"],"names":[],"mappings":";;;;;;AAAA,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAE1E,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,SAAS,EAAQ,SAAS,EAAE,MAAM,oBAAoB,CAAA;AACpE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../_src/hooks.ts"],"names":[],"mappings":"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"}
|