@effect-app/infra 1.1.12 → 1.1.14
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 +15 -0
- package/_cjs/errorReporter.cjs +4 -3
- package/_cjs/errorReporter.cjs.map +1 -1
- package/_cjs/services/QueueMaker/errors.cjs +4 -2
- package/_cjs/services/QueueMaker/errors.cjs.map +1 -1
- package/dist/api/reportError.d.ts +2 -2
- package/dist/api/routing/match.d.ts +1 -1
- package/dist/api/setupRequest.d.ts +2 -2
- package/dist/errorReporter.d.ts +2 -1
- package/dist/errorReporter.d.ts.map +1 -1
- package/dist/errorReporter.js +6 -5
- package/dist/services/Operations.d.ts +1 -1
- package/dist/services/QueueMaker/errors.d.ts +3 -3
- package/dist/services/QueueMaker/errors.d.ts.map +1 -1
- package/dist/services/QueueMaker/errors.js +5 -3
- package/dist/services/QueueMaker/memQueue.d.ts +1 -1
- package/dist/services/QueueMaker/sbqueue.d.ts +1 -1
- package/dist/services/RepositoryBase.d.ts +1 -1
- package/dist/services/Store/ContextMapContainer.d.ts +1 -1
- package/dist/services/Store/service.d.ts +1 -1
- package/package.json +4 -4
- package/src/errorReporter.ts +6 -5
- package/src/services/QueueMaker/errors.ts +2 -2
- package/vitest.config.ts.timestamp-1711656440838-19c636fe320df.mjs +0 -0
- package/vitest.config.ts.timestamp-1711724061890-6ecedb0a07fdd.mjs +0 -0
- package/vitest.config.ts.timestamp-1711743489537-da8d9e5f66c9f.mjs +0 -0
- package/vitest.config.ts.timestamp-1711744615239-dcf257a844e01.mjs +37 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 1.1.14
|
|
4
|
+
|
|
5
|
+
### Patch Changes
|
|
6
|
+
|
|
7
|
+
- 9d4f168: disable setParent for queue fork
|
|
8
|
+
|
|
9
|
+
## 1.1.13
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- feat: improve error reported state.
|
|
14
|
+
- Updated dependencies
|
|
15
|
+
- effect-app@1.0.11
|
|
16
|
+
- @effect-app/infra-adapters@1.0.15
|
|
17
|
+
|
|
3
18
|
## 1.1.12
|
|
4
19
|
|
|
5
20
|
### Patch Changes
|
package/_cjs/errorReporter.cjs
CHANGED
|
@@ -27,22 +27,23 @@ function reportError(name) {
|
|
|
27
27
|
yield* $(_effectApp.Effect.logDebug("Interrupted").pipe(_effectApp.Effect.annotateLogs("extras", JSON.stringify(extras ?? {}))));
|
|
28
28
|
return;
|
|
29
29
|
}
|
|
30
|
-
yield* $(reportSentry(cause, name, extras));
|
|
31
30
|
const error = new _errors.CauseException(cause, name);
|
|
31
|
+
yield* $(reportSentry(error, extras));
|
|
32
32
|
yield* $(_effectApp.Effect.logError("Reporting error", cause).pipe(_effectApp.Effect.annotateLogs((0, _utils.dropUndefined)({
|
|
33
33
|
extras,
|
|
34
34
|
__cause__: error.toJSON(),
|
|
35
35
|
__error_name__: name
|
|
36
36
|
}))));
|
|
37
|
+
error[_errors.ErrorReported] = true;
|
|
38
|
+
return error;
|
|
37
39
|
});
|
|
38
40
|
}
|
|
39
|
-
function reportSentry(
|
|
41
|
+
function reportSentry(error, extras) {
|
|
40
42
|
return _RequestContextContainer.RequestContextContainer.getOption.pipe(_effectApp.Effect.map(ctx => {
|
|
41
43
|
const context = _effectApp.Option.getOrUndefined(ctx);
|
|
42
44
|
const scope = new Sentry.Scope();
|
|
43
45
|
if (context) scope.setContext("context", context);
|
|
44
46
|
if (extras) scope.setContext("extras", extras);
|
|
45
|
-
const error = new _errors.CauseException(cause, name);
|
|
46
47
|
scope.setContext("error", error.toJSON());
|
|
47
48
|
Sentry.captureException(error, scope);
|
|
48
49
|
}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorReporter.cjs","names":["_utils","require","Sentry","_interopRequireWildcard","_effectApp","_errors","_RequestContextContainer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","reportError","name","cause","extras","Effect","gen","$","annotateCurrentSpan","Cause","pretty","squashWith","_","Predicate","hasProperty","_tag","isInterrupted","logDebug","pipe","annotateLogs","JSON","stringify","
|
|
1
|
+
{"version":3,"file":"errorReporter.cjs","names":["_utils","require","Sentry","_interopRequireWildcard","_effectApp","_errors","_RequestContextContainer","_getRequireWildcardCache","e","WeakMap","r","t","__esModule","default","has","get","n","__proto__","a","Object","defineProperty","getOwnPropertyDescriptor","u","hasOwnProperty","call","i","set","reportError","name","cause","extras","Effect","gen","$","annotateCurrentSpan","Cause","pretty","squashWith","_","Predicate","hasProperty","_tag","isInterrupted","logDebug","pipe","annotateLogs","JSON","stringify","error","CauseException","reportSentry","logError","dropUndefined","__cause__","toJSON","__error_name__","ErrorReported","RequestContextContainer","getOption","map","ctx","context","Option","getOrUndefined","scope","Scope","setContext","captureException","logWarning","console","reportMessage","message","captureMessage","warn"],"sources":["../src/errorReporter.ts"],"sourcesContent":[null],"mappings":"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","ignoreList":[]}
|
|
@@ -8,7 +8,6 @@ exports.reportFatalQueueError = void 0;
|
|
|
8
8
|
exports.reportNonInterruptedFailure = reportNonInterruptedFailure;
|
|
9
9
|
exports.reportNonInterruptedFailureCause = reportNonInterruptedFailureCause;
|
|
10
10
|
exports.reportQueueError = void 0;
|
|
11
|
-
var _RequestFiberSet = require("@effect-app/infra-adapters/RequestFiberSet");
|
|
12
11
|
var _errorReporter = require("@effect-app/infra/errorReporter");
|
|
13
12
|
var _effectApp = require("effect-app");
|
|
14
13
|
const reportQueueError_ = (0, _errorReporter.reportError)("Queue");
|
|
@@ -24,7 +23,10 @@ const reportQueueError = (cause, extras) => reportQueueError_(cause, extras);
|
|
|
24
23
|
*/
|
|
25
24
|
exports.reportQueueError = reportQueueError;
|
|
26
25
|
function forkDaemonReportQueue(self) {
|
|
27
|
-
return self.pipe(_effectApp.Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
26
|
+
return self.pipe(_effectApp.Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
27
|
+
// for queues not important because they have a kind of producer on publish?
|
|
28
|
+
// setRootParentSpan,
|
|
29
|
+
_effectApp.Effect.forkDaemon);
|
|
28
30
|
}
|
|
29
31
|
const reportFatalQueueError = exports.reportFatalQueueError = (0, _errorReporter.reportError)("FatalQueue");
|
|
30
32
|
function reportNonInterruptedFailure(context) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.cjs","names":["
|
|
1
|
+
{"version":3,"file":"errors.cjs","names":["_errorReporter","require","_effectApp","reportQueueError_","reportError","reportQueueError","cause","extras","exports","forkDaemonReportQueue","self","pipe","Effect","tapErrorCause","reportNonInterruptedFailureCause","forkDaemon","reportFatalQueueError","reportNonInterruptedFailure","context","report","inp","exit","flatMap","result","Exit","match","onFailure","map","onSuccess","sync","Cause","isInterrupted","failCause"],"sources":["../../../src/services/QueueMaker/errors.ts"],"sourcesContent":[null],"mappings":";;;;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AACA,IAAAC,UAAA,GAAAD,OAAA;AAEA,MAAME,iBAAiB,GAAG,IAAAC,0BAAW,EAAC,OAAO,CAAC;AAEvC,MAAMC,gBAAgB,GAAGA,CAAIC,KAAe,EAAEC,MAA4C,KAC/FJ,iBAAiB,CAACG,KAAK,EAAEC,MAAM,CAAC;AAElC;;;;;;;;;AAAAC,OAAA,CAAAH,gBAAA,GAAAA,gBAAA;AASM,SAAUI,qBAAqBA,CAAUC,IAAqB;EAClE,OAAOA,IAAI,CAACC,IAAI,CACdC,iBAAM,CAACC,aAAa,CAACC,gCAAgC,CAAC,EAAE,CAAC,CAAC;EAC1D;EACA;EACAF,iBAAM,CAACG,UAAU,CAClB;AACH;AAEO,MAAMC,qBAAqB,GAAAR,OAAA,CAAAQ,qBAAA,GAAG,IAAAZ,0BAAW,EAC9C,YAAY,CACb;AAEK,SAAUa,2BAA2BA,CAACC,OAAiC;EAC3E,MAAMC,MAAM,GAAGL,gCAAgC,CAACI,OAAO,CAAC;EACxD,OAAiBE,GAAoB,IACnCA,GAAG,CAACT,IAAI,CACNC,iBAAM,CACHS,IAAI,EACPT,iBAAM,CACHU,OAAO,CAAEC,MAAM,IACdC,eAAI,CAACC,KAAK,CAACF,MAAM,EAAE;IACjBG,SAAS,EAAGpB,KAAK,IAAKM,iBAAM,CAACe,GAAG,CAACR,MAAM,CAACb,KAAK,CAAC,EAAE,MAAMiB,MAAM,CAAC;IAC7DK,SAAS,EAAEA,CAAA,KAAMhB,iBAAM,CAACiB,IAAI,CAAC,MAAMN,MAAM;GAC1C,CAAC,CACH,CACJ;AACL;AAEM,SAAUT,gCAAgCA,CAACI,OAAiC;EAChF,OAAWZ,KAAe,IAAkB;IAC1C,IAAIwB,gBAAK,CAACC,aAAa,CAACzB,KAAK,CAAC,EAAE;MAC9B,OAAOM,iBAAM,CAACoB,SAAS,CAAC1B,KAAqB,CAAC;IAChD;IACA,OAAOD,gBAAgB,CAACC,KAAK,EAAEY,OAAO,CAAC;EACzC,CAAC;AACH","ignoreList":[]}
|
|
@@ -9,7 +9,7 @@ import { Effect } from "effect-app";
|
|
|
9
9
|
*
|
|
10
10
|
* @tsplus getter effect/io/Effect forkDaemonReportRequest
|
|
11
11
|
*/
|
|
12
|
-
export declare function forkDaemonReportRequest<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never,
|
|
12
|
+
export declare function forkDaemonReportRequest<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, Exclude<R, import("effect/Tracer").ParentSpan> | RequestFiberSet>;
|
|
13
13
|
/**
|
|
14
14
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
15
15
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -19,5 +19,5 @@ export declare function forkDaemonReportRequest<R, E, A>(self: Effect<A, E, R>):
|
|
|
19
19
|
*
|
|
20
20
|
* @tsplus getter effect/io/Effect forkDaemonReportRequestUnexpected
|
|
21
21
|
*/
|
|
22
|
-
export declare function forkDaemonReportRequestUnexpected<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, Exclude<R, import("effect/Tracer").ParentSpan
|
|
22
|
+
export declare function forkDaemonReportRequestUnexpected<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, RequestFiberSet | Exclude<R, import("effect/Tracer").ParentSpan>>;
|
|
23
23
|
//# sourceMappingURL=reportError.d.ts.map
|
|
@@ -8,5 +8,5 @@ import type { HttpServerRequest, HttpServerResponse } from "effect-app/http";
|
|
|
8
8
|
import type { RequestHandler } from "./base.js";
|
|
9
9
|
import type { Middleware } from "./makeRequestHandler.js";
|
|
10
10
|
export declare const RouteDescriptors: Context.Tag<Ref<RouteDescriptorAny[]>, Ref<RouteDescriptorAny[]>>;
|
|
11
|
-
export declare function match<R, M, PathA extends Struct.Fields, CookieA extends Struct.Fields, QueryA extends Struct.Fields, BodyA extends Struct.Fields, HeaderA extends Struct.Fields, ReqA extends PathA & QueryA & BodyA, ResA extends Struct.Fields, ResE, MiddlewareE, PPath extends `/${string}`, R2, PR, RErr, CTX, Context, Config>(requestHandler: RequestHandler<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, PPath, CTX, Context, Config>, errorHandler: <R>(req: HttpServerRequest.ServerRequest, res: HttpServerResponse.ServerResponse, r2: Effect<HttpServerResponse.ServerResponse, ValidationError | MiddlewareE | ResE, R>) => Effect<HttpServerResponse.ServerResponse, never, Exclude<RErr | R, HttpServerRequest.ServerRequest | HttpRouter.RouteContext | Scope>>, middleware?: Middleware<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, MiddlewareE, PPath, R2, PR, CTX, Context, Config>): Effect.Effect<HttpRouter.Route<import("@effect/platform/Http/ServerError").RequestError, import("../../services/
|
|
11
|
+
export declare function match<R, M, PathA extends Struct.Fields, CookieA extends Struct.Fields, QueryA extends Struct.Fields, BodyA extends Struct.Fields, HeaderA extends Struct.Fields, ReqA extends PathA & QueryA & BodyA, ResA extends Struct.Fields, ResE, MiddlewareE, PPath extends `/${string}`, R2, PR, RErr, CTX, Context, Config>(requestHandler: RequestHandler<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, PPath, CTX, Context, Config>, errorHandler: <R>(req: HttpServerRequest.ServerRequest, res: HttpServerResponse.ServerResponse, r2: Effect<HttpServerResponse.ServerResponse, ValidationError | MiddlewareE | ResE, R>) => Effect<HttpServerResponse.ServerResponse, never, Exclude<RErr | R, HttpServerRequest.ServerRequest | HttpRouter.RouteContext | Scope>>, middleware?: Middleware<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, ResE, MiddlewareE, PPath, R2, PR, CTX, Context, Config>): Effect.Effect<HttpRouter.Route<import("@effect/platform/Http/ServerError").RequestError, import("../../services/RequestContextContainer.js").RequestContextContainer | import("@effect-app/infra-adapters/RequestFiberSet").RequestFiberSet | import("../../services/Store/ContextMapContainer.js").ContextMapContainer | Exclude<R2, Scope.Scope | HttpServerRequest.ServerRequest | HttpRouter.RouteContext> | Exclude<RErr, Scope.Scope | HttpServerRequest.ServerRequest | HttpRouter.RouteContext> | Exclude<Exclude<Exclude<R, import("effect-app/utils").EnforceNonEmptyRecord<M>>, PR>, Scope.Scope | HttpServerRequest.ServerRequest | HttpRouter.RouteContext>>, never, never>;
|
|
12
12
|
//# sourceMappingURL=match.d.ts.map
|
|
@@ -2,8 +2,8 @@ import { Effect } from "effect-app";
|
|
|
2
2
|
import { RequestContext } from "../RequestContext.js";
|
|
3
3
|
import { RequestContextContainer } from "../services/RequestContextContainer.js";
|
|
4
4
|
import { ContextMapContainer } from "../services/Store/ContextMapContainer.js";
|
|
5
|
-
export declare function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext | string): Effect.Effect<A, E,
|
|
6
|
-
export declare function setupExistingRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext | string): Effect.Effect<A, E,
|
|
5
|
+
export declare function setupRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext | string): Effect.Effect<A, E, RequestContextContainer | ContextMapContainer | Exclude<Exclude<R, import("effect/Tracer").ParentSpan>, never>>;
|
|
6
|
+
export declare function setupExistingRequestContext<R, E, A>(self: Effect<A, E, R>, requestContext: RequestContext | string): Effect.Effect<A, E, RequestContextContainer | ContextMapContainer | Exclude<R, never>>;
|
|
7
7
|
/**
|
|
8
8
|
* @tsplus fluent effect/io/Effect updateRequestContext
|
|
9
9
|
*/
|
package/dist/errorReporter.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { Cause, Effect } from "effect-app";
|
|
2
|
-
|
|
2
|
+
import { CauseException } from "./errors.js";
|
|
3
|
+
export declare function reportError(name: string): (cause: Cause<unknown>, extras?: Record<string, unknown>) => Effect.Effect<CauseException<unknown> | undefined, never, never>;
|
|
3
4
|
export declare function logError<E>(name: string): (cause: Cause<E>, extras?: Record<string, unknown>) => Effect.Effect<void, never, never>;
|
|
4
5
|
export declare function captureException(error: unknown): void;
|
|
5
6
|
export declare function reportMessage(message: string, extras?: Record<string, unknown> | undefined): Effect.Effect<void, never, never>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errorReporter.d.ts","sourceRoot":"","sources":["../src/errorReporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAqB,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"errorReporter.d.ts","sourceRoot":"","sources":["../src/errorReporter.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAqB,MAAM,YAAY,CAAA;AAC7D,OAAO,EAAE,cAAc,EAAiB,MAAM,aAAa,CAAA;AAG3D,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,WAEG,MAAM,OAAO,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,sEA+BhE;AAgBD,wBAAgB,QAAQ,CAAC,CAAC,EACxB,IAAI,EAAE,MAAM,WAEG,MAAM,CAAC,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,uCAiB1D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,QAG9C;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,qCAU1F"}
|
package/dist/errorReporter.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { dropUndefined } from "@effect-app/core/utils";
|
|
2
2
|
import * as Sentry from "@sentry/node";
|
|
3
3
|
import { Cause, Effect, Option, Predicate } from "effect-app";
|
|
4
|
-
import { CauseException } from "./errors.js";
|
|
4
|
+
import { CauseException, ErrorReported } from "./errors.js";
|
|
5
5
|
import { RequestContextContainer } from "./services/RequestContextContainer.js";
|
|
6
6
|
export function reportError(name) {
|
|
7
7
|
return (cause, extras) => Effect.gen(function* ($) {
|
|
@@ -16,8 +16,8 @@ export function reportError(name) {
|
|
|
16
16
|
yield* $(Effect.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {}))));
|
|
17
17
|
return;
|
|
18
18
|
}
|
|
19
|
-
yield* $(reportSentry(cause, name, extras));
|
|
20
19
|
const error = new CauseException(cause, name);
|
|
20
|
+
yield* $(reportSentry(error, extras));
|
|
21
21
|
yield* $(Effect
|
|
22
22
|
.logError("Reporting error", cause)
|
|
23
23
|
.pipe(Effect.annotateLogs(dropUndefined({
|
|
@@ -25,9 +25,11 @@ export function reportError(name) {
|
|
|
25
25
|
__cause__: error.toJSON(),
|
|
26
26
|
__error_name__: name
|
|
27
27
|
}))));
|
|
28
|
+
error[ErrorReported] = true;
|
|
29
|
+
return error;
|
|
28
30
|
});
|
|
29
31
|
}
|
|
30
|
-
function reportSentry(
|
|
32
|
+
function reportSentry(error, extras) {
|
|
31
33
|
return RequestContextContainer.getOption.pipe(Effect.map((ctx) => {
|
|
32
34
|
const context = Option.getOrUndefined(ctx);
|
|
33
35
|
const scope = new Sentry.Scope();
|
|
@@ -35,7 +37,6 @@ function reportSentry(cause, name, extras) {
|
|
|
35
37
|
scope.setContext("context", context);
|
|
36
38
|
if (extras)
|
|
37
39
|
scope.setContext("extras", extras);
|
|
38
|
-
const error = new CauseException(cause, name);
|
|
39
40
|
scope.setContext("error", error.toJSON());
|
|
40
41
|
Sentry.captureException(error, scope);
|
|
41
42
|
}));
|
|
@@ -72,4 +73,4 @@ export function reportMessage(message, extras) {
|
|
|
72
73
|
console.warn(message);
|
|
73
74
|
}));
|
|
74
75
|
}
|
|
75
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JSZXBvcnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvclJlcG9ydGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQTtBQUN0RCxPQUFPLEtBQUssTUFBTSxNQUFNLGNBQWMsQ0FBQTtBQUN0QyxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBQzdELE9BQU8sRUFBRSxjQUFjLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFBO0FBQzNELE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLHVDQUF1QyxDQUFBO0FBRS9FLE1BQU0sVUFBVSxXQUFXLENBQ3pCLElBQVk7SUFFWixPQUFPLENBQUMsS0FBcUIsRUFBRSxNQUFnQyxFQUFFLEVBQUUsQ0FDakUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBQyxDQUFDO1FBQ3BCLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsbUJBQW1CLENBQUM7WUFDbEMsbUJBQW1CLEVBQUUsSUFBSTtZQUN6QixtQkFBbUIsRUFBRSxxQkFBcUIsR0FBRyxJQUFJO1lBQ2pELHNCQUFzQixFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQzNDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxVQUFVLENBQ2hDLEtBQUssRUFDTCxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxDQUFDLFdBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxD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
|
|
@@ -47,7 +47,7 @@ declare const Operations_base: (abstract new (service: {
|
|
|
47
47
|
all: Effect.Effect<Operation[], never, never>;
|
|
48
48
|
find: (id: StringId) => Effect.Effect<Option.Option<Operation>, never, never>;
|
|
49
49
|
update: (id: StringId, progress: OperationProgress) => Effect.Effect<void, never, never>;
|
|
50
|
-
}) => X) => X extends Effect<infer A_3, infer E_5, infer R_5> ? Effect<A_3, E_5,
|
|
50
|
+
}) => X) => X extends Effect<infer A_3, infer E_5, infer R_5> ? Effect<A_3, E_5, R_5 | Operations> : Effect<X, never, Operations>;
|
|
51
51
|
};
|
|
52
52
|
export declare class Operations extends Operations_base {
|
|
53
53
|
private static readonly CleanupLive;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Cause, Effect, Exit } from "effect-app";
|
|
2
|
-
export declare const reportQueueError: <E>(cause: Cause<E>, extras?: Record<string, unknown> | undefined) => Effect.Effect<
|
|
2
|
+
export declare const reportQueueError: <E>(cause: Cause<E>, extras?: Record<string, unknown> | undefined) => Effect.Effect<import("effect-app/client/errors").CauseException<unknown> | undefined, never, never>;
|
|
3
3
|
/**
|
|
4
4
|
* Forks the effect into a new fiber attached to the global scope. Because the
|
|
5
5
|
* new fiber is attached to the global scope, when the fiber executing the
|
|
@@ -9,8 +9,8 @@ export declare const reportQueueError: <E>(cause: Cause<E>, extras?: Record<stri
|
|
|
9
9
|
*
|
|
10
10
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
11
11
|
*/
|
|
12
|
-
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never,
|
|
13
|
-
export declare const reportFatalQueueError: (cause: Cause<unknown>, extras?: Record<string, unknown> | undefined) => Effect.Effect<
|
|
12
|
+
export declare function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>): Effect.Effect<import("effect/Fiber").RuntimeFiber<A, E>, never, R>;
|
|
13
|
+
export declare const reportFatalQueueError: (cause: Cause<unknown>, extras?: Record<string, unknown> | undefined) => Effect.Effect<import("effect-app/client/errors").CauseException<unknown> | undefined, never, never>;
|
|
14
14
|
export declare function reportNonInterruptedFailure(context?: Record<string, unknown>): <R, E, A>(inp: Effect<A, E, R>) => Effect<Exit<A, E>, never, R>;
|
|
15
15
|
export declare function reportNonInterruptedFailureCause(context?: Record<string, unknown>): <E>(cause: Cause<E>) => Effect<void>;
|
|
16
16
|
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/services/QueueMaker/errors.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/services/QueueMaker/errors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAIhD,eAAO,MAAM,gBAAgB,aAAc,MAAM,CAAC,CAAC,WAAW,OAAO,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,wGAC/D,CAAA;AAElC;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,sEAOnE;AAED,eAAO,MAAM,qBAAqB,8KAEjC,CAAA;AAED,wBAAgB,2BAA2B,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,kBAErD,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,KAAG,OAAO,KAAK,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAYrE;AAED,wBAAgB,gCAAgC,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,cAC9D,MAAM,CAAC,CAAC,KAAG,OAAO,IAAI,CAAC,CAM1C"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet";
|
|
2
1
|
import { reportError } from "@effect-app/infra/errorReporter";
|
|
3
2
|
import { Cause, Effect, Exit } from "effect-app";
|
|
4
3
|
const reportQueueError_ = reportError("Queue");
|
|
@@ -13,7 +12,10 @@ export const reportQueueError = (cause, extras) => reportQueueError_(cause, extr
|
|
|
13
12
|
* @tsplus getter effect/io/Effect forkDaemonReportQueue
|
|
14
13
|
*/
|
|
15
14
|
export function forkDaemonReportQueue(self) {
|
|
16
|
-
return self.pipe(Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
15
|
+
return self.pipe(Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
16
|
+
// for queues not important because they have a kind of producer on publish?
|
|
17
|
+
// setRootParentSpan,
|
|
18
|
+
Effect.forkDaemon);
|
|
17
19
|
}
|
|
18
20
|
export const reportFatalQueueError = reportError("FatalQueue");
|
|
19
21
|
export function reportNonInterruptedFailure(context) {
|
|
@@ -33,4 +35,4 @@ export function reportNonInterruptedFailureCause(context) {
|
|
|
33
35
|
return reportQueueError(cause, context);
|
|
34
36
|
};
|
|
35
37
|
}
|
|
36
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3NlcnZpY2VzL1F1ZXVlTWFrZXIvZXJyb3JzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUM3RCxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFFaEQsTUFBTSxpQkFBaUIsR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUE7QUFFOUMsTUFBTSxDQUFDLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBSSxLQUFlLEVBQUUsTUFBNEMsRUFBRSxFQUFFLENBQ25HLGlCQUFpQixDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQTtBQUVsQzs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxxQkFBcUIsQ0FBVSxJQUFxQjtJQUNsRSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQ2QsTUFBTSxDQUFDLGFBQWEsQ0FBQyxnQ0FBZ0MsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMxRCw0RUFBNEU7SUFDNUUscUJBQXFCO0lBQ3JCLE1BQU0sQ0FBQyxVQUFVLENBQ2xCLENBQUE7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLE1BQU0scUJBQXFCLEdBQUcsV0FBVyxDQUM5QyxZQUFZLENBQ2IsQ0FBQTtBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxPQUFpQztJQUMzRSxNQUFNLE1BQU0sR0FBRyxnQ0FBZ0MsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUN4RCxPQUFPLENBQVUsR0FBb0IsRUFBZ0MsRUFBRSxDQUNyRSxHQUFHLENBQUMsSUFBSSxDQUNOLE1BQU07U0FDSCxJQUFJLEVBQ1AsTUFBTTtTQUNILE9BQU8sQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQ2xCLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ2pCLFNBQVMsRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDO1FBQzdELFNBQVMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQztLQUMzQyxDQUFDLENBQ0gsQ0FDSixDQUFBO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxnQ0FBZ0MsQ0FBQyxPQUFpQztJQUNoRixPQUFPLENBQUksS0FBZSxFQUFnQixFQUFFO1FBQzFDLElBQUksS0FBSyxDQUFDLGFBQWEsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQy9CLE9BQU8sTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFxQixDQUFDLENBQUE7UUFDaEQsQ0FBQztRQUNELE9BQU8sZ0JBQWdCLENBQUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3pDLENBQUMsQ0FBQTtBQUNILENBQUMifQ==
|
|
@@ -13,6 +13,6 @@ export declare function makeMemQueue<Evt extends {
|
|
|
13
13
|
_tag: string;
|
|
14
14
|
}, EvtE, DrainEvtE>(queueName: string, queueDrainName: string, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
|
|
15
15
|
publish: (messages_0: Evt, ...messages_1: Evt[]) => Effect.Effect<void, never, never>;
|
|
16
|
-
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("../Store/ContextMapContainer.js").ContextMapContainer |
|
|
16
|
+
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, RequestContextContainer | import("../Store/ContextMapContainer.js").ContextMapContainer | Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, never>, Tracer.ParentSpan>>;
|
|
17
17
|
}, never, RequestContextContainer | MemQueue>;
|
|
18
18
|
//# sourceMappingURL=memQueue.d.ts.map
|
|
@@ -13,7 +13,7 @@ export declare function makeServiceBusQueue<Evt extends {
|
|
|
13
13
|
id: StringId;
|
|
14
14
|
_tag: string;
|
|
15
15
|
}, EvtE, DrainEvtE>(queueName: string, queueDrainName: string, schema: S.Schema<Evt, EvtE>, drainSchema: S.Schema<DrainEvt, DrainEvtE>): Effect.Effect<{
|
|
16
|
-
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("
|
|
16
|
+
drain: <DrainE, DrainR>(handleEvent: (ks: DrainEvt) => Effect<void, DrainE, DrainR>, sessionId?: string) => Effect.Effect<never, never, import("effect/Scope").Scope | RequestContextContainer | import("../Store/ContextMapContainer.js").ContextMapContainer | Exclude<Exclude<Exclude<Exclude<DrainR, Tracer.ParentSpan>, never>, Tracer.ParentSpan>, ServiceBusReceiverFactory>>;
|
|
17
17
|
publish: (messages_0: Evt, ...messages_1: Evt[]) => Effect.Effect<void, never, never>;
|
|
18
18
|
}, never, RequestContextContainer | ServiceBusReceiverFactory | import("@azure/service-bus").ServiceBusSender>;
|
|
19
19
|
/**
|
|
@@ -145,7 +145,7 @@ export declare function makeRepo<Evt = never>(): <ItemType extends string, R, En
|
|
|
145
145
|
config?: Omit<StoreConfig<Encoded>, "partitionValue"> & {
|
|
146
146
|
partitionValue?: (a: Encoded) => string;
|
|
147
147
|
};
|
|
148
|
-
}) => Effect.Effect<Repository<T, Encoded, Evt, ItemType>, E,
|
|
148
|
+
}) => Effect.Effect<Repository<T, Encoded, Evt, ItemType>, E, StoreMaker | ContextMapContainer | R | RInitial | R2>;
|
|
149
149
|
Q: Query<Encoded>;
|
|
150
150
|
};
|
|
151
151
|
export declare function makeStore<Encoded extends {
|
|
@@ -20,7 +20,7 @@ declare const ContextMapContainer_base: (abstract new (service: {
|
|
|
20
20
|
use: <X>(body: (_: {
|
|
21
21
|
get: Effect<ContextMap>;
|
|
22
22
|
start: Effect<void>;
|
|
23
|
-
}) => X) => X extends Effect<infer A_3, infer E_4, infer R_4> ? Effect<A_3, E_4,
|
|
23
|
+
}) => X) => X extends Effect<infer A_3, infer E_4, infer R_4> ? Effect<A_3, E_4, R_4 | ContextMapContainer> : Effect<X, never, ContextMapContainer>;
|
|
24
24
|
};
|
|
25
25
|
/**
|
|
26
26
|
* @tsplus companion ContextMapContainer.Ops
|
|
@@ -88,7 +88,7 @@ declare const StoreMaker_base: (abstract new (service: {
|
|
|
88
88
|
make: <Encoded extends {
|
|
89
89
|
id: Id;
|
|
90
90
|
}, Id extends string, R = never, E = never>(name: string, seed?: Effect<Iterable<Encoded>, E, R> | undefined, config?: StoreConfig<Encoded> | undefined) => Effect<Store<Encoded, Id, PersistenceModelType<Encoded>>, E, R>;
|
|
91
|
-
}) => X) => X extends Effect<infer A_3, infer E_4, infer R_4> ? Effect<A_3, E_4,
|
|
91
|
+
}) => X) => X extends Effect<infer A_3, infer E_4, infer R_4> ? Effect<A_3, E_4, StoreMaker | R_4> : Effect<X, never, StoreMaker>;
|
|
92
92
|
};
|
|
93
93
|
/**
|
|
94
94
|
* @tsplus type StoreMaker
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.14",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -19,9 +19,9 @@
|
|
|
19
19
|
"pure-rand": "6.1.0",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
21
|
"@effect-app/core": "1.0.5",
|
|
22
|
-
"@effect-app/infra-adapters": "1.0.
|
|
23
|
-
"effect-app": "1.0.
|
|
24
|
-
"
|
|
22
|
+
"@effect-app/infra-adapters": "1.0.15",
|
|
23
|
+
"@effect-app/schema": "1.0.9",
|
|
24
|
+
"effect-app": "1.0.11"
|
|
25
25
|
},
|
|
26
26
|
"devDependencies": {
|
|
27
27
|
"@babel/cli": "^7.24.1",
|
package/src/errorReporter.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { dropUndefined } from "@effect-app/core/utils"
|
|
2
2
|
import * as Sentry from "@sentry/node"
|
|
3
3
|
import { Cause, Effect, Option, Predicate } from "effect-app"
|
|
4
|
-
import { CauseException } from "./errors.js"
|
|
4
|
+
import { CauseException, ErrorReported } from "./errors.js"
|
|
5
5
|
import { RequestContextContainer } from "./services/RequestContextContainer.js"
|
|
6
6
|
|
|
7
7
|
export function reportError(
|
|
@@ -23,8 +23,9 @@ export function reportError(
|
|
|
23
23
|
yield* $(Effect.logDebug("Interrupted").pipe(Effect.annotateLogs("extras", JSON.stringify(extras ?? {}))))
|
|
24
24
|
return
|
|
25
25
|
}
|
|
26
|
-
yield* $(reportSentry(cause, name, extras))
|
|
27
26
|
const error = new CauseException(cause, name)
|
|
27
|
+
|
|
28
|
+
yield* $(reportSentry(error, extras))
|
|
28
29
|
yield* $(
|
|
29
30
|
Effect
|
|
30
31
|
.logError("Reporting error", cause)
|
|
@@ -34,12 +35,13 @@ export function reportError(
|
|
|
34
35
|
__error_name__: name
|
|
35
36
|
})))
|
|
36
37
|
)
|
|
38
|
+
error[ErrorReported] = true
|
|
39
|
+
return error
|
|
37
40
|
})
|
|
38
41
|
}
|
|
39
42
|
|
|
40
43
|
function reportSentry(
|
|
41
|
-
|
|
42
|
-
name: string,
|
|
44
|
+
error: CauseException<unknown>,
|
|
43
45
|
extras: Record<string, unknown> | undefined
|
|
44
46
|
) {
|
|
45
47
|
return RequestContextContainer.getOption.pipe(Effect.map((ctx) => {
|
|
@@ -47,7 +49,6 @@ function reportSentry(
|
|
|
47
49
|
const scope = new Sentry.Scope()
|
|
48
50
|
if (context) scope.setContext("context", context as unknown as Record<string, unknown>)
|
|
49
51
|
if (extras) scope.setContext("extras", extras)
|
|
50
|
-
const error = new CauseException(cause, name)
|
|
51
52
|
scope.setContext("error", error.toJSON() as any)
|
|
52
53
|
Sentry.captureException(error, scope)
|
|
53
54
|
}))
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { setRootParentSpan } from "@effect-app/infra-adapters/RequestFiberSet"
|
|
2
1
|
import { reportError } from "@effect-app/infra/errorReporter"
|
|
3
2
|
import { Cause, Effect, Exit } from "effect-app"
|
|
4
3
|
|
|
@@ -19,7 +18,8 @@ export const reportQueueError = <E>(cause: Cause<E>, extras?: Record<string, unk
|
|
|
19
18
|
export function forkDaemonReportQueue<R, E, A>(self: Effect<A, E, R>) {
|
|
20
19
|
return self.pipe(
|
|
21
20
|
Effect.tapErrorCause(reportNonInterruptedFailureCause({})),
|
|
22
|
-
|
|
21
|
+
// for queues not important because they have a kind of producer on publish?
|
|
22
|
+
// setRootParentSpan,
|
|
23
23
|
Effect.forkDaemon
|
|
24
24
|
)
|
|
25
25
|
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// packages/infra/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.2.6_@types+node@20.11.30/node_modules/vite/dist/node/index.js";
|
|
3
|
+
|
|
4
|
+
// vite.config.base.ts
|
|
5
|
+
import path from "path";
|
|
6
|
+
import fs from "fs";
|
|
7
|
+
var __vite_injected_original_dirname = "/Users/patrickroza/pj/effect-app/libs";
|
|
8
|
+
function makeConfig(dirName) {
|
|
9
|
+
const prefix = path.resolve(__vite_injected_original_dirname, "packages");
|
|
10
|
+
const packages = fs.readdirSync(prefix).map((f) => prefix + "/" + f).filter((f) => fs.lstatSync(f).isDirectory());
|
|
11
|
+
const cfg = {
|
|
12
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
13
|
+
//plugins: [autoImport],
|
|
14
|
+
test: {
|
|
15
|
+
include: ["./test/**/*.test.{js,mjs,cjs,ts,mts,cts,jsx,tsx}"],
|
|
16
|
+
reporters: "verbose",
|
|
17
|
+
globals: true
|
|
18
|
+
},
|
|
19
|
+
resolve: {
|
|
20
|
+
alias: packages.reduce((acc, cur) => {
|
|
21
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, cur.endsWith("core") ? "dist" : "src");
|
|
22
|
+
return acc;
|
|
23
|
+
}, {})
|
|
24
|
+
// "@effect-app/core/Prelude": path.join(__dirname, "packages/core/src/Prelude.code.ts")
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
console.log(cfg);
|
|
28
|
+
return cfg;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// packages/infra/vitest.config.ts
|
|
32
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
|
|
33
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
34
|
+
export {
|
|
35
|
+
vitest_config_default as default
|
|
36
|
+
};
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiB7XG4gICAgICBhbGlhczogcGFja2FnZXMucmVkdWNlKChhY2MsIGN1cikgPT4geyAvLyB3b3JrYXJvdW5kIGZvciAvUHJlbHVkZSBpc3N1ZVxuICAgICAgYWNjW0pTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKGN1ciArIFwiL3BhY2thZ2UuanNvblwiLCBcInV0Zi04XCIpKS5uYW1lXSA9IHBhdGgucmVzb2x2ZShjdXIsIGN1ci5lbmRzV2l0aChcImNvcmVcIikgPyBcImRpc3RcIiA6IFwic3JjXCIpXG4gICAgICByZXR1cm4gYWNjXG4gICAgfSwgeyB9KSAvLyBcIkBlZmZlY3QtYXBwL2NvcmUvUHJlbHVkZVwiOiBwYXRoLmpvaW4oX19kaXJuYW1lLCBcInBhY2thZ2VzL2NvcmUvc3JjL1ByZWx1ZGUuY29kZS50c1wiKVxuICB9XG4gIH1cbiAgY29uc29sZS5sb2coY2ZnKVxuICByZXR1cm4gY2ZnXG59XG4iXSwKICAibWFwcGluZ3MiOiAiO0FBQ0EsU0FBUyxvQkFBb0I7OztBQ0E3QixPQUFPLFVBQVU7QUFDakIsT0FBTyxRQUFRO0FBRmYsSUFBTSxtQ0FBbUM7QUFnQjFCLFNBQVIsV0FBNEIsU0FBa0I7QUFDbkQsUUFBTSxTQUFTLEtBQUssUUFBUSxrQ0FBVyxVQUFVO0FBQ2pELFFBQU0sV0FBVyxHQUFHLFlBQVksTUFBTSxFQUFFLElBQUksT0FBSyxTQUFTLE1BQU0sQ0FBQyxFQUFFLE9BQU8sT0FBSyxHQUFHLFVBQVUsQ0FBQyxFQUFFLFlBQVksQ0FBRTtBQUM3RyxRQUFNLE1BQU07QUFBQTtBQUFBO0FBQUEsSUFHVixNQUFNO0FBQUEsTUFDSixTQUFVLENBQUMsa0RBQWtEO0FBQUEsTUFDN0QsV0FBVztBQUFBLE1BQ1gsU0FBUztBQUFBLElBQ1g7QUFBQSxJQUNBLFNBQVM7QUFBQSxNQUNQLE9BQU8sU0FBUyxPQUFPLENBQUMsS0FBSyxRQUFRO0FBQ3JDLFlBQUksS0FBSyxNQUFNLEdBQUcsYUFBYSxNQUFNLGlCQUFpQixPQUFPLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxRQUFRLEtBQUssSUFBSSxTQUFTLE1BQU0sSUFBSSxTQUFTLEtBQUs7QUFDL0gsZUFBTztBQUFBLE1BQ1QsR0FBRyxDQUFFLENBQUM7QUFBQTtBQUFBLElBQ1I7QUFBQSxFQUNBO0FBQ0EsVUFBUSxJQUFJLEdBQUc7QUFDZixTQUFPO0FBQ1Q7OztBRHBDQSxJQUFNQSxvQ0FBbUM7QUFJekMsSUFBTyx3QkFBUSxhQUFhLFdBQVdDLGlDQUFTLENBQUM7IiwKICAibmFtZXMiOiBbIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIiwgIl9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9kaXJuYW1lIl0KfQo=
|