@keq-request/exception 5.0.0-beta.1 → 5.0.0-beta.11

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,5 +1,70 @@
1
1
  # Changelog
2
2
 
3
+ ## 5.0.0-beta.11
4
+
5
+ ### Patch Changes
6
+
7
+ - keq@5.0.0-beta.11
8
+
9
+ ## 5.0.0-beta.10
10
+
11
+ ### Patch Changes
12
+
13
+ - Updated dependencies [95908fd]
14
+ - keq@5.0.0-beta.10
15
+
16
+ ## 5.0.0-beta.9
17
+
18
+ ### Patch Changes
19
+
20
+ - keq@5.0.0-beta.9
21
+
22
+ ## 5.0.0-beta.8
23
+
24
+ ### Minor Changes
25
+
26
+ - a183653: **Feat:** add clarifyFetchFailed middleware.
27
+
28
+ ### Patch Changes
29
+
30
+ - keq@5.0.0-beta.8
31
+
32
+ ## 5.0.0-beta.7
33
+
34
+ ### Patch Changes
35
+
36
+ - keq@5.0.0-beta.7
37
+
38
+ ## 5.0.0-beta.6
39
+
40
+ ### Patch Changes
41
+
42
+ - keq@5.0.0-beta.6
43
+
44
+ ## 5.0.0-beta.5
45
+
46
+ ### Patch Changes
47
+
48
+ - keq@5.0.0-beta.5
49
+
50
+ ## 5.0.0-beta.4
51
+
52
+ ### Patch Changes
53
+
54
+ - keq@5.0.0-beta.4
55
+
56
+ ## 5.0.0-beta.3
57
+
58
+ ### Patch Changes
59
+
60
+ - keq@5.0.0-beta.3
61
+
62
+ ## 5.0.0-beta.2
63
+
64
+ ### Patch Changes
65
+
66
+ - keq@5.0.0-beta.2
67
+
3
68
  ## 5.0.0-beta.1
4
69
 
5
70
  ### Major Changes
package/dist/index.d.mts CHANGED
@@ -14,5 +14,8 @@ declare function validateStatusCode(): KeqMiddleware;
14
14
  //#region src/create-exception-by-status-code.d.ts
15
15
  declare function createExceptionByStatusCode(response: Response): Error;
16
16
  //#endregion
17
- export { Check, catchException, createExceptionByStatusCode, throwException, validateStatusCode };
17
+ //#region src/clarify-fetch-failed.d.ts
18
+ declare function clarifyFetchFailed(): KeqMiddleware;
19
+ //#endregion
20
+ export { Check, catchException, clarifyFetchFailed, createExceptionByStatusCode, throwException, validateStatusCode };
18
21
  //# sourceMappingURL=index.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/validate-status-code.ts","../src/create-exception-by-status-code.ts"],"mappings":";;;;KAIY,KAAA,IAAS,GAAA,EAAK,UAAA,KAAe,UAAA;AAAA,iBAEzB,cAAA,CAAe,KAAA,EAAO,KAAA,GAAQ,aAAA;;;iBCF9B,cAAA,CAAe,OAAA,GAAU,CAAA,cAAe,UAAA,SAAmB,aAAA;;;iBCD3D,kBAAA,CAAA,GAAsB,aAAA;;;iBCqBtB,2BAAA,CAA4B,QAAA,EAAU,QAAA,GAAW,KAAA"}
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/validate-status-code.ts","../src/create-exception-by-status-code.ts","../src/clarify-fetch-failed.ts"],"mappings":";;;;KAIY,KAAA,IAAS,GAAA,EAAK,UAAA,KAAe,UAAA;AAAA,iBAEzB,cAAA,CAAe,KAAA,EAAO,KAAA,GAAQ,aAAA;;;iBCF9B,cAAA,CAAe,OAAA,GAAU,CAAA,cAAe,UAAA,SAAmB,aAAA;;;iBCD3D,kBAAA,CAAA,GAAsB,aAAA;;;iBCqBtB,2BAAA,CAA4B,QAAA,EAAU,QAAA,GAAW,KAAA;;;iBCtBjD,kBAAA,CAAA,GAAsB,aAAA"}
package/dist/index.d.ts CHANGED
@@ -14,5 +14,8 @@ declare function validateStatusCode(): KeqMiddleware;
14
14
  //#region src/create-exception-by-status-code.d.ts
15
15
  declare function createExceptionByStatusCode(response: Response): Error;
16
16
  //#endregion
17
- export { Check, catchException, createExceptionByStatusCode, throwException, validateStatusCode };
17
+ //#region src/clarify-fetch-failed.d.ts
18
+ declare function clarifyFetchFailed(): KeqMiddleware;
19
+ //#endregion
20
+ export { Check, catchException, clarifyFetchFailed, createExceptionByStatusCode, throwException, validateStatusCode };
18
21
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/validate-status-code.ts","../src/create-exception-by-status-code.ts"],"mappings":";;;;KAIY,KAAA,IAAS,GAAA,EAAK,UAAA,KAAe,UAAA;AAAA,iBAEzB,cAAA,CAAe,KAAA,EAAO,KAAA,GAAQ,aAAA;;;iBCF9B,cAAA,CAAe,OAAA,GAAU,CAAA,cAAe,UAAA,SAAmB,aAAA;;;iBCD3D,kBAAA,CAAA,GAAsB,aAAA;;;iBCqBtB,2BAAA,CAA4B,QAAA,EAAU,QAAA,GAAW,KAAA"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/validate-status-code.ts","../src/create-exception-by-status-code.ts","../src/clarify-fetch-failed.ts"],"mappings":";;;;KAIY,KAAA,IAAS,GAAA,EAAK,UAAA,KAAe,UAAA;AAAA,iBAEzB,cAAA,CAAe,KAAA,EAAO,KAAA,GAAQ,aAAA;;;iBCF9B,cAAA,CAAe,OAAA,GAAU,CAAA,cAAe,UAAA,SAAmB,aAAA;;;iBCD3D,kBAAA,CAAA,GAAsB,aAAA;;;iBCqBtB,2BAAA,CAA4B,QAAA,EAAU,QAAA,GAAW,KAAA;;;iBCtBjD,kBAAA,CAAA,GAAsB,aAAA"}
package/dist/index.js CHANGED
@@ -73,7 +73,30 @@ function validateStatusCode() {
73
73
  };
74
74
  }
75
75
  //#endregion
