@effect-app/vue 4.0.0-beta.248 → 4.0.0-beta.249

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 CHANGED
@@ -1,12 +1,25 @@
1
1
  # @effect-app/vue
2
2
 
3
+ ## 4.0.0-beta.249
4
+
5
+ ### Minor Changes
6
+
7
+ - ba789a2: Move core service contracts and runtime-agnostic modules into `effect-app`, keep `infra` and `vue` focused on adapters, and drop the temporary `infra` compatibility re-export paths in favor of the new canonical imports.
8
+
9
+ `@effect-app/infra` no longer re-exports moved core modules such as `./Model`, `./Emailer/service`, `./QueueMaker/service`, `./Store/service`, `./adapters/*`, or `./api/*` entrypoints.
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [ba789a2]
14
+ - effect-app@4.0.0-beta.249
15
+
3
16
  ## 4.0.0-beta.248
4
17
 
5
18
  ### Patch Changes
6
19
 
7
20
  - 2a86a17: improve tsgo compat: avoid deferred `Schema.Type`/`Codec.Encoded`/`Codec.DecodingServices`/`Codec.EncodingServices` conditional helpers in generic positions where the type parameter is already constrained to `Schema.Top`. Index the property directly (`X["Type"]`, `X["Encoded"]`, `X["DecodingServices"]`, …) so tsgo doesn't leak `unknown` into `Effect` channels (notably `R`).
8
21
 
9
- Sites: `client/clientFor.ts` (`RequestHandlerFor`, `FinalTypeOf`, `ExtractResponse`, `ExtractEResponse`), `client/makeClient.ts` (`InputFromPayload`, `OutputFromSuccess`, `InvalidationConfigForCommand`, `TaggedRequestWithMeta` overloads), `rpc/MiddlewareMaker.ts` (`Errors`), `rpc/RpcMiddleware.ts` (`Failure`, `FailureContext`), `Schema/ext.ts` (`ReadonlySetFromArray`, `ReadonlyMapFromArray`), `infra/api/routing.ts` (`GetSuccessShape`, handlers, route matcher), `vue/makeClient.ts` (`MutationExt.project`, `MutationWithExtensions`, `QueryProjection`), `vue/routeParams.ts` (`parseRouteParams*`).
22
+ Sites: `client/clientFor.ts` (`RequestHandlerFor`, `FinalTypeOf`, `ExtractResponse`, `ExtractEResponse`), `client/makeClient.ts` (`InputFromPayload`, `OutputFromSuccess`, `InvalidationConfigForCommand`, `TaggedRequestWithMeta` overloads), `rpc/MiddlewareMaker.ts` (`Errors`), `rpc/RpcMiddleware.ts` (`Failure`, `FailureContext`), `Schema/ext.ts` (`ReadonlySetFromArray`, `ReadonlyMapFromArray`), `infra/routing.ts` (`GetSuccessShape`, handlers, route matcher), `vue/makeClient.ts` (`MutationExt.project`, `MutationWithExtensions`, `QueryProjection`), `vue/routeParams.ts` (`parseRouteParams*`).
10
23
 
11
24
  - Updated dependencies [2a86a17]
12
25
  - effect-app@4.0.0-beta.248
