effect-app 4.0.0-beta.45 → 4.0.0-beta.47
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 +8 -0
- package/dist/client/errors.d.ts +8 -0
- package/dist/client/errors.d.ts.map +1 -1
- package/dist/client/errors.js +25 -1
- package/package.json +2 -2
- package/src/client/errors.ts +24 -0
- package/test/special.test.ts +55 -3
package/CHANGELOG.md
CHANGED
package/dist/client/errors.d.ts
CHANGED
|
@@ -15,6 +15,7 @@ export declare class NotFoundError<ItemType = string> extends NotFoundError_base
|
|
|
15
15
|
cause?: unknown;
|
|
16
16
|
}, disableValidation?: boolean);
|
|
17
17
|
get message(): string;
|
|
18
|
+
toString(): string;
|
|
18
19
|
}
|
|
19
20
|
declare const InvalidStateError_base: S.ErrorClass<InvalidStateError, S.TaggedStruct<"InvalidStateError", {
|
|
20
21
|
readonly message: S.String;
|
|
@@ -24,6 +25,7 @@ export declare class InvalidStateError extends InvalidStateError_base {
|
|
|
24
25
|
message: string;
|
|
25
26
|
cause?: unknown;
|
|
26
27
|
}, disableValidation?: boolean);
|
|
28
|
+
toString(): string;
|
|
27
29
|
}
|
|
28
30
|
declare const ServiceUnavailableError_base: S.ErrorClass<ServiceUnavailableError, S.TaggedStruct<"ServiceUnavailableError", {
|
|
29
31
|
readonly message: S.String;
|
|
@@ -33,6 +35,7 @@ export declare class ServiceUnavailableError extends ServiceUnavailableError_bas
|
|
|
33
35
|
message: string;
|
|
34
36
|
cause?: unknown;
|
|
35
37
|
}, disableValidation?: boolean);
|
|
38
|
+
toString(): string;
|
|
36
39
|
}
|
|
37
40
|
declare const ValidationError_base: S.ErrorClass<ValidationError, S.TaggedStruct<"ValidationError", {
|
|
38
41
|
readonly errors: S.$Array<S.Unknown> & {
|
|
@@ -45,6 +48,7 @@ export declare class ValidationError extends ValidationError_base {
|
|
|
45
48
|
cause?: unknown;
|
|
46
49
|
}, disableValidation?: boolean);
|
|
47
50
|
get message(): string;
|
|
51
|
+
toString(): string;
|
|
48
52
|
}
|
|
49
53
|
declare const NotLoggedInError_base: S.ErrorClass<NotLoggedInError, S.TaggedStruct<"NotLoggedInError", {
|
|
50
54
|
readonly message: S.String;
|
|
@@ -54,6 +58,7 @@ export declare class NotLoggedInError extends NotLoggedInError_base {
|
|
|
54
58
|
message: string;
|
|
55
59
|
cause?: unknown;
|
|
56
60
|
}, disableValidation?: boolean);
|
|
61
|
+
toString(): string;
|
|
57
62
|
}
|
|
58
63
|
declare const LoginError_base: S.ErrorClass<LoginError, S.TaggedStruct<"NotLoggedInError", {
|
|
59
64
|
readonly message: S.String;
|
|
@@ -66,6 +71,7 @@ export declare class LoginError extends LoginError_base {
|
|
|
66
71
|
message: string;
|
|
67
72
|
cause?: unknown;
|
|
68
73
|
}, disableValidation?: boolean);
|
|
74
|
+
toString(): string;
|
|
69
75
|
}
|
|
70
76
|
declare const UnauthorizedError_base: S.ErrorClass<UnauthorizedError, S.TaggedStruct<"UnauthorizedError", {
|
|
71
77
|
readonly message: S.String;
|
|
@@ -75,6 +81,7 @@ export declare class UnauthorizedError extends UnauthorizedError_base {
|
|
|
75
81
|
message: string;
|
|
76
82
|
cause?: unknown;
|
|
77
83
|
}, disableValidation?: boolean);
|
|
84
|
+
toString(): string;
|
|
78
85
|
}
|
|
79
86
|
type OptimisticConcurrencyDetails = {
|
|
80
87
|
readonly type: string;
|
|
@@ -94,6 +101,7 @@ export declare class OptimisticConcurrencyException extends OptimisticConcurrenc
|
|
|
94
101
|
cause?: unknown;
|
|
95
102
|
raw?: unknown;
|
|
96
103
|
}), disableValidation?: boolean);
|
|
104
|
+
toString(): string;
|
|
97
105
|
}
|
|
98
106
|
export declare const SupportedErrors: S.Union<readonly [typeof InvalidStateError, typeof OptimisticConcurrencyException, typeof NotFoundError, typeof NotLoggedInError, typeof LoginError, typeof UnauthorizedError, typeof ValidationError, typeof ServiceUnavailableError]>;
|
|
99
107
|
export type SupportedErrors = S.Schema.Type<typeof SupportedErrors>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,eAAO,MAAM,SAAS,GAAI,OAAO;IAAE,MAAM,IAAI,OAAO,CAAC;IAAC,QAAQ,IAAI,MAAM,CAAA;CAAE,YAczE,CAAA;;;;;AAID,qBAAa,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAE,SAAQ,kBAGpD;gBAEE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EACrD,iBAAiB,CAAC,EAAE,OAAO;IAI7B,IAAa,OAAO,WAEnB;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/client/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AACrC,OAAO,KAAK,CAAC,MAAM,cAAc,CAAA;AAEjC,eAAO,MAAM,SAAS,GAAI,OAAO;IAAE,MAAM,IAAI,OAAO,CAAC;IAAC,QAAQ,IAAI,MAAM,CAAA;CAAE,YAczE,CAAA;;;;;AAID,qBAAa,aAAa,CAAC,QAAQ,GAAG,MAAM,CAAE,SAAQ,kBAGpD;gBAEE,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EACrD,iBAAiB,CAAC,EAAE,OAAO;IAI7B,IAAa,OAAO,WAEnB;IACQ,QAAQ;CAGlB;;;;AAKD,qBAAa,iBAAkB,SAAQ,sBAErC;gBACY,eAAe,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,iBAAiB,CAAC,EAAE,OAAO;IAM9F,QAAQ;CAGlB;;;;AAED,qBAAa,uBAAwB,SAAQ,4BAE3C;gBACY,eAAe,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,iBAAiB,CAAC,EAAE,OAAO;IAM9F,QAAQ;CAGlB;;;;;;AAED,qBAAa,eAAgB,SAAQ,oBAEnC;gBAEE,KAAK,EAAE;QAAE,MAAM,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAC1D,iBAAiB,CAAC,EAAE,OAAO;IAI7B,IAAa,OAAO,WAEnB;IACQ,QAAQ;CAGlB;;;;AAED,qBAAa,gBAAiB,SAAQ,qBAEpC;gBACY,eAAe,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,iBAAiB,CAAC,EAAE,OAAO;IAG/F,QAAQ;CAGlB;;;;AAED;;GAEG;AACH,qBAAa,UAAW,SAAQ,eAE9B;gBACY,eAAe,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,iBAAiB,CAAC,EAAE,OAAO;IAG/F,QAAQ;CAGlB;;;;AAED,qBAAa,iBAAkB,SAAQ,sBAErC;gBACY,eAAe,CAAC,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,iBAAiB,CAAC,EAAE,OAAO;IAG/F,QAAQ;CAGlB;AAED,KAAK,4BAA4B,GAAG;IAClC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAA;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IACrC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CACpC,CAAA;;;;AAED,qBAAa,8BAA+B,SAAQ,mCAGnD;IACC,QAAQ,CAAC,OAAO,CAAC,EAAE,4BAA4B,CAAA;IAC/C,QAAQ,CAAC,GAAG,CAAC,EAAE,OAAO,CAAA;gBAEpB,IAAI,EACA,4BAA4B,GAC5B,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC,EACzD,iBAAiB,CAAC,EAAE,OAAO;IAUpB,QAAQ;CAGlB;AAgBD,eAAO,MAAM,eAAe,yOAG1B,CAAA;AAGF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,eAAe,CAAC,CAAA;AAanE,eAAO,MAAM,cAAc,yOAAkB,CAAA;AAC7C,eAAO,MAAM,WAAW,yOAAkB,CAAA;AAC1C,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,cAAc,CAAC,CAAA;AACjE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,WAAW,CAAC,CAAA;AAE3D,eAAO,MAAM,aAAa,eAA0C,CAAA;AACpE,eAAO,MAAM,eAAe,GAAI,GAAG,OAAO,KAAG,OAC2C,CAAA;AACxF,eAAO,MAAM,YAAY,GAAI,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,CAAC,SAEvD,CAAA;AAED,qBAAa,cAAc,CAAC,CAAC,CAAE,SAAQ,KAAK;IAC9B,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAApD,aAAa,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAW,IAAI,EAAE,MAAM;IAmBzE,QAAQ;;;;;IAQR,MAAM;;;;;;IAYG,QAAQ;CAGlB;AAED,eAAO,MAAM,WAAW,GAAI,OAAO;IAAE,QAAQ,IAAI,OAAO,CAAC;IAAC,QAAQ,IAAI,MAAM,CAAA;CAAE,YAc7E,CAAA"}
|
package/dist/client/errors.js
CHANGED
|
@@ -32,6 +32,9 @@ export class NotFoundError extends TaggedError()("NotFoundError", {
|
|
|
32
32
|
get message() {
|
|
33
33
|
return `Didn't find ${this.type}#${JSON.stringify(this.id)}`;
|
|
34
34
|
}
|
|
35
|
+
toString() {
|
|
36
|
+
return `NotFoundError: ${this.message}`;
|
|
37
|
+
}
|
|
35
38
|
}
|
|
36
39
|
const messageFallback = (messageOrObject) => typeof messageOrObject === "object" ? messageOrObject : { message: messageOrObject ?? "" };
|
|
37
40
|
export class InvalidStateError extends TaggedError()("InvalidStateError", {
|
|
@@ -40,6 +43,9 @@ export class InvalidStateError extends TaggedError()("InvalidStateError", {
|
|
|
40
43
|
constructor(messageOrObject, disableValidation) {
|
|
41
44
|
super(typeof messageOrObject === "object" ? messageOrObject : { message: messageOrObject }, disableValidation);
|
|
42
45
|
}
|
|
46
|
+
toString() {
|
|
47
|
+
return `InvalidStateError: ${this.message}`;
|
|
48
|
+
}
|
|
43
49
|
}
|
|
44
50
|
export class ServiceUnavailableError extends TaggedError()("ServiceUnavailableError", {
|
|
45
51
|
message: S.String
|
|
@@ -47,6 +53,9 @@ export class ServiceUnavailableError extends TaggedError()("ServiceUnavailableEr
|
|
|
47
53
|
constructor(messageOrObject, disableValidation) {
|
|
48
54
|
super(typeof messageOrObject === "object" ? messageOrObject : { message: messageOrObject }, disableValidation);
|
|
49
55
|
}
|
|
56
|
+
toString() {
|
|
57
|
+
return `ServiceUnavailableError: ${this.message}`;
|
|
58
|
+
}
|
|
50
59
|
}
|
|
51
60
|
export class ValidationError extends TaggedError()("ValidationError", {
|
|
52
61
|
errors: S.Array(S.Unknown)
|
|
@@ -57,6 +66,9 @@ export class ValidationError extends TaggedError()("ValidationError", {
|
|
|
57
66
|
get message() {
|
|
58
67
|
return `Validation failed: ${this.errors.map((e) => JSON.stringify(e, undefined, 2)).join(",\n")}`;
|
|
59
68
|
}
|
|
69
|
+
toString() {
|
|
70
|
+
return `ValidationError: ${this.message}`;
|
|
71
|
+
}
|
|
60
72
|
}
|
|
61
73
|
export class NotLoggedInError extends TaggedError()("NotLoggedInError", {
|
|
62
74
|
message: S.String
|
|
@@ -64,6 +76,9 @@ export class NotLoggedInError extends TaggedError()("NotLoggedInError", {
|
|
|
64
76
|
constructor(messageOrObject, disableValidation) {
|
|
65
77
|
super(messageFallback(messageOrObject), disableValidation);
|
|
66
78
|
}
|
|
79
|
+
toString() {
|
|
80
|
+
return `NotLoggedInError: ${this.message}`;
|
|
81
|
+
}
|
|
67
82
|
}
|
|
68
83
|
/**
|
|
69
84
|
* The user carries a valid Userprofile, but there is a problem with the login none the less.
|
|
@@ -74,6 +89,9 @@ export class LoginError extends TaggedError()("NotLoggedInError", {
|
|
|
74
89
|
constructor(messageOrObject, disableValidation) {
|
|
75
90
|
super(messageFallback(messageOrObject), disableValidation);
|
|
76
91
|
}
|
|
92
|
+
toString() {
|
|
93
|
+
return `LoginError: ${this.message}`;
|
|
94
|
+
}
|
|
77
95
|
}
|
|
78
96
|
export class UnauthorizedError extends TaggedError()("UnauthorizedError", {
|
|
79
97
|
message: S.String
|
|
@@ -81,6 +99,9 @@ export class UnauthorizedError extends TaggedError()("UnauthorizedError", {
|
|
|
81
99
|
constructor(messageOrObject, disableValidation) {
|
|
82
100
|
super(messageFallback(messageOrObject), disableValidation);
|
|
83
101
|
}
|
|
102
|
+
toString() {
|
|
103
|
+
return `UnauthorizedError: ${this.message}`;
|
|
104
|
+
}
|
|
84
105
|
}
|
|
85
106
|
export class OptimisticConcurrencyException extends TaggedError()("OptimisticConcurrencyException", { message: S.String }) {
|
|
86
107
|
details;
|
|
@@ -91,6 +112,9 @@ export class OptimisticConcurrencyException extends TaggedError()("OptimisticCon
|
|
|
91
112
|
this.details = args;
|
|
92
113
|
}
|
|
93
114
|
}
|
|
115
|
+
toString() {
|
|
116
|
+
return `OptimisticConcurrencyException: ${this.message}`;
|
|
117
|
+
}
|
|
94
118
|
}
|
|
95
119
|
const MutationOnlyErrors = [
|
|
96
120
|
InvalidStateError,
|
|
@@ -189,4 +213,4 @@ export const tryToReport = (error) => {
|
|
|
189
213
|
}
|
|
190
214
|
}
|
|
191
215
|
};
|
|
192
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
216
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NsaWVudC9lcnJvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0VBQWdFO0FBQ2hFLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQTtBQUMvQyxPQUFPLEtBQUssS0FBSyxNQUFNLGNBQWMsQ0FBQTtBQUNyQyxPQUFPLEtBQUssQ0FBQyxNQUFNLGNBQWMsQ0FBQTtBQUVqQyxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxLQUFnRCxFQUFFLEVBQUU7SUFDNUUsSUFBSSxDQUFDO1FBQ0gsT0FBTyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUE7SUFDdkIsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLElBQUksQ0FBQztZQUNILE9BQU8sS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFBO1FBQ3pCLENBQUM7UUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDO2dCQUNILE9BQU8sNEJBQTRCLEdBQUcsRUFBRSxDQUFBO1lBQzFDLENBQUM7WUFBQyxNQUFNLENBQUM7Z0JBQ1AsT0FBTywwQ0FBMEMsQ0FBQTtZQUNuRCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDLENBQUE7QUFFRCx5REFBeUQ7QUFDekQsaUNBQWlDO0FBQ2pDLE1BQU0sT0FBTyxhQUFpQyxTQUFRLFdBQVcsRUFBMkIsQ0FBQyxlQUFlLEVBQUU7SUFDNUcsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNO0lBQ2QsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPO0NBQ2QsQ0FBQztJQUNBLFlBQ0UsS0FBcUQsRUFDckQsaUJBQTJCO1FBRTNCLEtBQUssQ0FBQyxLQUFZLEVBQUUsaUJBQXdCLENBQUMsQ0FBQTtJQUMvQyxDQUFDO0lBQ0QsSUFBYSxPQUFPO1FBQ2xCLE9BQU8sZUFBZ0IsSUFBWSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFF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
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "effect-app",
|
|
3
|
-
"version": "4.0.0-beta.
|
|
3
|
+
"version": "4.0.0-beta.47",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"dependencies": {
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"fast-check": "~4.6.0",
|
|
23
23
|
"typescript": "~6.0.2",
|
|
24
24
|
"vitest": "^4.1.2",
|
|
25
|
-
"@effect-app/eslint-shared-config": "0.5.7-beta.
|
|
25
|
+
"@effect-app/eslint-shared-config": "0.5.7-beta.6"
|
|
26
26
|
},
|
|
27
27
|
"peerDependencies": {
|
|
28
28
|
"effect": "^4.0.0-beta.43"
|
package/src/client/errors.ts
CHANGED
|
@@ -34,6 +34,9 @@ export class NotFoundError<ItemType = string> extends TaggedError<NotFoundError<
|
|
|
34
34
|
override get message() {
|
|
35
35
|
return `Didn't find ${(this as any).type}#${JSON.stringify((this as any).id)}`
|
|
36
36
|
}
|
|
37
|
+
override toString() {
|
|
38
|
+
return `NotFoundError: ${this.message}`
|
|
39
|
+
}
|
|
37
40
|
}
|
|
38
41
|
|
|
39
42
|
const messageFallback = (messageOrObject?: string | { message: string }) =>
|
|
@@ -48,6 +51,9 @@ export class InvalidStateError extends TaggedError<InvalidStateError>()("Invalid
|
|
|
48
51
|
disableValidation as any
|
|
49
52
|
)
|
|
50
53
|
}
|
|
54
|
+
override toString() {
|
|
55
|
+
return `InvalidStateError: ${this.message}`
|
|
56
|
+
}
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
export class ServiceUnavailableError extends TaggedError<ServiceUnavailableError>()("ServiceUnavailableError", {
|
|
@@ -59,6 +65,9 @@ export class ServiceUnavailableError extends TaggedError<ServiceUnavailableError
|
|
|
59
65
|
disableValidation as any
|
|
60
66
|
)
|
|
61
67
|
}
|
|
68
|
+
override toString() {
|
|
69
|
+
return `ServiceUnavailableError: ${this.message}`
|
|
70
|
+
}
|
|
62
71
|
}
|
|
63
72
|
|
|
64
73
|
export class ValidationError extends TaggedError<ValidationError>()("ValidationError", {
|
|
@@ -73,6 +82,9 @@ export class ValidationError extends TaggedError<ValidationError>()("ValidationE
|
|
|
73
82
|
override get message() {
|
|
74
83
|
return `Validation failed: ${(this as any).errors.map((e: any) => JSON.stringify(e, undefined, 2)).join(",\n")}`
|
|
75
84
|
}
|
|
85
|
+
override toString() {
|
|
86
|
+
return `ValidationError: ${this.message}`
|
|
87
|
+
}
|
|
76
88
|
}
|
|
77
89
|
|
|
78
90
|
export class NotLoggedInError extends TaggedError<NotLoggedInError>()("NotLoggedInError", {
|
|
@@ -81,6 +93,9 @@ export class NotLoggedInError extends TaggedError<NotLoggedInError>()("NotLogged
|
|
|
81
93
|
constructor(messageOrObject?: string | { message: string; cause?: unknown }, disableValidation?: boolean) {
|
|
82
94
|
super(messageFallback(messageOrObject) as any, disableValidation as any)
|
|
83
95
|
}
|
|
96
|
+
override toString() {
|
|
97
|
+
return `NotLoggedInError: ${this.message}`
|
|
98
|
+
}
|
|
84
99
|
}
|
|
85
100
|
|
|
86
101
|
/**
|
|
@@ -92,6 +107,9 @@ export class LoginError extends TaggedError<LoginError>()("NotLoggedInError", {
|
|
|
92
107
|
constructor(messageOrObject?: string | { message: string; cause?: unknown }, disableValidation?: boolean) {
|
|
93
108
|
super(messageFallback(messageOrObject) as any, disableValidation as any)
|
|
94
109
|
}
|
|
110
|
+
override toString() {
|
|
111
|
+
return `LoginError: ${this.message}`
|
|
112
|
+
}
|
|
95
113
|
}
|
|
96
114
|
|
|
97
115
|
export class UnauthorizedError extends TaggedError<UnauthorizedError>()("UnauthorizedError", {
|
|
@@ -100,6 +118,9 @@ export class UnauthorizedError extends TaggedError<UnauthorizedError>()("Unautho
|
|
|
100
118
|
constructor(messageOrObject?: string | { message: string; cause?: unknown }, disableValidation?: boolean) {
|
|
101
119
|
super(messageFallback(messageOrObject) as any, disableValidation as any)
|
|
102
120
|
}
|
|
121
|
+
override toString() {
|
|
122
|
+
return `UnauthorizedError: ${this.message}`
|
|
123
|
+
}
|
|
103
124
|
}
|
|
104
125
|
|
|
105
126
|
type OptimisticConcurrencyDetails = {
|
|
@@ -130,6 +151,9 @@ export class OptimisticConcurrencyException extends TaggedError<OptimisticConcur
|
|
|
130
151
|
this.details = args
|
|
131
152
|
}
|
|
132
153
|
}
|
|
154
|
+
override toString() {
|
|
155
|
+
return `OptimisticConcurrencyException: ${this.message}`
|
|
156
|
+
}
|
|
133
157
|
}
|
|
134
158
|
|
|
135
159
|
const MutationOnlyErrors = [
|
package/test/special.test.ts
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { Option, Predicate, Schema, SchemaGetter } from "effect"
|
|
2
|
-
import
|
|
2
|
+
import { InvalidStateError, LoginError, NotFoundError, NotLoggedInError, OptimisticConcurrencyException, ServiceUnavailableError, UnauthorizedError, ValidationError } from "effect-app/client/errors"
|
|
3
3
|
import { Class, TaggedClass } from "effect-app/Schema/Class"
|
|
4
4
|
import { specialJsonSchemaDocument } from "effect-app/Schema/SpecialJsonSchema"
|
|
5
5
|
import { deduplicateOpenApiSchemas } from "effect-app/Schema/SpecialOpenApi"
|
|
6
|
+
import * as S from "effect/Schema"
|
|
6
7
|
import { describe, expect, it } from "vitest"
|
|
7
8
|
|
|
8
9
|
describe("Class", () => {
|
|
@@ -141,6 +142,55 @@ describe("TaggedClass constructor", () => {
|
|
|
141
142
|
})
|
|
142
143
|
})
|
|
143
144
|
|
|
145
|
+
describe("TaggedError", () => {
|
|
146
|
+
it("InvalidStateError toString includes the message", () => {
|
|
147
|
+
const error = new InvalidStateError("something went wrong")
|
|
148
|
+
expect(error.toString()).toContain("something went wrong")
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
it("NotFoundError toString includes the message", () => {
|
|
152
|
+
const error = new NotFoundError({ type: "User", id: "123" })
|
|
153
|
+
expect(error.toString()).toContain("Didn't find User")
|
|
154
|
+
expect(error.toString()).toContain("123")
|
|
155
|
+
})
|
|
156
|
+
|
|
157
|
+
it("ServiceUnavailableError toString includes the message", () => {
|
|
158
|
+
const error = new ServiceUnavailableError("service down")
|
|
159
|
+
expect(error.toString()).toContain("service down")
|
|
160
|
+
})
|
|
161
|
+
|
|
162
|
+
it("ValidationError toString includes the message", () => {
|
|
163
|
+
const error = new ValidationError({ errors: ["field required"] })
|
|
164
|
+
expect(error.toString()).toContain("Validation failed")
|
|
165
|
+
expect(error.toString()).toContain("field required")
|
|
166
|
+
})
|
|
167
|
+
|
|
168
|
+
it("NotLoggedInError toString includes the message", () => {
|
|
169
|
+
const error = new NotLoggedInError("not logged in")
|
|
170
|
+
expect(error.toString()).toContain("not logged in")
|
|
171
|
+
})
|
|
172
|
+
|
|
173
|
+
it("LoginError toString includes the message", () => {
|
|
174
|
+
const error = new LoginError("login failed")
|
|
175
|
+
expect(error.toString()).toContain("login failed")
|
|
176
|
+
})
|
|
177
|
+
|
|
178
|
+
it("UnauthorizedError toString includes the message", () => {
|
|
179
|
+
const error = new UnauthorizedError("forbidden")
|
|
180
|
+
expect(error.toString()).toContain("forbidden")
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
it("OptimisticConcurrencyException toString includes the message", () => {
|
|
184
|
+
const error = new OptimisticConcurrencyException({ message: "conflict" })
|
|
185
|
+
expect(error.toString()).toContain("conflict")
|
|
186
|
+
})
|
|
187
|
+
|
|
188
|
+
it("OptimisticConcurrencyException from details toString includes the message", () => {
|
|
189
|
+
const error = new OptimisticConcurrencyException({ type: "User", id: "123", code: 409 })
|
|
190
|
+
expect(error.toString()).toContain("Existing User 123 record changed")
|
|
191
|
+
})
|
|
192
|
+
})
|
|
193
|
+
|
|
144
194
|
describe("SpecialJsonSchema", () => {
|
|
145
195
|
it("nullable to optional — from NullOr", () => {
|
|
146
196
|
const nullableDecodedUndefinedEncoded = (schema: Schema.Top) => {
|
|
@@ -357,7 +407,8 @@ describe("SpecialOpenApi", () => {
|
|
|
357
407
|
})
|
|
358
408
|
expect(
|
|
359
409
|
result.paths["/bar"].get.responses[200].content["application/json"].schema
|
|
360
|
-
)
|
|
410
|
+
)
|
|
411
|
+
.toStrictEqual({ $ref: "#/components/schemas/X" })
|
|
361
412
|
})
|
|
362
413
|
|
|
363
414
|
it("does not deduplicate entries with different representations", () => {
|
|
@@ -436,7 +487,8 @@ describe("SpecialOpenApi", () => {
|
|
|
436
487
|
})
|
|
437
488
|
expect(
|
|
438
489
|
result.paths["/baz"].post.requestBody.content["application/json"].schema.anyOf[0]
|
|
439
|
-
)
|
|
490
|
+
)
|
|
491
|
+
.toStrictEqual({ $ref: "#/components/schemas/Y" })
|
|
440
492
|
})
|
|
441
493
|
|
|
442
494
|
it("rewrites $ref pointers inside definitions themselves", () => {
|