@effect-app/vue 2.51.18 → 2.52.1
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 +12 -0
- package/dist/experimental/makeExperimental.d.ts +28 -0
- package/dist/experimental/makeExperimental.d.ts.map +1 -0
- package/dist/experimental/makeExperimental.js +16 -0
- package/dist/experimental/useCommand.d.ts +74 -0
- package/dist/experimental/useCommand.d.ts.map +1 -0
- package/dist/experimental/useCommand.js +199 -0
- package/dist/experimental/useConfirm.d.ts +7 -0
- package/dist/experimental/useConfirm.d.ts.map +1 -0
- package/dist/experimental/useConfirm.js +9 -0
- package/dist/experimental/useWithToast.d.ts +23 -0
- package/dist/experimental/useWithToast.d.ts.map +1 -0
- package/dist/experimental/useWithToast.js +31 -0
- package/dist/form.d.ts +1 -1
- package/dist/form.d.ts.map +1 -1
- package/dist/mutate.js +1 -1
- package/package.json +22 -3
- package/src/experimental/makeExperimental.ts +27 -0
- package/src/experimental/useCommand.ts +561 -0
- package/src/experimental/useConfirm.ts +17 -0
- package/src/experimental/useWithToast.ts +65 -0
- package/src/mutate.ts +1 -1
- package/test/Mutation.test.ts +618 -0
- package/test/dist/Mutation.test.d.ts.map +1 -0
- package/test/dist/stubs.d.ts +29 -0
- package/test/dist/stubs.d.ts.map +1 -0
- package/test/dist/stubs.js +60 -0
- package/test/stubs.ts +75 -0
- package/tsconfig.src.json +2 -1
- package/vitest.config.ts +15 -2
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type MessageFormatElement } from "@formatjs/icu-messageformat-parser";
|
|
2
|
+
export declare const useExperimental: (options?: {
|
|
3
|
+
messages?: Record<string, string> | Record<string, MessageFormatElement[]>;
|
|
4
|
+
toasts: any[];
|
|
5
|
+
}) => {
|
|
6
|
+
useConfirm: () => {
|
|
7
|
+
confirm: (message?: string) => import("effect/Effect").Effect<boolean, never, never>;
|
|
8
|
+
confirmOrInterrupt: (message?: string) => import("effect/Effect").Effect<void, never, never>;
|
|
9
|
+
};
|
|
10
|
+
useCommand: () => {
|
|
11
|
+
confirmOrInterrupt: (message?: string | undefined) => import("effect/Effect").Effect<void, never, import("../src/experimental/useCommand.js").CommandContext>;
|
|
12
|
+
withDefaultToast: <A, E>(self: import("effect/Effect").Effect<A, E, import("../src/experimental/useCommand.js").CommandContext>, errorRenderer?: ((e: E) => string | undefined) | undefined) => import("effect/Effect").Effect<A, E, import("../src/experimental/useCommand.js").CommandContext>;
|
|
13
|
+
fn: (actionName: string) => {
|
|
14
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>, AEff, Args extends Array<any>>(body: (...args: Args) => Generator<Eff, AEff, never>): import("vue").ComputedRef<((...a: Args) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<AEff, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_1, infer _R>>] ? E_1 : never>, never>) & import("../src/experimental/useCommand.js").CommandProps<AEff, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_1, infer _R>>] ? E_1 : never>>;
|
|
15
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_1, Args_1 extends Array<any>, A extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_1) => Generator<Eff, AEff_1, never>, a: (_: import("effect/Effect").Effect<AEff_1, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_1, infer _R>>] ? E_1 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A): import("vue").ComputedRef<((...a: Args_1) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<A>, import("effect/Effect").Effect.Error<A>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<A>, import("effect/Effect").Effect.Error<A>>>;
|
|
16
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_2, Args_2 extends Array<any>, A_1, B extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_2) => Generator<Eff, AEff_2, never>, a: (_: import("effect/Effect").Effect<AEff_2, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_1, infer _R>>] ? E_1 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_1, b: (_: A_1) => B): import("vue").ComputedRef<((...a: Args_2) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<B>, import("effect/Effect").Effect.Error<B>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<B>, import("effect/Effect").Effect.Error<B>>>;
|
|
17
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_3, Args_3 extends Array<any>, A_2, B_1, C extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_3) => Generator<Eff, AEff_3, never>, a: (_: import("effect/Effect").Effect<AEff_3, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_1, infer _R>>] ? E_1 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_2, b: (_: A_2) => B_1, c: (_: B_1) => C): import("vue").ComputedRef<((...a: Args_3) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<C>, import("effect/Effect").Effect.Error<C>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<C>, import("effect/Effect").Effect.Error<C>>>;
|
|
18
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_4, Args_4 extends Array<any>, A_3, B_2, C_1, D extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_4) => Generator<Eff, AEff_4, never>, a: (_: import("effect/Effect").Effect<AEff_4, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_1, infer _R>>] ? E_1 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_3, b: (_: A_3) => B_2, c: (_: B_2) => C_1, d: (_: C_1) => D): import("vue").ComputedRef<((...a: Args_4) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<D>, import("effect/Effect").Effect.Error<D>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<D>, import("effect/Effect").Effect.Error<D>>>;
|
|
19
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_5, Args_5 extends Array<any>, A_4, B_3, C_2, D_1, E_1 extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_5) => Generator<Eff, AEff_5, never>, a: (_: import("effect/Effect").Effect<AEff_5, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_2, infer _R>>] ? E_2 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_4, b: (_: A_4) => B_3, c: (_: B_3) => C_2, d: (_: C_2) => D_1, e: (_: D_1) => E_1): import("vue").ComputedRef<((...a: Args_5) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<E_1>, import("effect/Effect").Effect.Error<E_1>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<E_1>, import("effect/Effect").Effect.Error<E_1>>>;
|
|
20
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_6, Args_6 extends Array<any>, A_5, B_4, C_3, D_2, E_2, F extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_6) => Generator<Eff, AEff_6, never>, a: (_: import("effect/Effect").Effect<AEff_6, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_3, infer _R>>] ? E_3 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_5, b: (_: A_5) => B_4, c: (_: B_4) => C_3, d: (_: C_3) => D_2, e: (_: D_2) => E_2, f: (_: E_2) => F): import("vue").ComputedRef<((...a: Args_6) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<F>, import("effect/Effect").Effect.Error<F>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<F>, import("effect/Effect").Effect.Error<F>>>;
|
|
21
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_7, Args_7 extends Array<any>, A_6, B_5, C_4, D_3, E_3, F_1, G extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_7) => Generator<Eff, AEff_7, never>, a: (_: import("effect/Effect").Effect<AEff_7, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_4, infer _R>>] ? E_4 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_6, b: (_: A_6) => B_5, c: (_: B_5) => C_4, d: (_: C_4) => D_3, e: (_: D_3) => E_3, f: (_: E_3) => F_1, g: (_: F_1) => G): import("vue").ComputedRef<((...a: Args_7) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<G>, import("effect/Effect").Effect.Error<G>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<G>, import("effect/Effect").Effect.Error<G>>>;
|
|
22
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_8, Args_8 extends Array<any>, A_7, B_6, C_5, D_4, E_4, F_2, G_1, H extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_8) => Generator<Eff, AEff_8, never>, a: (_: import("effect/Effect").Effect<AEff_8, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_5, infer _R>>] ? E_5 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_7, b: (_: A_7) => B_6, c: (_: B_6) => C_5, d: (_: C_5) => D_4, e: (_: D_4) => E_4, f: (_: E_4) => F_2, g: (_: F_2) => G_1, h: (_: G_1) => H): import("vue").ComputedRef<((...a: Args_8) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<H>, import("effect/Effect").Effect.Error<H>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<H>, import("effect/Effect").Effect.Error<H>>>;
|
|
23
|
+
<Eff extends import("effect/Utils").YieldWrap<import("effect/Effect").Effect<any, any, any>>, AEff_9, Args_9 extends Array<any>, A_8, B_7, C_6, D_5, E_5, F_3, G_2, H_1, I extends import("effect/Effect").Effect<any, any, import("../src/experimental/useCommand.js").CommandContext>>(body: (...args: Args_9) => Generator<Eff, AEff_9, never>, a: (_: import("effect/Effect").Effect<AEff_9, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A, infer E_6, infer _R>>] ? E_6 : never, [Eff] extends [never] ? never : [Eff] extends [import("effect/Utils").YieldWrap<import("effect/Effect").Effect<infer _A_1, infer _E, infer R_1>>] ? R_1 : never>) => A_8, b: (_: A_8) => B_7, c: (_: B_7) => C_6, d: (_: C_6) => D_5, e: (_: D_5) => E_5, f: (_: E_5) => F_3, g: (_: F_3) => G_2, h: (_: G_2) => H_1, i: (_: H_1) => I): import("vue").ComputedRef<((...a: Args_9) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<import("effect/Effect").Effect.Success<I>, import("effect/Effect").Effect.Error<I>>, never>) & import("../src/experimental/useCommand.js").CommandProps<import("effect/Effect").Effect.Success<I>, import("effect/Effect").Effect.Error<I>>>;
|
|
24
|
+
};
|
|
25
|
+
alt: (actionName: string) => <Args_10 extends ReadonlyArray<any>, A_9, E_6, R_1 extends import("../src/experimental/useCommand.js").CommandContext>(handler: (...args: Args_10) => import("effect/Effect").Effect<A_9, E_6, R_1>) => import("vue").ComputedRef<((...a: Args_10) => import("effect/Fiber").RuntimeFiber<import("effect/Exit").Exit<A_9, E_6>, never>) & import("../src/experimental/useCommand.js").CommandProps<A_9, E_6>>;
|
|
26
|
+
};
|
|
27
|
+
useWithToast: () => <A_10, E_7, Args_10 extends ReadonlyArray<unknown>, R_2>(options: import("../src/experimental/useWithToast.js").ToastOptions<A_10, E_7, Args_10>) => (self: import("effect/Effect").Effect<A_10, E_7, R_2>, ...args: Args_10) => import("effect/Effect").Effect<A_10, E_7, R_2>;
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=stubs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stubs.d.ts","sourceRoot":"","sources":["../stubs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,oBAAoB,EAAE,MAAM,oCAAoC,CAAA;AA0B9E,eAAO,MAAM,eAAe,GAC1B,UAAU;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,oBAAoB,EAAE,CAAC,CAAC;IAAC,MAAM,EAAE,GAAG,EAAE,CAAA;CAAE;;yBAnBlG,CAAC;oCAEuC,CAAC;;;oCAGd,CAAC;sJAM7B,CAAC;;;;;;;;;;;;;;;oOAwDqlT,GAAI;CAD/lT,CAAA"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as Intl from "@formatjs/intl";
|
|
2
|
+
import { Runtime } from "effect-app";
|
|
3
|
+
import { computed, ref } from "vue";
|
|
4
|
+
import { makeExperimentalCommand } from "../src/experimental/makeExperimental.js";
|
|
5
|
+
// const mockIntl = {
|
|
6
|
+
// locale: ref("en" as const),
|
|
7
|
+
// trans: (id: string) => id,
|
|
8
|
+
// intl: ref({ formatMessage: (msg: { id: string }) => msg.id })
|
|
9
|
+
// } as unknown as ReturnType<ReturnType<typeof makeIntl<string>>["useIntl"]>
|
|
10
|
+
const makeUseIntl = (messages) => () => {
|
|
11
|
+
const locale = ref("en");
|
|
12
|
+
const intlCache = Intl.createIntlCache();
|
|
13
|
+
const intl = Intl.createIntl({
|
|
14
|
+
locale: locale.value,
|
|
15
|
+
messages
|
|
16
|
+
}, intlCache);
|
|
17
|
+
return { locale, intl: computed(() => intl), trans: (id, values) => intl.formatMessage({ id }, values) };
|
|
18
|
+
};
|
|
19
|
+
export const useExperimental = (options) => {
|
|
20
|
+
const toasts = options?.toasts ?? [];
|
|
21
|
+
const useIntl = makeUseIntl({ ...options?.messages });
|
|
22
|
+
const dismiss = (id) => {
|
|
23
|
+
const idx = toasts.findIndex((_) => _.id === id);
|
|
24
|
+
if (idx > -1) {
|
|
25
|
+
const toast = toasts[idx];
|
|
26
|
+
clearTimeout(toast.timeoutId);
|
|
27
|
+
toasts.splice(idx, 1);
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const fakeToast = (message, options) => {
|
|
31
|
+
const id = options?.id ?? Math.random().toString(36).substring(2, 15);
|
|
32
|
+
console.log(`Toast [${id}]: ${message}`, options);
|
|
33
|
+
options = { ...options, id };
|
|
34
|
+
const idx = toasts.findIndex((_) => _.id === id);
|
|
35
|
+
if (idx > -1) {
|
|
36
|
+
const toast = toasts[idx];
|
|
37
|
+
clearTimeout(toast.timeoutId);
|
|
38
|
+
Object.assign(toast, { message, options });
|
|
39
|
+
toast.timeoutId = setTimeout(() => {
|
|
40
|
+
toasts.splice(idx, 1);
|
|
41
|
+
}, options?.timeout ?? 3000);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const toast = { id, message, options };
|
|
45
|
+
toast.timeoutId = setTimeout(() => {
|
|
46
|
+
toasts.splice(idx, 1);
|
|
47
|
+
}, options?.timeout ?? 3000);
|
|
48
|
+
toasts.push(toast);
|
|
49
|
+
}
|
|
50
|
+
return id;
|
|
51
|
+
};
|
|
52
|
+
return makeExperimentalCommand(useIntl, () => ({
|
|
53
|
+
error: fakeToast,
|
|
54
|
+
warning: fakeToast,
|
|
55
|
+
success: fakeToast,
|
|
56
|
+
info: fakeToast,
|
|
57
|
+
dismiss
|
|
58
|
+
}), Runtime.defaultRuntime);
|
|
59
|
+
};
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R1YnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zdHVicy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEtBQUssSUFBSSxNQUFNLGdCQUFnQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDcEMsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUUsTUFBTSxLQUFLLENBQUE7QUFDbkMsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFHakYscUJBQXFCO0FBQ3JCLGdDQUFnQztBQUNoQywrQkFBK0I7QUFDL0Isa0VBQWtFO0FBQ2xFLDZFQUE2RTtBQUU3RSxNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQXlFLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRTtJQUN0RyxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBYSxDQUFDLENBQUE7SUFDakMsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFBO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQzFCO1FBQ0UsTUFBTSxFQUFFLE1BQU0sQ0FBQyxLQUFLO1FBQ3BCLFFBQVE7S0FDVCxFQUNELFNBQVMsQ0FDVixDQUFBO0lBQ0QsT0FBTyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLEVBQU8sRUFBRSxNQUFXLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFBO0FBQ3BILENBQUMsQ0FBQTtBQUVELE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRyxDQUM3QixPQUF1RyxFQUN2RyxFQUFFO0lBQ0YsTUFBTSxNQUFNLEdBQVUsT0FBTyxFQUFFLE1BQU0sSUFBSSxFQUFFLENBQUE7SUFDM0MsTUFB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
|
package/test/stubs.ts
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { type MessageFormatElement } from "@formatjs/icu-messageformat-parser"
|
|
2
|
+
import * as Intl from "@formatjs/intl"
|
|
3
|
+
import { Runtime } from "effect-app"
|
|
4
|
+
import { computed, ref } from "vue"
|
|
5
|
+
import { makeExperimentalCommand } from "../src/experimental/makeExperimental.js"
|
|
6
|
+
import { type ToastId } from "../src/experimental/useWithToast.js"
|
|
7
|
+
|
|
8
|
+
// const mockIntl = {
|
|
9
|
+
// locale: ref("en" as const),
|
|
10
|
+
// trans: (id: string) => id,
|
|
11
|
+
// intl: ref({ formatMessage: (msg: { id: string }) => msg.id })
|
|
12
|
+
// } as unknown as ReturnType<ReturnType<typeof makeIntl<string>>["useIntl"]>
|
|
13
|
+
|
|
14
|
+
const makeUseIntl = (messages: Record<string, string> | Record<string, MessageFormatElement[]>) => () => {
|
|
15
|
+
const locale = ref("en" as const)
|
|
16
|
+
const intlCache = Intl.createIntlCache()
|
|
17
|
+
const intl = Intl.createIntl<typeof locale.value>(
|
|
18
|
+
{
|
|
19
|
+
locale: locale.value,
|
|
20
|
+
messages
|
|
21
|
+
},
|
|
22
|
+
intlCache
|
|
23
|
+
)
|
|
24
|
+
return { locale, intl: computed(() => intl), trans: (id: any, values: any) => intl.formatMessage({ id }, values) }
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
export const useExperimental = (
|
|
28
|
+
options?: { messages?: Record<string, string> | Record<string, MessageFormatElement[]>; toasts: any[] }
|
|
29
|
+
) => {
|
|
30
|
+
const toasts: any[] = options?.toasts ?? []
|
|
31
|
+
const useIntl = makeUseIntl({ ...options?.messages })
|
|
32
|
+
|
|
33
|
+
const dismiss = (id: ToastId) => {
|
|
34
|
+
const idx = toasts.findIndex((_) => _.id === id)
|
|
35
|
+
if (idx > -1) {
|
|
36
|
+
const toast = toasts[idx]
|
|
37
|
+
clearTimeout(toast.timeoutId)
|
|
38
|
+
toasts.splice(idx, 1)
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
const fakeToast = (message: string, options?: { timeout?: number; id?: ToastId }) => {
|
|
42
|
+
const id = options?.id ?? Math.random().toString(36).substring(2, 15)
|
|
43
|
+
console.log(`Toast [${id}]: ${message}`, options)
|
|
44
|
+
|
|
45
|
+
options = { ...options, id }
|
|
46
|
+
const idx = toasts.findIndex((_) => _.id === id)
|
|
47
|
+
if (idx > -1) {
|
|
48
|
+
const toast = toasts[idx]
|
|
49
|
+
clearTimeout(toast.timeoutId)
|
|
50
|
+
Object.assign(toast, { message, options })
|
|
51
|
+
toast.timeoutId = setTimeout(() => {
|
|
52
|
+
toasts.splice(idx, 1)
|
|
53
|
+
}, options?.timeout ?? 3000)
|
|
54
|
+
} else {
|
|
55
|
+
const toast: any = { id, message, options }
|
|
56
|
+
toast.timeoutId = setTimeout(() => {
|
|
57
|
+
toasts.splice(idx, 1)
|
|
58
|
+
}, options?.timeout ?? 3000)
|
|
59
|
+
toasts.push(toast)
|
|
60
|
+
}
|
|
61
|
+
return id
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return makeExperimentalCommand(
|
|
65
|
+
useIntl,
|
|
66
|
+
() => ({
|
|
67
|
+
error: fakeToast,
|
|
68
|
+
warning: fakeToast,
|
|
69
|
+
success: fakeToast,
|
|
70
|
+
info: fakeToast,
|
|
71
|
+
dismiss
|
|
72
|
+
}),
|
|
73
|
+
Runtime.defaultRuntime
|
|
74
|
+
)
|
|
75
|
+
}
|
package/tsconfig.src.json
CHANGED
package/vitest.config.ts
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
/// <reference types="vitest" />
|
|
2
|
-
import { defineConfig } from "
|
|
2
|
+
import { defineConfig } from "vitest/config"
|
|
3
|
+
import vue from '@vitejs/plugin-vue'
|
|
3
4
|
import makeConfig from "../../vite.config.base"
|
|
4
5
|
|
|
5
|
-
export default defineConfig(
|
|
6
|
+
export default defineConfig({
|
|
7
|
+
...makeConfig(__dirname),
|
|
8
|
+
plugins: [vue()],
|
|
9
|
+
test: {
|
|
10
|
+
environment: 'jsdom',
|
|
11
|
+
include: ['src/**/*.test.{ts,tsx}', '**/test/**/*.test.{ts,tsx}', '**/__tests__/**/*.test.{ts,tsx}'],
|
|
12
|
+
exclude: ['node_modules/**', 'dist/**'],
|
|
13
|
+
globals: true
|
|
14
|
+
},
|
|
15
|
+
optimizeDeps: {
|
|
16
|
+
exclude: ['**/__tests__/**', '**/test/**', '**/*.test.*']
|
|
17
|
+
}
|
|
18
|
+
})
|