mahameru 0.0.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.
Files changed (218) hide show
  1. package/README.md +28 -0
  2. package/dist/api.error.cjs +107 -0
  3. package/dist/api.error.cjs.map +1 -0
  4. package/dist/api.error.d.cts +65 -0
  5. package/dist/api.error.d.ts +65 -0
  6. package/dist/api.error.js +83 -0
  7. package/dist/api.error.js.map +1 -0
  8. package/dist/base-class/base.controller.cjs +148 -0
  9. package/dist/base-class/base.controller.cjs.map +1 -0
  10. package/dist/base-class/base.controller.d.cts +38 -0
  11. package/dist/base-class/base.controller.d.ts +38 -0
  12. package/dist/base-class/base.controller.js +126 -0
  13. package/dist/base-class/base.controller.js.map +1 -0
  14. package/dist/base-class/base.entity.cjs +79 -0
  15. package/dist/base-class/base.entity.cjs.map +1 -0
  16. package/dist/base-class/base.entity.d.cts +8 -0
  17. package/dist/base-class/base.entity.d.ts +8 -0
  18. package/dist/base-class/base.entity.js +57 -0
  19. package/dist/base-class/base.entity.js.map +1 -0
  20. package/dist/base-class/base.model.cjs +204 -0
  21. package/dist/base-class/base.model.cjs.map +1 -0
  22. package/dist/base-class/base.model.d.cts +68 -0
  23. package/dist/base-class/base.model.d.ts +68 -0
  24. package/dist/base-class/base.model.js +182 -0
  25. package/dist/base-class/base.model.js.map +1 -0
  26. package/dist/base-class/base.service.cjs +37 -0
  27. package/dist/base-class/base.service.cjs.map +1 -0
  28. package/dist/base-class/base.service.d.cts +5 -0
  29. package/dist/base-class/base.service.d.ts +5 -0
  30. package/dist/base-class/base.service.js +15 -0
  31. package/dist/base-class/base.service.js.map +1 -0
  32. package/dist/base-class/index.cjs +392 -0
  33. package/dist/base-class/index.cjs.map +1 -0
  34. package/dist/base-class/index.d.cts +6 -0
  35. package/dist/base-class/index.d.ts +6 -0
  36. package/dist/base-class/index.js +365 -0
  37. package/dist/base-class/index.js.map +1 -0
  38. package/dist/cli/index.cjs +706 -0
  39. package/dist/cli/index.cjs.map +1 -0
  40. package/dist/cli/index.d.cts +3 -0
  41. package/dist/cli/index.d.ts +3 -0
  42. package/dist/cli/index.js +681 -0
  43. package/dist/cli/index.js.map +1 -0
  44. package/dist/cli/scripts/on-build.cjs +56 -0
  45. package/dist/cli/scripts/on-build.cjs.map +1 -0
  46. package/dist/cli/scripts/on-build.d.cts +3 -0
  47. package/dist/cli/scripts/on-build.d.ts +3 -0
  48. package/dist/cli/scripts/on-build.js +28 -0
  49. package/dist/cli/scripts/on-build.js.map +1 -0
  50. package/dist/cli/scripts/on-dev.cjs +483 -0
  51. package/dist/cli/scripts/on-dev.cjs.map +1 -0
  52. package/dist/cli/scripts/on-dev.d.cts +5 -0
  53. package/dist/cli/scripts/on-dev.d.ts +5 -0
  54. package/dist/cli/scripts/on-dev.js +449 -0
  55. package/dist/cli/scripts/on-dev.js.map +1 -0
  56. package/dist/cli/scripts/on-init.cjs +96 -0
  57. package/dist/cli/scripts/on-init.cjs.map +1 -0
  58. package/dist/cli/scripts/on-init.d.cts +3 -0
  59. package/dist/cli/scripts/on-init.d.ts +3 -0
  60. package/dist/cli/scripts/on-init.js +68 -0
  61. package/dist/cli/scripts/on-init.js.map +1 -0
  62. package/dist/cli/scripts/on-start.cjs +55 -0
  63. package/dist/cli/scripts/on-start.cjs.map +1 -0
  64. package/dist/cli/scripts/on-start.d.cts +3 -0
  65. package/dist/cli/scripts/on-start.d.ts +3 -0
  66. package/dist/cli/scripts/on-start.js +27 -0
  67. package/dist/cli/scripts/on-start.js.map +1 -0
  68. package/dist/client.cjs +405 -0
  69. package/dist/client.cjs.map +1 -0
  70. package/dist/client.d.cts +7 -0
  71. package/dist/client.d.ts +7 -0
  72. package/dist/client.js +371 -0
  73. package/dist/client.js.map +1 -0
  74. package/dist/constants.cjs +51 -0
  75. package/dist/constants.cjs.map +1 -0
  76. package/dist/constants.d.cts +7 -0
  77. package/dist/constants.d.ts +7 -0
  78. package/dist/constants.js +16 -0
  79. package/dist/constants.js.map +1 -0
  80. package/dist/database/column/index.cjs +34 -0
  81. package/dist/database/column/index.cjs.map +1 -0
  82. package/dist/database/column/index.d.cts +2 -0
  83. package/dist/database/column/index.d.ts +2 -0
  84. package/dist/database/column/index.js +8 -0
  85. package/dist/database/column/index.js.map +1 -0
  86. package/dist/database/index.cjs +83 -0
  87. package/dist/database/index.cjs.map +1 -0
  88. package/dist/database/index.d.cts +2 -0
  89. package/dist/database/index.d.ts +2 -0
  90. package/dist/database/index.js +60 -0
  91. package/dist/database/index.js.map +1 -0
  92. package/dist/database/snake-naming-strategy.class.cjs +78 -0
  93. package/dist/database/snake-naming-strategy.class.cjs.map +1 -0
  94. package/dist/database/snake-naming-strategy.class.d.cts +16 -0
  95. package/dist/database/snake-naming-strategy.class.d.ts +16 -0
  96. package/dist/database/snake-naming-strategy.class.js +56 -0
  97. package/dist/database/snake-naming-strategy.class.js.map +1 -0
  98. package/dist/error.cjs +46 -0
  99. package/dist/error.cjs.map +1 -0
  100. package/dist/error.d.cts +10 -0
  101. package/dist/error.d.ts +10 -0
  102. package/dist/error.js +28 -0
  103. package/dist/error.js.map +1 -0
  104. package/dist/express/app.cjs +233 -0
  105. package/dist/express/app.cjs.map +1 -0
  106. package/dist/express/app.d.cts +16 -0
  107. package/dist/express/app.d.ts +16 -0
  108. package/dist/express/app.js +205 -0
  109. package/dist/express/app.js.map +1 -0
  110. package/dist/express/index.cjs +239 -0
  111. package/dist/express/index.cjs.map +1 -0
  112. package/dist/express/index.d.cts +3 -0
  113. package/dist/express/index.d.ts +3 -0
  114. package/dist/express/index.js +205 -0
  115. package/dist/express/index.js.map +1 -0
  116. package/dist/express/middleware/cors.middleware.cjs +54 -0
  117. package/dist/express/middleware/cors.middleware.cjs.map +1 -0
  118. package/dist/express/middleware/cors.middleware.d.cts +9 -0
  119. package/dist/express/middleware/cors.middleware.d.ts +9 -0
  120. package/dist/express/middleware/cors.middleware.js +26 -0
  121. package/dist/express/middleware/cors.middleware.js.map +1 -0
  122. package/dist/express/middleware/error.middleware.cjs +136 -0
  123. package/dist/express/middleware/error.middleware.cjs.map +1 -0
  124. package/dist/express/middleware/error.middleware.d.cts +5 -0
  125. package/dist/express/middleware/error.middleware.d.ts +5 -0
  126. package/dist/express/middleware/error.middleware.js +116 -0
  127. package/dist/express/middleware/error.middleware.js.map +1 -0
  128. package/dist/express/middleware/filter.middleware.cjs +38 -0
  129. package/dist/express/middleware/filter.middleware.cjs.map +1 -0
  130. package/dist/express/middleware/filter.middleware.d.cts +5 -0
  131. package/dist/express/middleware/filter.middleware.d.ts +5 -0
  132. package/dist/express/middleware/filter.middleware.js +20 -0
  133. package/dist/express/middleware/filter.middleware.js.map +1 -0
  134. package/dist/express/middleware/index.cjs +206 -0
  135. package/dist/express/middleware/index.cjs.map +1 -0
  136. package/dist/express/middleware/index.d.cts +19 -0
  137. package/dist/express/middleware/index.d.ts +19 -0
  138. package/dist/express/middleware/index.js +169 -0
  139. package/dist/express/middleware/index.js.map +1 -0
  140. package/dist/express/middleware/not-found.middleware.cjs +79 -0
  141. package/dist/express/middleware/not-found.middleware.cjs.map +1 -0
  142. package/dist/express/middleware/not-found.middleware.d.cts +5 -0
  143. package/dist/express/middleware/not-found.middleware.d.ts +5 -0
  144. package/dist/express/middleware/not-found.middleware.js +59 -0
  145. package/dist/express/middleware/not-found.middleware.js.map +1 -0
  146. package/dist/generator.cjs +258 -0
  147. package/dist/generator.cjs.map +1 -0
  148. package/dist/generator.d.cts +10 -0
  149. package/dist/generator.d.ts +10 -0
  150. package/dist/generator.js +220 -0
  151. package/dist/generator.js.map +1 -0
  152. package/dist/http.cjs +82 -0
  153. package/dist/http.cjs.map +1 -0
  154. package/dist/http.d.cts +11 -0
  155. package/dist/http.d.ts +11 -0
  156. package/dist/http.js +64 -0
  157. package/dist/http.js.map +1 -0
  158. package/dist/index.cjs +831 -0
  159. package/dist/index.cjs.map +1 -0
  160. package/dist/index.d.cts +19 -0
  161. package/dist/index.d.ts +19 -0
  162. package/dist/index.js +783 -0
  163. package/dist/index.js.map +1 -0
  164. package/dist/lib/create-env-file.cjs +69 -0
  165. package/dist/lib/create-env-file.cjs.map +1 -0
  166. package/dist/lib/create-env-file.d.cts +3 -0
  167. package/dist/lib/create-env-file.d.ts +3 -0
  168. package/dist/lib/create-env-file.js +31 -0
  169. package/dist/lib/create-env-file.js.map +1 -0
  170. package/dist/lib/helper.cjs +94 -0
  171. package/dist/lib/helper.cjs.map +1 -0
  172. package/dist/lib/helper.d.cts +13 -0
  173. package/dist/lib/helper.d.ts +13 -0
  174. package/dist/lib/helper.js +62 -0
  175. package/dist/lib/helper.js.map +1 -0
  176. package/dist/lib/model.generator.cjs +212 -0
  177. package/dist/lib/model.generator.cjs.map +1 -0
  178. package/dist/lib/model.generator.d.cts +29 -0
  179. package/dist/lib/model.generator.d.ts +29 -0
  180. package/dist/lib/model.generator.js +174 -0
  181. package/dist/lib/model.generator.js.map +1 -0
  182. package/dist/lib/pre-init-dev-script.cjs +336 -0
  183. package/dist/lib/pre-init-dev-script.cjs.map +1 -0
  184. package/dist/lib/pre-init-dev-script.d.cts +2 -0
  185. package/dist/lib/pre-init-dev-script.d.ts +2 -0
  186. package/dist/lib/pre-init-dev-script.js +311 -0
  187. package/dist/lib/pre-init-dev-script.js.map +1 -0
  188. package/dist/mahameru.cjs +397 -0
  189. package/dist/mahameru.cjs.map +1 -0
  190. package/dist/mahameru.d.cts +78 -0
  191. package/dist/mahameru.d.ts +78 -0
  192. package/dist/mahameru.js +359 -0
  193. package/dist/mahameru.js.map +1 -0
  194. package/dist/request.cjs +35 -0
  195. package/dist/request.cjs.map +1 -0
  196. package/dist/request.d.cts +4 -0
  197. package/dist/request.d.ts +4 -0
  198. package/dist/request.js +13 -0
  199. package/dist/request.js.map +1 -0
  200. package/dist/response.cjs +35 -0
  201. package/dist/response.cjs.map +1 -0
  202. package/dist/response.d.cts +4 -0
  203. package/dist/response.d.ts +4 -0
  204. package/dist/response.js +13 -0
  205. package/dist/response.js.map +1 -0
  206. package/dist/types.cjs +1 -0
  207. package/dist/types.cjs.map +1 -0
  208. package/dist/types.d.cts +2 -0
  209. package/dist/types.d.ts +2 -0
  210. package/dist/types.js +1 -0
  211. package/dist/types.js.map +1 -0
  212. package/dist/utils/import-dynamic-module.cjs +34 -0
  213. package/dist/utils/import-dynamic-module.cjs.map +1 -0
  214. package/dist/utils/import-dynamic-module.d.cts +3 -0
  215. package/dist/utils/import-dynamic-module.d.ts +3 -0
  216. package/dist/utils/import-dynamic-module.js +12 -0
  217. package/dist/utils/import-dynamic-module.js.map +1 -0
  218. package/package.json +70 -0
