@effect-app/infra 0.219.1 → 0.220.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +24 -0
- package/_cjs/api/routing/defaultErrorHandler.cjs +1 -0
- package/_cjs/api/routing/defaultErrorHandler.cjs.map +1 -1
- package/dist/api/routing/base.d.ts +5 -5
- package/dist/api/routing/defaultErrorHandler.d.ts.map +1 -1
- package/dist/api/routing/defaultErrorHandler.js +3 -2
- package/package.json +10 -10
- package/src/api/routing/defaultErrorHandler.ts +2 -0
- package/test/dist/query.test.d.ts.map +1 -1
- package/test/query.test.ts +1 -3
- package/vitest.config.ts.timestamp-1709838404820-cc7b36315f0f8.mjs +33 -0
- package/vitest.config.ts.timestamp-1709838539348-462d114f469a.mjs +33 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,29 @@
|
|
|
1
1
|
# @effect-app/infra
|
|
2
2
|
|
|
3
|
+
## 0.220.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- 51253a2: update packages
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- Updated dependencies [51253a2]
|
|
12
|
+
- @effect-app/fluent-extensions@0.148.0
|
|
13
|
+
- @effect-app/infra-adapters@0.142.0
|
|
14
|
+
- effect-app@0.187.0
|
|
15
|
+
- @effect-app/schema@0.208.0
|
|
16
|
+
- @effect-app/core@0.154.0
|
|
17
|
+
|
|
18
|
+
## 0.219.2
|
|
19
|
+
|
|
20
|
+
### Patch Changes
|
|
21
|
+
|
|
22
|
+
- 0a0b8e9: add ServiceUnavailableError
|
|
23
|
+
- Updated dependencies [0a0b8e9]
|
|
24
|
+
- effect-app@0.186.2
|
|
25
|
+
- @effect-app/infra-adapters@0.141.2
|
|
26
|
+
|
|
3
27
|
## 0.219.1
|
|
4
28
|
|
|
5
29
|
### Patch Changes
|
|
@@ -36,6 +36,7 @@ function defaultErrorHandler(req, res, r2) {
|
|
|
36
36
|
"NotLoggedInError": sendError(401, _errors.NotLoggedInError),
|
|
37
37
|
"UnauthorizedError": sendError(403, _errors.UnauthorizedError),
|
|
38
38
|
"InvalidStateError": sendError(422, _errors.InvalidStateError),
|
|
39
|
+
"ServiceUnavailableError": sendError(503, _errors.ServiceUnavailableError),
|
|
39
40
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
40
41
|
"OptimisticConcurrencyException": sendError(412, _errors.OptimisticConcurrencyException)
|
|
41
42
|
}), _effectApp.Effect
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.cjs","names":["_errorReporter","require","_ServerResponse","_effectApp","_errors","_http","JWTError","Data","TaggedClass","exports","logRequestError","logError","defaultBasicErrorHandler","_req","res","r2","sendError","code","body","Effect","sync","setBody","HttpBody","unsafeJson","pipe","setStatus","tapErrorCause","cause","Cause","isFailure","unit","catchTag","err","errors","catchAll","map","flatMap","die","optimisticConcurrencySchedule","Schedule","once","recurWhile","a","_tag","defaultErrorHandler","req","r3","method","retry","schema","S","encode","orDie","andThen","catchTags","succeed","HttpServerResponse","message","error","status","headers","HttpHeaders","fromInput","ValidationError","NotFoundError","NotLoggedInError","UnauthorizedError","InvalidStateError","OptimisticConcurrencyException"],"sources":["../../../src/api/routing/defaultErrorHandler.ts"],"sourcesContent":[null],"mappings":";;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.cjs","names":["_errorReporter","require","_ServerResponse","_effectApp","_errors","_http","JWTError","Data","TaggedClass","exports","logRequestError","logError","defaultBasicErrorHandler","_req","res","r2","sendError","code","body","Effect","sync","setBody","HttpBody","unsafeJson","pipe","setStatus","tapErrorCause","cause","Cause","isFailure","unit","catchTag","err","errors","catchAll","map","flatMap","die","optimisticConcurrencySchedule","Schedule","once","recurWhile","a","_tag","defaultErrorHandler","req","r3","method","retry","schema","S","encode","orDie","andThen","catchTags","succeed","HttpServerResponse","message","error","status","headers","HttpHeaders","fromInput","ValidationError","NotFoundError","NotLoggedInError","UnauthorizedError","InvalidStateError","ServiceUnavailableError","OptimisticConcurrencyException"],"sources":["../../../src/api/routing/defaultErrorHandler.ts"],"sourcesContent":[null],"mappings":";;;;;;;;AAAA,IAAAA,cAAA,GAAAC,OAAA;AAEA,IAAAC,eAAA,GAAAD,OAAA;AACA,IAAAE,UAAA,GAAAF,OAAA;AAEA,IAAAG,OAAA,GAAAH,OAAA;AASA,IAAAI,KAAA,GAAAJ,OAAA;AAQM,MAAOK,QAAS,SAAQC,eAAI,CAACC,WAAW,CAAC,UAAU,CAMvD;AAAGC,OAAA,CAAAH,QAAA,GAAAA,QAAA;AAEL,MAAMI,eAAe,GAAG,IAAAC,uBAAQ,EAAC,SAAS,CAAC;AAErC,SAAUC,wBAAwBA,CACtCC,IAAqC,EACrCC,GAAsC,EACtCC,EAAiE;EAEjE,MAAMC,SAAS,GAAIC,IAAY,IAAMC,IAAa,IAChDC,iBAAM,CAACC,IAAI,CAAC,MAAM,IAAAC,uBAAO,EAACP,GAAG,EAAEQ,cAAQ,CAACC,UAAU,CAACL,IAAI,CAAC,CAAC,CAACM,IAAI,CAAC,IAAAC,yBAAS,EAACR,IAAI,CAAC,CAAC,CAAC;EAClF,OAAOF,EAAE,CAACS,IAAI,CACZL,iBAAM,CAACO,aAAa,CAAEC,KAAK,IAAKC,gBAAK,CAACC,SAAS,CAACF,KAAK,CAAC,GAAGjB,eAAe,CAACiB,KAAK,CAAC,GAAGR,iBAAM,CAACW,IAAI,CAAC,EAC9FX,iBAAM,CAACY,QAAQ,CAAC,iBAAiB,EAAGC,GAAG,IAAKhB,SAAS,CAAC,GAAG,CAAC,CAACgB,GAAG,CAACC,MAAM,CAAC,CAAC,EACvEd;EACE;EAAA,CACCe,QAAQ,CAAEF,GAAU,IACnBb,iBAAM,CACHR,QAAQ,CACP,gGAAgG,GAAGqB,GAAG,CACvG,CACAR,IAAI,CACHL,iBAAM,CAACgB,GAAG,CAAC,MAAMH,GAAc,CAAC,EAChCb,iBAAM,CAACiB,OAAO,CAACjB,iBAAM,CAACkB,GAAG,CAAC,CAC3B,CACJ,CACJ;AACH;AAEA,MAAMC,6BAA6B,GAAGC,mBAAQ,CAACC,IAAI,IAC9CD,mBAAQ,CAACE,UAAU,CAA8BC,CAAC,IAAKA,CAAC,CAACC,IAAI,KAAK,gCAAgC,CAAC;AAElG,SAAUC,mBAAmBA,CACjCC,GAAoC,EACpC/B,GAAsC,EACtCC,EAA4E;EAE5E,MAAM+B,EAAE,GAAGD,GAAG,CAACE,MAAM,KAAK,OAAO,GAC7B5B,iBAAM,CAAC6B,KAAK,CAACjC,EAAE,EAAEuB,6BAA6B,CAAC,GAC/CvB,EAAE;EACN,MAAMC,SAAS,GAAGA,CAAcC,IAAY,EAAEgC,MAA2B,KAAM/B,IAAQ,IACrFgC,YAAC,CACEC,MAAM,CAACF,MAAM,CAAC,CAAC/B,IAAI,CAAC,CACpBM,IAAI,CACHL,iBAAM,CAACiC,KAAK,EACZjC,iBAAM,CAACkC,OAAO,CAAEnC,IAAI,IAAKJ,GAAG,CAACU,IAAI,CAAC,IAAAC,yBAAS,EAACR,IAAI,CAAC,EAAE,IAAAI,uBAAO,EAACC,cAAQ,CAACC,UAAU,CAACL,IAAI,CAAC,CAAC,CAAC,CAAC,CACxF;EACL,OAAO4B,EAAE,CACNtB,IAAI,CACHL,iBAAM,CAACO,aAAa,CAAEC,KAAK,IAAKC,gBAAK,CAACC,SAAS,CAACF,KAAK,CAAC,GAAGjB,eAAe,CAACiB,KAAK,CAAC,GAAGR,iBAAM,CAACW,IAAI,CAAC,EAC9FX,iBAAM,CACHmC,SAAS,CAAC;IACT,UAAU,EAAGtB,GAAG,IACdb,iBAAM,CAACoC,OAAO,CACZC,wBAAkB,CAACjC,UAAU,CAAC;MAAEkC,OAAO,EAAEzB,GAAG,CAAC0B,KAAK,CAACD;IAAO,CAAE,EAAE;MAC5DE,MAAM,EAAE3B,GAAG,CACR0B,KAAK,CACLC,MAAM;MACTC,OAAO,EAAEC,iBAAW,CAACC,SAAS,CAAC9B,GAAG,CAAC0B,KAAK,CAACE,OAAO;KACjD,CAAC,CACH;IACH,iBAAiB,EAAE5C,SAAS,CAAC,GAAG,EAAE+C,uBAAe,CAAC;IAClD,eAAe,EAAE/C,SAAS,CAAC,GAAG,EAAEgD,qBAAa,CAAC;IAC9C,kBAAkB,EAAEhD,SAAS,CAAC,GAAG,EAAEiD,wBAAgB,CAAC;IACpD,mBAAmB,EAAEjD,SAAS,CAAC,GAAG,EAAEkD,yBAAiB,CAAC;IACtD,mBAAmB,EAAElD,SAAS,CAAC,GAAG,EAAEmD,yBAAiB,CAAC;IACtD,yBAAyB,EAAEnD,SAAS,CAAC,GAAG,EAAEoD,+BAAuB,CAAC;IAClE;IACA,gCAAgC,EAAEpD,SAAS,CAAC,GAAG,EAAEqD,sCAA8B;GAChF,CAAC,EACJlD;EACE;EAAA,CACCe,QAAQ,CAAEF,GAAU,IACnBb,iBAAM,CACHR,QAAQ,CACP,gGAAgG,GAAGqB,GAAG,CACvG,CACAR,IAAI,CACHL,iBAAM,CAACgB,GAAG,CAAC,MAAMH,GAAc,CAAC,EAChCb,iBAAM,CAACiB,OAAO,CAACjB,iBAAM,CAACkB,GAAG,CAAC,CAC3B,CACJ,CACJ;AACL"}
|
|
@@ -37,11 +37,11 @@ export declare function parseRequestParams<PathA extends Struct.Fields, CookieA
|
|
|
37
37
|
params: unknown;
|
|
38
38
|
query: unknown;
|
|
39
39
|
}) => Effect.Effect<{
|
|
40
|
-
body: Option<Simplify<Struct.Type<BodyA
|
|
41
|
-
cookie: Option<Simplify<Struct.Type<CookieA
|
|
42
|
-
headers: Option<Simplify<Struct.Type<HeaderA
|
|
43
|
-
path: Option<Simplify<Struct.Type<PathA
|
|
44
|
-
query: Option<Simplify<Struct.Type<QueryA
|
|
40
|
+
body: Option<Simplify<Struct.Type<BodyA>>>;
|
|
41
|
+
cookie: Option<Simplify<Struct.Type<CookieA>>>;
|
|
42
|
+
headers: Option<Simplify<Struct.Type<HeaderA>>>;
|
|
43
|
+
path: Option<Simplify<Struct.Type<PathA>>>;
|
|
44
|
+
query: Option<Simplify<Struct.Type<QueryA>>>;
|
|
45
45
|
}, ValidationError, never>;
|
|
46
46
|
export declare function makeRequestParsers<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, Errors, PPath extends `/${string}`, CTX, Context, Config>(Request: RequestHandler<R, M, PathA, CookieA, QueryA, BodyA, HeaderA, ReqA, ResA, Errors, PPath, CTX, Context, Config>["Request"]): RequestParsers<PathA, CookieA, QueryA, BodyA, HeaderA>;
|
|
47
47
|
type Decode<A> = (u: unknown) => Effect<A, unknown>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/api/routing/defaultErrorHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,MAAM,EAAe,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"defaultErrorHandler.d.ts","sourceRoot":"","sources":["../../../src/api/routing/defaultErrorHandler.ts"],"names":[],"mappings":"AAGA,OAAO,EAAe,MAAM,EAAe,MAAM,YAAY,CAAA;AAC7D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAA;AAC/D,OAAO,EAOL,eAAe,EAChB,MAAM,0BAA0B,CAAA;AACjC,OAAO,EAAyB,KAAK,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AACnG,OAAO,KAAK,EACV,sBAAsB,EACtB,mBAAmB,EACnB,iBAAiB,EACjB,iBAAiB,IAAI,oBAAoB,EAC1C,MAAM,2BAA2B,CAAA;;;;AAElC,qBAAa,QAAS,SAAQ,cAA6B;IACzD,KAAK,EACD,sBAAsB,GACtB,mBAAmB,GACnB,iBAAiB,GACjB,oBAAoB,CAAA;CACzB,CAAC;CAAG;AAIL,wBAAgB,wBAAwB,CAAC,CAAC,EACxC,IAAI,EAAE,iBAAiB,CAAC,aAAa,EACrC,GAAG,EAAE,kBAAkB,CAAC,cAAc,EACtC,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,eAAe,EAAE,CAAC,CAAC,8DAoBlE;AAKD,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,GAAG,EAAE,iBAAiB,CAAC,aAAa,EACpC,GAAG,EAAE,kBAAkB,CAAC,cAAc,EACtC,EAAE,EAAE,MAAM,CAAC,kBAAkB,CAAC,cAAc,EAAE,eAAe,GAAG,QAAQ,EAAE,CAAC,CAAC,8DAgD7E"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { logError } from "@effect-app/infra/errorReporter";
|
|
2
2
|
import { setBody, setStatus } from "@effect/platform/Http/ServerResponse";
|
|
3
3
|
import { Cause, Data, Effect, S, Schedule } from "effect-app";
|
|
4
|
-
import { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, UnauthorizedError, ValidationError } from "effect-app/client/errors";
|
|
4
|
+
import { InvalidStateError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, ServiceUnavailableError, UnauthorizedError, ValidationError } from "effect-app/client/errors";
|
|
5
5
|
import { HttpBody, HttpHeaders, HttpServerResponse } from "effect-app/http";
|
|
6
6
|
export class JWTError extends Data.TaggedClass("JWTError") {
|
|
7
7
|
}
|
|
@@ -37,6 +37,7 @@ export function defaultErrorHandler(req, res, r2) {
|
|
|
37
37
|
"NotLoggedInError": sendError(401, NotLoggedInError),
|
|
38
38
|
"UnauthorizedError": sendError(403, UnauthorizedError),
|
|
39
39
|
"InvalidStateError": sendError(422, InvalidStateError),
|
|
40
|
+
"ServiceUnavailableError": sendError(503, ServiceUnavailableError),
|
|
40
41
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
41
42
|
"OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
|
|
42
43
|
}), Effect
|
|
@@ -45,4 +46,4 @@ export function defaultErrorHandler(req, res, r2) {
|
|
|
45
46
|
.logError("Program error, compiler probably silenced, got an unsupported Error in Error Channel of Effect" + err)
|
|
46
47
|
.pipe(Effect.map(() => err), Effect.flatMap(Effect.die))));
|
|
47
48
|
}
|
|
48
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
49
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVmYXVsdEVycm9ySGFuZGxlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hcGkvcm91dGluZy9kZWZhdWx0RXJyb3JIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQTtBQUUxRCxPQUFPLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNDQUFzQyxDQUFBO0FBQ3pFLE9BQU8sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBRTdELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsYUFBYSxFQUNiLGdCQUFnQixFQUNoQiw4QkFBOEIsRUFDOUIsdUJBQXVCLEVBQ3ZCLGlCQUFpQixFQUNqQixlQUFlLEVBQ2hCLE1BQU0sMEJBQTBCLENBQUE7QUFDakMsT0FBTyxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQTBCLGtCQUFrQixFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFRbkcsTUFBTSxPQUFPLFFBQVMsU0FBUSxJQUFJLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FNdkQ7Q0FBRztBQUVMLE1BQU0sZUFBZSxHQUFHLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQTtBQUUzQyxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLElBQXFDLEVBQ3JDLEdBQXNDLEVBQ3RDLEVBQWlFO0lBRWpFLE1BQU0sU0FBUyxHQUFHLENBQUMsSUFBWSxFQUFFLEVBQUUsQ0FBQyxDQUFDLElBQWEsRUFBRSxFQUFFLENBQ3BELE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDbEYsT0FBTyxFQUFF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@effect-app/infra",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.220.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -18,17 +18,17 @@
|
|
|
18
18
|
"proper-lockfile": "^4.1.2",
|
|
19
19
|
"pure-rand": "6.0.4",
|
|
20
20
|
"redlock": "^4.2.0",
|
|
21
|
-
"@effect-app/core": "0.
|
|
22
|
-
"effect-app": "0.
|
|
23
|
-
"
|
|
24
|
-
"@effect-app/infra-adapters": "0.
|
|
25
|
-
"@effect-app/schema": "0.
|
|
21
|
+
"@effect-app/core": "0.154.0",
|
|
22
|
+
"@effect-app/fluent-extensions": "0.148.0",
|
|
23
|
+
"effect-app": "0.187.0",
|
|
24
|
+
"@effect-app/infra-adapters": "0.142.0",
|
|
25
|
+
"@effect-app/schema": "0.208.0"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"@babel/cli": "^7.23.9",
|
|
29
29
|
"@sentry/node": "^7.106.1",
|
|
30
30
|
"@types/express": "^4.17.21",
|
|
31
|
-
"@types/node": "~20.11.
|
|
31
|
+
"@types/node": "~20.11.27",
|
|
32
32
|
"@types/proper-lockfile": "^4.1.4",
|
|
33
33
|
"@types/redis": "^2.8.32",
|
|
34
34
|
"@types/redlock": "^4.0.7",
|
|
@@ -43,9 +43,9 @@
|
|
|
43
43
|
},
|
|
44
44
|
"peerDependencies": {
|
|
45
45
|
"express": "^4.18.3",
|
|
46
|
-
"@effect/platform": "^0.48.
|
|
47
|
-
"@effect/schema": "^0.64.
|
|
48
|
-
"effect": "^2.4.
|
|
46
|
+
"@effect/platform": "^0.48.1",
|
|
47
|
+
"@effect/schema": "^0.64.1",
|
|
48
|
+
"effect": "^2.4.5"
|
|
49
49
|
},
|
|
50
50
|
"typesVersions": {
|
|
51
51
|
"*": {
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
NotFoundError,
|
|
9
9
|
NotLoggedInError,
|
|
10
10
|
OptimisticConcurrencyException,
|
|
11
|
+
ServiceUnavailableError,
|
|
11
12
|
UnauthorizedError,
|
|
12
13
|
ValidationError
|
|
13
14
|
} from "effect-app/client/errors"
|
|
@@ -91,6 +92,7 @@ export function defaultErrorHandler<R>(
|
|
|
91
92
|
"NotLoggedInError": sendError(401, NotLoggedInError),
|
|
92
93
|
"UnauthorizedError": sendError(403, UnauthorizedError),
|
|
93
94
|
"InvalidStateError": sendError(422, InvalidStateError),
|
|
95
|
+
"ServiceUnavailableError": sendError(503, ServiceUnavailableError),
|
|
94
96
|
// 412 or 409.. https://stackoverflow.com/questions/19122088/which-http-status-code-to-use-to-reject-a-put-due-to-optimistic-locking-failure
|
|
95
97
|
"OptimisticConcurrencyException": sendError(412, OptimisticConcurrencyException)
|
|
96
98
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../query.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAgB,CAAC,EAAE,MAAM,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcjE,qBAAa,CAAE,SAAQ,
|
|
1
|
+
{"version":3,"file":"query.test.d.ts","sourceRoot":"","sources":["../query.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAQ,KAAK,EAAgB,CAAC,EAAE,MAAM,YAAY,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcjE,qBAAa,CAAE,SAAQ,MAKrB;CAAG;AACL,MAAM,CAAC,OAAO,WAAW,CAAC,CAAC;IACzB,KAAY,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;CAC9C;;;;;;;;;;;;;;;;;;;;;;;;;AAGD,qBAAa,WAAY,SAAQ,gBAA6D;CAAG"}
|
package/test/query.test.ts
CHANGED
|
@@ -16,9 +16,7 @@ export class s extends S.Class<s>()({
|
|
|
16
16
|
id: S.StringId.withDefault,
|
|
17
17
|
displayName: S.NonEmptyString255,
|
|
18
18
|
n: S.Date.withDefault,
|
|
19
|
-
union: S.
|
|
20
|
-
default: () => ({ _tag: "string", value: "hi" }) as S.Schema.Type<typeof someUnion>
|
|
21
|
-
})
|
|
19
|
+
union: someUnion.pipe(S.withDefaultConstructor(() => ({ _tag: "string" as const, value: "hi" })))
|
|
22
20
|
}) {}
|
|
23
21
|
export declare namespace s {
|
|
24
22
|
export type From = S.Schema.Encoded<typeof s>
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// packages/infra/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.1.5_@types+node@20.11.25/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: packages.reduce((acc, cur) => {
|
|
20
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, "src");
|
|
21
|
+
return acc;
|
|
22
|
+
}, {})
|
|
23
|
+
};
|
|
24
|
+
return cfg;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// packages/infra/vitest.config.ts
|
|
28
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
|
|
29
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
30
|
+
export {
|
|
31
|
+
vitest_config_default as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiBwYWNrYWdlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICBhY2NbSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY3VyICsgXCIvcGFja2FnZS5qc29uXCIsIFwidXRmLThcIikpLm5hbWVdID0gcGF0aC5yZXNvbHZlKGN1ciwgXCJzcmNcIilcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCB7fSlcbiAgfVxuICAvL2NvbnNvbGUubG9nKGNmZylcbiAgcmV0dXJuIGNmZ1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVMsb0JBQW9COzs7QUNBN0IsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sUUFBUTtBQUZmLElBQU0sbUNBQW1DO0FBZ0IxQixTQUFSLFdBQTRCLFNBQWtCO0FBQ25ELFFBQU0sU0FBUyxLQUFLLFFBQVEsa0NBQVcsVUFBVTtBQUNqRCxRQUFNLFdBQVcsR0FBRyxZQUFZLE1BQU0sRUFBRSxJQUFJLE9BQUssU0FBUyxNQUFNLENBQUMsRUFBRSxPQUFPLE9BQUssR0FBRyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUU7QUFDN0csUUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR1YsTUFBTTtBQUFBLE1BQ0osU0FBVSxDQUFDLGtEQUFrRDtBQUFBLE1BQzdELFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTLFNBQVMsT0FBTyxDQUFDLEtBQUssUUFBUTtBQUNyQyxVQUFJLEtBQUssTUFBTSxHQUFHLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssUUFBUSxLQUFLLEtBQUs7QUFDL0YsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNQO0FBRUEsU0FBTztBQUNUOzs7QURsQ0EsSUFBTUEsb0NBQW1DO0FBSXpDLElBQU8sd0JBQVEsYUFBYSxXQUFXQyxpQ0FBUyxDQUFDOyIsCiAgIm5hbWVzIjogWyJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// packages/infra/vitest.config.ts
|
|
2
|
+
import { defineConfig } from "file:///Users/patrickroza/pj/effect-app/libs/node_modules/.pnpm/vite@5.1.5_@types+node@20.11.25/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: packages.reduce((acc, cur) => {
|
|
20
|
+
acc[JSON.parse(fs.readFileSync(cur + "/package.json", "utf-8")).name] = path.resolve(cur, "src");
|
|
21
|
+
return acc;
|
|
22
|
+
}, {})
|
|
23
|
+
};
|
|
24
|
+
return cfg;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// packages/infra/vitest.config.ts
|
|
28
|
+
var __vite_injected_original_dirname2 = "/Users/patrickroza/pj/effect-app/libs/packages/infra";
|
|
29
|
+
var vitest_config_default = defineConfig(makeConfig(__vite_injected_original_dirname2));
|
|
30
|
+
export {
|
|
31
|
+
vitest_config_default as default
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsicGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50cyIsICJ2aXRlLmNvbmZpZy5iYXNlLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWyJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYVwiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy9wYWNrYWdlcy9pbmZyYS92aXRlc3QuY29uZmlnLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvcGFja2FnZXMvaW5mcmEvdml0ZXN0LmNvbmZpZy50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCB7IGRlZmluZUNvbmZpZyB9IGZyb20gXCJ2aXRlXCJcbmltcG9ydCBtYWtlQ29uZmlnIGZyb20gXCIuLi8uLi92aXRlLmNvbmZpZy5iYXNlXCJcblxuZXhwb3J0IGRlZmF1bHQgZGVmaW5lQ29uZmlnKG1ha2VDb25maWcoX19kaXJuYW1lKSlcbiIsICJjb25zdCBfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlic1wiO2NvbnN0IF9fdml0ZV9pbmplY3RlZF9vcmlnaW5hbF9maWxlbmFtZSA9IFwiL1VzZXJzL3BhdHJpY2tyb3phL3BqL2VmZmVjdC1hcHAvbGlicy92aXRlLmNvbmZpZy5iYXNlLnRzXCI7Y29uc3QgX192aXRlX2luamVjdGVkX29yaWdpbmFsX2ltcG9ydF9tZXRhX3VybCA9IFwiZmlsZTovLy9Vc2Vycy9wYXRyaWNrcm96YS9wai9lZmZlY3QtYXBwL2xpYnMvdml0ZS5jb25maWcuYmFzZS50c1wiOy8vLyA8cmVmZXJlbmNlIHR5cGVzPVwidml0ZXN0XCIgLz5cbmltcG9ydCBwYXRoIGZyb20gXCJwYXRoXCJcbmltcG9ydCBmcyBmcm9tIFwiZnNcIlxuaW1wb3J0IEF1dG9JbXBvcnQgZnJvbSBcInVucGx1Z2luLWF1dG8taW1wb3J0L3ZpdGVcIlxuaW1wb3J0IHsgZGVmaW5lQ29uZmlnIH0gZnJvbSBcInZpdGVzdC9jb25maWdcIlxuXG4vLyBjb25zdCBhdXRvSW1wb3J0ID0gQXV0b0ltcG9ydCh7XG4vLyAgIGR0czogXCIuL3Rlc3QvYXV0by1pbXBvcnRzLmQudHNcIixcbi8vICAgLy8gaW5jbHVkZTogW1xuLy8gICAvLyAgIC9cXC50ZXN0XFwuW3RqXXN4PyQvIC8vIC50cywgLnRzeCwgLmpzLCAuanN4XG4vLyAgIC8vIF0sXG4vLyAgIGltcG9ydHM6IFtcbi8vICAgICBcInZpdGVzdFwiXG4vLyAgIF1cbi8vIH0pXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VDb25maWcoZGlyTmFtZT86IHN0cmluZykge1xuICBjb25zdCBwcmVmaXggPSBwYXRoLnJlc29sdmUoX19kaXJuYW1lLCBcInBhY2thZ2VzXCIpXG4gIGNvbnN0IHBhY2thZ2VzID0gZnMucmVhZGRpclN5bmMocHJlZml4KS5tYXAoZiA9PiBwcmVmaXggKyBcIi9cIiArIGYpLmZpbHRlcihmID0+IGZzLmxzdGF0U3luYyhmKS5pc0RpcmVjdG9yeSgpIClcbiAgY29uc3QgY2ZnID0ge1xuICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gICAgLy9wbHVnaW5zOiBbYXV0b0ltcG9ydF0sXG4gICAgdGVzdDoge1xuICAgICAgaW5jbHVkZTogIFtcIi4vdGVzdC8qKi8qLnRlc3Que2pzLG1qcyxjanMsdHMsbXRzLGN0cyxqc3gsdHN4fVwiXSxcbiAgICAgIHJlcG9ydGVyczogXCJ2ZXJib3NlXCIsXG4gICAgICBnbG9iYWxzOiB0cnVlXG4gICAgfSxcbiAgICByZXNvbHZlOiBwYWNrYWdlcy5yZWR1Y2UoKGFjYywgY3VyKSA9PiB7XG4gICAgICBhY2NbSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMoY3VyICsgXCIvcGFja2FnZS5qc29uXCIsIFwidXRmLThcIikpLm5hbWVdID0gcGF0aC5yZXNvbHZlKGN1ciwgXCJzcmNcIilcbiAgICAgIHJldHVybiBhY2NcbiAgICB9LCB7fSlcbiAgfVxuICAvL2NvbnNvbGUubG9nKGNmZylcbiAgcmV0dXJuIGNmZ1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjtBQUNBLFNBQVMsb0JBQW9COzs7QUNBN0IsT0FBTyxVQUFVO0FBQ2pCLE9BQU8sUUFBUTtBQUZmLElBQU0sbUNBQW1DO0FBZ0IxQixTQUFSLFdBQTRCLFNBQWtCO0FBQ25ELFFBQU0sU0FBUyxLQUFLLFFBQVEsa0NBQVcsVUFBVTtBQUNqRCxRQUFNLFdBQVcsR0FBRyxZQUFZLE1BQU0sRUFBRSxJQUFJLE9BQUssU0FBUyxNQUFNLENBQUMsRUFBRSxPQUFPLE9BQUssR0FBRyxVQUFVLENBQUMsRUFBRSxZQUFZLENBQUU7QUFDN0csUUFBTSxNQUFNO0FBQUE7QUFBQTtBQUFBLElBR1YsTUFBTTtBQUFBLE1BQ0osU0FBVSxDQUFDLGtEQUFrRDtBQUFBLE1BQzdELFdBQVc7QUFBQSxNQUNYLFNBQVM7QUFBQSxJQUNYO0FBQUEsSUFDQSxTQUFTLFNBQVMsT0FBTyxDQUFDLEtBQUssUUFBUTtBQUNyQyxVQUFJLEtBQUssTUFBTSxHQUFHLGFBQWEsTUFBTSxpQkFBaUIsT0FBTyxDQUFDLEVBQUUsSUFBSSxJQUFJLEtBQUssUUFBUSxLQUFLLEtBQUs7QUFDL0YsYUFBTztBQUFBLElBQ1QsR0FBRyxDQUFDLENBQUM7QUFBQSxFQUNQO0FBRUEsU0FBTztBQUNUOzs7QURsQ0EsSUFBTUEsb0NBQW1DO0FBSXpDLElBQU8sd0JBQVEsYUFBYSxXQUFXQyxpQ0FBUyxDQUFDOyIsCiAgIm5hbWVzIjogWyJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSIsICJfX3ZpdGVfaW5qZWN0ZWRfb3JpZ2luYWxfZGlybmFtZSJdCn0K
|