@effect-app/vue 2.55.9 → 2.56.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/CHANGELOG.md +17 -0
- package/dist/experimental/commander.d.ts +1 -1
- package/dist/experimental/commander.d.ts.map +1 -1
- package/dist/experimental/commander.js +9 -9
- package/dist/experimental/{makeExperimental.d.ts → makeUseCommand.d.ts} +2 -2
- package/dist/experimental/makeUseCommand.d.ts.map +1 -0
- package/dist/experimental/makeUseCommand.js +8 -0
- package/dist/form.d.ts +2 -28
- package/dist/form.d.ts.map +1 -1
- package/dist/form.js +3 -39
- package/dist/makeClient.d.ts +130 -47
- package/dist/makeClient.d.ts.map +1 -1
- package/dist/makeClient.js +310 -230
- package/dist/runtime.d.ts +4 -43
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +8 -28
- package/package.json +4 -4
- package/src/experimental/commander.ts +19 -15
- package/src/experimental/{makeExperimental.ts → makeUseCommand.ts} +1 -1
- package/src/form.ts +2 -60
- package/src/makeClient.ts +684 -597
- package/src/runtime.ts +7 -28
- package/test/dist/stubs.d.ts.map +1 -1
- package/test/dist/stubs.js +3 -3
- package/test/stubs.ts +2 -2
- package/dist/experimental/makeExperimental.d.ts.map +0 -1
- package/dist/experimental/makeExperimental.js +0 -8
package/dist/runtime.d.ts
CHANGED
|
@@ -1,45 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ManagedRuntime } from "effect";
|
|
2
2
|
import { Effect, Layer } from "effect-app";
|
|
3
|
-
export declare function makeAppRuntime<A, E
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
readonly signal?: AbortSignal;
|
|
7
|
-
} | undefined) => Promise<A_1>;
|
|
8
|
-
runPromiseExit: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: {
|
|
9
|
-
readonly signal?: AbortSignal;
|
|
10
|
-
} | undefined) => Promise<Exit.Exit<A_1, E_1>>;
|
|
11
|
-
runSync: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>) => A_1;
|
|
12
|
-
runSyncExit: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>) => Exit.Exit<A_1, E_1>;
|
|
13
|
-
runFork: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: Runtime.RunForkOptions | undefined) => import("effect/Fiber").RuntimeFiber<A_1, E_1>;
|
|
14
|
-
};
|
|
15
|
-
clean: Effect.Effect<void, never, never>;
|
|
16
|
-
}, E, R>;
|
|
17
|
-
export declare function initializeSync<A, E>(layer: Layer.Layer<A, E, never>): {
|
|
18
|
-
runtime: Runtime.Runtime<A> & {
|
|
19
|
-
runPromise: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: {
|
|
20
|
-
readonly signal?: AbortSignal;
|
|
21
|
-
} | undefined) => Promise<A_1>;
|
|
22
|
-
runPromiseExit: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: {
|
|
23
|
-
readonly signal?: AbortSignal;
|
|
24
|
-
} | undefined) => Promise<Exit.Exit<A_1, E_1>>;
|
|
25
|
-
runSync: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>) => A_1;
|
|
26
|
-
runSyncExit: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>) => Exit.Exit<A_1, E_1>;
|
|
27
|
-
runFork: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: Runtime.RunForkOptions | undefined) => import("effect/Fiber").RuntimeFiber<A_1, E_1>;
|
|
28
|
-
};
|
|
29
|
-
clean: () => void;
|
|
30
|
-
};
|
|
31
|
-
export declare function initializeAsync<A, E>(layer: Layer.Layer<A, E, never>): Promise<{
|
|
32
|
-
runtime: Runtime.Runtime<A> & {
|
|
33
|
-
runPromise: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: {
|
|
34
|
-
readonly signal?: AbortSignal;
|
|
35
|
-
} | undefined) => Promise<A_1>;
|
|
36
|
-
runPromiseExit: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: {
|
|
37
|
-
readonly signal?: AbortSignal;
|
|
38
|
-
} | undefined) => Promise<Exit.Exit<A_1, E_1>>;
|
|
39
|
-
runSync: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>) => A_1;
|
|
40
|
-
runSyncExit: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>) => Exit.Exit<A_1, E_1>;
|
|
41
|
-
runFork: <A_1, E_1>(effect: Effect.Effect<A_1, E_1, A>, options?: Runtime.RunForkOptions | undefined) => import("effect/Fiber").RuntimeFiber<A_1, E_1>;
|
|
42
|
-
};
|
|
43
|
-
clean: () => Promise<void>;
|
|
44
|
-
}>;
|
|
3
|
+
export declare function makeAppRuntime<A, E>(layer: Layer.Layer<A, E>): Effect.Effect<ManagedRuntime.ManagedRuntime<A, never>, E, never>;
|
|
4
|
+
export declare function initializeSync<A, E>(layer: Layer.Layer<A, E, never>): ManagedRuntime.ManagedRuntime<A, never>;
|
|
5
|
+
export declare function initializeAsync<A, E>(layer: Layer.Layer<A, E, never>): Promise<ManagedRuntime.ManagedRuntime<A, never>>;
|
|
45
6
|
//# sourceMappingURL=runtime.d.ts.map
|
package/dist/runtime.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAU,MAAM,YAAY,CAAA;AAElD,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,oEAS5D;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,2CAGnE;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,CAAC,oDAGpE"}
|
package/dist/runtime.js
CHANGED
|
@@ -1,39 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ManagedRuntime } from "effect";
|
|
2
2
|
import { Effect, Layer, Logger } from "effect-app";
|
|
3
|
-
import * as Scope from "effect/Scope";
|
|
4
3
|
export function makeAppRuntime(layer) {
|
|
5
4
|
return Effect.gen(function* () {
|
|
6
5
|
layer = layer.pipe(Layer.provide(Logger.replace(Logger.defaultLogger, Logger.withSpanAnnotations(Logger.prettyLogger()))));
|
|
7
|
-
const
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
return {
|
|
11
|
-
runtime: Object.assign(runtime, {
|
|
12
|
-
runPromise: Runtime.runPromise(runtime),
|
|
13
|
-
runPromiseExit: Runtime.runPromiseExit(runtime),
|
|
14
|
-
runSync: Runtime.runSync(runtime),
|
|
15
|
-
runSyncExit: Runtime.runSyncExit(runtime),
|
|
16
|
-
runFork: Runtime.runFork(runtime)
|
|
17
|
-
}),
|
|
18
|
-
clean: Scope.close(scope, Exit.void)
|
|
19
|
-
};
|
|
6
|
+
const mrt = ManagedRuntime.make(layer);
|
|
7
|
+
yield* mrt.runtimeEffect;
|
|
8
|
+
return mrt; // as we initialise here, there is no more error left.
|
|
20
9
|
});
|
|
21
10
|
}
|
|
22
11
|
export function initializeSync(layer) {
|
|
23
|
-
const
|
|
24
|
-
return
|
|
25
|
-
runtime,
|
|
26
|
-
clean: () => Effect.runSync(clean)
|
|
27
|
-
};
|
|
12
|
+
const runtime = Effect.runSync(makeAppRuntime(layer));
|
|
13
|
+
return runtime;
|
|
28
14
|
}
|
|
29
15
|
export function initializeAsync(layer) {
|
|
30
16
|
return Effect
|
|
31
|
-
.runPromise(makeAppRuntime(layer))
|
|
32
|
-
.then(({ clean, runtime }) => {
|
|
33
|
-
return {
|
|
34
|
-
runtime,
|
|
35
|
-
clean: () => Effect.runPromise(clean)
|
|
36
|
-
};
|
|
37
|
-
});
|
|
17
|
+
.runPromise(makeAppRuntime(layer));
|
|
38
18
|
}
|
|
39
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxRQUFRLENBQUE7QUFDdkMsT0FBTyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRWxELE1BQU0sVUFBVSxjQUFjLENBQU8sS0FBd0I7SUFDM0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQztRQUN6QixLQUFLLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDaEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUUsTUFBTSxDQUFDLG1CQUFtQixDQUFDLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FDdkcsQ0FBQTtRQUNELE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUE7UUFDdEMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQTtRQUN4QixPQUFPLEdBQThDLENBQUEsQ0FBQyxzREFBc0Q7SUFDOUcsQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBTyxLQUErQjtJQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3JELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFPLEtBQStCO0lBQ25FLE9BQU8sTUFBTTtTQUNWLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxDQUFDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/vue",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.56.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"homepage": "https://github.com/effect-ts-app/libs/tree/main/packages/vue",
|
|
@@ -60,9 +60,9 @@
|
|
|
60
60
|
"types": "./dist/experimental/intl.d.ts",
|
|
61
61
|
"default": "./dist/experimental/intl.js"
|
|
62
62
|
},
|
|
63
|
-
"./experimental/
|
|
64
|
-
"types": "./dist/experimental/
|
|
65
|
-
"default": "./dist/experimental/
|
|
63
|
+
"./experimental/makeUseCommand": {
|
|
64
|
+
"types": "./dist/experimental/makeUseCommand.d.ts",
|
|
65
|
+
"default": "./dist/experimental/makeUseCommand.js"
|
|
66
66
|
},
|
|
67
67
|
"./experimental/toast": {
|
|
68
68
|
"types": "./dist/experimental/toast.d.ts",
|
|
@@ -602,7 +602,9 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
602
602
|
|
|
603
603
|
return Effect.currentSpan.pipe(
|
|
604
604
|
Effect.option,
|
|
605
|
-
Effect.map((span) =>
|
|
605
|
+
Effect.map((span) =>
|
|
606
|
+
runFork(Option.isSome(span) ? command.pipe(Effect.withParentSpan(span.value)) : command)
|
|
607
|
+
)
|
|
606
608
|
)
|
|
607
609
|
}, { action })
|
|
608
610
|
|
|
@@ -782,16 +784,8 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
782
784
|
self: Effect.Effect<A, E, R>
|
|
783
785
|
) =>
|
|
784
786
|
Effect.gen(function*() {
|
|
785
|
-
const
|
|
787
|
+
const cc = yield* CommandContext
|
|
786
788
|
|
|
787
|
-
const defaultWarnMessage = intl.formatMessage(
|
|
788
|
-
{ id: "handle.with_warnings" },
|
|
789
|
-
{ action }
|
|
790
|
-
)
|
|
791
|
-
const defaultErrorMessage = intl.formatMessage(
|
|
792
|
-
{ id: "handle.with_errors" },
|
|
793
|
-
{ action }
|
|
794
|
-
)
|
|
795
789
|
function renderError(e: E): string {
|
|
796
790
|
if (options?.errorRenderer) {
|
|
797
791
|
const m = options.errorRenderer(e)
|
|
@@ -826,19 +820,19 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
826
820
|
withToast({
|
|
827
821
|
onWaiting: options?.onWaiting === null ? null : intl.formatMessage(
|
|
828
822
|
{ id: "handle.waiting" },
|
|
829
|
-
{ action }
|
|
823
|
+
{ action: cc.action }
|
|
830
824
|
),
|
|
831
825
|
onSuccess: options?.onSuccess === null
|
|
832
826
|
? null
|
|
833
827
|
: (a) =>
|
|
834
|
-
intl.formatMessage({ id: "handle.success" }, { action })
|
|
828
|
+
intl.formatMessage({ id: "handle.success" }, { action: cc.action })
|
|
835
829
|
+ (S.is(OperationSuccess)(a) && a.message ? "\n" + a.message : ""),
|
|
836
830
|
onFailure: Option.match({
|
|
837
831
|
onNone: () =>
|
|
838
832
|
intl.formatMessage(
|
|
839
833
|
{ id: "handle.unexpected_error2" },
|
|
840
834
|
{
|
|
841
|
-
action,
|
|
835
|
+
action: cc.action,
|
|
842
836
|
error: "" // TODO consider again Cause.pretty(cause), // will be reported to Sentry/Otel anyway.. and we shouldn't bother users with error dumps?
|
|
843
837
|
}
|
|
844
838
|
),
|
|
@@ -846,9 +840,19 @@ export class Commander extends Effect.Service<Commander>()("Commander", {
|
|
|
846
840
|
S.is(OperationFailure)(e)
|
|
847
841
|
? {
|
|
848
842
|
level: "warn",
|
|
849
|
-
message:
|
|
843
|
+
message: intl.formatMessage(
|
|
844
|
+
{ id: "handle.with_warnings" },
|
|
845
|
+
{ action: cc.action }
|
|
846
|
+
) + e.message
|
|
847
|
+
? "\n" + e.message
|
|
848
|
+
: ""
|
|
850
849
|
}
|
|
851
|
-
: `${
|
|
850
|
+
: `${
|
|
851
|
+
intl.formatMessage(
|
|
852
|
+
{ id: "handle.with_errors" },
|
|
853
|
+
{ action: cc.action }
|
|
854
|
+
)
|
|
855
|
+
}:\n` + renderError(e)
|
|
852
856
|
})
|
|
853
857
|
})
|
|
854
858
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Effect } from "effect-app"
|
|
2
2
|
import { Commander } from "./commander.js"
|
|
3
3
|
|
|
4
|
-
export const
|
|
4
|
+
export const makeUseCommand = Effect.fnUntraced(function*<R = never>() {
|
|
5
5
|
const cmndr = yield* Commander
|
|
6
6
|
const runtime = yield* Effect.runtime<R>()
|
|
7
7
|
|
package/src/form.ts
CHANGED
|
@@ -2,11 +2,11 @@ import { createIntl, type IntlFormatters } from "@formatjs/intl"
|
|
|
2
2
|
import * as JSONSchema from "effect/JSONSchema"
|
|
3
3
|
import type { ParseError } from "effect/ParseResult"
|
|
4
4
|
import type {} from "intl-messageformat"
|
|
5
|
-
import { Either, Option, pipe, S
|
|
5
|
+
import { Either, Option, pipe, S } from "effect-app"
|
|
6
6
|
import type { Schema } from "effect-app/Schema"
|
|
7
7
|
import type { Unbranded } from "effect-app/Schema/brand"
|
|
8
8
|
import type { IsUnion } from "effect-app/utils"
|
|
9
|
-
import { capitalize,
|
|
9
|
+
import { capitalize, ref } from "vue"
|
|
10
10
|
|
|
11
11
|
// type GetSchemaFromProp<T> = T extends Field<infer S, any, any, any> ? S
|
|
12
12
|
// : never
|
|
@@ -381,64 +381,6 @@ function buildFieldInfo(
|
|
|
381
381
|
return info as any
|
|
382
382
|
}
|
|
383
383
|
|
|
384
|
-
export const buildFormFromSchema = <
|
|
385
|
-
From extends Record<PropertyKey, any>,
|
|
386
|
-
To extends Record<PropertyKey, any>,
|
|
387
|
-
C extends Record<PropertyKey, any>,
|
|
388
|
-
OnSubmitA
|
|
389
|
-
>(
|
|
390
|
-
s:
|
|
391
|
-
& Schema<
|
|
392
|
-
To,
|
|
393
|
-
From,
|
|
394
|
-
never
|
|
395
|
-
>
|
|
396
|
-
& { new(c: C): any; extend: any; fields: S.Struct.Fields },
|
|
397
|
-
state: Ref<Omit<From, "_tag">>,
|
|
398
|
-
onSubmit: (a: To) => Promise<OnSubmitA>
|
|
399
|
-
) => {
|
|
400
|
-
const fields = buildFieldInfoFromFieldsRoot(s).fields
|
|
401
|
-
const parse = S.decodeUnknownSync<any, any>(S.Struct(Struct.omit(s.fields, "_tag")) as any)
|
|
402
|
-
const isDirty = ref(false)
|
|
403
|
-
const isValid = ref(true)
|
|
404
|
-
const isLoading = ref(false)
|
|
405
|
-
|
|
406
|
-
const submit1 = <A>(onSubmit: (a: To) => Promise<A>) => async <T extends Promise<{ valid: boolean }>>(e: T) => {
|
|
407
|
-
isLoading.value = true
|
|
408
|
-
try {
|
|
409
|
-
const r = await e
|
|
410
|
-
if (!r.valid) return
|
|
411
|
-
return onSubmit(new s(parse(state.value)))
|
|
412
|
-
} finally {
|
|
413
|
-
isLoading.value = false
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
const submit = submit1(onSubmit)
|
|
417
|
-
|
|
418
|
-
watch(
|
|
419
|
-
state,
|
|
420
|
-
(v) => {
|
|
421
|
-
// TODO: do better
|
|
422
|
-
isDirty.value = JSON.stringify(v) !== JSON.stringify(state.value)
|
|
423
|
-
},
|
|
424
|
-
{ deep: true }
|
|
425
|
-
)
|
|
426
|
-
|
|
427
|
-
const submitFromState = () => submit(Promise.resolve({ valid: isValid.value }))
|
|
428
|
-
|
|
429
|
-
return {
|
|
430
|
-
fields,
|
|
431
|
-
/** optimized for Vuetify v-form submit callback */
|
|
432
|
-
submit,
|
|
433
|
-
/** optimized for Native form submit callback or general use */
|
|
434
|
-
submitFromState,
|
|
435
|
-
isDirty,
|
|
436
|
-
isValid,
|
|
437
|
-
/** includes whole submit, including potential asynchronous validation steps */
|
|
438
|
-
isLoading
|
|
439
|
-
}
|
|
440
|
-
}
|
|
441
|
-
|
|
442
384
|
export function getMetadataFromSchema(
|
|
443
385
|
ast: S.AST.AST
|
|
444
386
|
): {
|