package/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # mahameru
2
+
3
+ [![npm version](https://img.shields.io/npm/v/mahameru.svg)](https://www.npmjs.com/package/mahameru)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
+
6
+ > ⚠️ **IMPORTANT NOTICE:** This package is currently under active development and is **not yet ready for production use**.
7
+
8
+ ---
9
+
10
+ ## 🚧 Work in Progress
11
+
12
+ **mahameru** is still in its early stages. APIs, features, and configurations are subject to drastic changes without prior notice.
13
+
14
+ * **Current Status:** Experimental / Alpha
15
+ * **Production Ready:** No
16
+
17
+ ### Installing for testing
18
+ If you want to experiment with it or contribute, you can install it via npm:
19
+
20
+ ```bash
21
+ npm i -g mahameru
22
+ ```
23
+ Go to your favorite directory projects and run:
24
+ ```bash
25
+ mahameru init
26
+ ```
27
+
28
+ That's it!
@@ -0,0 +1,107 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/api.error.ts
21
+ var api_error_exports = {};
22
+ __export(api_error_exports, {
23
+ APIError: () => APIError,
24
+ APIErrorCode: () => APIErrorCode,
25
+ API_ERROR_STATUS: () => API_ERROR_STATUS
26
+ });
27
+ module.exports = __toCommonJS(api_error_exports);
28
+ var APIErrorCode = {
29
+ BAD_REQUEST: "BAD_REQUEST",
30
+ UNAUTHORIZED: "UNAUTHORIZED",
31
+ FORBIDDEN: "FORBIDDEN",
32
+ NOT_FOUND: "NOT_FOUND",
33
+ ROUTE_NOT_FOUND: "ROUTE_NOT_FOUND",
34
+ TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS",
35
+ CONFLICT: "CONFLICT",
36
+ INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR",
37
+ TOKEN_EXPIRED: "TOKEN_EXPIRED",
38
+ REFRESH_TOKEN_EXPIRED: "REFRESH_TOKEN_EXPIRED",
39
+ ACCESS_TOKEN_EXPIRED: "ACCESS_TOKEN_EXPIRED",
40
+ ACCESS_TOKEN_REQUIRED: "ACCESS_TOKEN_REQUIRED",
41
+ TOKEN_REFRESH_TOO_EARLY: "TOKEN_REFRESH_TOO_EARLY",
42
+ EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED",
43
+ PHONE_NOT_VERIFIED: "PHONE_NOT_VERIFIED",
44
+ TOKEN_NOT_FOUND: "TOKEN_NOT_FOUND",
45
+ INVALID_TOKEN: "INVALID_TOKEN",
46
+ RESET_PASSWORD_TOKEN_USED: "RESET_PASSWORD_TOKEN_USED",
47
+ RESET_PASSWORD_NEEDED: "RESET_PASSWORD_NEEDED",
48
+ ROLE_DISABLED: "ROLE_DISABLED",
49
+ SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
50
+ SESSION_DISABLED: "SESSION_DISABLED",
51
+ INVALID_RESPONSE: "INVALID_RESPONSE",
52
+ UNKNOWN_CLIENT_ERROR: "UNKNOWN_CLIENT_ERROR",
53
+ INVALID_CREDENTIALS: "INVALID_CREDENTIALS",
54
+ VALIDATION_ERROR: "VALIDATION_ERROR"
55
+ };
56
+ var API_ERROR_STATUS = {
57
+ BAD_REQUEST: 400,
58
+ UNAUTHORIZED: 401,
59
+ FORBIDDEN: 403,
60
+ NOT_FOUND: 404,
61
+ ROUTE_NOT_FOUND: 404,
62
+ TOO_MANY_REQUESTS: 429,
63
+ CONFLICT: 409,
64
+ INTERNAL_SERVER_ERROR: 500,
65
+ TOKEN_EXPIRED: 401,
66
+ REFRESH_TOKEN_EXPIRED: 401,
67
+ ACCESS_TOKEN_EXPIRED: 401,
68
+ ACCESS_TOKEN_REQUIRED: 401,
69
+ TOKEN_REFRESH_TOO_EARLY: 403,
70
+ EMAIL_NOT_VERIFIED: 401,
71
+ PHONE_NOT_VERIFIED: 401,
72
+ TOKEN_NOT_FOUND: 404,
73
+ INVALID_TOKEN: 401,
74
+ RESET_PASSWORD_TOKEN_USED: 401,
75
+ RESET_PASSWORD_NEEDED: 400,
76
+ ROLE_DISABLED: 403,
77
+ SESSION_NOT_FOUND: 404,
78
+ SESSION_DISABLED: 401,
79
+ INVALID_RESPONSE: 500,
80
+ UNKNOWN_CLIENT_ERROR: 400,
81
+ INVALID_CREDENTIALS: 400,
82
+ VALIDATION_ERROR: 400
83
+ };
84
+ var APIError = class _APIError extends Error {
85
+ static {
86
+ __name(this, "APIError");
87
+ }
88
+ code;
89
+ status;
90
+ details;
91
+ constructor(...args) {
92
+ const [code, message, details] = args;
93
+ super(message);
94
+ this.name = "APIError";
95
+ this.code = code;
96
+ this.status = API_ERROR_STATUS[code];
97
+ this.details = details;
98
+ Object.setPrototypeOf(this, _APIError.prototype);
99
+ }
100
+ };
101
+ // Annotate the CommonJS export names for ESM import in node:
102
+ 0 && (module.exports = {
103
+ APIError,
104
+ APIErrorCode,
105
+ API_ERROR_STATUS
106
+ });
107
+ //# sourceMappingURL=api.error.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api.error.ts"],"sourcesContent":["export const APIErrorCode = {\r\n BAD_REQUEST: 'BAD_REQUEST',\r\n UNAUTHORIZED: 'UNAUTHORIZED',\r\n FORBIDDEN: 'FORBIDDEN',\r\n NOT_FOUND: 'NOT_FOUND',\r\n ROUTE_NOT_FOUND: 'ROUTE_NOT_FOUND',\r\n TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',\r\n CONFLICT: 'CONFLICT',\r\n INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',\r\n TOKEN_EXPIRED: 'TOKEN_EXPIRED',\r\n REFRESH_TOKEN_EXPIRED: 'REFRESH_TOKEN_EXPIRED',\r\n ACCESS_TOKEN_EXPIRED: 'ACCESS_TOKEN_EXPIRED',\r\n ACCESS_TOKEN_REQUIRED: 'ACCESS_TOKEN_REQUIRED',\r\n TOKEN_REFRESH_TOO_EARLY: 'TOKEN_REFRESH_TOO_EARLY',\r\n EMAIL_NOT_VERIFIED: 'EMAIL_NOT_VERIFIED',\r\n PHONE_NOT_VERIFIED: 'PHONE_NOT_VERIFIED',\r\n TOKEN_NOT_FOUND: 'TOKEN_NOT_FOUND',\r\n INVALID_TOKEN: 'INVALID_TOKEN',\r\n RESET_PASSWORD_TOKEN_USED: 'RESET_PASSWORD_TOKEN_USED',\r\n RESET_PASSWORD_NEEDED: 'RESET_PASSWORD_NEEDED',\r\n ROLE_DISABLED: 'ROLE_DISABLED',\r\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\r\n SESSION_DISABLED: 'SESSION_DISABLED',\r\n INVALID_RESPONSE: 'INVALID_RESPONSE',\r\n UNKNOWN_CLIENT_ERROR: 'UNKNOWN_CLIENT_ERROR',\r\n INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',\r\n VALIDATION_ERROR: 'VALIDATION_ERROR'\r\n} as const\r\n\r\nexport type APIErrorCode = (typeof APIErrorCode)[keyof typeof APIErrorCode]\r\n\r\nexport const API_ERROR_STATUS: Record<APIErrorCode, number> = {\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n ROUTE_NOT_FOUND: 404,\r\n TOO_MANY_REQUESTS: 429,\r\n CONFLICT: 409,\r\n INTERNAL_SERVER_ERROR: 500,\r\n TOKEN_EXPIRED: 401,\r\n REFRESH_TOKEN_EXPIRED: 401,\r\n ACCESS_TOKEN_EXPIRED: 401,\r\n ACCESS_TOKEN_REQUIRED: 401,\r\n TOKEN_REFRESH_TOO_EARLY: 403,\r\n EMAIL_NOT_VERIFIED: 401,\r\n PHONE_NOT_VERIFIED: 401,\r\n TOKEN_NOT_FOUND: 404,\r\n INVALID_TOKEN: 401,\r\n RESET_PASSWORD_TOKEN_USED: 401,\r\n RESET_PASSWORD_NEEDED: 400,\r\n ROLE_DISABLED: 403,\r\n SESSION_NOT_FOUND: 404,\r\n SESSION_DISABLED: 401,\r\n INVALID_RESPONSE: 500,\r\n UNKNOWN_CLIENT_ERROR: 400,\r\n INVALID_CREDENTIALS: 400,\r\n VALIDATION_ERROR: 400\r\n}\r\n\r\nexport type APIErrorDetailsMap = {\r\n TOKEN_REFRESH_TOO_EARLY: {\r\n retryIn: number\r\n retryAt: number\r\n },\r\n TOO_MANY_REQUESTS: {\r\n retryIn: number\r\n retryAt: number\r\n },\r\n VALIDATION_ERROR: {\r\n details: {\r\n field: PropertyKey\r\n message: string\r\n }[]\r\n }\r\n}\r\n\r\nexport type APIErrorDetails<T extends APIErrorCode> = T extends keyof APIErrorDetailsMap ? APIErrorDetailsMap[T] : never\r\n\r\ntype APIErrorCodeWithDetails = keyof APIErrorDetailsMap\r\ntype APIErrorCodeWithoutDetails = Exclude<APIErrorCode, APIErrorCodeWithDetails>\r\ntype AnyAPIErrorDetails = APIErrorDetailsMap[APIErrorCodeWithDetails]\r\ntype APIErrorConstructorArgs =\r\n | [code: APIErrorCodeWithoutDetails, message?: string]\r\n | {\r\n [TCode in APIErrorCodeWithDetails]: [\r\n code: TCode,\r\n message: string | undefined,\r\n details: APIErrorDetails<TCode>\r\n ]\r\n }[APIErrorCodeWithDetails]\r\n\r\nexport class APIError extends Error {\r\n public code: APIErrorCode\r\n public readonly status: number\r\n public readonly details?: AnyAPIErrorDetails\r\n\r\n constructor(...args: APIErrorConstructorArgs) {\r\n const [code, message, details] = args\r\n\r\n super(message)\r\n this.name = 'APIError'\r\n this.code = code\r\n this.status = API_ERROR_STATUS[code]\r\n this.details = details\r\n\r\n Object.setPrototypeOf(this, APIError.prototype)\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;AAAO,IAAMA,eAAe;EACxBC,aAAa;EACbC,cAAc;EACdC,WAAW;EACXC,WAAW;EACXC,iBAAiB;EACjBC,mBAAmB;EACnBC,UAAU;EACVC,uBAAuB;EACvBC,eAAe;EACfC,uBAAuB;EACvBC,sBAAsB;EACtBC,uBAAuB;EACvBC,yBAAyB;EACzBC,oBAAoB;EACpBC,oBAAoB;EACpBC,iBAAiB;EACjBC,eAAe;EACfC,2BAA2B;EAC3BC,uBAAuB;EACvBC,eAAe;EACfC,mBAAmB;EACnBC,kBAAkB;EAClBC,kBAAkB;EAClBC,sBAAsB;EACtBC,qBAAqB;EACrBC,kBAAkB;AACtB;AAIO,IAAMC,mBAAiD;EAC1D1B,aAAa;EACbC,cAAc;EACdC,WAAW;EACXC,WAAW;EACXC,iBAAiB;EACjBC,mBAAmB;EACnBC,UAAU;EACVC,uBAAuB;EACvBC,eAAe;EACfC,uBAAuB;EACvBC,sBAAsB;EACtBC,uBAAuB;EACvBC,yBAAyB;EACzBC,oBAAoB;EACpBC,oBAAoB;EACpBC,iBAAiB;EACjBC,eAAe;EACfC,2BAA2B;EAC3BC,uBAAuB;EACvBC,eAAe;EACfC,mBAAmB;EACnBC,kBAAkB;EAClBC,kBAAkB;EAClBC,sBAAsB;EACtBC,qBAAqB;EACrBC,kBAAkB;AACtB;AAkCO,IAAME,WAAN,MAAMA,kBAAiBC,MAAAA;EA5F9B,OA4F8BA;;;EACnBC;EACSC;EACAC;EAEhB,eAAeC,MAA+B;AAC1C,UAAM,CAACH,MAAMI,SAASF,OAAAA,IAAWC;AAEjC,UAAMC,OAAAA;AACN,SAAKC,OAAO;AACZ,SAAKL,OAAOA;AACZ,SAAKC,SAASJ,iBAAiBG,IAAAA;AAC/B,SAAKE,UAAUA;AAEfI,WAAOC,eAAe,MAAMT,UAASU,SAAS;EAClD;AACJ;","names":["APIErrorCode","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","ROUTE_NOT_FOUND","TOO_MANY_REQUESTS","CONFLICT","INTERNAL_SERVER_ERROR","TOKEN_EXPIRED","REFRESH_TOKEN_EXPIRED","ACCESS_TOKEN_EXPIRED","ACCESS_TOKEN_REQUIRED","TOKEN_REFRESH_TOO_EARLY","EMAIL_NOT_VERIFIED","PHONE_NOT_VERIFIED","TOKEN_NOT_FOUND","INVALID_TOKEN","RESET_PASSWORD_TOKEN_USED","RESET_PASSWORD_NEEDED","ROLE_DISABLED","SESSION_NOT_FOUND","SESSION_DISABLED","INVALID_RESPONSE","UNKNOWN_CLIENT_ERROR","INVALID_CREDENTIALS","VALIDATION_ERROR","API_ERROR_STATUS","APIError","Error","code","status","details","args","message","name","Object","setPrototypeOf","prototype"]}
@@ -0,0 +1,65 @@
1
+ declare const APIErrorCode: {
2
+ readonly BAD_REQUEST: "BAD_REQUEST";
3
+ readonly UNAUTHORIZED: "UNAUTHORIZED";
4
+ readonly FORBIDDEN: "FORBIDDEN";
5
+ readonly NOT_FOUND: "NOT_FOUND";
6
+ readonly ROUTE_NOT_FOUND: "ROUTE_NOT_FOUND";
7
+ readonly TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
8
+ readonly CONFLICT: "CONFLICT";
9
+ readonly INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR";
10
+ readonly TOKEN_EXPIRED: "TOKEN_EXPIRED";
11
+ readonly REFRESH_TOKEN_EXPIRED: "REFRESH_TOKEN_EXPIRED";
12
+ readonly ACCESS_TOKEN_EXPIRED: "ACCESS_TOKEN_EXPIRED";
13
+ readonly ACCESS_TOKEN_REQUIRED: "ACCESS_TOKEN_REQUIRED";
14
+ readonly TOKEN_REFRESH_TOO_EARLY: "TOKEN_REFRESH_TOO_EARLY";
15
+ readonly EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED";
16
+ readonly PHONE_NOT_VERIFIED: "PHONE_NOT_VERIFIED";
17
+ readonly TOKEN_NOT_FOUND: "TOKEN_NOT_FOUND";
18
+ readonly INVALID_TOKEN: "INVALID_TOKEN";
19
+ readonly RESET_PASSWORD_TOKEN_USED: "RESET_PASSWORD_TOKEN_USED";
20
+ readonly RESET_PASSWORD_NEEDED: "RESET_PASSWORD_NEEDED";
21
+ readonly ROLE_DISABLED: "ROLE_DISABLED";
22
+ readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
23
+ readonly SESSION_DISABLED: "SESSION_DISABLED";
24
+ readonly INVALID_RESPONSE: "INVALID_RESPONSE";
25
+ readonly UNKNOWN_CLIENT_ERROR: "UNKNOWN_CLIENT_ERROR";
26
+ readonly INVALID_CREDENTIALS: "INVALID_CREDENTIALS";
27
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
28
+ };
29
+ type APIErrorCode = (typeof APIErrorCode)[keyof typeof APIErrorCode];
30
+ declare const API_ERROR_STATUS: Record<APIErrorCode, number>;
31
+ type APIErrorDetailsMap = {
32
+ TOKEN_REFRESH_TOO_EARLY: {
33
+ retryIn: number;
34
+ retryAt: number;
35
+ };
36
+ TOO_MANY_REQUESTS: {
37
+ retryIn: number;
38
+ retryAt: number;
39
+ };
40
+ VALIDATION_ERROR: {
41
+ details: {
42
+ field: PropertyKey;
43
+ message: string;
44
+ }[];
45
+ };
46
+ };
47
+ type APIErrorDetails<T extends APIErrorCode> = T extends keyof APIErrorDetailsMap ? APIErrorDetailsMap[T] : never;
48
+ type APIErrorCodeWithDetails = keyof APIErrorDetailsMap;
49
+ type APIErrorCodeWithoutDetails = Exclude<APIErrorCode, APIErrorCodeWithDetails>;
50
+ type AnyAPIErrorDetails = APIErrorDetailsMap[APIErrorCodeWithDetails];
51
+ type APIErrorConstructorArgs = [code: APIErrorCodeWithoutDetails, message?: string] | {
52
+ [TCode in APIErrorCodeWithDetails]: [
53
+ code: TCode,
54
+ message: string | undefined,
55
+ details: APIErrorDetails<TCode>
56
+ ];
57
+ }[APIErrorCodeWithDetails];
58
+ declare class APIError extends Error {
59
+ code: APIErrorCode;
60
+ readonly status: number;
61
+ readonly details?: AnyAPIErrorDetails;
62
+ constructor(...args: APIErrorConstructorArgs);
63
+ }
64
+
65
+ export { APIError, APIErrorCode, type APIErrorDetails, type APIErrorDetailsMap, API_ERROR_STATUS };
@@ -0,0 +1,65 @@
1
+ declare const APIErrorCode: {
2
+ readonly BAD_REQUEST: "BAD_REQUEST";
3
+ readonly UNAUTHORIZED: "UNAUTHORIZED";
4
+ readonly FORBIDDEN: "FORBIDDEN";
5
+ readonly NOT_FOUND: "NOT_FOUND";
6
+ readonly ROUTE_NOT_FOUND: "ROUTE_NOT_FOUND";
7
+ readonly TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS";
8
+ readonly CONFLICT: "CONFLICT";
9
+ readonly INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR";
10
+ readonly TOKEN_EXPIRED: "TOKEN_EXPIRED";
11
+ readonly REFRESH_TOKEN_EXPIRED: "REFRESH_TOKEN_EXPIRED";
12
+ readonly ACCESS_TOKEN_EXPIRED: "ACCESS_TOKEN_EXPIRED";
13
+ readonly ACCESS_TOKEN_REQUIRED: "ACCESS_TOKEN_REQUIRED";
14
+ readonly TOKEN_REFRESH_TOO_EARLY: "TOKEN_REFRESH_TOO_EARLY";
15
+ readonly EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED";
16
+ readonly PHONE_NOT_VERIFIED: "PHONE_NOT_VERIFIED";
17
+ readonly TOKEN_NOT_FOUND: "TOKEN_NOT_FOUND";
18
+ readonly INVALID_TOKEN: "INVALID_TOKEN";
19
+ readonly RESET_PASSWORD_TOKEN_USED: "RESET_PASSWORD_TOKEN_USED";
20
+ readonly RESET_PASSWORD_NEEDED: "RESET_PASSWORD_NEEDED";
21
+ readonly ROLE_DISABLED: "ROLE_DISABLED";
22
+ readonly SESSION_NOT_FOUND: "SESSION_NOT_FOUND";
23
+ readonly SESSION_DISABLED: "SESSION_DISABLED";
24
+ readonly INVALID_RESPONSE: "INVALID_RESPONSE";
25
+ readonly UNKNOWN_CLIENT_ERROR: "UNKNOWN_CLIENT_ERROR";
26
+ readonly INVALID_CREDENTIALS: "INVALID_CREDENTIALS";
27
+ readonly VALIDATION_ERROR: "VALIDATION_ERROR";
28
+ };
29
+ type APIErrorCode = (typeof APIErrorCode)[keyof typeof APIErrorCode];
30
+ declare const API_ERROR_STATUS: Record<APIErrorCode, number>;
31
+ type APIErrorDetailsMap = {
32
+ TOKEN_REFRESH_TOO_EARLY: {
33
+ retryIn: number;
34
+ retryAt: number;
35
+ };
36
+ TOO_MANY_REQUESTS: {
37
+ retryIn: number;
38
+ retryAt: number;
39
+ };
40
+ VALIDATION_ERROR: {
41
+ details: {
42
+ field: PropertyKey;
43
+ message: string;
44
+ }[];
45
+ };
46
+ };
47
+ type APIErrorDetails<T extends APIErrorCode> = T extends keyof APIErrorDetailsMap ? APIErrorDetailsMap[T] : never;
48
+ type APIErrorCodeWithDetails = keyof APIErrorDetailsMap;
49
+ type APIErrorCodeWithoutDetails = Exclude<APIErrorCode, APIErrorCodeWithDetails>;
50
+ type AnyAPIErrorDetails = APIErrorDetailsMap[APIErrorCodeWithDetails];
51
+ type APIErrorConstructorArgs = [code: APIErrorCodeWithoutDetails, message?: string] | {
52
+ [TCode in APIErrorCodeWithDetails]: [
53
+ code: TCode,
54
+ message: string | undefined,
55
+ details: APIErrorDetails<TCode>
56
+ ];
57
+ }[APIErrorCodeWithDetails];
58
+ declare class APIError extends Error {
59
+ code: APIErrorCode;
60
+ readonly status: number;
61
+ readonly details?: AnyAPIErrorDetails;
62
+ constructor(...args: APIErrorConstructorArgs);
63
+ }
64
+
65
+ export { APIError, APIErrorCode, type APIErrorDetails, type APIErrorDetailsMap, API_ERROR_STATUS };
@@ -0,0 +1,83 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ // src/api.error.ts
5
+ var APIErrorCode = {
6
+ BAD_REQUEST: "BAD_REQUEST",
7
+ UNAUTHORIZED: "UNAUTHORIZED",
8
+ FORBIDDEN: "FORBIDDEN",
9
+ NOT_FOUND: "NOT_FOUND",
10
+ ROUTE_NOT_FOUND: "ROUTE_NOT_FOUND",
11
+ TOO_MANY_REQUESTS: "TOO_MANY_REQUESTS",
12
+ CONFLICT: "CONFLICT",
13
+ INTERNAL_SERVER_ERROR: "INTERNAL_SERVER_ERROR",
14
+ TOKEN_EXPIRED: "TOKEN_EXPIRED",
15
+ REFRESH_TOKEN_EXPIRED: "REFRESH_TOKEN_EXPIRED",
16
+ ACCESS_TOKEN_EXPIRED: "ACCESS_TOKEN_EXPIRED",
17
+ ACCESS_TOKEN_REQUIRED: "ACCESS_TOKEN_REQUIRED",
18
+ TOKEN_REFRESH_TOO_EARLY: "TOKEN_REFRESH_TOO_EARLY",
19
+ EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED",
20
+ PHONE_NOT_VERIFIED: "PHONE_NOT_VERIFIED",
21
+ TOKEN_NOT_FOUND: "TOKEN_NOT_FOUND",
22
+ INVALID_TOKEN: "INVALID_TOKEN",
23
+ RESET_PASSWORD_TOKEN_USED: "RESET_PASSWORD_TOKEN_USED",
24
+ RESET_PASSWORD_NEEDED: "RESET_PASSWORD_NEEDED",
25
+ ROLE_DISABLED: "ROLE_DISABLED",
26
+ SESSION_NOT_FOUND: "SESSION_NOT_FOUND",
27
+ SESSION_DISABLED: "SESSION_DISABLED",
28
+ INVALID_RESPONSE: "INVALID_RESPONSE",
29
+ UNKNOWN_CLIENT_ERROR: "UNKNOWN_CLIENT_ERROR",
30
+ INVALID_CREDENTIALS: "INVALID_CREDENTIALS",
31
+ VALIDATION_ERROR: "VALIDATION_ERROR"
32
+ };
33
+ var API_ERROR_STATUS = {
34
+ BAD_REQUEST: 400,
35
+ UNAUTHORIZED: 401,
36
+ FORBIDDEN: 403,
37
+ NOT_FOUND: 404,
38
+ ROUTE_NOT_FOUND: 404,
39
+ TOO_MANY_REQUESTS: 429,
40
+ CONFLICT: 409,
41
+ INTERNAL_SERVER_ERROR: 500,
42
+ TOKEN_EXPIRED: 401,
43
+ REFRESH_TOKEN_EXPIRED: 401,
44
+ ACCESS_TOKEN_EXPIRED: 401,
45
+ ACCESS_TOKEN_REQUIRED: 401,
46
+ TOKEN_REFRESH_TOO_EARLY: 403,
47
+ EMAIL_NOT_VERIFIED: 401,
48
+ PHONE_NOT_VERIFIED: 401,
49
+ TOKEN_NOT_FOUND: 404,
50
+ INVALID_TOKEN: 401,
51
+ RESET_PASSWORD_TOKEN_USED: 401,
52
+ RESET_PASSWORD_NEEDED: 400,
53
+ ROLE_DISABLED: 403,
54
+ SESSION_NOT_FOUND: 404,
55
+ SESSION_DISABLED: 401,
56
+ INVALID_RESPONSE: 500,
57
+ UNKNOWN_CLIENT_ERROR: 400,
58
+ INVALID_CREDENTIALS: 400,
59
+ VALIDATION_ERROR: 400
60
+ };
61
+ var APIError = class _APIError extends Error {
62
+ static {
63
+ __name(this, "APIError");
64
+ }
65
+ code;
66
+ status;
67
+ details;
68
+ constructor(...args) {
69
+ const [code, message, details] = args;
70
+ super(message);
71
+ this.name = "APIError";
72
+ this.code = code;
73
+ this.status = API_ERROR_STATUS[code];
74
+ this.details = details;
75
+ Object.setPrototypeOf(this, _APIError.prototype);
76
+ }
77
+ };
78
+ export {
79
+ APIError,
80
+ APIErrorCode,
81
+ API_ERROR_STATUS
82
+ };
83
+ //# sourceMappingURL=api.error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/api.error.ts"],"sourcesContent":["export const APIErrorCode = {\r\n BAD_REQUEST: 'BAD_REQUEST',\r\n UNAUTHORIZED: 'UNAUTHORIZED',\r\n FORBIDDEN: 'FORBIDDEN',\r\n NOT_FOUND: 'NOT_FOUND',\r\n ROUTE_NOT_FOUND: 'ROUTE_NOT_FOUND',\r\n TOO_MANY_REQUESTS: 'TOO_MANY_REQUESTS',\r\n CONFLICT: 'CONFLICT',\r\n INTERNAL_SERVER_ERROR: 'INTERNAL_SERVER_ERROR',\r\n TOKEN_EXPIRED: 'TOKEN_EXPIRED',\r\n REFRESH_TOKEN_EXPIRED: 'REFRESH_TOKEN_EXPIRED',\r\n ACCESS_TOKEN_EXPIRED: 'ACCESS_TOKEN_EXPIRED',\r\n ACCESS_TOKEN_REQUIRED: 'ACCESS_TOKEN_REQUIRED',\r\n TOKEN_REFRESH_TOO_EARLY: 'TOKEN_REFRESH_TOO_EARLY',\r\n EMAIL_NOT_VERIFIED: 'EMAIL_NOT_VERIFIED',\r\n PHONE_NOT_VERIFIED: 'PHONE_NOT_VERIFIED',\r\n TOKEN_NOT_FOUND: 'TOKEN_NOT_FOUND',\r\n INVALID_TOKEN: 'INVALID_TOKEN',\r\n RESET_PASSWORD_TOKEN_USED: 'RESET_PASSWORD_TOKEN_USED',\r\n RESET_PASSWORD_NEEDED: 'RESET_PASSWORD_NEEDED',\r\n ROLE_DISABLED: 'ROLE_DISABLED',\r\n SESSION_NOT_FOUND: 'SESSION_NOT_FOUND',\r\n SESSION_DISABLED: 'SESSION_DISABLED',\r\n INVALID_RESPONSE: 'INVALID_RESPONSE',\r\n UNKNOWN_CLIENT_ERROR: 'UNKNOWN_CLIENT_ERROR',\r\n INVALID_CREDENTIALS: 'INVALID_CREDENTIALS',\r\n VALIDATION_ERROR: 'VALIDATION_ERROR'\r\n} as const\r\n\r\nexport type APIErrorCode = (typeof APIErrorCode)[keyof typeof APIErrorCode]\r\n\r\nexport const API_ERROR_STATUS: Record<APIErrorCode, number> = {\r\n BAD_REQUEST: 400,\r\n UNAUTHORIZED: 401,\r\n FORBIDDEN: 403,\r\n NOT_FOUND: 404,\r\n ROUTE_NOT_FOUND: 404,\r\n TOO_MANY_REQUESTS: 429,\r\n CONFLICT: 409,\r\n INTERNAL_SERVER_ERROR: 500,\r\n TOKEN_EXPIRED: 401,\r\n REFRESH_TOKEN_EXPIRED: 401,\r\n ACCESS_TOKEN_EXPIRED: 401,\r\n ACCESS_TOKEN_REQUIRED: 401,\r\n TOKEN_REFRESH_TOO_EARLY: 403,\r\n EMAIL_NOT_VERIFIED: 401,\r\n PHONE_NOT_VERIFIED: 401,\r\n TOKEN_NOT_FOUND: 404,\r\n INVALID_TOKEN: 401,\r\n RESET_PASSWORD_TOKEN_USED: 401,\r\n RESET_PASSWORD_NEEDED: 400,\r\n ROLE_DISABLED: 403,\r\n SESSION_NOT_FOUND: 404,\r\n SESSION_DISABLED: 401,\r\n INVALID_RESPONSE: 500,\r\n UNKNOWN_CLIENT_ERROR: 400,\r\n INVALID_CREDENTIALS: 400,\r\n VALIDATION_ERROR: 400\r\n}\r\n\r\nexport type APIErrorDetailsMap = {\r\n TOKEN_REFRESH_TOO_EARLY: {\r\n retryIn: number\r\n retryAt: number\r\n },\r\n TOO_MANY_REQUESTS: {\r\n retryIn: number\r\n retryAt: number\r\n },\r\n VALIDATION_ERROR: {\r\n details: {\r\n field: PropertyKey\r\n message: string\r\n }[]\r\n }\r\n}\r\n\r\nexport type APIErrorDetails<T extends APIErrorCode> = T extends keyof APIErrorDetailsMap ? APIErrorDetailsMap[T] : never\r\n\r\ntype APIErrorCodeWithDetails = keyof APIErrorDetailsMap\r\ntype APIErrorCodeWithoutDetails = Exclude<APIErrorCode, APIErrorCodeWithDetails>\r\ntype AnyAPIErrorDetails = APIErrorDetailsMap[APIErrorCodeWithDetails]\r\ntype APIErrorConstructorArgs =\r\n | [code: APIErrorCodeWithoutDetails, message?: string]\r\n | {\r\n [TCode in APIErrorCodeWithDetails]: [\r\n code: TCode,\r\n message: string | undefined,\r\n details: APIErrorDetails<TCode>\r\n ]\r\n }[APIErrorCodeWithDetails]\r\n\r\nexport class APIError extends Error {\r\n public code: APIErrorCode\r\n public readonly status: number\r\n public readonly details?: AnyAPIErrorDetails\r\n\r\n constructor(...args: APIErrorConstructorArgs) {\r\n const [code, message, details] = args\r\n\r\n super(message)\r\n this.name = 'APIError'\r\n this.code = code\r\n this.status = API_ERROR_STATUS[code]\r\n this.details = details\r\n\r\n Object.setPrototypeOf(this, APIError.prototype)\r\n }\r\n}\r\n"],"mappings":";;;;AAAO,IAAMA,eAAe;EACxBC,aAAa;EACbC,cAAc;EACdC,WAAW;EACXC,WAAW;EACXC,iBAAiB;EACjBC,mBAAmB;EACnBC,UAAU;EACVC,uBAAuB;EACvBC,eAAe;EACfC,uBAAuB;EACvBC,sBAAsB;EACtBC,uBAAuB;EACvBC,yBAAyB;EACzBC,oBAAoB;EACpBC,oBAAoB;EACpBC,iBAAiB;EACjBC,eAAe;EACfC,2BAA2B;EAC3BC,uBAAuB;EACvBC,eAAe;EACfC,mBAAmB;EACnBC,kBAAkB;EAClBC,kBAAkB;EAClBC,sBAAsB;EACtBC,qBAAqB;EACrBC,kBAAkB;AACtB;AAIO,IAAMC,mBAAiD;EAC1D1B,aAAa;EACbC,cAAc;EACdC,WAAW;EACXC,WAAW;EACXC,iBAAiB;EACjBC,mBAAmB;EACnBC,UAAU;EACVC,uBAAuB;EACvBC,eAAe;EACfC,uBAAuB;EACvBC,sBAAsB;EACtBC,uBAAuB;EACvBC,yBAAyB;EACzBC,oBAAoB;EACpBC,oBAAoB;EACpBC,iBAAiB;EACjBC,eAAe;EACfC,2BAA2B;EAC3BC,uBAAuB;EACvBC,eAAe;EACfC,mBAAmB;EACnBC,kBAAkB;EAClBC,kBAAkB;EAClBC,sBAAsB;EACtBC,qBAAqB;EACrBC,kBAAkB;AACtB;AAkCO,IAAME,WAAN,MAAMA,kBAAiBC,MAAAA;EA5F9B,OA4F8BA;;;EACnBC;EACSC;EACAC;EAEhB,eAAeC,MAA+B;AAC1C,UAAM,CAACH,MAAMI,SAASF,OAAAA,IAAWC;AAEjC,UAAMC,OAAAA;AACN,SAAKC,OAAO;AACZ,SAAKL,OAAOA;AACZ,SAAKC,SAASJ,iBAAiBG,IAAAA;AAC/B,SAAKE,UAAUA;AAEfI,WAAOC,eAAe,MAAMT,UAASU,SAAS;EAClD;AACJ;","names":["APIErrorCode","BAD_REQUEST","UNAUTHORIZED","FORBIDDEN","NOT_FOUND","ROUTE_NOT_FOUND","TOO_MANY_REQUESTS","CONFLICT","INTERNAL_SERVER_ERROR","TOKEN_EXPIRED","REFRESH_TOKEN_EXPIRED","ACCESS_TOKEN_EXPIRED","ACCESS_TOKEN_REQUIRED","TOKEN_REFRESH_TOO_EARLY","EMAIL_NOT_VERIFIED","PHONE_NOT_VERIFIED","TOKEN_NOT_FOUND","INVALID_TOKEN","RESET_PASSWORD_TOKEN_USED","RESET_PASSWORD_NEEDED","ROLE_DISABLED","SESSION_NOT_FOUND","SESSION_DISABLED","INVALID_RESPONSE","UNKNOWN_CLIENT_ERROR","INVALID_CREDENTIALS","VALIDATION_ERROR","API_ERROR_STATUS","APIError","Error","code","status","details","args","message","name","Object","setPrototypeOf","prototype"]}
@@ -0,0 +1,148 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+
20
+ // src/base-class/base.controller.ts
21
+ var base_controller_exports = {};
22
+ __export(base_controller_exports, {
23
+ BaseController: () => BaseController
24
+ });
25
+ module.exports = __toCommonJS(base_controller_exports);
26
+ var BaseController = class {
27
+ static {
28
+ __name(this, "BaseController");
29
+ }
30
+ defaultLimit = 10;
31
+ maxLimit = 100;
32
+ defaultOffset = 0;
33
+ defaultSortBy = "createdAt";
34
+ defaultSortDirection = "ASC";
35
+ allowedSortFields = [];
36
+ constructor(options) {
37
+ if (options) {
38
+ if (options.defaultLimit !== void 0) {
39
+ this.defaultLimit = options.defaultLimit;
40
+ }
41
+ if (options.maxLimit !== void 0) {
42
+ this.maxLimit = options.maxLimit;
43
+ }
44
+ if (options.defaultOffset !== void 0) {
45
+ this.defaultOffset = options.defaultOffset;
46
+ }
47
+ if (options.defaultSortBy !== void 0) {
48
+ this.defaultSortBy = options.defaultSortBy;
49
+ }
50
+ if (options.defaultSortDirection !== void 0) {
51
+ this.defaultSortDirection = options.defaultSortDirection;
52
+ }
53
+ if (options.allowedSortFields !== void 0) {
54
+ this.allowedSortFields = [
55
+ ...new Set(options.allowedSortFields)
56
+ ];
57
+ }
58
+ }
59
+ }
60
+ parseListQuery = /* @__PURE__ */ __name((request) => {
61
+ const { query: rawQuery, limit: rawLimit, offset: rawOffset, sortBy: rawSortBy, sortDirection: rawSortDirection } = request.query;
62
+ return {
63
+ query: this.parseQuery(rawQuery),
64
+ limit: this.parseLimit(rawLimit),
65
+ offset: this.parseOffset(rawOffset),
66
+ sortBy: this.parseSortBy(rawSortBy),
67
+ sortDirection: this.parseSortDirection(rawSortDirection)
68
+ };
69
+ }, "parseListQuery");
70
+ //@ts-ignore
71
+ parseTypeORMFindManyOptions(rawQuery) {
72
+ try {
73
+ if (typeof rawQuery === "string" && rawQuery.trim().length > 0) {
74
+ const result = JSON.parse(rawQuery);
75
+ if ("where" in result && typeof result.where === "object" && result.where !== null || "relations" in result && typeof result.relations === "object" && result.relations !== null || "order" in result && typeof result.order === "object" || "select" in result && typeof result.select === "object" || "take" in result || "skip" in result) {
76
+ if ("take" in result) result.take = parseInt(result.take);
77
+ if ("skip" in result) result.skip = parseInt(result.skip);
78
+ return result;
79
+ }
80
+ }
81
+ } catch {
82
+ return void 0;
83
+ }
84
+ return void 0;
85
+ }
86
+ parseQuery(rawQuery) {
87
+ if (Array.isArray(rawQuery)) {
88
+ rawQuery = rawQuery[0];
89
+ }
90
+ if (typeof rawQuery !== "string" || rawQuery.trim().length === 0) {
91
+ return void 0;
92
+ }
93
+ return rawQuery;
94
+ }
95
+ parseLimit(rawLimit) {
96
+ const parsed = this.parseInteger(rawLimit);
97
+ if (parsed === null || parsed < 1) {
98
+ return this.defaultLimit;
99
+ }
100
+ return Math.min(parsed, this.maxLimit);
101
+ }
102
+ parseOffset(rawOffset) {
103
+ const parsed = this.parseInteger(rawOffset);
104
+ if (parsed === null || parsed < 0) {
105
+ return this.defaultOffset;
106
+ }
107
+ return parsed;
108
+ }
109
+ parseSortBy(rawSortBy) {
110
+ if (Array.isArray(rawSortBy)) {
111
+ rawSortBy = rawSortBy[0];
112
+ }
113
+ if (typeof rawSortBy !== "string") {
114
+ return this.defaultSortBy;
115
+ }
116
+ if (!this.allowedSortFields.includes(rawSortBy)) {
117
+ return this.defaultSortBy;
118
+ }
119
+ return rawSortBy;
120
+ }
121
+ parseSortDirection(rawSortDirection) {
122
+ if (Array.isArray(rawSortDirection)) {
123
+ rawSortDirection = rawSortDirection[0];
124
+ }
125
+ if (typeof rawSortDirection !== "string") {
126
+ return this.defaultSortDirection;
127
+ }
128
+ return rawSortDirection.toLowerCase() === "desc" ? "DESC" : "ASC";
129
+ }
130
+ parseInteger(value) {
131
+ if (Array.isArray(value)) {
132
+ value = value[0];
133
+ }
134
+ if (typeof value !== "string" || value.trim().length === 0) {
135
+ return null;
136
+ }
137
+ const numberValue = Number(value);
138
+ if (!Number.isFinite(numberValue)) {
139
+ return null;
140
+ }
141
+ return Math.floor(numberValue);
142
+ }
143
+ };
144
+ // Annotate the CommonJS export names for ESM import in node:
145
+ 0 && (module.exports = {
146
+ BaseController
147
+ });
148
+ //# sourceMappingURL=base.controller.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/base-class/base.controller.ts"],"sourcesContent":["import type { FindManyOptions } from 'typeorm'\r\nimport type { Request } from \"express\"\r\nimport type { BaseEntity } from \"./base.entity.js\"\r\n\r\ntype BaseControllerOptions<T> = {\r\n defaultLimit?: number\r\n maxLimit?: number\r\n defaultOffset?: number\r\n defaultSortBy?: keyof T\r\n defaultSortDirection?: 'ASC' | 'DESC'\r\n allowedSortFields?: (keyof T)[]\r\n}\r\n\r\nexport type SortDirection = \"ASC\" | \"DESC\"\r\n\r\nexport type ParsedListQuery<T> = {\r\n query: string | undefined;\r\n limit: number;\r\n offset: number;\r\n sortBy: keyof T | keyof BaseEntity;\r\n sortDirection: SortDirection\r\n}\r\n\r\nexport class BaseController<T> {\r\n private defaultLimit = 10\r\n private maxLimit = 100\r\n private defaultOffset = 0\r\n private defaultSortBy: keyof T | keyof BaseEntity = 'createdAt'\r\n private defaultSortDirection: 'ASC' | 'DESC' = 'ASC'\r\n private allowedSortFields: (keyof T)[] = []\r\n\r\n constructor(options?: BaseControllerOptions<T>) {\r\n if (options) {\r\n if (options.defaultLimit !== undefined) {\r\n this.defaultLimit = options.defaultLimit\r\n }\r\n\r\n if (options.maxLimit !== undefined) {\r\n this.maxLimit = options.maxLimit\r\n }\r\n\r\n if (options.defaultOffset !== undefined) {\r\n this.defaultOffset = options.defaultOffset\r\n }\r\n\r\n if (options.defaultSortBy !== undefined) {\r\n this.defaultSortBy = options.defaultSortBy\r\n }\r\n\r\n if (options.defaultSortDirection !== undefined) {\r\n this.defaultSortDirection = options.defaultSortDirection\r\n }\r\n\r\n if (options.allowedSortFields !== undefined) {\r\n this.allowedSortFields = [...new Set(options.allowedSortFields)]\r\n }\r\n }\r\n }\r\n\r\n parseListQuery = (request: Request): ParsedListQuery<T> => {\r\n const { query: rawQuery, limit: rawLimit, offset: rawOffset, sortBy: rawSortBy, sortDirection: rawSortDirection } = request.query\r\n\r\n return {\r\n query: this.parseQuery(rawQuery),\r\n limit: this.parseLimit(rawLimit),\r\n offset: this.parseOffset(rawOffset),\r\n sortBy: this.parseSortBy(rawSortBy),\r\n sortDirection: this.parseSortDirection(rawSortDirection)\r\n }\r\n }\r\n\r\n //@ts-ignore\r\n private parseTypeORMFindManyOptions(rawQuery: unknown): FindManyOptions<T> | undefined {\r\n try {\r\n if (typeof rawQuery === 'string' && rawQuery.trim().length > 0) {\r\n const result = JSON.parse(rawQuery)\r\n\r\n if (\r\n \"where\" in result && typeof result.where === 'object' && result.where !== null ||\r\n \"relations\" in result && typeof result.relations === 'object' && result.relations !== null ||\r\n \"order\" in result && typeof result.order === 'object' ||\r\n \"select\" in result && typeof result.select === 'object' ||\r\n \"take\" in result ||\r\n \"skip\" in result\r\n ) {\r\n if (\"take\" in result)\r\n result.take = parseInt(result.take)\r\n\r\n if (\"skip\" in result)\r\n result.skip = parseInt(result.skip)\r\n\r\n return result as FindManyOptions<T>\r\n }\r\n }\r\n } catch {\r\n return undefined\r\n }\r\n\r\n return undefined\r\n }\r\n\r\n private parseQuery(rawQuery: unknown): string | undefined {\r\n if (Array.isArray(rawQuery)) {\r\n rawQuery = rawQuery[0]\r\n }\r\n\r\n if (typeof rawQuery !== 'string' || rawQuery.trim().length === 0) {\r\n return undefined\r\n }\r\n\r\n return rawQuery\r\n }\r\n\r\n private parseLimit(rawLimit: unknown): number {\r\n const parsed = this.parseInteger(rawLimit)\r\n\r\n if (parsed === null || parsed < 1) {\r\n return this.defaultLimit\r\n }\r\n\r\n return Math.min(parsed, this.maxLimit)\r\n }\r\n\r\n private parseOffset(rawOffset: unknown): number {\r\n const parsed = this.parseInteger(rawOffset)\r\n\r\n if (parsed === null || parsed < 0) {\r\n return this.defaultOffset\r\n }\r\n\r\n return parsed\r\n }\r\n\r\n private parseSortBy(rawSortBy: unknown): keyof T | keyof BaseEntity {\r\n if (Array.isArray(rawSortBy)) {\r\n rawSortBy = rawSortBy[0]\r\n }\r\n\r\n if (typeof rawSortBy !== 'string') {\r\n return this.defaultSortBy\r\n }\r\n\r\n if (!this.allowedSortFields.includes(rawSortBy as keyof T)) {\r\n return this.defaultSortBy\r\n }\r\n\r\n return rawSortBy as keyof T\r\n }\r\n\r\n private parseSortDirection(rawSortDirection: unknown): 'ASC' | 'DESC' {\r\n if (Array.isArray(rawSortDirection)) {\r\n rawSortDirection = rawSortDirection[0]\r\n }\r\n\r\n if (typeof rawSortDirection !== 'string') {\r\n return this.defaultSortDirection\r\n }\r\n\r\n return rawSortDirection.toLowerCase() === 'desc' ? 'DESC' : 'ASC'\r\n }\r\n\r\n private parseInteger(value: unknown): number | null {\r\n if (Array.isArray(value)) {\r\n value = value[0]\r\n }\r\n\r\n if (typeof value !== 'string' || value.trim().length === 0) {\r\n return null\r\n }\r\n\r\n const numberValue = Number(value)\r\n\r\n if (!Number.isFinite(numberValue)) {\r\n return null\r\n }\r\n\r\n return Math.floor(numberValue)\r\n }\r\n}\r\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAuBA;;;;;AAAO,IAAMA,iBAAN,MAAMA;EAAb,OAAaA;;;EACDC,eAAe;EACfC,WAAW;EACXC,gBAAgB;EAChBC,gBAA4C;EAC5CC,uBAAuC;EACvCC,oBAAiC,CAAA;EAEzC,YAAYC,SAAoC;AAC5C,QAAIA,SAAS;AACT,UAAIA,QAAQN,iBAAiBO,QAAW;AACpC,aAAKP,eAAeM,QAAQN;MAChC;AAEA,UAAIM,QAAQL,aAAaM,QAAW;AAChC,aAAKN,WAAWK,QAAQL;MAC5B;AAEA,UAAIK,QAAQJ,kBAAkBK,QAAW;AACrC,aAAKL,gBAAgBI,QAAQJ;MACjC;AAEA,UAAII,QAAQH,kBAAkBI,QAAW;AACrC,aAAKJ,gBAAgBG,QAAQH;MACjC;AAEA,UAAIG,QAAQF,yBAAyBG,QAAW;AAC5C,aAAKH,uBAAuBE,QAAQF;MACxC;AAEA,UAAIE,QAAQD,sBAAsBE,QAAW;AACzC,aAAKF,oBAAoB;aAAI,IAAIG,IAAIF,QAAQD,iBAAiB;;MAClE;IACJ;EACJ;EAEAI,iBAAiB,wBAACC,YAAAA;AACd,UAAM,EAAEC,OAAOC,UAAUC,OAAOC,UAAUC,QAAQC,WAAWC,QAAQC,WAAWC,eAAeC,iBAAgB,IAAKV,QAAQC;AAE5H,WAAO;MACHA,OAAO,KAAKU,WAAWT,QAAAA;MACvBC,OAAO,KAAKS,WAAWR,QAAAA;MACvBC,QAAQ,KAAKQ,YAAYP,SAAAA;MACzBC,QAAQ,KAAKO,YAAYN,SAAAA;MACzBC,eAAe,KAAKM,mBAAmBL,gBAAAA;IAC3C;EACJ,GAViB;;EAaTM,4BAA4Bd,UAAmD;AACnF,QAAI;AACA,UAAI,OAAOA,aAAa,YAAYA,SAASe,KAAI,EAAGC,SAAS,GAAG;AAC5D,cAAMC,SAASC,KAAKC,MAAMnB,QAAAA;AAE1B,YACI,WAAWiB,UAAU,OAAOA,OAAOG,UAAU,YAAYH,OAAOG,UAAU,QAC1E,eAAeH,UAAU,OAAOA,OAAOI,cAAc,YAAYJ,OAAOI,cAAc,QACtF,WAAWJ,UAAU,OAAOA,OAAOK,UAAU,YAC7C,YAAYL,UAAU,OAAOA,OAAOM,WAAW,YAC/C,UAAUN,UACV,UAAUA,QACZ;AACE,cAAI,UAAUA,OACVA,QAAOO,OAAOC,SAASR,OAAOO,IAAI;AAEtC,cAAI,UAAUP,OACVA,QAAOS,OAAOD,SAASR,OAAOS,IAAI;AAEtC,iBAAOT;QACX;MACJ;IACJ,QAAQ;AACJ,aAAOtB;IACX;AAEA,WAAOA;EACX;EAEQc,WAAWT,UAAuC;AACtD,QAAI2B,MAAMC,QAAQ5B,QAAAA,GAAW;AACzBA,iBAAWA,SAAS,CAAA;IACxB;AAEA,QAAI,OAAOA,aAAa,YAAYA,SAASe,KAAI,EAAGC,WAAW,GAAG;AAC9D,aAAOrB;IACX;AAEA,WAAOK;EACX;EAEQU,WAAWR,UAA2B;AAC1C,UAAM2B,SAAS,KAAKC,aAAa5B,QAAAA;AAEjC,QAAI2B,WAAW,QAAQA,SAAS,GAAG;AAC/B,aAAO,KAAKzC;IAChB;AAEA,WAAO2C,KAAKC,IAAIH,QAAQ,KAAKxC,QAAQ;EACzC;EAEQsB,YAAYP,WAA4B;AAC5C,UAAMyB,SAAS,KAAKC,aAAa1B,SAAAA;AAEjC,QAAIyB,WAAW,QAAQA,SAAS,GAAG;AAC/B,aAAO,KAAKvC;IAChB;AAEA,WAAOuC;EACX;EAEQjB,YAAYN,WAAgD;AAChE,QAAIqB,MAAMC,QAAQtB,SAAAA,GAAY;AAC1BA,kBAAYA,UAAU,CAAA;IAC1B;AAEA,QAAI,OAAOA,cAAc,UAAU;AAC/B,aAAO,KAAKf;IAChB;AAEA,QAAI,CAAC,KAAKE,kBAAkBwC,SAAS3B,SAAAA,GAAuB;AACxD,aAAO,KAAKf;IAChB;AAEA,WAAOe;EACX;EAEQO,mBAAmBL,kBAA2C;AAClE,QAAImB,MAAMC,QAAQpB,gBAAAA,GAAmB;AACjCA,yBAAmBA,iBAAiB,CAAA;IACxC;AAEA,QAAI,OAAOA,qBAAqB,UAAU;AACtC,aAAO,KAAKhB;IAChB;AAEA,WAAOgB,iBAAiB0B,YAAW,MAAO,SAAS,SAAS;EAChE;EAEQJ,aAAaK,OAA+B;AAChD,QAAIR,MAAMC,QAAQO,KAAAA,GAAQ;AACtBA,cAAQA,MAAM,CAAA;IAClB;AAEA,QAAI,OAAOA,UAAU,YAAYA,MAAMpB,KAAI,EAAGC,WAAW,GAAG;AACxD,aAAO;IACX;AAEA,UAAMoB,cAAcC,OAAOF,KAAAA;AAE3B,QAAI,CAACE,OAAOC,SAASF,WAAAA,GAAc;AAC/B,aAAO;IACX;AAEA,WAAOL,KAAKQ,MAAMH,WAAAA;EACtB;AACJ;","names":["BaseController","defaultLimit","maxLimit","defaultOffset","defaultSortBy","defaultSortDirection","allowedSortFields","options","undefined","Set","parseListQuery","request","query","rawQuery","limit","rawLimit","offset","rawOffset","sortBy","rawSortBy","sortDirection","rawSortDirection","parseQuery","parseLimit","parseOffset","parseSortBy","parseSortDirection","parseTypeORMFindManyOptions","trim","length","result","JSON","parse","where","relations","order","select","take","parseInt","skip","Array","isArray","parsed","parseInteger","Math","min","includes","toLowerCase","value","numberValue","Number","isFinite","floor"]}
@@ -0,0 +1,38 @@
1
+ import { Request } from 'express';
2
+ import { BaseEntity } from './base.entity.cjs';
3
+
4
+ type BaseControllerOptions<T> = {
5
+ defaultLimit?: number;
6
+ maxLimit?: number;
7
+ defaultOffset?: number;
8
+ defaultSortBy?: keyof T;
9
+ defaultSortDirection?: 'ASC' | 'DESC';
10
+ allowedSortFields?: (keyof T)[];
11
+ };
12
+ type SortDirection = "ASC" | "DESC";
13
+ type ParsedListQuery<T> = {
14
+ query: string | undefined;
15
+ limit: number;
16
+ offset: number;
17
+ sortBy: keyof T | keyof BaseEntity;
18
+ sortDirection: SortDirection;
19
+ };
20
+ declare class BaseController<T> {
21
+ private defaultLimit;
22
+ private maxLimit;
23
+ private defaultOffset;
24
+ private defaultSortBy;
25
+ private defaultSortDirection;
26
+ private allowedSortFields;
27
+ constructor(options?: BaseControllerOptions<T>);
28
+ parseListQuery: (request: Request) => ParsedListQuery<T>;
29
+ private parseTypeORMFindManyOptions;
30
+ private parseQuery;
31
+ private parseLimit;
32
+ private parseOffset;
33
+ private parseSortBy;
34
+ private parseSortDirection;
35
+ private parseInteger;
36
+ }
37
+
38
+ export { BaseController, type ParsedListQuery, type SortDirection };
@@ -0,0 +1,38 @@
1
+ import { Request } from 'express';
2
+ import { BaseEntity } from './base.entity.js';
3
+
4
+ type BaseControllerOptions<T> = {
5
+ defaultLimit?: number;
6
+ maxLimit?: number;
7
+ defaultOffset?: number;
8
+ defaultSortBy?: keyof T;
9
+ defaultSortDirection?: 'ASC' | 'DESC';
10
+ allowedSortFields?: (keyof T)[];
11
+ };
12
+ type SortDirection = "ASC" | "DESC";
13
+ type ParsedListQuery<T> = {
14
+ query: string | undefined;
15
+ limit: number;
16
+ offset: number;
17
+ sortBy: keyof T | keyof BaseEntity;
18
+ sortDirection: SortDirection;
19
+ };
20
+ declare class BaseController<T> {
21
+ private defaultLimit;
22
+ private maxLimit;
23
+ private defaultOffset;
24
+ private defaultSortBy;
25
+ private defaultSortDirection;
26
+ private allowedSortFields;
27
+ constructor(options?: BaseControllerOptions<T>);
28
+ parseListQuery: (request: Request) => ParsedListQuery<T>;
29
+ private parseTypeORMFindManyOptions;
30
+ private parseQuery;
31
+ private parseLimit;
32
+ private parseOffset;
33
+ private parseSortBy;
34
+ private parseSortDirection;
35
+ private parseInteger;
36
+ }
37
+
38
+ export { BaseController, type ParsedListQuery, type SortDirection };