package/dist/runtime.d.ts CHANGED
@@ -1,19 +1,2 @@
1
- import { type Context } from "effect-app/Context";
2
- import * as Effect from "effect-app/Effect";
3
- import * as Layer from "effect-app/Layer";
4
- import * as ManagedRuntime from "effect/ManagedRuntime";
5
- export declare const makeAppRuntime: <A, E>(layer: Layer.Layer<A, E, never>) => Effect.Effect<ManagedRuntime.ManagedRuntime<A, never> & {
6
- [Symbol.dispose](): void;
7
- [Symbol.asyncDispose](): Promise<void>;
8
- }, never, never>;
9
- export declare function initializeSync<A, E>(layer: Layer.Layer<A, E>): ManagedRuntime.ManagedRuntime<A, never> & {
10
- [Symbol.dispose](): void;
11
- [Symbol.asyncDispose](): Promise<void>;
12
- };
13
- export declare function initializeAsync<A, E>(layer: Layer.Layer<A, E>): Promise<ManagedRuntime.ManagedRuntime<A, never> & {
14
- [Symbol.dispose](): void;
15
- [Symbol.asyncDispose](): Promise<void>;
16
- }>;
17
- export declare const makeRunPromise: <T>(services: Context<T>) => <A, E>(effect: Effect.Effect<A, E, T>, options?: Effect.RunOptions | undefined) => Promise<Awaited<import("effect/Types").NoInfer<A>>>;
18
- export declare const makeRunSync: <T>(services: Context<T>) => <A, E>(effect: Effect.Effect<A, E, T>) => import("effect/Types").NoInfer<A>;
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLEtBQUssT0FBTyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDakQsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBSXpDLE9BQU8sS0FBSyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFFdkQsZUFBTyxNQUFNLGNBQWMsR0FBK0IsQ0FBQyxFQUFFLENBQUM7OztnQkFlNUQsQ0FBQTtBQUVGLHdCQUFnQixjQUFjLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDOzs7RUFHNUQ7QUFFRCx3QkFBZ0IsZUFBZSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQzs7O0dBRzdEO0FBR0QsZUFBTyxNQUFNLGNBQWMsR0FBSSxDQUFDLFlBQVksT0FBTyxDQUFDLENBQUMsQ0FBQywySUFPaEQsQ0FBQTtBQUVOLGVBQU8sTUFBTSxXQUFXLEdBQUksQ0FBQyxZQUFZLE9BQU8sQ0FBQyxDQUFDLENBQUMsZ0ZBU2hELENBQUEifQ==
1
+ export * from "effect-app/runtime";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5kLnRzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3J1bnRpbWUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxvQkFBb0IsQ0FBQSJ9
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAC3C,OAAO,KAAK,KAAK,MAAM,kBAAkB,CAAA;AAIzC,OAAO,KAAK,cAAc,MAAM,uBAAuB,CAAA;AAEvD,eAAO,MAAM,cAAc,GAA+B,CAAC,EAAE,CAAC;;;gBAe5D,CAAA;AAEF,wBAAgB,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;;EAG5D;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;;;GAG7D;AAGD,eAAO,MAAM,cAAc,GAAI,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,2IAOhD,CAAA;AAEN,eAAO,MAAM,WAAW,GAAI,CAAC,YAAY,OAAO,CAAC,CAAC,CAAC,gFAShD,CAAA"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA"}
package/dist/runtime.js CHANGED
@@ -1,40 +1,2 @@
1
- import { CauseException } from "effect-app/client/errors";
2
- import * as Effect from "effect-app/Effect";
3
- import * as Layer from "effect-app/Layer";
4
- import * as Exit from "effect/Exit";
5
- import { flow } from "effect/Function";
6
- import * as Logger from "effect/Logger";
7
- import * as ManagedRuntime from "effect/ManagedRuntime";
8
- export const makeAppRuntime = Effect.fnUntraced(function* (layer) {
9
- const l = layer.pipe(Layer.provide(Logger.layer([Logger.consolePretty()])));
10
- const mrt = ManagedRuntime.make(l);
11
- yield* mrt.contextEffect;
12
- return Object.assign(mrt, {
13
- [Symbol.dispose]() {
14
- return Effect.runSync(mrt.disposeEffect);
15
- },
16
- [Symbol.asyncDispose]() {
17
- return mrt.dispose();
18
- }
19
- }); // as we initialise here, there is no more error left.
20
- });
21
- export function initializeSync(layer) {
22
- const runtime = Effect.runSync(makeAppRuntime(layer));
23
- return runtime;
24
- }
25
- export function initializeAsync(layer) {
26
- return Effect
27
- .runPromise(makeAppRuntime(layer));
28
- }
29
- // we wrap into CauseException because we want to keep the full cause of the failure.
30
- export const makeRunPromise = (services) => flow(Effect.runPromiseExitWith(services), (_) => _.then(Exit.match({
31
- onFailure: (cause) => Promise.reject(new CauseException(cause, "runPromise")),
32
- onSuccess: (value) => Promise.resolve(value)
33
- })));
34
- export const makeRunSync = (services) => flow(Effect.runSyncExitWith(services), Exit.match({
35
- onFailure: (cause) => {
36
- throw new CauseException(cause, "runSync");
37
- },
38
- onSuccess: (value) => value
39
- }));
40
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQTtBQUV6RCxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBQzNDLE9BQU8sS0FBSyxLQUFLLE1BQU0sa0JBQWtCLENBQUE7QUFDekMsT0FBTyxLQUFLLElBQUksTUFBTSxhQUFhLENBQUE7QUFDbkMsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQ3RDLE9BQU8sS0FBSyxNQUFNLE1BQU0sZUFBZSxDQUFBO0FBQ3ZDLE9BQU8sS0FBSyxjQUFjLE1BQU0sdUJBQXVCLENBQUE7QUFFdkQsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQU8sS0FBd0I7SUFDdEYsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLElBQUksQ0FDbEIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUNwQyxDQUFBO0lBQ25CLE1BQU0sR0FBRyxHQUFHLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQTtJQUN4QixPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO1FBQ3hCLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztZQUNkLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDMUMsQ0FBQztRQUVELENBQUMsTUFBTSxDQUFDLFlBQVksQ0FBQztZQUNuQixPQUFPLEdBQUcsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUN0QixDQUFDO0tBQ0YsQ0FBQyxDQUFBLENBQUMsc0RBQXNEO0FBQzNELENBQUMsQ0FBQyxDQUFBO0FBRUYsTUFBTSxVQUFVLGNBQWMsQ0FBTyxLQUF3QjtJQUMzRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFBO0lBQ3JELE9BQU8sT0FBTyxDQUFBO0FBQ2hCLENBQUM7QUFFRCxNQUFNLFVBQVUsZUFBZSxDQUFPLEtBQXdCO0lBQzVELE9BQU8sTUFBTTtTQUNWLFVBQVUsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQTtBQUN0QyxDQUFDO0FBRUQscUZBQXFGO0FBQ3JGLE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFJLFFBQW9CLEVBQUUsRUFBRSxDQUN4RCxJQUFJLENBQUMsTUFBTSxDQUFDLGtCQUFrQixDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDOUMsQ0FBQyxDQUFDLElBQUksQ0FDSixJQUFJLENBQUMsS0FBSyxDQUFDO0lBQ1QsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxZQUFZLENBQUMsQ0FBQztJQUM3RSxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO0NBQzdDLENBQUMsQ0FDSCxDQUFDLENBQUE7QUFFTixNQUFNLENBQUMsTUFBTSxXQUFXLEdBQUcsQ0FBSSxRQUFvQixFQUFFLEVBQUUsQ0FDckQsSUFBSSxDQUNGLE1BQU0sQ0FBQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQ2hDLElBQUksQ0FBQyxLQUFLLENBQUM7SUFDVCxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsRUFBRTtRQUNuQixNQUFNLElBQUksY0FBYyxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBQ0QsU0FBUyxFQUFFLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLO0NBQzVCLENBQUMsQ0FDSCxDQUFBIn0=
1
+ export * from "effect-app/runtime";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9ydW50aW1lLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsb0JBQW9CLENBQUEifQ==
package/dist/toast.d.ts CHANGED
@@ -1,51 +1,2 @@
1
- import * as Context from "effect-app/Context";
2
- import * as Effect from "effect-app/Effect";
3
- export type ToastId = string | number;
4
- export type ToastOpts = {
5
- id?: ToastId;
6
- timeout?: number;
7
- groupId?: string;
8
- requestId?: string;
9
- };
10
- export type ToastOptsInternal = {
11
- id?: ToastId | null;
12
- timeout?: number;
13
- groupId?: string;
14
- requestId?: string;
15
- };
16
- export type UseToast = () => {
17
- error: (this: void, message: string, options?: ToastOpts) => ToastId;
18
- warning: (this: void, message: string, options?: ToastOpts) => ToastId;
19
- success: (this: void, message: string, options?: ToastOpts) => ToastId;
20
- info: (this: void, message: string, options?: ToastOpts) => ToastId;
21
- dismiss: (this: void, id: ToastId) => void;
22
- };
23
- declare const CurrentToastId_base: Context.OpaqueClass<CurrentToastId, "CurrentToastId", {
24
- toastId: ToastId;
25
- }>;
26
- export declare class CurrentToastId extends CurrentToastId_base {
27
- }
28
- /** fallback to CurrentToastId when available unless id is explicitly set to a value or null */
29
- export declare const wrap: (toast: ReturnType<UseToast>) => {
30
- error: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
31
- info: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
32
- success: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
33
- warning: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
34
- dismiss: (toastId: ToastId) => Effect.Effect<void, never, never>;
35
- };
36
- declare const Toast_base: Context.OpaqueClass<Toast, "Toast", {
37
- error: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
38
- info: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
39
- success: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
40
- warning: (message: string, options?: ToastOptsInternal) => Effect.Effect<ToastId, never, never>;
41
- dismiss: (toastId: ToastId) => Effect.Effect<void, never, never>;
42
- }>;
43
- export declare class Toast extends Toast_base {
44
- static readonly error: (message: string, options?: ToastOptsInternal | undefined) => Effect.Effect<ToastId, never, Toast>;
45
- static readonly info: (message: string, options?: ToastOptsInternal | undefined) => Effect.Effect<ToastId, never, Toast>;
46
- static readonly success: (message: string, options?: ToastOptsInternal | undefined) => Effect.Effect<ToastId, never, Toast>;
47
- static readonly warning: (message: string, options?: ToastOptsInternal | undefined) => Effect.Effect<ToastId, never, Toast>;
48
- static readonly dismiss: (toastId: ToastId) => Effect.Effect<void, never, Toast>;
49
- }
50
- export {};
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90b2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBRTdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFHM0MsTUFBTSxNQUFNLE9BQU8sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFBO0FBQ3JDLE1BQU0sTUFBTSxTQUFTLEdBQUc7SUFBRSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUE7Q0FBRSxDQUFBO0FBQ2hHLE1BQU0sTUFBTSxpQkFBaUIsR0FBRztJQUFFLEVBQUUsQ0FBQyxFQUFFLE9BQU8sR0FBRyxJQUFJLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxNQUFNLENBQUM7SUFBQyxTQUFTLENBQUMsRUFBRSxNQUFNLENBQUE7Q0FBRSxDQUFBO0FBRS9HLE1BQU0sTUFBTSxRQUFRLEdBQUcsTUFBTTtJQUMzQixLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQTtJQUNwRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQTtJQUN0RSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQTtJQUN0RSxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLEVBQUUsU0FBUyxLQUFLLE9BQU8sQ0FBQTtJQUNuRSxPQUFPLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxPQUFPLEtBQUssSUFBSSxDQUFBO0NBQzNDLENBQUE7O2FBRTZFLE9BQU87O0FBQXJGLHFCQUFhLGNBQWUsU0FBUSxtQkFBd0U7Q0FBRztBQUUvRywrRkFBK0Y7QUFDL0YsZUFBTyxNQUFNLElBQUksVUFBVyxVQUFVLENBQUMsUUFBUSxDQUFDO0lBaUI1QyxLQUFLLFlBZlksTUFBTSxZQUFZLGlCQUFpQjtJQWdCcEQsSUFBSTtJQUNKLE9BQU87SUFDUCxPQUFPO0lBQ1AsT0FBTyxZQUFZLE9BQU87Q0FFN0IsQ0FBQTs7cUJBckJvQixNQUFNLFlBQVksaUJBQWlCOzs7O3VCQW1CakMsT0FBTzs7QUFNOUIscUJBQWEsS0FBTSxTQUFRLFVBQTRDO0lBQ3JFLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxxR0FBZ0M7SUFDckQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLHFHQUErQjtJQUNuRCxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8scUdBQWtDO0lBQ3pELE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxxR0FBa0M7SUFDekQsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLDBEQUFrQztDQUMxRCJ9
1
+ export * from "effect-app/toast";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuZC50cyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy90b2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGtCQUFrQixDQUFBIn0=
@@ -1 +1 @@
1
- {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,OAAO,MAAM,oBAAoB,CAAA;AAE7C,OAAO,KAAK,MAAM,MAAM,mBAAmB,CAAA;AAG3C,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,CAAA;AACrC,MAAM,MAAM,SAAS,GAAG;IAAE,EAAE,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAChG,MAAM,MAAM,iBAAiB,GAAG;IAAE,EAAE,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,CAAA;AAE/G,MAAM,MAAM,QAAQ,GAAG,MAAM;IAC3B,KAAK,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAA;IACpE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAA;IACtE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAA;IACtE,IAAI,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,SAAS,KAAK,OAAO,CAAA;IACnE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAC3C,CAAA;;aAE6E,OAAO;;AAArF,qBAAa,cAAe,SAAQ,mBAAwE;CAAG;AAE/G,+FAA+F;AAC/F,eAAO,MAAM,IAAI,UAAW,UAAU,CAAC,QAAQ,CAAC;IAiB5C,KAAK,YAfY,MAAM,YAAY,iBAAiB;IAgBpD,IAAI;IACJ,OAAO;IACP,OAAO;IACP,OAAO,YAAY,OAAO;CAE7B,CAAA;;qBArBoB,MAAM,YAAY,iBAAiB;;;;uBAmBjC,OAAO;;AAM9B,qBAAa,KAAM,SAAQ,UAA4C;IACrE,MAAM,CAAC,QAAQ,CAAC,KAAK,qGAAgC;IACrD,MAAM,CAAC,QAAQ,CAAC,IAAI,qGAA+B;IACnD,MAAM,CAAC,QAAQ,CAAC,OAAO,qGAAkC;IACzD,MAAM,CAAC,QAAQ,CAAC,OAAO,qGAAkC;IACzD,MAAM,CAAC,QAAQ,CAAC,OAAO,0DAAkC;CAC1D"}
1
+ {"version":3,"file":"toast.d.ts","sourceRoot":"","sources":["../src/toast.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAA"}
package/dist/toast.js CHANGED
@@ -1,34 +1,2 @@
1
- import * as Context from "effect-app/Context";
2
- import { accessEffectFn } from "effect-app/Context";
3
- import * as Effect from "effect-app/Effect";
4
- import * as Option from "effect-app/Option";
5
- export class CurrentToastId extends Context.Opaque()("CurrentToastId") {
6
- }
7
- /** fallback to CurrentToastId when available unless id is explicitly set to a value or null */
8
- export const wrap = (toast) => {
9
- const wrap = (toastHandler) => {
10
- return (message, options) => Effect.serviceOption(CurrentToastId).pipe(Effect.flatMap((currentToast) => Effect.sync(() => {
11
- const { id: _id, ...rest } = options ?? {};
12
- const id = _id !== undefined
13
- ? _id ?? undefined
14
- : Option.getOrUndefined(Option.map(currentToast, (_) => _.toastId));
15
- // when id is undefined, we may end up with no toast at all..
16
- return toastHandler(message, id !== undefined ? { ...rest, id } : rest);
17
- })));
18
- };
19
- return {
20
- error: wrap(toast.error),
21
- info: wrap(toast.info),
22
- success: wrap(toast.success),
23
- warning: wrap(toast.warning),
24
- dismiss: (toastId) => Effect.sync(() => toast.dismiss(toastId))
25
- };
26
- };
27
- export class Toast extends Context.Opaque()("Toast") {
28
- static error = accessEffectFn(this, "error");
29
- static info = accessEffectFn(this, "info");
30
- static success = accessEffectFn(this, "success");
31
- static warning = accessEffectFn(this, "warning");
32
- static dismiss = accessEffectFn(this, "dismiss");
33
- }
34
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdG9hc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxvQkFBb0IsQ0FBQTtBQUM3QyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sb0JBQW9CLENBQUE7QUFDbkQsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssTUFBTSxNQUFNLG1CQUFtQixDQUFBO0FBYzNDLE1BQU0sT0FBTyxjQUFlLFNBQVEsT0FBTyxDQUFDLE1BQU0sRUFBd0MsQ0FBQyxnQkFBZ0IsQ0FBQztDQUFHO0FBRS9HLCtGQUErRjtBQUMvRixNQUFNLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxLQUEyQixFQUFFLEVBQUU7SUFDbEQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxZQUErRCxFQUFFLEVBQUU7UUFDL0UsT0FBTyxDQUFDLE9BQWUsRUFBRSxPQUEyQixFQUFFLEVBQUUsQ0FDdEQsTUFBTSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQyxJQUFJLENBQ3ZDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRSxDQUM5QixNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUNmLE1BQU0sRUFBRSxFQUFFLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxFQUFFLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQTtZQUMxQyxNQUFNLEVBQUUsR0FBRyxHQUFHLEtBQUssU0FBUztnQkFDMUIsQ0FBQyxDQUFDLEdBQUcsSUFBSSxTQUFTO2dCQUNsQixDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFlBQVksRUFBRSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUE7WUFDckUsNkRBQTZEO1lBQzdELE9BQU8sWUFBWSxDQUFDLE9BQU8sRUFBRSxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUN6RSxDQUFDLENBQUMsQ0FDSCxDQUNGLENBQUE7SUFDTCxDQUFDLENBQUE7SUFDRCxPQUFPO1FBQ0wsS0FBSyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQ3hCLElBQUksRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQztRQUN0QixPQUFPLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUM7UUFDNUIsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDO1FBQzVCLE9BQU8sRUFBRSxDQUFDLE9BQWdCLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztLQUN6RSxDQUFBO0FBQ0gsQ0FBQyxDQUFBO0FBSUQsTUFBTSxPQUFPLEtBQU0sU0FBUSxPQUFPLENBQUMsTUFBTSxFQUFxQixDQUFDLE9BQU8sQ0FBQztJQUNyRSxNQUFNLENBQVUsS0FBSyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDckQsTUFBTSxDQUFVLElBQUksR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ25ELE1BQU0sQ0FBVSxPQUFPLEdBQUcsY0FBYyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUN6RCxNQUFNLENBQVUsT0FBTyxHQUFHLGNBQWMsQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDekQsTUFBTSxDQUFVLE9BQU8sR0FBRyxjQUFjLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFBO0NBQzFEIn0=
1
+ export * from "effect-app/toast";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9hc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdG9hc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxrQkFBa0IsQ0FBQSJ9
@@ -1,30 +1,2 @@
1
- import * as Context from "effect-app/Context";
2
- import * as Effect from "effect-app/Effect";
3
- import * as Layer from "effect-app/Layer";
4
- import type * as Option from "effect-app/Option";
5
- import { Toast } from "./toast.js";
6
- export interface ToastOptions<A, E, Args extends ReadonlyArray<unknown>, WaiR, SucR, ErrR> {
7
- stableToastId?: undefined | string | ((...args: Args) => string | undefined);
8
- timeout?: number;
9
- showSpanInfo?: false;
10
- groupId?: string;
11
- onWaiting: string | ((...args: Args) => string | null) | null | ((...args: Args) => Effect.Effect<string | null, never, WaiR>);
12
- onSuccess: string | ((a: A, ...args: Args) => string | null) | null | ((a: A, ...args: Args) => Effect.Effect<string | null, never, SucR>);
13
- onFailure: string | ((error: Option.Option<E>, ...args: Args) => string | {
14
- level: "warn" | "error";
15
- message: string;
16
- }) | ((error: Option.Option<E>, ...args: Args) => Effect.Effect<string | {
17
- level: "warn" | "error";
18
- message: string;
19
- }, never, ErrR>);
20
- }
21
- declare const WithToast_base: Context.ServiceClass<WithToast, "WithToast", <A, E, Args extends readonly unknown[], R, WaiR = never, SucR = never, ErrR = never>(options: ToastOptions<A, E, Args, WaiR, SucR, ErrR>) => (self: Effect.Effect<A, E, R>, ...args: Args) => Effect.Effect<A, E, ErrR | R | SucR | WaiR>> & {
22
- readonly make: Effect.Effect<<A, E, Args extends readonly unknown[], R, WaiR = never, SucR = never, ErrR = never>(options: ToastOptions<A, E, Args, WaiR, SucR, ErrR>) => (self: Effect.Effect<A, E, R>, ...args: Args) => Effect.Effect<A, E, ErrR | R | SucR | WaiR>, never, Toast>;
23
- };
24
- export declare class WithToast extends WithToast_base {
25
- static readonly DefaultWithoutDependencies: Layer.Layer<WithToast, never, Toast>;
26
- static readonly Default: Layer.Layer<WithToast, never, Toast>;
27
- static readonly handle: <A, E, Args extends Array<unknown>, R, WaiR = never, SucR = never, ErrR = never>(options: ToastOptions<A, E, Args, WaiR, SucR, ErrR>) => (self: Effect.Effect<A, E, R>, ...args: Args) => Effect.Effect<A, E, R | WaiR | SucR | ErrR | WithToast>;
28
- }
29
- export {};
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRvYXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2l0aFRvYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sb0JBQW9CLENBQUE7QUFDN0MsT0FBTyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUMzQyxPQUFPLEtBQUssS0FBSyxNQUFNLGtCQUFrQixDQUFBO0FBQ3pDLE9BQU8sS0FBSyxLQUFLLE1BQU0sTUFBTSxtQkFBbUIsQ0FBQTtBQUtoRCxPQUFPLEVBQWtCLEtBQUssRUFBZ0IsTUFBTSxZQUFZLENBQUE7QUFFaEUsTUFBTSxXQUFXLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBUyxhQUFhLENBQUMsT0FBTyxDQUFDLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJO0lBQ3ZGLGFBQWEsQ0FBQyxFQUFFLFNBQVMsR0FBRyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLElBQUksS0FBSyxNQUFNLEdBQUcsU0FBUyxDQUFDLENBQUE7SUFDNUUsT0FBTyxDQUFDLEVBQUUsTUFBTSxDQUFBO0lBQ2hCLFlBQVksQ0FBQyxFQUFFLEtBQUssQ0FBQTtJQUNwQixPQUFPLENBQUMsRUFBRSxNQUFNLENBQUE7SUFDaEIsU0FBUyxFQUNMLE1BQU0sR0FDTixDQUFDLENBQUMsR0FBRyxJQUFJLEVBQUUsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FDbEMsSUFBSSxHQUNKLENBQUMsQ0FDRCxHQUFHLElBQUksRUFBRSxJQUFJLEtBQ1YsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEdBQUcsSUFBSSxFQUFFLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ2pELFNBQVMsRUFDTCxNQUFNLEdBQ04sQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxJQUFJLEVBQUUsSUFBSSxLQUFLLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FDeEMsSUFBSSxHQUNKLENBQUMsQ0FDRCxDQUFDLEVBQUUsQ0FBQyxFQUNKLEdBQUcsSUFBSSxFQUFFLElBQUksS0FDVixNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDakQsU0FBUyxFQUNMLE1BQU0sR0FDTixDQUFDLENBQ0QsS0FBSyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ3ZCLEdBQUcsSUFBSSxFQUFFLElBQUksS0FDVixNQUFNLEdBQUc7UUFBRSxLQUFLLEVBQUUsTUFBTSxHQUFHLE9BQU8sQ0FBQztRQUFDLE9BQU8sRUFBRSxNQUFNLENBQUE7S0FBRSxDQUFDLEdBQ3pELENBQUMsQ0FDRCxLQUFLLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDdkIsR0FBRyxJQUFJLEVBQUUsSUFBSSxLQUNWLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHO1FBQUUsS0FBSyxFQUFFLE1BQU0sR0FBRyxPQUFPLENBQUM7UUFBQyxPQUFPLEVBQUUsTUFBTSxDQUFBO0tBQUUsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQTtDQUMxRjs0RUFNVyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBUyxTQUFTLE9BQU8sRUFBRSxFQUFFLENBQUMsRUFBRSxJQUFJLFVBQVUsSUFBSSxVQUFVLElBQUksbUJBQ3ZFLFlBQVksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQztrQ0FEN0MsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLFNBQVMsU0FBUyxPQUFPLEVBQUUsRUFBRSxDQUFDLEVBQUUsSUFBSSxVQUFVLElBQUksVUFBVSxJQUFJLG1CQUN2RSxZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7O0FBSnpELHFCQUFhLFNBQVUsU0FBUSxjQWlGN0I7SUFDQSxNQUFNLENBQUMsUUFBUSxDQUFDLDBCQUEwQix1Q0FBZ0M7SUFDMUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxPQUFPLHVDQUFrQztJQUV6RCxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksU0FBUyxLQUFLLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksR0FBRyxLQUFLLEVBQUUsSUFBSSxHQUFHLEtBQUssRUFBRSxJQUFJLEdBQUcsS0FBSyxXQUM3RixZQUFZLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsS0FDbEQsQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLEdBQUcsSUFBSSxFQUFFLElBQUksS0FBSyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLFNBQVMsQ0FBQyxDQUNiO0NBQy9GIn0=
1
+ export * from "effect-app/withToast";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRvYXN0LmQudHMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvd2l0aFRvYXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsc0JBQXNCLENBQUEifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"withToast.d.ts","sourceRoot":"","sources":["../src/withToast.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"withToast.d.ts","sourceRoot":"","sources":["../src/withToast.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAA"}
package/dist/withToast.js CHANGED
@@ -1,64 +1,2 @@
1
- import * as Context from "effect-app/Context";
2
- import * as Effect from "effect-app/Effect";
3
- import * as Layer from "effect-app/Layer";
4
- import * as S from "effect-app/Schema";
5
- import { wrapEffect } from "effect-app/utils";
6
- import * as Cause from "effect/Cause";
7
- import * as Fiber from "effect/Fiber";
8
- import { CurrentToastId, Toast } from "./toast.js";
9
- // @effect-diagnostics-next-line missingEffectServiceDependency:off
10
- export class WithToast extends Context.Service()("WithToast", {
11
- make: Effect.gen(function* () {
12
- const toast = yield* Toast;
13
- return (options) => Effect.fnUntraced(function* (self, ...args) {
14
- const baseTimeout = options.timeout ?? 3_000;
15
- const stableToastId = typeof options.stableToastId === "function"
16
- ? options.stableToastId(...args)
17
- : options.stableToastId;
18
- const requestId = yield* Effect.currentSpan.pipe(Effect.map((span) => span.traceId), Effect.orElseSucceed(() => S.StringId.make()));
19
- const groupId = options.groupId;
20
- const meta = { ...(groupId !== undefined ? { groupId } : {}), requestId };
21
- const t = yield* wrapEffect(options.onWaiting)(...args);
22
- const toastId = t === null
23
- ? stableToastId
24
- : stableToastId ?? `wait-${Math.random().toString(36).slice(2)}`;
25
- const waitingFiber = t === null ? undefined : yield* Effect.forkChild(Effect.sleep("1 seconds").pipe(Effect.andThen(toast.info(t, { id: toastId, timeout: Infinity, ...meta }))));
26
- const interruptWaiting = waitingFiber ? Fiber.interrupt(waitingFiber) : Effect.void;
27
- return yield* self.pipe(Effect.tap(Effect.fnUntraced(function* (a) {
28
- yield* interruptWaiting;
29
- const t = yield* wrapEffect(options.onSuccess)(a, ...args);
30
- if (t === null) {
31
- return;
32
- }
33
- yield* toast.success(t, toastId !== undefined
34
- ? { id: toastId, timeout: baseTimeout, ...meta }
35
- : { timeout: baseTimeout, ...meta });
36
- })), Effect.tapCause(Effect.fnUntraced(function* (cause) {
37
- yield* interruptWaiting;
38
- yield* Effect.logDebug("WithToast - caught error cause: " + Cause.squash(cause), Cause.hasInterruptsOnly(cause), cause);
39
- if (Cause.hasInterruptsOnly(cause)) {
40
- if (toastId)
41
- yield* toast.dismiss(toastId);
42
- return;
43
- }
44
- const spanInfo = options.showSpanInfo !== false
45
- ? yield* Effect.currentSpan.pipe(Effect.map((span) => `\nTrace: ${span.traceId}\nSpan: ${span.spanId}`), Effect.orElseSucceed(() => ""))
46
- : "";
47
- const t = yield* wrapEffect(options.onFailure)(Cause.findErrorOption(cause), ...args);
48
- const opts = { timeout: baseTimeout * 2, ...meta };
49
- if (typeof t === "object") {
50
- const message = t.message + spanInfo;
51
- return t.level === "warn"
52
- ? yield* toast.warning(message, toastId !== undefined ? { ...opts, id: toastId } : opts)
53
- : yield* toast.error(message, toastId !== undefined ? { ...opts, id: toastId } : opts);
54
- }
55
- yield* toast.error(t + spanInfo, toastId !== undefined ? { ...opts, id: toastId } : opts);
56
- }, Effect.uninterruptible)), toastId !== undefined ? Effect.provideService(CurrentToastId, CurrentToastId.of({ toastId })) : (_) => _);
57
- });
58
- })
59
- }) {
60
- static DefaultWithoutDependencies = Layer.effect(this, this.make);
61
- static Default = this.DefaultWithoutDependencies;
62
- static handle = (options) => (self, ...args) => this.use((_) => _(options)(self, ...args));
63
- }
64
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRvYXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dpdGhUb2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLG9CQUFvQixDQUFBO0FBQzdDLE9BQU8sS0FBSyxNQUFNLE1BQU0sbUJBQW1CLENBQUE7QUFDM0MsT0FBTyxLQUFLLEtBQUssTUFBTSxrQkFBa0IsQ0FBQTtBQUV6QyxPQUFPLEtBQUssQ0FBQyxNQUFNLG1CQUFtQixDQUFBO0FBQ3RDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM3QyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBZ0IsTUFBTSxZQUFZLENBQUE7QUFrQ2hFLG1FQUFtRTtBQUNuRSxNQUFNLE9BQU8sU0FBVSxTQUFRLE9BQU8sQ0FBQyxPQUFPLEVBQWEsQ0FBQyxXQUFXLEVBQUU7SUFDdkUsSUFBSSxFQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDO1FBQ3hCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLEtBQUssQ0FBQTtRQUMxQixPQUFPLENBQ0wsT0FBbUQsRUFDbkQsRUFBRSxDQUNGLE1BQU0sQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQUMsSUFBNEIsRUFBRSxHQUFHLElBQVU7WUFDckUsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLE9BQU8sSUFBSSxLQUFLLENBQUE7WUFFNUMsTUFBTSxhQUFhLEdBQUcsT0FBTyxPQUFPLENBQUMsYUFBYSxLQUFLLFVBQVU7Z0JBQy9ELENBQUMsQ0FBQyxPQUFPLENBQUMsYUFBYSxDQUFDLEdBQUcsSUFBSSxDQUFDO2dCQUNoQyxDQUFDLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQTtZQUV6QixNQUFNLFNBQVMsR0FBVyxL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
1
+ export * from "effect-app/withToast";
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2l0aFRvYXN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3dpdGhUb2FzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLHNCQUFzQixDQUFBIn0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@effect-app/vue",
3
- "version": "4.0.0-beta.248",
3
+ "version": "4.0.0-beta.249",
4
4
  "license": "MIT",
5
5
  "type": "module",
6
6
  "homepage": "https://github.com/effect-ts-app/libs/tree/main/packages/vue",
@@ -11,7 +11,7 @@
11
11
  "@vueuse/core": "^14.3.0",
12
12
  "change-case": "^5.4.4",
13
13
  "query-string": "^9.3.1",
14
- "effect-app": "4.0.0-beta.248"
14
+ "effect-app": "4.0.0-beta.249"
15
15
  },
16
16
  "peerDependencies": {
17
17
  "@effect/atom-vue": "^4.0.0-beta.70",
package/src/runtime.ts CHANGED
@@ -1,56 +1 @@
1
- import { CauseException } from "effect-app/client/errors"
2
- import { type Context } from "effect-app/Context"
3
- import * as Effect from "effect-app/Effect"
4
- import * as Layer from "effect-app/Layer"
5
- import * as Exit from "effect/Exit"
6
- import { flow } from "effect/Function"
7
- import * as Logger from "effect/Logger"
8
- import * as ManagedRuntime from "effect/ManagedRuntime"
9
-
10
- export const makeAppRuntime = Effect.fnUntraced(function*<A, E>(layer: Layer.Layer<A, E>) {
11
- const l = layer.pipe(
12
- Layer.provide(Logger.layer([Logger.consolePretty()]))
13
- ) as Layer.Layer<A>
14
- const mrt = ManagedRuntime.make(l)
15
- yield* mrt.contextEffect
16
- return Object.assign(mrt, {
17
- [Symbol.dispose]() {
18
- return Effect.runSync(mrt.disposeEffect)
19
- },
20
-
21
- [Symbol.asyncDispose]() {
22
- return mrt.dispose()
23
- }
24
- }) // as we initialise here, there is no more error left.
25
- })
26
-
27
- export function initializeSync<A, E>(layer: Layer.Layer<A, E>) {
28
- const runtime = Effect.runSync(makeAppRuntime(layer))
29
- return runtime
30
- }
31
-
32
- export function initializeAsync<A, E>(layer: Layer.Layer<A, E>) {
33
- return Effect
34
- .runPromise(makeAppRuntime(layer))
35
- }
36
-
37
- // we wrap into CauseException because we want to keep the full cause of the failure.
38
- export const makeRunPromise = <T>(services: Context<T>) =>
39
- flow(Effect.runPromiseExitWith(services), (_) =>
40
- _.then(
41
- Exit.match({
42
- onFailure: (cause) => Promise.reject(new CauseException(cause, "runPromise")),
43
- onSuccess: (value) => Promise.resolve(value)
44
- })
45
- ))
46
-
47
- export const makeRunSync = <T>(services: Context<T>) =>
48
- flow(
49
- Effect.runSyncExitWith(services),
50
- Exit.match({
51
- onFailure: (cause) => {
52
- throw new CauseException(cause, "runSync")
53
- },
54
- onSuccess: (value) => value
55
- })
56
- )
1
+ export * from "effect-app/runtime"
package/src/toast.ts CHANGED
@@ -1,54 +1 @@
1
- import * as Context from "effect-app/Context"
2
- import { accessEffectFn } from "effect-app/Context"
3
- import * as Effect from "effect-app/Effect"
4
- import * as Option from "effect-app/Option"
5
-
6
- export type ToastId = string | number
7
- export type ToastOpts = { id?: ToastId; timeout?: number; groupId?: string; requestId?: string }
8
- export type ToastOptsInternal = { id?: ToastId | null; timeout?: number; groupId?: string; requestId?: string }
9
-
10
- export type UseToast = () => {
11
- error: (this: void, message: string, options?: ToastOpts) => ToastId
12
- warning: (this: void, message: string, options?: ToastOpts) => ToastId
13
- success: (this: void, message: string, options?: ToastOpts) => ToastId
14
- info: (this: void, message: string, options?: ToastOpts) => ToastId
15
- dismiss: (this: void, id: ToastId) => void
16
- }
17
-
18
- export class CurrentToastId extends Context.Opaque<CurrentToastId, { toastId: ToastId }>()("CurrentToastId") {}
19
-
20
- /** fallback to CurrentToastId when available unless id is explicitly set to a value or null */
21
- export const wrap = (toast: ReturnType<UseToast>) => {
22
- const wrap = (toastHandler: (message: string, options?: ToastOpts) => ToastId) => {
23
- return (message: string, options?: ToastOptsInternal) =>
24
- Effect.serviceOption(CurrentToastId).pipe(
25
- Effect.flatMap((currentToast) =>
26
- Effect.sync(() => {
27
- const { id: _id, ...rest } = options ?? {}
28
- const id = _id !== undefined
29
- ? _id ?? undefined
30
- : Option.getOrUndefined(Option.map(currentToast, (_) => _.toastId))
31
- // when id is undefined, we may end up with no toast at all..
32
- return toastHandler(message, id !== undefined ? { ...rest, id } : rest)
33
- })
34
- )
35
- )
36
- }
37
- return {
38
- error: wrap(toast.error),
39
- info: wrap(toast.info),
40
- success: wrap(toast.success),
41
- warning: wrap(toast.warning),
42
- dismiss: (toastId: ToastId) => Effect.sync(() => toast.dismiss(toastId))
43
- }
44
- }
45
-
46
- type ToastShape = ReturnType<typeof wrap>
47
-
48
- export class Toast extends Context.Opaque<Toast, ToastShape>()("Toast") {
49
- static readonly error = accessEffectFn(this, "error")
50
- static readonly info = accessEffectFn(this, "info")
51
- static readonly success = accessEffectFn(this, "success")
52
- static readonly warning = accessEffectFn(this, "warning")
53
- static readonly dismiss = accessEffectFn(this, "dismiss")
54
- }
1
+ export * from "effect-app/toast"
package/src/withToast.ts CHANGED
@@ -1,133 +1 @@
1
- import * as Context from "effect-app/Context"
2
- import * as Effect from "effect-app/Effect"
3
- import * as Layer from "effect-app/Layer"
4
- import type * as Option from "effect-app/Option"
5
- import * as S from "effect-app/Schema"
6
- import { wrapEffect } from "effect-app/utils"
7
- import * as Cause from "effect/Cause"
8
- import * as Fiber from "effect/Fiber"
9
- import { CurrentToastId, Toast, type ToastId } from "./toast.js"
10
-
11
- export interface ToastOptions<A, E, Args extends ReadonlyArray<unknown>, WaiR, SucR, ErrR> {
12
- stableToastId?: undefined | string | ((...args: Args) => string | undefined)
13
- timeout?: number
14
- showSpanInfo?: false
15
- groupId?: string
16
- onWaiting:
17
- | string
18
- | ((...args: Args) => string | null)
19
- | null
20
- | ((
21
- ...args: Args
22
- ) => Effect.Effect<string | null, never, WaiR>)
23
- onSuccess:
24
- | string
25
- | ((a: A, ...args: Args) => string | null)
26
- | null
27
- | ((
28
- a: A,
29
- ...args: Args
30
- ) => Effect.Effect<string | null, never, SucR>)
31
- onFailure:
32
- | string
33
- | ((
34
- error: Option.Option<E>,
35
- ...args: Args
36
- ) => string | { level: "warn" | "error"; message: string })
37
- | ((
38
- error: Option.Option<E>,
39
- ...args: Args
40
- ) => Effect.Effect<string | { level: "warn" | "error"; message: string }, never, ErrR>)
41
- }
42
-
43
- // @effect-diagnostics-next-line missingEffectServiceDependency:off
44
- export class WithToast extends Context.Service<WithToast>()("WithToast", {
45
- make: Effect.gen(function*() {
46
- const toast = yield* Toast
47
- return <A, E, Args extends readonly unknown[], R, WaiR = never, SucR = never, ErrR = never>(
48
- options: ToastOptions<A, E, Args, WaiR, SucR, ErrR>
49
- ) =>
50
- Effect.fnUntraced(function*(self: Effect.Effect<A, E, R>, ...args: Args) {
51
- const baseTimeout = options.timeout ?? 3_000
52
-
53
- const stableToastId = typeof options.stableToastId === "function"
54
- ? options.stableToastId(...args)
55
- : options.stableToastId
56
-
57
- const requestId: string = yield* Effect.currentSpan.pipe(
58
- Effect.map((span) => span.traceId),
59
- Effect.orElseSucceed(() => S.StringId.make())
60
- )
61
- const groupId = options.groupId
62
- const meta = { ...(groupId !== undefined ? { groupId } : {}), requestId }
63
-
64
- const t = yield* wrapEffect(options.onWaiting)(...args)
65
- const toastId: ToastId | undefined = t === null
66
- ? stableToastId
67
- : stableToastId ?? `wait-${Math.random().toString(36).slice(2)}`
68
-
69
- const waitingFiber = t === null ? undefined : yield* Effect.forkChild(
70
- Effect.sleep("1 seconds").pipe(
71
- Effect.andThen(toast.info(t, { id: toastId!, timeout: Infinity, ...meta }))
72
- )
73
- )
74
- const interruptWaiting = waitingFiber ? Fiber.interrupt(waitingFiber) : Effect.void
75
-
76
- return yield* self.pipe(
77
- Effect.tap(Effect.fnUntraced(function*(a) {
78
- yield* interruptWaiting
79
- const t = yield* wrapEffect(options.onSuccess)(a, ...args)
80
- if (t === null) {
81
- return
82
- }
83
- yield* toast.success(
84
- t,
85
- toastId !== undefined
86
- ? { id: toastId, timeout: baseTimeout, ...meta }
87
- : { timeout: baseTimeout, ...meta }
88
- )
89
- })),
90
- Effect.tapCause(Effect.fnUntraced(function*(cause) {
91
- yield* interruptWaiting
92
- yield* Effect.logDebug(
93
- "WithToast - caught error cause: " + Cause.squash(cause),
94
- Cause.hasInterruptsOnly(cause),
95
- cause
96
- )
97
-
98
- if (Cause.hasInterruptsOnly(cause)) {
99
- if (toastId) yield* toast.dismiss(toastId)
100
- return
101
- }
102
-
103
- const spanInfo = options.showSpanInfo !== false
104
- ? yield* Effect.currentSpan.pipe(
105
- Effect.map((span) => `\nTrace: ${span.traceId}\nSpan: ${span.spanId}`),
106
- Effect.orElseSucceed(() => "")
107
- )
108
- : ""
109
-
110
- const t = yield* wrapEffect(options.onFailure)(Cause.findErrorOption(cause), ...args)
111
- const opts = { timeout: baseTimeout * 2, ...meta }
112
-
113
- if (typeof t === "object") {
114
- const message = t.message + spanInfo
115
- return t.level === "warn"
116
- ? yield* toast.warning(message, toastId !== undefined ? { ...opts, id: toastId } : opts)
117
- : yield* toast.error(message, toastId !== undefined ? { ...opts, id: toastId } : opts)
118
- }
119
- yield* toast.error(t + spanInfo, toastId !== undefined ? { ...opts, id: toastId } : opts)
120
- }, Effect.uninterruptible)),
121
- toastId !== undefined ? Effect.provideService(CurrentToastId, CurrentToastId.of({ toastId })) : (_) => _
122
- )
123
- })
124
- })
125
- }) {
126
- static readonly DefaultWithoutDependencies = Layer.effect(this, this.make)
127
- static readonly Default = this.DefaultWithoutDependencies
128
-
129
- static readonly handle = <A, E, Args extends Array<unknown>, R, WaiR = never, SucR = never, ErrR = never>(
130
- options: ToastOptions<A, E, Args, WaiR, SucR, ErrR>
131
- ): (self: Effect.Effect<A, E, R>, ...args: Args) => Effect.Effect<A, E, R | WaiR | SucR | ErrR | WithToast> =>
132
- (self, ...args) => this.use((_) => _<A, E, Args, R, WaiR, SucR, ErrR>(options)(self, ...args))
133
- }
1
+ export * from "effect-app/withToast"