@effect-app/vue 0.87.0-next.8 → 0.87.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/_cjs/hooks.cjs CHANGED
@@ -73,10 +73,16 @@ function useSafeQueryWithArg(self, arg, config) {
73
73
  return useSafeQueryWithArg_(self, self.mapPath, arg, config);
74
74
  }
75
75
  function useSafeQuery(self, config) {
76
- return useSafeQuery_(self.mapPath, self, config);
76
+ return useSafeQuery_(self.mapPath, () => self, config);
77
77
  }
78
78
  function useSafeQueryWithArg_(self, mapPath, arg, config) {
79
- return useSafeQuery_(mapPath(arg), self(arg), config);
79
+ const arr = arg;
80
+ const r = typeof arr === "function" ? {
81
+ get value() {
82
+ return arr();
83
+ }
84
+ } : (0, _vue.ref)(arg);
85
+ return useSafeQuery_((0, _vue.computed)(() => mapPath(r.value)), () => self(r.value), config);
80
86
  }
81
87
  function useSafeQuery_(key, self, config) {
82
88
  // const [result, latestSuccess, execute] = make(self)
@@ -107,7 +113,7 @@ function useSafeQuery_(key, self, config) {
107
113
  // })
108
114
  // }
109
115
  // const swr = useSWRV<A, E>(key, () => execWithInterruption().then(_ => _?.body as any)) // Effect.runPromise(self.provide(Layers))
110
- const swr = useSWRV(key, () => _internal.run.value(self).then(_ => _.body), config);
116
+ const swr = useSWRV(key, () => _internal.run.value(self()).then(_ => _.body), config);
111
117
  const result = (0, _vue.computed)(() => swrToQuery({
112
118
  data: swr.data.value,
113
119
  error: swr.error.value,
@@ -1 +1 @@
1
- {"version":3,"file":"hooks.cjs","names":["swrv","_interopRequireWildcard","require","_vue","_internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","useSWRV","mutate","exports","swrToQuery","error","isValidating","tsplus_module_1","Refreshing","fail","data","Done","undefined","succeed","Loading","Initial","useMutate","self","fn","run","value","then","_","body","mapPath","useMutateWithArg","arg","useSafeQueryWithArg","config","useSafeQueryWithArg_","useSafeQuery","useSafeQuery_","key","swr","result","computed","latestSuccess","tsplus_module_2","isSuccess","tsplus_module_3","isRight","current","right","tsplus_module_4","isSome","previous","tsplus_module_5","tuple","useSafeQueryLegacy","execute","make","sem","tsplus_module_6","unsafeMakeSemaphore","withPermit","withPermits","fib","runNew","tap","fork","newFiber","sync","ex","flatMap","suspend","zipRight","tsplus_module_7","interrupt","pipe","await","exec","catch","err","JSON","stringify","includes","shallowRef","isInitializing","queryResult","map","hasValue","useMutation","state","ref","_tag","handleExit","exit","tsplus_module_8","tsplus_module_9","failureOption","cause","left","died","dieOption","tsplus_module_10","getOrUndefined","interrupted","interruptOption","InterruptedException","Error","fst","snd","effect","abortSignal","f","cancel","addEventListener","console","join"],"sources":["../_src/hooks.ts"],"sourcesContent":[null],"mappings":"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"}
1
+ {"version":3,"file":"hooks.cjs","names":["swrv","_interopRequireWildcard","require","_vue","_internal","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","prototype","hasOwnProperty","call","i","set","useSWRV","mutate","exports","swrToQuery","error","isValidating","tsplus_module_1","Refreshing","fail","data","Done","undefined","succeed","Loading","Initial","useMutate","self","fn","run","value","then","_","body","mapPath","useMutateWithArg","arg","useSafeQueryWithArg","config","useSafeQueryWithArg_","useSafeQuery","useSafeQuery_","arr","ref","computed","key","swr","result","latestSuccess","tsplus_module_2","isSuccess","tsplus_module_3","isRight","current","right","tsplus_module_4","isSome","previous","tsplus_module_5","tuple","useSafeQueryLegacy","execute","make","sem","tsplus_module_6","unsafeMakeSemaphore","withPermit","withPermits","fib","runNew","tap","fork","newFiber","sync","ex","flatMap","suspend","zipRight","tsplus_module_7","interrupt","pipe","await","exec","catch","err","JSON","stringify","includes","shallowRef","isInitializing","queryResult","map","hasValue","useMutation","state","_tag","handleExit","exit","tsplus_module_8","tsplus_module_9","failureOption","cause","left","died","dieOption","tsplus_module_10","getOrUndefined","interrupted","interruptOption","InterruptedException","Error","fst","snd","effect","abortSignal","f","cancel","addEventListener","console","join"],"sources":["../_src/hooks.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,27 @@ 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
+ 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(
36
+ (prev, cur) => {
37
+ ;(prev as any)[cur.name] = buildFieldInfo(cur)
38
+ return prev
39
+ },
40
+ {} as {
41
+ [K in keyof To]: FieldInfo<To[K]>
42
+ }
43
+ )
44
+ }
35
45
 
36
46
  export interface FieldMetadata {
37
47
  minLength: number | undefined
@@ -48,7 +58,7 @@ abstract class PhantomTypeParameter<
48
58
  readonly [NameP in Identifier]: (_: InstantiatedType) => InstantiatedType
49
59
  }
50
60
  }
51
- export interface FieldInfo<Tin, Tout> extends PhantomTypeParameter<typeof f, { in: Tin; out: Tout }> {
61
+ export interface FieldInfo<Tout> extends PhantomTypeParameter<typeof f, { out: Tout }> {
52
62
  rules: ((v: string) => boolean | string)[]
53
63
  metadata: FieldMetadata
54
64
  type: "text" | "float" | "int" // todo; multi-line vs single line text
@@ -59,162 +69,209 @@ export interface FieldInfo<Tin, Tout> extends PhantomTypeParameter<typeof f, { i
59
69
 
60
70
  const defaultIntl = createIntl({ locale: "en" })
61
71
  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>>(
72
+ export const customSchemaErrors = ref<Map<AST.AST, (message: string, e: unknown, v: unknown) => string>>(
63
73
  new Map()
64
74
  )
65
75
 
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
- // }
76
+ function buildFieldInfo(
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
82
+ const parse = schema.parseEither
83
+
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
88
+
89
+ function renderError(e: ParseError, v: unknown) {
90
+ const err = e.toString()
91
+ const custom = customSchemaErrors.value.get(realSelf)
92
+ return custom ? custom(err, e, v) : translate.value(
93
+ { defaultMessage: "The entered value is not a valid {type}: {message}", id: "validation.not_a_valid" },
94
+ {
95
+ type: translate.value({
96
+ defaultMessage: capitalize(propertyKey.toString()),
97
+ id: `fieldNames.${String(propertyKey)}`
98
+ }),
99
+ message: metadata.description ? "expected " + metadata.description : err.slice(err.indexOf("Expected")) // TODO: this is not translated.
100
+ }
101
+ )
102
+ }
103
+
104
+ const stringRules = [
105
+ (v: string | null) =>
106
+ v === null
107
+ || metadata.minLength === undefined
108
+ || v.length >= metadata.minLength
109
+ || translate.value({
110
+ defaultMessage: "The field requires at least {minLength} characters",
111
+ id: "validation.string.minLength"
112
+ }, {
113
+ minLength: metadata.minLength
114
+ }),
115
+ (v: string | null) =>
116
+ v === null
117
+ || metadata.maxLength === undefined
118
+ || v.length <= metadata.maxLength
119
+ || translate.value({
120
+ defaultMessage: "The field cannot have more than {maxLength} characters",
121
+ id: "validation.string.maxLength"
122
+ }, {
123
+ maxLength: metadata.maxLength
124
+ })
125
+ ]
126
+
127
+ const numberRules = [
128
+ (v: number | null) =>
129
+ v === null
130
+ || (metadata.minimum === undefined && metadata.exclusiveMinimum === undefined)
131
+ || metadata.exclusiveMinimum !== undefined && v > metadata.exclusiveMinimum
132
+ || metadata.minimum !== undefined && v >= metadata.minimum
133
+ || translate.value({
134
+ defaultMessage: "The value should be {isExclusive, select, true {larger than} other {at least}} {minimum}",
135
+ id: "validation.number.min"
136
+ }, {
137
+ isExclusive: metadata.exclusiveMinimum !== undefined,
138
+ minimum: metadata.exclusiveMinimum ?? metadata.minimum
139
+ }),
140
+ (v: number | null) =>
141
+ v === null
142
+ || (metadata.maximum === undefined && metadata.exclusiveMaximum === undefined)
143
+ || metadata.exclusiveMaximum !== undefined && v < metadata.exclusiveMaximum
144
+ || metadata.maximum !== undefined && v <= metadata.maximum
145
+ || translate.value({
146
+ defaultMessage: "The value should be {isExclusive, select, true {smaller than} other {at most}} {maximum}",
147
+ id: "validation.number.max"
148
+ }, {
149
+ isExclusive: metadata.exclusiveMaximum !== undefined,
150
+ maximum: metadata.exclusiveMaximum ?? metadata.maximum
151
+ })
152
+ ]
153
+
154
+ const parseRule = (v: unknown) =>
155
+ pipe(
156
+ parse(v),
157
+ (_) =>
158
+ _.match(
159
+ {
160
+ onLeft: (_) => renderError(_, v),
161
+ onRight: () => true
162
+ }
163
+ )
164
+ )
165
+
166
+ type UnknownRule = (v: unknown) => boolean | string
167
+ const rules: UnknownRule[] = [
168
+ ...(metadata.type === "text"
169
+ ? stringRules
170
+ : numberRules) as UnknownRule[],
171
+ parseRule as UnknownRule
172
+ ]
173
+
174
+ const info = {
175
+ type: metadata.type,
176
+ rules: [
177
+ (v: string) =>
178
+ !metadata.required
179
+ || v !== ""
180
+ || translate.value({ defaultMessage: "The field cannot be empty", id: "validation.empty" }),
181
+ (v: string) => {
182
+ const converted = convertOutInt(v, metadata.type)
183
+
184
+ for (const r of rules) {
185
+ const res = r(converted)
186
+ if (res !== true) {
187
+ return res
188
+ }
189
+ }
190
+
191
+ return true
192
+ }
193
+ ],
194
+ metadata
195
+ }
196
+
197
+ return info as any
198
+ }
199
+
200
+ export const buildFormFromSchema = <
201
+ From extends Record<PropertyKey, any>,
202
+ To extends Record<PropertyKey, any>,
203
+ OnSubmitA
204
+ >(
205
+ s: Schema<
206
+ From,
207
+ To
208
+ >,
209
+ state: Ref<From>,
210
+ onSubmit: (a: To) => Promise<OnSubmitA>
211
+ ) => {
212
+ const fields = buildFieldInfoFromFields(s)
213
+ const parse = s.decodeSync
214
+ const isDirty = ref(false)
215
+ const isValid = ref(true)
216
+
217
+ const submit1 = <A>(onSubmit: (a: To) => Promise<A>) => async <T extends Promise<{ valid: boolean }>>(e: T) => {
218
+ const r = await e
219
+ if (!r.valid) return
220
+ return onSubmit(parse(state.value))
221
+ }
222
+ const submit = submit1(onSubmit)
223
+
224
+ watch(
225
+ state,
226
+ (v) => {
227
+ // TODO: do better
228
+ isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value)
229
+ },
230
+ { deep: true }
231
+ )
232
+
233
+ const submitFromState = () => submit(Promise.resolve({ valid: isValid.value }))
234
+
235
+ return { fields, submit, submitFromState, isDirty, isValid }
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>>()
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,37 @@ 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
+ exclusiveMinimum?: number;
45
+ exclusiveMaximum?: number;
46
+ minLength?: number;
47
+ maxLength?: number;
48
+ required: boolean;
49
+ description?: string;
50
+ };
29
51
  export {};
30
52
  //# sourceMappingURL=form.d.ts.map