76
+ //#region src/clarify-fetch-failed.ts
77
+ function clarifyFetchFailed() {
78
+ return async function clarifyFetchFailedMiddleware(ctx, next) {
79
+ try {
80
+ await next();
81
+ } catch (error) {
82
+ throw resolveCause(error);
83
+ }
84
+ };
85
+ }
86
+ function resolveCause(error) {
87
+ if (!(error instanceof Error)) return error;
88
+ const causes = [];
89
+ let current = error.cause;
90
+ while (current instanceof Error) {
91
+ causes.push(current.message);
92
+ current = current.cause;
93
+ }
94
+ if (!causes.length) return error;
95
+ return new error.constructor(`${error.message}: ${causes.join(" - ")}`, { cause: error.cause });
96
+ }
97
+ //#endregion
76
98
  exports.catchException = catchException;
99
+ exports.clarifyFetchFailed = clarifyFetchFailed;
77
100
  exports.createExceptionByStatusCode = createExceptionByStatusCode;
78
101
  exports.throwException = throwException;
79
102
  exports.validateStatusCode = validateStatusCode;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["BadRequestException","UnauthorizedException","ForbiddenException","NotFoundedException","MethodNotAllowedException","NotAcceptableException","ProxyAuthenticationRequiredException","RequestTimeoutException","ConflictException","PreconditionFailedException","ContentTooLargeException","UriTooLongException","UnsupportedMediaTypeException","ImATeapotException","TooManyRequestsException","RequestException","InternalServerErrorException","NotImplementedException","BadGatewayException","ServiceUnavailableException","GatewayTimeoutException"],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/create-exception-by-status-code.ts","../src/validate-status-code.ts"],"sourcesContent":["import { KeqContext, KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport type Check = (ctx: KeqContext) => Promisable<void>\n\nexport function throwException(check: Check): KeqMiddleware {\n return async function throwException(ctx, next) {\n await next()\n\n await check(ctx)\n }\n}\n","import { KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport function catchException(handler: (e: unknown) => Promisable<void>): KeqMiddleware {\n return async function catchException(ctx, next) {\n try {\n await next()\n } catch (err) {\n await handler(err)\n }\n }\n}\n","import {\n BadGatewayException,\n BadRequestException,\n ConflictException,\n ForbiddenException,\n GatewayTimeoutException,\n InternalServerErrorException,\n NotAcceptableException,\n NotFoundedException,\n PreconditionFailedException,\n RequestException,\n ServiceUnavailableException,\n UnauthorizedException,\n ImATeapotException,\n MethodNotAllowedException,\n UriTooLongException,\n ContentTooLargeException,\n ProxyAuthenticationRequiredException,\n RequestTimeoutException,\n TooManyRequestsException,\n NotImplementedException,\n UnsupportedMediaTypeException,\n} from 'keq'\n\nexport function createExceptionByStatusCode(response: Response): Error {\n const { status, statusText } = response\n\n // 4xx client errors\n if (status >= 400 && status < 500) {\n switch (status) {\n case 400:\n return new BadRequestException(statusText, { response })\n case 401:\n return new UnauthorizedException(statusText, { response })\n case 403:\n return new ForbiddenException(statusText, { response })\n case 404:\n return new NotFoundedException(statusText, { response })\n case 405:\n return new MethodNotAllowedException(statusText, { response })\n case 406:\n return new NotAcceptableException(statusText, { response })\n case 407:\n return new ProxyAuthenticationRequiredException(statusText, { response })\n case 408:\n return new RequestTimeoutException(statusText, { response })\n case 409:\n return new ConflictException(statusText, { response })\n case 412:\n return new PreconditionFailedException(statusText, { response })\n case 413:\n return new ContentTooLargeException(statusText, { response })\n case 414:\n return new UriTooLongException(statusText, { response })\n case 415:\n return new UnsupportedMediaTypeException(statusText, { response })\n case 418:\n return new ImATeapotException(statusText, { response })\n case 429:\n return new TooManyRequestsException(statusText, { response })\n default:\n // Other 4xx errors, don't retry by default\n return new RequestException(status, statusText, { fatal: true, response })\n }\n }\n\n // 5xx server errors\n if (status >= 500) {\n switch (status) {\n case 500:\n return new InternalServerErrorException(statusText, { response })\n case 501:\n return new NotImplementedException(statusText, { response })\n case 502:\n return new BadGatewayException(statusText, { response })\n case 503:\n return new ServiceUnavailableException(statusText, { response })\n case 504:\n return new GatewayTimeoutException(statusText, { response })\n default:\n // Other 5xx errors, retry by default\n return new RequestException(status, statusText, { fatal: false, response })\n }\n }\n\n return new RequestException(status, statusText, { fatal: false, response })\n}\n","import { KeqMiddleware } from 'keq'\nimport { createExceptionByStatusCode } from './create-exception-by-status-code.js'\n\nexport function validateStatusCode(): KeqMiddleware {\n return async function validateStatusCode(context, next) {\n await next()\n\n const response = context.response\n if (!response) return\n\n const { status } = response\n\n // 2xx success status codes - no error\n if (status >= 200 && status < 300) return\n\n // 3xx redirection status codes - no error (handled by fetch)\n if (status >= 300 && status < 400) return\n\n throw createExceptionByStatusCode(response)\n }\n}\n"],"mappings":";;;AAMA,SAAgB,eAAe,OAA6B;AAC1D,QAAO,eAAe,eAAe,KAAK,MAAM;AAC9C,QAAM,MAAM;AAEZ,QAAM,MAAM,IAAI;;;;;ACNpB,SAAgB,eAAe,SAA0D;AACvF,QAAO,eAAe,eAAe,KAAK,MAAM;AAC9C,MAAI;AACF,SAAM,MAAM;WACL,KAAK;AACZ,SAAM,QAAQ,IAAI;;;;;;ACexB,SAAgB,4BAA4B,UAA2B;CACrE,MAAM,EAAE,QAAQ,eAAe;AAG/B,KAAI,UAAU,OAAO,SAAS,IAC5B,SAAQ,QAAR;EACE,KAAK,IACH,QAAO,IAAIA,IAAAA,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAIC,IAAAA,sBAAsB,YAAY,EAAE,UAAU,CAAC;EAC5D,KAAK,IACH,QAAO,IAAIC,IAAAA,mBAAmB,YAAY,EAAE,UAAU,CAAC;EACzD,KAAK,IACH,QAAO,IAAIC,IAAAA,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAIC,IAAAA,0BAA0B,YAAY,EAAE,UAAU,CAAC;EAChE,KAAK,IACH,QAAO,IAAIC,IAAAA,uBAAuB,YAAY,EAAE,UAAU,CAAC;EAC7D,KAAK,IACH,QAAO,IAAIC,IAAAA,qCAAqC,YAAY,EAAE,UAAU,CAAC;EAC3E,KAAK,IACH,QAAO,IAAIC,IAAAA,wBAAwB,YAAY,EAAE,UAAU,CAAC;EAC9D,KAAK,IACH,QAAO,IAAIC,IAAAA,kBAAkB,YAAY,EAAE,UAAU,CAAC;EACxD,KAAK,IACH,QAAO,IAAIC,IAAAA,4BAA4B,YAAY,EAAE,UAAU,CAAC;EAClE,KAAK,IACH,QAAO,IAAIC,IAAAA,yBAAyB,YAAY,EAAE,UAAU,CAAC;EAC/D,KAAK,IACH,QAAO,IAAIC,IAAAA,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAIC,IAAAA,8BAA8B,YAAY,EAAE,UAAU,CAAC;EACpE,KAAK,IACH,QAAO,IAAIC,IAAAA,mBAAmB,YAAY,EAAE,UAAU,CAAC;EACzD,KAAK,IACH,QAAO,IAAIC,IAAAA,yBAAyB,YAAY,EAAE,UAAU,CAAC;EAC/D,QAEE,QAAO,IAAIC,IAAAA,iBAAiB,QAAQ,YAAY;GAAE,OAAO;GAAM;GAAU,CAAC;;AAKhF,KAAI,UAAU,IACZ,SAAQ,QAAR;EACE,KAAK,IACH,QAAO,IAAIC,IAAAA,6BAA6B,YAAY,EAAE,UAAU,CAAC;EACnE,KAAK,IACH,QAAO,IAAIC,IAAAA,wBAAwB,YAAY,EAAE,UAAU,CAAC;EAC9D,KAAK,IACH,QAAO,IAAIC,IAAAA,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAIC,IAAAA,4BAA4B,YAAY,EAAE,UAAU,CAAC;EAClE,KAAK,IACH,QAAO,IAAIC,IAAAA,wBAAwB,YAAY,EAAE,UAAU,CAAC;EAC9D,QAEE,QAAO,IAAIL,IAAAA,iBAAiB,QAAQ,YAAY;GAAE,OAAO;GAAO;GAAU,CAAC;;AAIjF,QAAO,IAAIA,IAAAA,iBAAiB,QAAQ,YAAY;EAAE,OAAO;EAAO;EAAU,CAAC;;;;AClF7E,SAAgB,qBAAoC;AAClD,QAAO,eAAe,mBAAmB,SAAS,MAAM;AACtD,QAAM,MAAM;EAEZ,MAAM,WAAW,QAAQ;AACzB,MAAI,CAAC,SAAU;EAEf,MAAM,EAAE,WAAW;AAGnB,MAAI,UAAU,OAAO,SAAS,IAAK;AAGnC,MAAI,UAAU,OAAO,SAAS,IAAK;AAEnC,QAAM,4BAA4B,SAAS"}
1
+ {"version":3,"file":"index.js","names":["BadRequestException","UnauthorizedException","ForbiddenException","NotFoundedException","MethodNotAllowedException","NotAcceptableException","ProxyAuthenticationRequiredException","RequestTimeoutException","ConflictException","PreconditionFailedException","ContentTooLargeException","UriTooLongException","UnsupportedMediaTypeException","ImATeapotException","TooManyRequestsException","RequestException","InternalServerErrorException","NotImplementedException","BadGatewayException","ServiceUnavailableException","GatewayTimeoutException"],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/create-exception-by-status-code.ts","../src/validate-status-code.ts","../src/clarify-fetch-failed.ts"],"sourcesContent":["import { KeqContext, KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport type Check = (ctx: KeqContext) => Promisable<void>\n\nexport function throwException(check: Check): KeqMiddleware {\n return async function throwException(ctx, next) {\n await next()\n\n await check(ctx)\n }\n}\n","import { KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport function catchException(handler: (e: unknown) => Promisable<void>): KeqMiddleware {\n return async function catchException(ctx, next) {\n try {\n await next()\n } catch (err) {\n await handler(err)\n }\n }\n}\n","import {\n BadGatewayException,\n BadRequestException,\n ConflictException,\n ForbiddenException,\n GatewayTimeoutException,\n InternalServerErrorException,\n NotAcceptableException,\n NotFoundedException,\n PreconditionFailedException,\n RequestException,\n ServiceUnavailableException,\n UnauthorizedException,\n ImATeapotException,\n MethodNotAllowedException,\n UriTooLongException,\n ContentTooLargeException,\n ProxyAuthenticationRequiredException,\n RequestTimeoutException,\n TooManyRequestsException,\n NotImplementedException,\n UnsupportedMediaTypeException,\n} from 'keq'\n\nexport function createExceptionByStatusCode(response: Response): Error {\n const { status, statusText } = response\n\n // 4xx client errors\n if (status >= 400 && status < 500) {\n switch (status) {\n case 400:\n return new BadRequestException(statusText, { response })\n case 401:\n return new UnauthorizedException(statusText, { response })\n case 403:\n return new ForbiddenException(statusText, { response })\n case 404:\n return new NotFoundedException(statusText, { response })\n case 405:\n return new MethodNotAllowedException(statusText, { response })\n case 406:\n return new NotAcceptableException(statusText, { response })\n case 407:\n return new ProxyAuthenticationRequiredException(statusText, { response })\n case 408:\n return new RequestTimeoutException(statusText, { response })\n case 409:\n return new ConflictException(statusText, { response })\n case 412:\n return new PreconditionFailedException(statusText, { response })\n case 413:\n return new ContentTooLargeException(statusText, { response })\n case 414:\n return new UriTooLongException(statusText, { response })\n case 415:\n return new UnsupportedMediaTypeException(statusText, { response })\n case 418:\n return new ImATeapotException(statusText, { response })\n case 429:\n return new TooManyRequestsException(statusText, { response })\n default:\n // Other 4xx errors, don't retry by default\n return new RequestException(status, statusText, { fatal: true, response })\n }\n }\n\n // 5xx server errors\n if (status >= 500) {\n switch (status) {\n case 500:\n return new InternalServerErrorException(statusText, { response })\n case 501:\n return new NotImplementedException(statusText, { response })\n case 502:\n return new BadGatewayException(statusText, { response })\n case 503:\n return new ServiceUnavailableException(statusText, { response })\n case 504:\n return new GatewayTimeoutException(statusText, { response })\n default:\n // Other 5xx errors, retry by default\n return new RequestException(status, statusText, { fatal: false, response })\n }\n }\n\n return new RequestException(status, statusText, { fatal: false, response })\n}\n","import { KeqMiddleware } from 'keq'\nimport { createExceptionByStatusCode } from './create-exception-by-status-code.js'\n\nexport function validateStatusCode(): KeqMiddleware {\n return async function validateStatusCode(context, next) {\n await next()\n\n const response = context.response\n if (!response) return\n\n const { status } = response\n\n // 2xx success status codes - no error\n if (status >= 200 && status < 300) return\n\n // 3xx redirection status codes - no error (handled by fetch)\n if (status >= 300 && status < 400) return\n\n throw createExceptionByStatusCode(response)\n }\n}\n","import type { KeqMiddleware } from 'keq'\n\nexport function clarifyFetchFailed(): KeqMiddleware {\n return async function clarifyFetchFailedMiddleware(ctx, next) {\n try {\n await next()\n } catch (error) {\n throw resolveCause(error)\n }\n }\n}\n\nfunction resolveCause(error: unknown): unknown {\n if (!(error instanceof Error)) return error\n\n const causes: string[] = []\n let current: unknown = error.cause\n while (current instanceof Error) {\n causes.push(current.message)\n current = current.cause\n }\n\n if (!causes.length) return error\n\n const enhanced = new (error.constructor as new (message: string, options?: { cause?: unknown }) => Error)(\n `${error.message}: ${causes.join(' - ')}`,\n { cause: error.cause },\n )\n return enhanced\n}\n"],"mappings":"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"}
package/dist/index.mjs CHANGED
@@ -72,6 +72,28 @@ function validateStatusCode() {
72
72
  };
73
73
  }
74
74
  //#endregion
75
- export { catchException, createExceptionByStatusCode, throwException, validateStatusCode };
75
+ //#region src/clarify-fetch-failed.ts
76
+ function clarifyFetchFailed() {
77
+ return async function clarifyFetchFailedMiddleware(ctx, next) {
78
+ try {
79
+ await next();
80
+ } catch (error) {
81
+ throw resolveCause(error);
82
+ }
83
+ };
84
+ }
85
+ function resolveCause(error) {
86
+ if (!(error instanceof Error)) return error;
87
+ const causes = [];
88
+ let current = error.cause;
89
+ while (current instanceof Error) {
90
+ causes.push(current.message);
91
+ current = current.cause;
92
+ }
93
+ if (!causes.length) return error;
94
+ return new error.constructor(`${error.message}: ${causes.join(" - ")}`, { cause: error.cause });
95
+ }
96
+ //#endregion
97
+ export { catchException, clarifyFetchFailed, createExceptionByStatusCode, throwException, validateStatusCode };
76
98
 
77
99
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/create-exception-by-status-code.ts","../src/validate-status-code.ts"],"sourcesContent":["import { KeqContext, KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport type Check = (ctx: KeqContext) => Promisable<void>\n\nexport function throwException(check: Check): KeqMiddleware {\n return async function throwException(ctx, next) {\n await next()\n\n await check(ctx)\n }\n}\n","import { KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport function catchException(handler: (e: unknown) => Promisable<void>): KeqMiddleware {\n return async function catchException(ctx, next) {\n try {\n await next()\n } catch (err) {\n await handler(err)\n }\n }\n}\n","import {\n BadGatewayException,\n BadRequestException,\n ConflictException,\n ForbiddenException,\n GatewayTimeoutException,\n InternalServerErrorException,\n NotAcceptableException,\n NotFoundedException,\n PreconditionFailedException,\n RequestException,\n ServiceUnavailableException,\n UnauthorizedException,\n ImATeapotException,\n MethodNotAllowedException,\n UriTooLongException,\n ContentTooLargeException,\n ProxyAuthenticationRequiredException,\n RequestTimeoutException,\n TooManyRequestsException,\n NotImplementedException,\n UnsupportedMediaTypeException,\n} from 'keq'\n\nexport function createExceptionByStatusCode(response: Response): Error {\n const { status, statusText } = response\n\n // 4xx client errors\n if (status >= 400 && status < 500) {\n switch (status) {\n case 400:\n return new BadRequestException(statusText, { response })\n case 401:\n return new UnauthorizedException(statusText, { response })\n case 403:\n return new ForbiddenException(statusText, { response })\n case 404:\n return new NotFoundedException(statusText, { response })\n case 405:\n return new MethodNotAllowedException(statusText, { response })\n case 406:\n return new NotAcceptableException(statusText, { response })\n case 407:\n return new ProxyAuthenticationRequiredException(statusText, { response })\n case 408:\n return new RequestTimeoutException(statusText, { response })\n case 409:\n return new ConflictException(statusText, { response })\n case 412:\n return new PreconditionFailedException(statusText, { response })\n case 413:\n return new ContentTooLargeException(statusText, { response })\n case 414:\n return new UriTooLongException(statusText, { response })\n case 415:\n return new UnsupportedMediaTypeException(statusText, { response })\n case 418:\n return new ImATeapotException(statusText, { response })\n case 429:\n return new TooManyRequestsException(statusText, { response })\n default:\n // Other 4xx errors, don't retry by default\n return new RequestException(status, statusText, { fatal: true, response })\n }\n }\n\n // 5xx server errors\n if (status >= 500) {\n switch (status) {\n case 500:\n return new InternalServerErrorException(statusText, { response })\n case 501:\n return new NotImplementedException(statusText, { response })\n case 502:\n return new BadGatewayException(statusText, { response })\n case 503:\n return new ServiceUnavailableException(statusText, { response })\n case 504:\n return new GatewayTimeoutException(statusText, { response })\n default:\n // Other 5xx errors, retry by default\n return new RequestException(status, statusText, { fatal: false, response })\n }\n }\n\n return new RequestException(status, statusText, { fatal: false, response })\n}\n","import { KeqMiddleware } from 'keq'\nimport { createExceptionByStatusCode } from './create-exception-by-status-code.js'\n\nexport function validateStatusCode(): KeqMiddleware {\n return async function validateStatusCode(context, next) {\n await next()\n\n const response = context.response\n if (!response) return\n\n const { status } = response\n\n // 2xx success status codes - no error\n if (status >= 200 && status < 300) return\n\n // 3xx redirection status codes - no error (handled by fetch)\n if (status >= 300 && status < 400) return\n\n throw createExceptionByStatusCode(response)\n }\n}\n"],"mappings":";;AAMA,SAAgB,eAAe,OAA6B;AAC1D,QAAO,eAAe,eAAe,KAAK,MAAM;AAC9C,QAAM,MAAM;AAEZ,QAAM,MAAM,IAAI;;;;;ACNpB,SAAgB,eAAe,SAA0D;AACvF,QAAO,eAAe,eAAe,KAAK,MAAM;AAC9C,MAAI;AACF,SAAM,MAAM;WACL,KAAK;AACZ,SAAM,QAAQ,IAAI;;;;;;ACexB,SAAgB,4BAA4B,UAA2B;CACrE,MAAM,EAAE,QAAQ,eAAe;AAG/B,KAAI,UAAU,OAAO,SAAS,IAC5B,SAAQ,QAAR;EACE,KAAK,IACH,QAAO,IAAI,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAI,sBAAsB,YAAY,EAAE,UAAU,CAAC;EAC5D,KAAK,IACH,QAAO,IAAI,mBAAmB,YAAY,EAAE,UAAU,CAAC;EACzD,KAAK,IACH,QAAO,IAAI,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAI,0BAA0B,YAAY,EAAE,UAAU,CAAC;EAChE,KAAK,IACH,QAAO,IAAI,uBAAuB,YAAY,EAAE,UAAU,CAAC;EAC7D,KAAK,IACH,QAAO,IAAI,qCAAqC,YAAY,EAAE,UAAU,CAAC;EAC3E,KAAK,IACH,QAAO,IAAI,wBAAwB,YAAY,EAAE,UAAU,CAAC;EAC9D,KAAK,IACH,QAAO,IAAI,kBAAkB,YAAY,EAAE,UAAU,CAAC;EACxD,KAAK,IACH,QAAO,IAAI,4BAA4B,YAAY,EAAE,UAAU,CAAC;EAClE,KAAK,IACH,QAAO,IAAI,yBAAyB,YAAY,EAAE,UAAU,CAAC;EAC/D,KAAK,IACH,QAAO,IAAI,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAI,8BAA8B,YAAY,EAAE,UAAU,CAAC;EACpE,KAAK,IACH,QAAO,IAAI,mBAAmB,YAAY,EAAE,UAAU,CAAC;EACzD,KAAK,IACH,QAAO,IAAI,yBAAyB,YAAY,EAAE,UAAU,CAAC;EAC/D,QAEE,QAAO,IAAI,iBAAiB,QAAQ,YAAY;GAAE,OAAO;GAAM;GAAU,CAAC;;AAKhF,KAAI,UAAU,IACZ,SAAQ,QAAR;EACE,KAAK,IACH,QAAO,IAAI,6BAA6B,YAAY,EAAE,UAAU,CAAC;EACnE,KAAK,IACH,QAAO,IAAI,wBAAwB,YAAY,EAAE,UAAU,CAAC;EAC9D,KAAK,IACH,QAAO,IAAI,oBAAoB,YAAY,EAAE,UAAU,CAAC;EAC1D,KAAK,IACH,QAAO,IAAI,4BAA4B,YAAY,EAAE,UAAU,CAAC;EAClE,KAAK,IACH,QAAO,IAAI,wBAAwB,YAAY,EAAE,UAAU,CAAC;EAC9D,QAEE,QAAO,IAAI,iBAAiB,QAAQ,YAAY;GAAE,OAAO;GAAO;GAAU,CAAC;;AAIjF,QAAO,IAAI,iBAAiB,QAAQ,YAAY;EAAE,OAAO;EAAO;EAAU,CAAC;;;;AClF7E,SAAgB,qBAAoC;AAClD,QAAO,eAAe,mBAAmB,SAAS,MAAM;AACtD,QAAM,MAAM;EAEZ,MAAM,WAAW,QAAQ;AACzB,MAAI,CAAC,SAAU;EAEf,MAAM,EAAE,WAAW;AAGnB,MAAI,UAAU,OAAO,SAAS,IAAK;AAGnC,MAAI,UAAU,OAAO,SAAS,IAAK;AAEnC,QAAM,4BAA4B,SAAS"}
1
+ {"version":3,"file":"index.mjs","names":[],"sources":["../src/throw-exception.ts","../src/catch-exception.ts","../src/create-exception-by-status-code.ts","../src/validate-status-code.ts","../src/clarify-fetch-failed.ts"],"sourcesContent":["import { KeqContext, KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport type Check = (ctx: KeqContext) => Promisable<void>\n\nexport function throwException(check: Check): KeqMiddleware {\n return async function throwException(ctx, next) {\n await next()\n\n await check(ctx)\n }\n}\n","import { KeqMiddleware } from 'keq'\nimport { Promisable } from 'type-fest'\n\n\nexport function catchException(handler: (e: unknown) => Promisable<void>): KeqMiddleware {\n return async function catchException(ctx, next) {\n try {\n await next()\n } catch (err) {\n await handler(err)\n }\n }\n}\n","import {\n BadGatewayException,\n BadRequestException,\n ConflictException,\n ForbiddenException,\n GatewayTimeoutException,\n InternalServerErrorException,\n NotAcceptableException,\n NotFoundedException,\n PreconditionFailedException,\n RequestException,\n ServiceUnavailableException,\n UnauthorizedException,\n ImATeapotException,\n MethodNotAllowedException,\n UriTooLongException,\n ContentTooLargeException,\n ProxyAuthenticationRequiredException,\n RequestTimeoutException,\n TooManyRequestsException,\n NotImplementedException,\n UnsupportedMediaTypeException,\n} from 'keq'\n\nexport function createExceptionByStatusCode(response: Response): Error {\n const { status, statusText } = response\n\n // 4xx client errors\n if (status >= 400 && status < 500) {\n switch (status) {\n case 400:\n return new BadRequestException(statusText, { response })\n case 401:\n return new UnauthorizedException(statusText, { response })\n case 403:\n return new ForbiddenException(statusText, { response })\n case 404:\n return new NotFoundedException(statusText, { response })\n case 405:\n return new MethodNotAllowedException(statusText, { response })\n case 406:\n return new NotAcceptableException(statusText, { response })\n case 407:\n return new ProxyAuthenticationRequiredException(statusText, { response })\n case 408:\n return new RequestTimeoutException(statusText, { response })\n case 409:\n return new ConflictException(statusText, { response })\n case 412:\n return new PreconditionFailedException(statusText, { response })\n case 413:\n return new ContentTooLargeException(statusText, { response })\n case 414:\n return new UriTooLongException(statusText, { response })\n case 415:\n return new UnsupportedMediaTypeException(statusText, { response })\n case 418:\n return new ImATeapotException(statusText, { response })\n case 429:\n return new TooManyRequestsException(statusText, { response })\n default:\n // Other 4xx errors, don't retry by default\n return new RequestException(status, statusText, { fatal: true, response })\n }\n }\n\n // 5xx server errors\n if (status >= 500) {\n switch (status) {\n case 500:\n return new InternalServerErrorException(statusText, { response })\n case 501:\n return new NotImplementedException(statusText, { response })\n case 502:\n return new BadGatewayException(statusText, { response })\n case 503:\n return new ServiceUnavailableException(statusText, { response })\n case 504:\n return new GatewayTimeoutException(statusText, { response })\n default:\n // Other 5xx errors, retry by default\n return new RequestException(status, statusText, { fatal: false, response })\n }\n }\n\n return new RequestException(status, statusText, { fatal: false, response })\n}\n","import { KeqMiddleware } from 'keq'\nimport { createExceptionByStatusCode } from './create-exception-by-status-code.js'\n\nexport function validateStatusCode(): KeqMiddleware {\n return async function validateStatusCode(context, next) {\n await next()\n\n const response = context.response\n if (!response) return\n\n const { status } = response\n\n // 2xx success status codes - no error\n if (status >= 200 && status < 300) return\n\n // 3xx redirection status codes - no error (handled by fetch)\n if (status >= 300 && status < 400) return\n\n throw createExceptionByStatusCode(response)\n }\n}\n","import type { KeqMiddleware } from 'keq'\n\nexport function clarifyFetchFailed(): KeqMiddleware {\n return async function clarifyFetchFailedMiddleware(ctx, next) {\n try {\n await next()\n } catch (error) {\n throw resolveCause(error)\n }\n }\n}\n\nfunction resolveCause(error: unknown): unknown {\n if (!(error instanceof Error)) return error\n\n const causes: string[] = []\n let current: unknown = error.cause\n while (current instanceof Error) {\n causes.push(current.message)\n current = current.cause\n }\n\n if (!causes.length) return error\n\n const enhanced = new (error.constructor as new (message: string, options?: { cause?: unknown }) => Error)(\n `${error.message}: ${causes.join(' - ')}`,\n { cause: error.cause },\n )\n return enhanced\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@keq-request/exception",
3
- "version": "5.0.0-beta.1",
3
+ "version": "5.0.0-beta.11",
4
4
  "description": "Request exception for keq",
5
5
  "keywords": [
6
6
  "keq",
@@ -26,27 +26,17 @@
26
26
  "types": "./dist/index.d.ts",
27
27
  "require": "./dist/index.js",
28
28
  "import": "./dist/index.mjs"
29
- },
30
- "./plugins": {
31
- "types": "./dist/plugins/index.d.ts",
32
- "require": "./dist/plugins/index.js",
33
- "import": "./dist/plugins/index.mjs"
34
29
  }
35
30
  },
36
31
  "dependencies": {
37
32
  "type-fest": "^5.6.0"
38
33
  },
39
34
  "devDependencies": {
40
- "@scalar/openapi-types": "^0.8.0",
41
35
  "@types/node": "^20.19.39",
42
- "@keq-request/cli": "5.0.0-beta.1",
43
- "keq": "5.0.0-beta.1"
36
+ "keq": "5.0.0-beta.11"
44
37
  },
45
38
  "peerDependencies": {
46
- "keq": "^5.0.0-beta.1"
47
- },
48
- "optionalDependencies": {
49
- "@keq-request/cli": "5.0.0-beta.1"
39
+ "keq": "^5.0.0-beta.11"
50
40
  },
51
41
  "scripts": {
52
42
  "build": "tsdown",
package/tsdown.config.ts CHANGED
@@ -12,14 +12,4 @@ export default defineConfig([
12
12
  sourcemap: true,
13
13
  clean: true,
14
14
  },
15
- {
16
- entry: ['./plugins/index.ts'],
17
- format: ['cjs', 'esm'],
18
- outDir: 'dist/plugins',
19
- platform: 'neutral',
20
- target: ['node20'],
21
- dts: true,
22
- tsconfig: './plugins/tsconfig.json',
23
- deps: { neverBundle: ['@keq-request/cli', '@scalar/openapi-types'] },
24
- },
25
15
  ])
@@ -1,14 +0,0 @@
1
- import { Compiler, Plugin } from "@keq-request/cli";
2
-
3
- //#region plugins/validate-status-code.d.ts
4
- interface Options {
5
- modules?: string[];
6
- }
7
- declare class ValidateStatusCodePlugin implements Plugin {
8
- private options;
9
- constructor(options?: Options);
10
- apply(compiler: Compiler): void;
11
- }
12
- //#endregion
13
- export { ValidateStatusCodePlugin };
14
- //# sourceMappingURL=index.d.mts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../plugins/validate-status-code.ts"],"mappings":";;;UAIU,OAAA;EACR,OAAA;AAAA;AAAA,cAGW,wBAAA,YAAoC,MAAA;EAAA,QAC3B,OAAA;cAAA,OAAA,GAAS,OAAA;EAE7B,KAAA,CAAM,QAAA,EAAU,QAAA;AAAA"}
@@ -1,14 +0,0 @@
1
- import { Compiler, Plugin } from "@keq-request/cli";
2
-
3
- //#region plugins/validate-status-code.d.ts
4
- interface Options {
5
- modules?: string[];
6
- }
7
- declare class ValidateStatusCodePlugin implements Plugin {
8
- private options;
9
- constructor(options?: Options);
10
- apply(compiler: Compiler): void;
11
- }
12
- //#endregion
13
- export { ValidateStatusCodePlugin };
14
- //# sourceMappingURL=index.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../plugins/validate-status-code.ts"],"mappings":";;;UAIU,OAAA;EACR,OAAA;AAAA;AAAA,cAGW,wBAAA,YAAoC,MAAA;EAAA,QAC3B,OAAA;cAAA,OAAA,GAAS,OAAA;EAE7B,KAAA,CAAM,QAAA,EAAU,QAAA;AAAA"}
@@ -1,54 +0,0 @@
1
- Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
2
- let _keq_request_cli = require("@keq-request/cli");
3
- //#region plugins/validate-status-code.ts
4
- var ValidateStatusCodePlugin = class ValidateStatusCodePlugin {
5
- constructor(options = {}) {
6
- this.options = options;
7
- }
8
- apply(compiler) {
9
- if (this.options.modules && this.options.modules.length === 0) return;
10
- compiler.hooks.afterDownload.tap(ValidateStatusCodePlugin.name, () => {
11
- const documents = compiler.context.documents;
12
- compiler.context.documents = documents.map((document) => {
13
- if (this.options.modules && !this.options.modules.includes(document.module.name)) return document;
14
- const spec = document.specification;
15
- if (!spec.paths || typeof spec.paths !== "object" || spec.paths === null) return document;
16
- const paths = Object.fromEntries(Object.entries(spec.paths).map(([path, pathItem]) => {
17
- if (!pathItem || typeof pathItem !== "object" || pathItem === null) return [path, pathItem];
18
- return [path, Object.fromEntries(Object.entries(pathItem).map(([method, operation]) => {
19
- if (!operation || typeof operation !== "object" || operation === null) return [method, operation];
20
- const responses = operation.responses;
21
- if (!responses) return [method, operation];
22
- return [method, {
23
- ...operation,
24
- responses: Object.fromEntries(Object.entries(responses).filter(([statusCode]) => parseInt(statusCode, 10) < 400))
25
- }];
26
- }))];
27
- }));
28
- return new _keq_request_cli.ApiDocumentV3_1({
29
- ...spec,
30
- paths
31
- }, document.module);
32
- });
33
- });
34
- compiler.hooks.afterCompile.tap(ValidateStatusCodePlugin.name, () => {
35
- const artifact = compiler.context.artifacts.find((artifact) => artifact.id === "request");
36
- if (!artifact) return;
37
- if (!this.options.modules) {
38
- artifact.anchor.append("file:start", "import { validateStatusCode } from '@keq-request/exception'\n");
39
- artifact.anchor.prepend("file:end", "request.use(validateStatusCode())\n");
40
- } else {
41
- artifact.anchor.append("file:start", "import { validateStatusCode } from '@keq-request/exception'\n");
42
- artifact.anchor.prepend("file:end", [
43
- "request",
44
- " .useRouter()",
45
- ...this.options.modules.map((moduleName) => ` .module(${JSON.stringify(moduleName)}, validateStatusCode())`),
46
- ""
47
- ].join("\n"));
48
- }
49
- return artifact;
50
- });
51
- }
52
- };
53
- //#endregion
54
- exports.ValidateStatusCodePlugin = ValidateStatusCodePlugin;
@@ -1,55 +0,0 @@
1
- import { ApiDocumentV3_1 } from "@keq-request/cli";
2
- //#region plugins/validate-status-code.ts
3
- var ValidateStatusCodePlugin = class ValidateStatusCodePlugin {
4
- constructor(options = {}) {
5
- this.options = options;
6
- }
7
- apply(compiler) {
8
- if (this.options.modules && this.options.modules.length === 0) return;
9
- compiler.hooks.afterDownload.tap(ValidateStatusCodePlugin.name, () => {
10
- const documents = compiler.context.documents;
11
- compiler.context.documents = documents.map((document) => {
12
- if (this.options.modules && !this.options.modules.includes(document.module.name)) return document;
13
- const spec = document.specification;
14
- if (!spec.paths || typeof spec.paths !== "object" || spec.paths === null) return document;
15
- const paths = Object.fromEntries(Object.entries(spec.paths).map(([path, pathItem]) => {
16
- if (!pathItem || typeof pathItem !== "object" || pathItem === null) return [path, pathItem];
17
- return [path, Object.fromEntries(Object.entries(pathItem).map(([method, operation]) => {
18
- if (!operation || typeof operation !== "object" || operation === null) return [method, operation];
19
- const responses = operation.responses;
20
- if (!responses) return [method, operation];
21
- return [method, {
22
- ...operation,
23
- responses: Object.fromEntries(Object.entries(responses).filter(([statusCode]) => parseInt(statusCode, 10) < 400))
24
- }];
25
- }))];
26
- }));
27
- return new ApiDocumentV3_1({
28
- ...spec,
29
- paths
30
- }, document.module);
31
- });
32
- });
33
- compiler.hooks.afterCompile.tap(ValidateStatusCodePlugin.name, () => {
34
- const artifact = compiler.context.artifacts.find((artifact) => artifact.id === "request");
35
- if (!artifact) return;
36
- if (!this.options.modules) {
37
- artifact.anchor.append("file:start", "import { validateStatusCode } from '@keq-request/exception'\n");
38
- artifact.anchor.prepend("file:end", "request.use(validateStatusCode())\n");
39
- } else {
40
- artifact.anchor.append("file:start", "import { validateStatusCode } from '@keq-request/exception'\n");
41
- artifact.anchor.prepend("file:end", [
42
- "request",
43
- " .useRouter()",
44
- ...this.options.modules.map((moduleName) => ` .module(${JSON.stringify(moduleName)}, validateStatusCode())`),
45
- ""
46
- ].join("\n"));
47
- }
48
- return artifact;
49
- });
50
- }
51
- };
52
- //#endregion
53
- export { ValidateStatusCodePlugin };
54
-
55
- //# sourceMappingURL=index.mjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../plugins/validate-status-code.ts"],"sourcesContent":["import { ApiDocumentV3_1, Artifact, Compiler, Plugin } from '@keq-request/cli'\nimport type { OpenAPIV3_1 } from '@scalar/openapi-types'\n\n\ninterface Options {\n modules?: string[]\n}\n\nexport class ValidateStatusCodePlugin implements Plugin {\n constructor(private options: Options = {}) {}\n\n apply(compiler: Compiler): void {\n if (this.options.modules && this.options.modules.length === 0) return\n\n // remove 4xx and 5xx responses from OpenAPI documents\n compiler.hooks.afterDownload.tap(ValidateStatusCodePlugin.name, () => {\n const documents = compiler.context.documents!\n\n compiler.context.documents = documents.map((document: ApiDocumentV3_1): ApiDocumentV3_1 => {\n if (this.options.modules && !this.options.modules.includes(document.module.name)) {\n return document\n }\n\n const spec: OpenAPIV3_1.Document = document.specification\n\n if (!spec.paths || typeof spec.paths !== 'object' || spec.paths === null) return document\n\n const paths = Object.fromEntries(\n Object.entries(spec.paths)\n .map(([path, pathItem]) => {\n if (!pathItem || typeof pathItem !== 'object' || pathItem === null) return [path, pathItem]\n\n return [\n path,\n Object.fromEntries(\n Object.entries(pathItem)\n .map(([method, operation]) => {\n if (!operation || typeof operation !== 'object' || operation === null) return [method, operation]\n\n const responses = operation.responses\n if (!responses) return [method, operation]\n\n return [\n method,\n {\n ...operation,\n\n responses: Object.fromEntries(\n Object.entries(responses)\n .filter(([statusCode]) => parseInt(statusCode, 10) < 400),\n ),\n },\n ]\n }),\n ),\n ]\n }),\n )\n\n return new ApiDocumentV3_1({ ...spec, paths }, document.module)\n })\n })\n\n // inject validateStatusCode middleware into generated code\n compiler.hooks.afterCompile.tap(ValidateStatusCodePlugin.name, () => {\n const artifact = compiler.context.artifacts!.find((artifact) => artifact.id === 'request')\n if (!artifact) return\n\n if (!this.options.modules) {\n artifact.anchor.append('file:start', \"import { validateStatusCode } from '@keq-request/exception'\\n\")\n artifact.anchor.prepend('file:end', 'request.use(validateStatusCode())\\n')\n } else {\n artifact.anchor.append('file:start', \"import { validateStatusCode } from '@keq-request/exception'\\n\")\n artifact.anchor.prepend(\n 'file:end',\n [\n 'request',\n ' .useRouter()',\n ...this.options.modules.map((moduleName) => ` .module(${JSON.stringify(moduleName)}, validateStatusCode())`),\n '',\n ].join('\\n'),\n )\n }\n\n return artifact\n })\n }\n}\n"],"mappings":";;AAQA,IAAa,2BAAb,MAAa,yBAA2C;CACtD,YAAY,UAA2B,EAAE,EAAE;AAAvB,OAAA,UAAA;;CAEpB,MAAM,UAA0B;AAC9B,MAAI,KAAK,QAAQ,WAAW,KAAK,QAAQ,QAAQ,WAAW,EAAG;AAG/D,WAAS,MAAM,cAAc,IAAI,yBAAyB,YAAY;GACpE,MAAM,YAAY,SAAS,QAAQ;AAEnC,YAAS,QAAQ,YAAY,UAAU,KAAK,aAA+C;AACzF,QAAI,KAAK,QAAQ,WAAW,CAAC,KAAK,QAAQ,QAAQ,SAAS,SAAS,OAAO,KAAK,CAC9E,QAAO;IAGT,MAAM,OAA6B,SAAS;AAE5C,QAAI,CAAC,KAAK,SAAS,OAAO,KAAK,UAAU,YAAY,KAAK,UAAU,KAAM,QAAO;IAEjF,MAAM,QAAQ,OAAO,YACnB,OAAO,QAAQ,KAAK,MAAM,CACvB,KAAK,CAAC,MAAM,cAAc;AACzB,SAAI,CAAC,YAAY,OAAO,aAAa,YAAY,aAAa,KAAM,QAAO,CAAC,MAAM,SAAS;AAE3F,YAAO,CACL,MACA,OAAO,YACL,OAAO,QAAQ,SAAS,CACrB,KAAK,CAAC,QAAQ,eAAe;AAC5B,UAAI,CAAC,aAAa,OAAO,cAAc,YAAY,cAAc,KAAM,QAAO,CAAC,QAAQ,UAAU;MAEjG,MAAM,YAAY,UAAU;AAC5B,UAAI,CAAC,UAAW,QAAO,CAAC,QAAQ,UAAU;AAE1C,aAAO,CACL,QACA;OACE,GAAG;OAEH,WAAW,OAAO,YAChB,OAAO,QAAQ,UAAU,CACtB,QAAQ,CAAC,gBAAgB,SAAS,YAAY,GAAG,GAAG,IAAI,CAC5D;OACF,CACF;OACD,CACL,CACF;MACD,CACL;AAED,WAAO,IAAI,gBAAgB;KAAE,GAAG;KAAM;KAAO,EAAE,SAAS,OAAO;KAC/D;IACF;AAGF,WAAS,MAAM,aAAa,IAAI,yBAAyB,YAAY;GACnE,MAAM,WAAW,SAAS,QAAQ,UAAW,MAAM,aAAa,SAAS,OAAO,UAAU;AAC1F,OAAI,CAAC,SAAU;AAEf,OAAI,CAAC,KAAK,QAAQ,SAAS;AACzB,aAAS,OAAO,OAAO,cAAc,gEAAgE;AACrG,aAAS,OAAO,QAAQ,YAAY,sCAAsC;UACrE;AACL,aAAS,OAAO,OAAO,cAAc,gEAAgE;AACrG,aAAS,OAAO,QACd,YACA;KACE;KACA;KACA,GAAG,KAAK,QAAQ,QAAQ,KAAK,eAAe,aAAa,KAAK,UAAU,WAAW,CAAC,yBAAyB;KAC7G;KACD,CAAC,KAAK,KAAK,CACb;;AAGH,UAAO;IACP"}
package/plugins/index.ts DELETED
@@ -1 +0,0 @@
1
- export * from './validate-status-code.js'
@@ -1,88 +0,0 @@
1
- import { ApiDocumentV3_1, Artifact, Compiler, Plugin } from '@keq-request/cli'
2
- import type { OpenAPIV3_1 } from '@scalar/openapi-types'
3
-
4
-
5
- interface Options {
6
- modules?: string[]
7
- }
8
-
9
- export class ValidateStatusCodePlugin implements Plugin {
10
- constructor(private options: Options = {}) {}
11
-
12
- apply(compiler: Compiler): void {
13
- if (this.options.modules && this.options.modules.length === 0) return
14
-
15
- // remove 4xx and 5xx responses from OpenAPI documents
16
- compiler.hooks.afterDownload.tap(ValidateStatusCodePlugin.name, () => {
17
- const documents = compiler.context.documents!
18
-
19
- compiler.context.documents = documents.map((document: ApiDocumentV3_1): ApiDocumentV3_1 => {
20
- if (this.options.modules && !this.options.modules.includes(document.module.name)) {
21
- return document
22
- }
23
-
24
- const spec: OpenAPIV3_1.Document = document.specification
25
-
26
- if (!spec.paths || typeof spec.paths !== 'object' || spec.paths === null) return document
27
-
28
- const paths = Object.fromEntries(
29
- Object.entries(spec.paths)
30
- .map(([path, pathItem]) => {
31
- if (!pathItem || typeof pathItem !== 'object' || pathItem === null) return [path, pathItem]
32
-
33
- return [
34
- path,
35
- Object.fromEntries(
36
- Object.entries(pathItem)
37
- .map(([method, operation]) => {
38
- if (!operation || typeof operation !== 'object' || operation === null) return [method, operation]
39
-
40
- const responses = operation.responses
41
- if (!responses) return [method, operation]
42
-
43
- return [
44
- method,
45
- {
46
- ...operation,
47
-
48
- responses: Object.fromEntries(
49
- Object.entries(responses)
50
- .filter(([statusCode]) => parseInt(statusCode, 10) < 400),
51
- ),
52
- },
53
- ]
54
- }),
55
- ),
56
- ]
57
- }),
58
- )
59
-
60
- return new ApiDocumentV3_1({ ...spec, paths }, document.module)
61
- })
62
- })
63
-
64
- // inject validateStatusCode middleware into generated code
65
- compiler.hooks.afterCompile.tap(ValidateStatusCodePlugin.name, () => {
66
- const artifact = compiler.context.artifacts!.find((artifact) => artifact.id === 'request')
67
- if (!artifact) return
68
-
69
- if (!this.options.modules) {
70
- artifact.anchor.append('file:start', "import { validateStatusCode } from '@keq-request/exception'\n")
71
- artifact.anchor.prepend('file:end', 'request.use(validateStatusCode())\n')
72
- } else {
73
- artifact.anchor.append('file:start', "import { validateStatusCode } from '@keq-request/exception'\n")
74
- artifact.anchor.prepend(
75
- 'file:end',
76
- [
77
- 'request',
78
- ' .useRouter()',
79
- ...this.options.modules.map((moduleName) => ` .module(${JSON.stringify(moduleName)}, validateStatusCode())`),
80
- '',
81
- ].join('\n'),
82
- )
83
- }
84
-
85
- return artifact
86
- })
87
- }
88
- }