@skalfa/skalfa-api-core 1.0.3 → 1.0.8

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 (284) hide show
  1. package/CONTRIBUTING.md +45 -0
  2. package/LICENSE +21 -0
  3. package/README.md +60 -0
  4. package/dist/auth/auth.d.ts +18 -15
  5. package/dist/auth/auth.js +20 -203
  6. package/dist/auth/auth.js.map +1 -1
  7. package/dist/auth/create-access-token.d.ts +4 -0
  8. package/dist/auth/create-access-token.js +26 -0
  9. package/dist/auth/create-access-token.js.map +1 -0
  10. package/dist/auth/create-user-mail-token.d.ts +4 -0
  11. package/dist/auth/create-user-mail-token.js +19 -0
  12. package/dist/auth/create-user-mail-token.js.map +1 -0
  13. package/dist/auth/helpers/generate-agent-id.d.ts +1 -0
  14. package/dist/auth/helpers/generate-agent-id.js +7 -0
  15. package/dist/auth/helpers/generate-agent-id.js.map +1 -0
  16. package/dist/auth/helpers/get-request-ip.d.ts +1 -0
  17. package/dist/auth/helpers/get-request-ip.js +4 -0
  18. package/dist/auth/helpers/get-request-ip.js.map +1 -0
  19. package/dist/auth/helpers/get-user-permissions.d.ts +1 -0
  20. package/dist/auth/helpers/get-user-permissions.js +9 -0
  21. package/dist/auth/helpers/get-user-permissions.js.map +1 -0
  22. package/dist/auth/helpers/index.d.ts +3 -0
  23. package/dist/auth/helpers/index.js +4 -0
  24. package/dist/auth/helpers/index.js.map +1 -0
  25. package/dist/auth/list-user-sessions.d.ts +1 -0
  26. package/dist/auth/list-user-sessions.js +10 -0
  27. package/dist/auth/list-user-sessions.js.map +1 -0
  28. package/dist/auth/revalidate-user-permissions-by-role.d.ts +1 -0
  29. package/dist/auth/revalidate-user-permissions-by-role.js +12 -0
  30. package/dist/auth/revalidate-user-permissions-by-role.js.map +1 -0
  31. package/dist/auth/revalidate-user-permissions.d.ts +1 -0
  32. package/dist/auth/revalidate-user-permissions.js +21 -0
  33. package/dist/auth/revalidate-user-permissions.js.map +1 -0
  34. package/dist/auth/revoke-access-token.d.ts +1 -0
  35. package/dist/auth/revoke-access-token.js +5 -0
  36. package/dist/auth/revoke-access-token.js.map +1 -0
  37. package/dist/auth/verify-access-token.d.ts +1 -0
  38. package/dist/auth/verify-access-token.js +47 -0
  39. package/dist/auth/verify-access-token.js.map +1 -0
  40. package/dist/auth/verify-user-mail-token.d.ts +1 -0
  41. package/dist/auth/verify-user-mail-token.js +21 -0
  42. package/dist/auth/verify-user-mail-token.js.map +1 -0
  43. package/dist/commands/cli.js +18 -27
  44. package/dist/commands/cli.js.map +1 -1
  45. package/dist/commands/make/basic-controller.js +1 -1
  46. package/dist/commands/make/basic-controller.js.map +1 -1
  47. package/dist/commands/make/basic-migration.d.ts +1 -1
  48. package/dist/commands/make/basic-migration.js +2 -2
  49. package/dist/commands/make/basic-migration.js.map +1 -1
  50. package/dist/commands/make/basic-model.js +1 -1
  51. package/dist/commands/make/basic-model.js.map +1 -1
  52. package/dist/commands/make/basic-seeder.js +1 -1
  53. package/dist/commands/make/basic-seeder.js.map +1 -1
  54. package/dist/commands/make/blueprint.js +1 -1
  55. package/dist/commands/make/blueprint.js.map +1 -1
  56. package/dist/commands/make/da-migration.js +3 -3
  57. package/dist/commands/make/da-migration.js.map +1 -1
  58. package/dist/commands/make/mail.js +2 -2
  59. package/dist/commands/make/mail.js.map +1 -1
  60. package/dist/commands/make/notification.js +1 -1
  61. package/dist/commands/make/notification.js.map +1 -1
  62. package/dist/commands/make/queue.js +1 -1
  63. package/dist/commands/make/queue.js.map +1 -1
  64. package/dist/commands/make/resource.d.ts +2 -0
  65. package/dist/commands/make/resource.js +19 -0
  66. package/dist/commands/make/resource.js.map +1 -0
  67. package/dist/commands/make/skalfa-controller.d.ts +3 -0
  68. package/dist/commands/make/{light-controller.js → skalfa-controller.js} +9 -9
  69. package/dist/commands/make/skalfa-controller.js.map +1 -0
  70. package/dist/commands/make/skalfa-model.d.ts +3 -0
  71. package/dist/commands/make/{light-model.js → skalfa-model.js} +11 -11
  72. package/dist/commands/make/skalfa-model.js.map +1 -0
  73. package/dist/commands/runner/barrels.js.map +1 -1
  74. package/dist/commands/runner/blueprint/controller-generation.js +2 -2
  75. package/dist/commands/runner/blueprint/controller-generation.js.map +1 -1
  76. package/dist/commands/runner/blueprint/documentation-generation.js.map +1 -1
  77. package/dist/commands/runner/blueprint/migration-generation.js +3 -3
  78. package/dist/commands/runner/blueprint/migration-generation.js.map +1 -1
  79. package/dist/commands/runner/blueprint/model-generation.js +2 -2
  80. package/dist/commands/runner/blueprint/model-generation.js.map +1 -1
  81. package/dist/commands/runner/blueprint/runner.js +7 -8
  82. package/dist/commands/runner/blueprint/runner.js.map +1 -1
  83. package/dist/commands/runner/blueprint/seeder-generation.js +3 -3
  84. package/dist/commands/runner/blueprint/seeder-generation.js.map +1 -1
  85. package/dist/commands/runner/da-migration.js +1 -2
  86. package/dist/commands/runner/da-migration.js.map +1 -1
  87. package/dist/commands/runner/generate-docs.d.ts +2 -0
  88. package/dist/commands/runner/generate-docs.js +400 -0
  89. package/dist/commands/runner/generate-docs.js.map +1 -0
  90. package/dist/commands/runner/migration.js +1 -1
  91. package/dist/commands/runner/migration.js.map +1 -1
  92. package/dist/commands/runner/seeder.js +1 -1
  93. package/dist/commands/runner/seeder.js.map +1 -1
  94. package/dist/commands/stubs/index.d.ts +4 -4
  95. package/dist/commands/stubs/index.js +4 -4
  96. package/dist/commands/stubs/index.js.map +1 -1
  97. package/dist/context/context.js +6 -0
  98. package/dist/context/context.js.map +1 -1
  99. package/dist/controller/controller.d.ts +17 -30
  100. package/dist/controller/controller.js +39 -121
  101. package/dist/controller/controller.js.map +1 -1
  102. package/dist/controller/response.d.ts +6 -0
  103. package/dist/controller/response.js +63 -0
  104. package/dist/controller/response.js.map +1 -0
  105. package/dist/controller/storage.d.ts +9 -0
  106. package/dist/controller/storage.js +56 -0
  107. package/dist/controller/storage.js.map +1 -0
  108. package/dist/conversion/conversion.d.ts +3 -0
  109. package/dist/conversion/conversion.js +28 -4
  110. package/dist/conversion/conversion.js.map +1 -1
  111. package/dist/conversion/date.d.ts +1 -0
  112. package/dist/conversion/date.js +77 -0
  113. package/dist/conversion/date.js.map +1 -0
  114. package/dist/index.d.ts +2 -0
  115. package/dist/index.js +2 -0
  116. package/dist/index.js.map +1 -1
  117. package/dist/logger/logger.js +33 -0
  118. package/dist/logger/logger.js.map +1 -1
  119. package/dist/mail/mail.js +6 -6
  120. package/dist/mail/mail.js.map +1 -1
  121. package/dist/middleware/access-log.d.ts +31 -0
  122. package/dist/middleware/access-log.js +13 -0
  123. package/dist/middleware/access-log.js.map +1 -0
  124. package/dist/middleware/auth.d.ts +37 -0
  125. package/dist/middleware/auth.js +16 -0
  126. package/dist/middleware/auth.js.map +1 -0
  127. package/dist/middleware/body-parse.d.ts +35 -0
  128. package/dist/middleware/body-parse.js +87 -0
  129. package/dist/middleware/body-parse.js.map +1 -0
  130. package/dist/middleware/context.d.ts +29 -0
  131. package/dist/middleware/context.js +8 -0
  132. package/dist/middleware/context.js.map +1 -0
  133. package/dist/middleware/cors.d.ts +31 -0
  134. package/dist/middleware/cors.js +27 -0
  135. package/dist/middleware/cors.js.map +1 -0
  136. package/dist/middleware/error-handler.d.ts +33 -0
  137. package/dist/middleware/error-handler.js +17 -0
  138. package/dist/middleware/error-handler.js.map +1 -0
  139. package/dist/middleware/middleware.d.ts +31 -10
  140. package/dist/middleware/middleware.js +41 -209
  141. package/dist/middleware/middleware.js.map +1 -1
  142. package/dist/middleware/private.d.ts +29 -0
  143. package/dist/middleware/private.js +8 -0
  144. package/dist/middleware/private.js.map +1 -0
  145. package/dist/middleware/rate-limiter.d.ts +32 -0
  146. package/dist/middleware/rate-limiter.js +30 -0
  147. package/dist/middleware/rate-limiter.js.map +1 -0
  148. package/dist/notification/index.d.ts +1 -0
  149. package/dist/notification/index.js +2 -0
  150. package/dist/notification/index.js.map +1 -0
  151. package/dist/notification/notification.d.ts +16 -0
  152. package/dist/notification/notification.js +64 -0
  153. package/dist/notification/notification.js.map +1 -0
  154. package/dist/permission/permission.js +9 -0
  155. package/dist/permission/permission.js.map +1 -1
  156. package/dist/registry/registry.d.ts +0 -6
  157. package/dist/registry/registry.js +6 -6
  158. package/dist/registry/registry.js.map +1 -1
  159. package/dist/storage/storage.d.ts +3 -3
  160. package/dist/storage/storage.js.map +1 -1
  161. package/dist/validation/validation.js +43 -51
  162. package/dist/validation/validation.js.map +1 -1
  163. package/package.json +4 -4
  164. package/src/auth/auth.ts +21 -252
  165. package/src/auth/create-access-token.ts +29 -0
  166. package/src/auth/create-user-mail-token.ts +24 -0
  167. package/src/auth/helpers/generate-agent-id.ts +8 -0
  168. package/src/auth/helpers/get-request-ip.ts +3 -0
  169. package/src/auth/helpers/get-user-permissions.ts +15 -0
  170. package/src/auth/helpers/index.ts +3 -0
  171. package/src/auth/list-user-sessions.ts +11 -0
  172. package/src/auth/revalidate-user-permissions-by-role.ts +13 -0
  173. package/src/auth/revalidate-user-permissions.ts +26 -0
  174. package/src/auth/revoke-access-token.ts +5 -0
  175. package/src/auth/verify-access-token.ts +56 -0
  176. package/src/auth/verify-user-mail-token.ts +24 -0
  177. package/src/commands/cli.ts +19 -29
  178. package/src/commands/make/basic-controller.ts +4 -2
  179. package/src/commands/make/basic-migration.ts +5 -3
  180. package/src/commands/make/basic-model.ts +3 -1
  181. package/src/commands/make/basic-seeder.ts +3 -1
  182. package/src/commands/make/blueprint.ts +3 -1
  183. package/src/commands/make/da-migration.ts +6 -5
  184. package/src/commands/make/mail.ts +4 -2
  185. package/src/commands/make/notification.ts +3 -1
  186. package/src/commands/make/queue.ts +3 -1
  187. package/src/commands/make/resource.ts +21 -0
  188. package/src/commands/make/{light-controller.ts → skalfa-controller.ts} +10 -8
  189. package/src/commands/make/{light-model.ts → skalfa-model.ts} +12 -10
  190. package/src/commands/runner/barrels.ts +4 -0
  191. package/src/commands/runner/blueprint/controller-generation.ts +4 -2
  192. package/src/commands/runner/blueprint/documentation-generation.ts +2 -0
  193. package/src/commands/runner/blueprint/migration-generation.ts +5 -3
  194. package/src/commands/runner/blueprint/model-generation.ts +4 -2
  195. package/src/commands/runner/blueprint/runner.ts +15 -8
  196. package/src/commands/runner/blueprint/seeder-generation.ts +5 -3
  197. package/src/commands/runner/da-migration.ts +3 -2
  198. package/src/commands/runner/generate-docs.ts +495 -0
  199. package/src/commands/runner/migration.ts +1 -1
  200. package/src/commands/runner/seeder.ts +1 -1
  201. package/src/commands/stubs/index.ts +4 -4
  202. package/src/context/context.ts +23 -17
  203. package/src/controller/controller.ts +124 -239
  204. package/src/controller/response.ts +78 -0
  205. package/src/controller/storage.ts +78 -0
  206. package/src/conversion/conversion.ts +90 -64
  207. package/src/conversion/date.ts +74 -0
  208. package/src/index.ts +2 -0
  209. package/src/logger/logger.ts +217 -176
  210. package/src/mail/mail.ts +85 -85
  211. package/src/middleware/access-log.ts +15 -0
  212. package/src/middleware/auth.ts +19 -0
  213. package/src/middleware/body-parse.ts +83 -0
  214. package/src/middleware/context.ts +11 -0
  215. package/src/middleware/cors.ts +31 -0
  216. package/src/middleware/error-handler.ts +20 -0
  217. package/src/middleware/middleware.ts +91 -288
  218. package/src/middleware/private.ts +8 -0
  219. package/src/middleware/rate-limiter.ts +41 -0
  220. package/src/notification/index.ts +1 -0
  221. package/src/notification/notification.ts +86 -0
  222. package/src/permission/permission.ts +140 -136
  223. package/src/registry/registry.ts +17 -15
  224. package/src/route/route.ts +11 -11
  225. package/src/storage/storage.ts +104 -106
  226. package/src/validation/validation.ts +322 -346
  227. package/dist/auth.util.d.ts +0 -19
  228. package/dist/auth.util.js +0 -183
  229. package/dist/auth.util.js.map +0 -1
  230. package/dist/commands/make/light-controller.d.ts +0 -3
  231. package/dist/commands/make/light-controller.js.map +0 -1
  232. package/dist/commands/make/light-model.d.ts +0 -3
  233. package/dist/commands/make/light-model.js.map +0 -1
  234. package/dist/context.util.d.ts +0 -7
  235. package/dist/context.util.js +0 -11
  236. package/dist/context.util.js.map +0 -1
  237. package/dist/controller.util.d.ts +0 -118
  238. package/dist/controller.util.js +0 -144
  239. package/dist/controller.util.js.map +0 -1
  240. package/dist/conversion.util.d.ts +0 -8
  241. package/dist/conversion.util.js +0 -52
  242. package/dist/conversion.util.js.map +0 -1
  243. package/dist/db/db.d.ts +0 -84
  244. package/dist/db/db.js +0 -177
  245. package/dist/db/db.js.map +0 -1
  246. package/dist/db/index.d.ts +0 -1
  247. package/dist/db/index.js +0 -2
  248. package/dist/db/index.js.map +0 -1
  249. package/dist/db.util.d.ts +0 -84
  250. package/dist/db.util.js +0 -177
  251. package/dist/db.util.js.map +0 -1
  252. package/dist/logger.util.d.ts +0 -30
  253. package/dist/logger.util.js +0 -126
  254. package/dist/logger.util.js.map +0 -1
  255. package/dist/mail.util.d.ts +0 -21
  256. package/dist/mail.util.js +0 -53
  257. package/dist/mail.util.js.map +0 -1
  258. package/dist/middleware.util.d.ts +0 -263
  259. package/dist/middleware.util.js +0 -233
  260. package/dist/middleware.util.js.map +0 -1
  261. package/dist/model/index.d.ts +0 -3
  262. package/dist/model/index.js +0 -4
  263. package/dist/model/index.js.map +0 -1
  264. package/dist/model/model.d.ts +0 -204
  265. package/dist/model/model.js +0 -1495
  266. package/dist/model/model.js.map +0 -1
  267. package/dist/model.util.d.ts +0 -204
  268. package/dist/model.util.js +0 -1495
  269. package/dist/model.util.js.map +0 -1
  270. package/dist/permission.util.d.ts +0 -38
  271. package/dist/permission.util.js +0 -91
  272. package/dist/permission.util.js.map +0 -1
  273. package/dist/registry.util.d.ts +0 -28
  274. package/dist/registry.util.js +0 -19
  275. package/dist/registry.util.js.map +0 -1
  276. package/dist/route.util.d.ts +0 -1
  277. package/dist/route.util.js +0 -12
  278. package/dist/route.util.js.map +0 -1
  279. package/dist/storage.util.d.ts +0 -56
  280. package/dist/storage.util.js +0 -82
  281. package/dist/storage.util.js.map +0 -1
  282. package/dist/validation.util.d.ts +0 -7
  283. package/dist/validation.util.js +0 -237
  284. package/dist/validation.util.js.map +0 -1
@@ -1,6 +1,7 @@
1
1
  import "elysia";
2
2
  import { Elysia, Context } from "elysia";
3
3
  import { KeyPermission, ValidationRules, ValidationRule } from "@utils";
4
+ import { uploadFile, deleteFile } from "./storage";
4
5
  declare module "elysia" {
5
6
  interface ControllerContext extends Context {
6
7
  getQuery: {
@@ -67,21 +68,14 @@ export declare const controller: (app: Elysia) => Elysia<"", {
67
68
  readonly expand: any;
68
69
  };
69
70
  readonly validation: <T extends object>(rules: Partial<Record<keyof T | string, ValidationRules[] | string>>) => Promise<void>;
70
- readonly responseErrorValidation: (errors: Record<string, string[]>) => never;
71
- readonly responseError: (error: any, section?: string, message?: string, debug?: string | boolean) => never;
72
- readonly responseForbidden: (message?: string) => never;
73
- readonly responseData: (data: any[], totalRow?: number, message?: string) => never;
74
- readonly responseSuccess: (data: any, message?: string, code?: 200 | 201) => never;
75
- readonly responseSaved: (data: any, message?: string) => never;
76
- readonly uploadFile: (file: File, folder?: string, options?: {
77
- disk?: "public" | "private";
78
- owner_id?: number;
79
- permissions?: {
80
- user_id?: number;
81
- role_id?: number;
82
- }[];
83
- }) => Promise<string>;
84
- readonly deleteFile: (filePath: string) => Promise<boolean>;
71
+ readonly responseErrorValidation: (errors: Record<string, string[]>) => void;
72
+ readonly responseError: (error: any, section?: string, message?: string, debug?: boolean) => void;
73
+ readonly responseForbidden: (message?: string) => void;
74
+ readonly responseData: (data: any[], totalRow?: number, message?: string) => void;
75
+ readonly responseSuccess: (data: any, message?: string, code?: 200 | 201) => void;
76
+ readonly responseSaved: (data: any, message?: string) => void;
77
+ readonly uploadFile: typeof uploadFile;
78
+ readonly deleteFile: typeof deleteFile;
85
79
  };
86
80
  resolve: {};
87
81
  schema: {};
@@ -99,20 +93,13 @@ export declare const controller: (app: Elysia) => Elysia<"", {
99
93
  readonly expand: any;
100
94
  };
101
95
  readonly validation: <T extends object>(rules: Partial<Record<keyof T | string, ValidationRules[] | string>>) => Promise<void>;
102
- readonly responseErrorValidation: (errors: Record<string, string[]>) => never;
103
- readonly responseError: (error: any, section?: string, message?: string, debug?: string | boolean) => never;
104
- readonly responseForbidden: (message?: string) => never;
105
- readonly responseData: (data: any[], totalRow?: number, message?: string) => never;
106
- readonly responseSuccess: (data: any, message?: string, code?: 200 | 201) => never;
107
- readonly responseSaved: (data: any, message?: string) => never;
108
- readonly uploadFile: (file: File, folder?: string, options?: {
109
- disk?: "public" | "private";
110
- owner_id?: number;
111
- permissions?: {
112
- user_id?: number;
113
- role_id?: number;
114
- }[];
115
- }) => Promise<string>;
116
- readonly deleteFile: (filePath: string) => Promise<boolean>;
96
+ readonly responseErrorValidation: (errors: Record<string, string[]>) => void;
97
+ readonly responseError: (error: any, section?: string, message?: string, debug?: boolean) => void;
98
+ readonly responseForbidden: (message?: string) => void;
99
+ readonly responseData: (data: any[], totalRow?: number, message?: string) => void;
100
+ readonly responseSuccess: (data: any, message?: string, code?: 200 | 201) => void;
101
+ readonly responseSaved: (data: any, message?: string) => void;
102
+ readonly uploadFile: typeof uploadFile;
103
+ readonly deleteFile: typeof deleteFile;
117
104
  }>;
118
105
  }>;
@@ -1,11 +1,10 @@
1
- import fs from "fs";
2
- import path from "path";
3
1
  import "elysia";
4
- import { validate, logger } from "@utils";
5
- import { db } from "@skalfa/skalfa-orm";
2
+ import { validate } from "@utils";
3
+ import { responseErrorValidation, responseError, responseForbidden, responseData, responseSuccess, responseSaved } from "./response";
4
+ import { uploadFile, deleteFile } from "./storage";
6
5
  export const controller = (app) => app.derive(({ query, body, status }) => ({
7
6
  // =====================================>
8
- // ## Basic fetching data query
7
+ // ## Controller: basic fetching data query
9
8
  // =====================================>
10
9
  getQuery: {
11
10
  page: query.page ? Number(query.page) : 1,
@@ -18,9 +17,9 @@ export const controller = (app) => app.derive(({ query, body, status }) => ({
18
17
  selectableOption: query.selectableOption ? JSON.parse(query.selectableOption) : [],
19
18
  expand: query.expand ? JSON.parse(query.expand) : [],
20
19
  },
21
- // ===================================>
22
- // ## Validation request body
23
- // ===================================>
20
+ // =====================================>
21
+ // ## Controller: validation request body
22
+ // =====================================>
24
23
  validation: async (rules) => {
25
24
  const result = await validate(body, rules);
26
25
  if (!result.valid) {
@@ -30,118 +29,37 @@ export const controller = (app) => app.derive(({ query, body, status }) => ({
30
29
  });
31
30
  }
32
31
  },
33
- // ====================================>
34
- // ## Response error validation
35
- // ====================================>
36
- responseErrorValidation: (errors) => {
37
- throw status(422, {
38
- message: "Error: Unprocessable Entity!",
39
- errors: errors,
40
- });
41
- },
42
- // ====================================>
43
- // ## Response error
44
- // ====================================>
45
- responseError: (error, section, message, debug = (process.env.APP_DEBUG || true)) => {
46
- logger.error(`Error: ${error}`, { error: error, feature: section });
47
- if (debug) {
48
- throw status(500, {
49
- message: message ?? "Error: Server Side Having Problem!",
50
- error: error?.message ?? "unknown",
51
- section: section ?? "unknown",
52
- });
53
- }
54
- throw status(500, {
55
- message: message ?? "Error: Server Side Having Problem!"
56
- });
57
- },
58
- // ====================================>
59
- // ## Response Forbidden
60
- // ====================================>
61
- responseForbidden: (message) => {
62
- throw status(403, {
63
- message: message ?? "Access Forbidden!"
64
- });
65
- },
66
- // ====================================>
67
- // ## Response record
68
- // ====================================>
69
- responseData: (data, totalRow, message) => {
70
- throw status(200, {
71
- message: message ?? (data.length ? "Success" : "Empty data"),
72
- data: data ?? [],
73
- total_row: totalRow ?? null,
74
- });
75
- },
76
- // ===================================>
77
- // ## Response success
78
- // ===================================>
79
- responseSuccess: (data, message, code) => {
80
- throw status(code || 200, {
81
- message: message ?? "Success",
82
- data: data ?? [],
83
- });
84
- },
85
- // ===================================>
86
- // ## Response saved record
87
- // ===================================>
88
- responseSaved: (data, message) => {
89
- throw status(201, {
90
- message: message ?? "Success",
91
- data: data ?? [],
92
- });
93
- },
94
- // ===================================>
95
- // ## Upload file
96
- // ===================================>
97
- uploadFile: async (file, folder = "uploads", options) => {
98
- const disk = options?.disk ?? "public";
99
- const dir = path.resolve("storage", disk, folder);
100
- if (!fs.existsSync(dir))
101
- fs.mkdirSync(dir, { recursive: true });
102
- const fileName = `${Date.now().toString(36)}${Math.random().toString(36).substring(2, 18)}${path.extname(file.name).toLowerCase()}`;
103
- const filePath = path.join(dir, fileName);
104
- const buffer = Buffer.from(await file.arrayBuffer());
105
- fs.writeFileSync(filePath, buffer);
106
- const relativePath = `/${folder}/${fileName}`;
107
- if (db && options) {
108
- const [storage] = await db("storages").insert({
109
- user_id: options?.owner_id ?? null,
110
- disk: disk,
111
- path: relativePath,
112
- filename: file.name,
113
- filetype: file.type,
114
- filesize: buffer.length,
115
- created_at: new Date(),
116
- }).returning(["id"]);
117
- if (options?.permissions?.length) {
118
- const permissions = options.permissions.map(p => ({
119
- storage_id: storage.id,
120
- user_id: p.user_id ?? null,
121
- role_id: p.role_id ?? null,
122
- created_at: new Date(),
123
- }));
124
- await db("storage_permissions").insert(permissions);
125
- }
126
- }
127
- return relativePath;
128
- },
129
- // ==================================>
130
- // ## Delete File
131
- // ==================================>
132
- deleteFile: async (filePath) => {
133
- if (fs.existsSync(filePath)) {
134
- if (db) {
135
- const record = await db("storages").where("path", filePath).first();
136
- if (record) {
137
- await db("storages").where("id", record.id).delete();
138
- await db("storage_permissions").where("storage_id", record.id).delete();
139
- }
140
- }
141
- fs.unlinkSync(filePath);
142
- return true;
143
- }
144
- return false;
145
- },
32
+ // =====================================>
33
+ // ## Controller: response error validation
34
+ // =====================================>
35
+ responseErrorValidation: (errors) => responseErrorValidation(status, errors),
36
+ // =====================================>
37
+ // ## Controller: response error
38
+ // =====================================>
39
+ responseError: (error, section, message, debug) => responseError(status, error, section, message, debug),
40
+ // =====================================>
41
+ // ## Controller: response forbidden
42
+ // =====================================>
43
+ responseForbidden: (message) => responseForbidden(status, message),
44
+ // =====================================>
45
+ // ## Controller: response record
46
+ // =====================================>
47
+ responseData: (data, totalRow, message) => responseData(status, data, totalRow, message),
48
+ // =====================================>
49
+ // ## Controller: response success
50
+ // =====================================>
51
+ responseSuccess: (data, message, code) => responseSuccess(status, data, message, code),
52
+ // =====================================>
53
+ // ## Controller: response saved record
54
+ // =====================================>
55
+ responseSaved: (data, message) => responseSaved(status, data, message),
56
+ // =====================================>
57
+ // ## Controller: upload file
58
+ // =====================================>
59
+ uploadFile,
60
+ // =====================================>
61
+ // ## Controller: delete file
62
+ // =====================================>
63
+ deleteFile,
146
64
  }));
147
65
  //# sourceMappingURL=controller.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller/controller.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controller.js","sourceRoot":"","sources":["../../src/controller/controller.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export declare function responseErrorValidation(status: any, errors: Record<string, string[]>): void;
2
+ export declare function responseError(status: any, error: any, section?: string, message?: string, debug?: string | boolean): void;
3
+ export declare function responseForbidden(status: any, message?: string): void;
4
+ export declare function responseData(status: any, data: any[], totalRow?: number, message?: string): void;
5
+ export declare function responseSuccess(status: any, data: any, message?: string, code?: 200 | 201): void;
6
+ export declare function responseSaved(status: any, data: any, message?: string): void;
@@ -0,0 +1,63 @@
1
+ import { logger } from "@utils";
2
+ // ====================================>
3
+ // ## Response error validation
4
+ // ====================================>
5
+ export function responseErrorValidation(status, errors) {
6
+ throw status(422, {
7
+ message: "Error: Unprocessable Entity!",
8
+ errors: errors,
9
+ });
10
+ }
11
+ // ====================================>
12
+ // ## Response error
13
+ // ====================================>
14
+ export function responseError(status, error, section, message, debug = (process.env.APP_DEBUG || true)) {
15
+ logger.error(`Error: ${error}`, { error: error, feature: section });
16
+ if (debug) {
17
+ throw status(500, {
18
+ message: message ?? "Error: Server Side Having Problem!",
19
+ error: error?.message ?? "unknown",
20
+ section: section ?? "unknown",
21
+ });
22
+ }
23
+ throw status(500, {
24
+ message: message ?? "Error: Server Side Having Problem!"
25
+ });
26
+ }
27
+ // ====================================>
28
+ // ## Response Forbidden
29
+ // ====================================>
30
+ export function responseForbidden(status, message) {
31
+ throw status(403, {
32
+ message: message ?? "Access Forbidden!"
33
+ });
34
+ }
35
+ // ====================================>
36
+ // ## Response record
37
+ // ====================================>
38
+ export function responseData(status, data, totalRow, message) {
39
+ throw status(200, {
40
+ message: message ?? (data.length ? "Success" : "Empty data"),
41
+ data: data ?? [],
42
+ total_row: totalRow ?? null,
43
+ });
44
+ }
45
+ // ===================================>
46
+ // ## Response success
47
+ // ===================================>
48
+ export function responseSuccess(status, data, message, code) {
49
+ throw status(code || 200, {
50
+ message: message ?? "Success",
51
+ data: data ?? [],
52
+ });
53
+ }
54
+ // ===================================>
55
+ // ## Response saved record
56
+ // ===================================>
57
+ export function responseSaved(status, data, message) {
58
+ throw status(201, {
59
+ message: message ?? "Success",
60
+ data: data ?? [],
61
+ });
62
+ }
63
+ //# sourceMappingURL=response.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response.js","sourceRoot":"","sources":["../../src/controller/response.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAIhC,wCAAwC;AACxC,+BAA+B;AAC/B,wCAAwC;AACxC,MAAM,UAAU,uBAAuB,CAAC,MAAW,EAAE,MAAgC;IACnF,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,EAAE,8BAA8B;QACvC,MAAM,EAAE,MAAM;KACf,CAAC,CAAC;AACL,CAAC;AAED,wCAAwC;AACxC,oBAAoB;AACpB,wCAAwC;AACxC,MAAM,UAAU,aAAa,CAC3B,MAAW,EACX,KAAU,EACV,OAAgB,EAChB,OAAgB,EAChB,KAAK,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,IAAI,CAAC;IAEvC,MAAM,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAEpE,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,MAAM,CAAC,GAAG,EAAE;YAChB,OAAO,EAAK,OAAO,IAAI,oCAAoC;YAC3D,KAAK,EAAO,KAAK,EAAE,OAAO,IAAI,SAAS;YACvC,OAAO,EAAK,OAAO,IAAI,SAAS;SACjC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,EAAE,OAAO,IAAI,oCAAoC;KACzD,CAAC,CAAC;AACL,CAAC;AAED,wCAAwC;AACxC,wBAAwB;AACxB,wCAAwC;AACxC,MAAM,UAAU,iBAAiB,CAAC,MAAW,EAAE,OAAgB;IAC7D,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,EAAE,OAAO,IAAI,mBAAmB;KACxC,CAAC,CAAC;AACL,CAAC;AAED,yCAAyC;AACzC,qBAAqB;AACrB,wCAAwC;AACxC,MAAM,UAAU,YAAY,CAAC,MAAW,EAAE,IAAW,EAAE,QAAiB,EAAE,OAAgB;IACxF,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,EAAO,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC;QACjE,IAAI,EAAU,IAAI,IAAI,EAAE;QACxB,SAAS,EAAK,QAAQ,IAAI,IAAI;KAC/B,CAAC,CAAC;AACL,CAAC;AAED,uCAAuC;AACvC,sBAAsB;AACtB,uCAAuC;AACvC,MAAM,UAAU,eAAe,CAAC,MAAW,EAAE,IAAS,EAAE,OAAgB,EAAE,IAAgB;IACxF,MAAM,MAAM,CAAC,IAAI,IAAI,GAAG,EAAE;QACxB,OAAO,EAAK,OAAO,IAAI,SAAS;QAChC,IAAI,EAAQ,IAAI,IAAI,EAAE;KACvB,CAAC,CAAC;AACL,CAAC;AAED,uCAAuC;AACvC,2BAA2B;AAC3B,uCAAuC;AACvC,MAAM,UAAU,aAAa,CAAC,MAAW,EAAE,IAAS,EAAE,OAAgB;IACpE,MAAM,MAAM,CAAC,GAAG,EAAE;QAChB,OAAO,EAAK,OAAO,IAAI,SAAS;QAChC,IAAI,EAAQ,IAAI,IAAI,EAAE;KACvB,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,9 @@
1
+ export declare function uploadFile(file: File, folder?: string, options?: {
2
+ disk?: "public" | "private";
3
+ owner_id?: number;
4
+ permissions?: {
5
+ user_id?: number;
6
+ role_id?: number;
7
+ }[];
8
+ }): Promise<string>;
9
+ export declare function deleteFile(filePath: string): Promise<boolean>;
@@ -0,0 +1,56 @@
1
+ import fs from "fs";
2
+ import path from "path";
3
+ import { db } from "@skalfa/skalfa-orm";
4
+ // ===================================>
5
+ // ## Upload file
6
+ // ===================================>
7
+ export async function uploadFile(file, folder = "uploads", options) {
8
+ const disk = options?.disk ?? "public";
9
+ const dir = path.resolve("storage", disk, folder);
10
+ if (!fs.existsSync(dir))
11
+ fs.mkdirSync(dir, { recursive: true });
12
+ const fileName = `${Date.now().toString(36)}${Math.random().toString(36).substring(2, 18)}${path.extname(file.name).toLowerCase()}`;
13
+ const filePath = path.join(dir, fileName);
14
+ const buffer = Buffer.from(await file.arrayBuffer());
15
+ fs.writeFileSync(filePath, buffer);
16
+ const relativePath = `/${folder}/${fileName}`;
17
+ if (db && options) {
18
+ const [storage] = await db("storages").insert({
19
+ user_id: options?.owner_id ?? null,
20
+ disk: disk,
21
+ path: relativePath,
22
+ filename: file.name,
23
+ filetype: file.type,
24
+ filesize: buffer.length,
25
+ created_at: new Date(),
26
+ }).returning(["id"]);
27
+ if (options?.permissions?.length) {
28
+ const permissions = options.permissions.map(p => ({
29
+ storage_id: storage.id,
30
+ user_id: p.user_id ?? null,
31
+ role_id: p.role_id ?? null,
32
+ created_at: new Date(),
33
+ }));
34
+ await db("storage_permissions").insert(permissions);
35
+ }
36
+ }
37
+ return relativePath;
38
+ }
39
+ // ==================================>
40
+ // ## Delete File
41
+ // ==================================>
42
+ export async function deleteFile(filePath) {
43
+ if (fs.existsSync(filePath)) {
44
+ if (db) {
45
+ const record = await db("storages").where("path", filePath).first();
46
+ if (record) {
47
+ await db("storages").where("id", record.id).delete();
48
+ await db("storage_permissions").where("storage_id", record.id).delete();
49
+ }
50
+ }
51
+ fs.unlinkSync(filePath);
52
+ return true;
53
+ }
54
+ return false;
55
+ }
56
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/controller/storage.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
+ import { date } from './date';
1
2
  export declare const conversion: {
2
3
  strSnake(value: string, delimiter?: string): string;
3
4
  strSlug(value: string, delimiter?: string): string;
@@ -5,4 +6,6 @@ export declare const conversion: {
5
6
  strPascal(value: string, delimiter?: string): string;
6
7
  strPlural(value: string): string;
7
8
  strSingular(value: string): string;
9
+ currency: (value: number, locale?: string, currency?: string) => string;
10
+ date: typeof date;
8
11
  };
@@ -1,19 +1,32 @@
1
+ import { date } from './date';
1
2
  export const conversion = {
2
- // =============================>
3
- // ## Conversion: String formatter
4
- // =============================>
3
+ // =====================================>
4
+ // ## Conversion: format string to snake case
5
+ // =====================================>
5
6
  strSnake(value, delimiter = "_") {
6
7
  return toWords(value).join(delimiter);
7
8
  },
9
+ // =====================================>
10
+ // ## Conversion: format string to slug
11
+ // =====================================>
8
12
  strSlug(value, delimiter = "-") {
9
13
  return toWords(value).join(delimiter);
10
14
  },
15
+ // =====================================>
16
+ // ## Conversion: format string to camel case
17
+ // =====================================>
11
18
  strCamel(value, delimiter = "") {
12
19
  return toWords(value).map((w, i) => i === 0 ? w : w[0].toUpperCase() + w.slice(1)).join(delimiter);
13
20
  },
21
+ // =====================================>
22
+ // ## Conversion: format string to pascal case
23
+ // =====================================>
14
24
  strPascal(value, delimiter = "") {
15
25
  return toWords(value).map(w => w[0].toUpperCase() + w.slice(1)).join(delimiter);
16
26
  },
27
+ // =====================================>
28
+ // ## Conversion: format string to plural
29
+ // =====================================>
17
30
  strPlural(value) {
18
31
  const match = value.match(/^(.*?)([A-Za-z]+)$/);
19
32
  if (!match)
@@ -26,6 +39,9 @@ export const conversion = {
26
39
  return prefix + word + "s";
27
40
  return value;
28
41
  },
42
+ // =====================================>
43
+ // ## Conversion: format string to singular
44
+ // =====================================>
29
45
  strSingular(value) {
30
46
  const match = value.match(/^(.*?)([A-Za-z]+)$/);
31
47
  if (!match)
@@ -38,7 +54,15 @@ export const conversion = {
38
54
  return prefix + word.slice(0, -1);
39
55
  }
40
56
  return value;
41
- }
57
+ },
58
+ // =====================================>
59
+ // ## Conversion: format number to currency
60
+ // =====================================>
61
+ currency: (value, locale = "id-ID", currency = "IDR") => { const val = Math.trunc(value); return new Intl.NumberFormat(locale, { style: "currency", currency, minimumFractionDigits: 0, maximumFractionDigits: 2 }).format(val); },
62
+ // =====================================>
63
+ // ## Conversion: format date string
64
+ // =====================================>
65
+ date: date,
42
66
  };
43
67
  function toWords(value) {
44
68
  return value
@@ -1 +1 @@
1
- {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../src/conversion/conversion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"conversion.js","sourceRoot":"","sources":["../../src/conversion/conversion.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function date(dateStr: string, format?: string): string;
@@ -0,0 +1,77 @@
1
+ export function date(dateStr, format = "DD MMM YYYY") {
2
+ const d = new Date(dateStr);
3
+ if (isNaN(d.getTime()))
4
+ return "Invalid Date";
5
+ const options = {};
6
+ if (format.includes("YYYY") || format.includes("YY")) {
7
+ options.year = format.includes("YYYY") ? "numeric" : "2-digit";
8
+ }
9
+ if (format.includes("MMMM") || format.includes("MMM") || format.includes("MM") || format.includes("M")) {
10
+ options.month = format.includes("MMMM") ? "long" : format.includes("MMM") ? "short" : format.includes("MM") ? "2-digit" : "numeric";
11
+ }
12
+ if (format.includes("DD") || format.includes("D")) {
13
+ options.day = format.includes("DD") ? "2-digit" : "numeric";
14
+ }
15
+ if (format.includes("HH") || format.includes("H") || format.includes("hh") || format.includes("h")) {
16
+ options.hour = (format.includes("HH") || format.includes("hh")) ? "2-digit" : "numeric";
17
+ options.hour12 = format.includes("hh") || format.includes("h");
18
+ }
19
+ if (format.includes("mm") || format.includes("m")) {
20
+ options.minute = format.includes("mm") ? "2-digit" : "numeric";
21
+ }
22
+ if (format.includes("ss") || format.includes("s")) {
23
+ options.second = format.includes("ss") ? "2-digit" : "numeric";
24
+ }
25
+ const parts = new Intl.DateTimeFormat("id-ID", options).formatToParts(d);
26
+ let result = format;
27
+ if (format.includes("YYYY")) {
28
+ result = result.replace("YYYY", parts.find(p => p.type === "year")?.value || "");
29
+ }
30
+ else if (format.includes("YY")) {
31
+ result = result.replace("YY", (parts.find(p => p.type === "year")?.value || "").slice(-2));
32
+ }
33
+ if (format.includes("MMMM")) {
34
+ result = result.replace("MMMM", parts.find(p => p.type === "month")?.value || "");
35
+ }
36
+ else if (format.includes("MMM")) {
37
+ result = result.replace("MMM", parts.find(p => p.type === "month")?.value || "");
38
+ }
39
+ else if (format.includes("MM")) {
40
+ result = result.replace("MM", parts.find(p => p.type === "month")?.value || "");
41
+ }
42
+ else if (format.includes("M")) {
43
+ result = result.replace("M", parts.find(p => p.type === "month")?.value || "");
44
+ }
45
+ if (format.includes("DD")) {
46
+ result = result.replace("DD", parts.find(p => p.type === "day")?.value || "");
47
+ }
48
+ else if (format.includes("D")) {
49
+ result = result.replace("D", parts.find(p => p.type === "day")?.value || "");
50
+ }
51
+ if (format.includes("HH")) {
52
+ result = result.replace("HH", parts.find(p => p.type === "hour")?.value || "");
53
+ }
54
+ else if (format.includes("H")) {
55
+ result = result.replace("H", parts.find(p => p.type === "hour")?.value || "");
56
+ }
57
+ else if (format.includes("hh")) {
58
+ result = result.replace("hh", parts.find(p => p.type === "hour")?.value || "");
59
+ }
60
+ else if (format.includes("h")) {
61
+ result = result.replace("h", parts.find(p => p.type === "hour")?.value || "");
62
+ }
63
+ if (format.includes("mm")) {
64
+ result = result.replace("mm", parts.find(p => p.type === "minute")?.value || "");
65
+ }
66
+ else if (format.includes("m")) {
67
+ result = result.replace("m", parts.find(p => p.type === "minute")?.value || "");
68
+ }
69
+ if (format.includes("ss")) {
70
+ result = result.replace("ss", parts.find(p => p.type === "second")?.value || "");
71
+ }
72
+ else if (format.includes("s")) {
73
+ result = result.replace("s", parts.find(p => p.type === "second")?.value || "");
74
+ }
75
+ return result;
76
+ }
77
+ //# sourceMappingURL=date.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"date.js","sourceRoot":"","sources":["../../src/conversion/date.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -8,9 +8,11 @@ export * from "./route";
8
8
  export * from "./storage";
9
9
  export * from "./validation";
10
10
  export * from "./mail";
11
+ export * from "./notification";
11
12
  export * from "./logger";
12
13
  export * from "./registry";
13
14
  export * from "./commands/cli";
15
+ export { DAMigration } from "./commands/runner/da-migration";
14
16
  declare module "knex" {
15
17
  namespace Knex {
16
18
  interface CreateTableBuilder {
package/dist/index.js CHANGED
@@ -8,7 +8,9 @@ export * from "./route";
8
8
  export * from "./storage";
9
9
  export * from "./validation";
10
10
  export * from "./mail";
11
+ export * from "./notification";
11
12
  export * from "./logger";
12
13
  export * from "./registry";
13
14
  export * from "./commands/cli";
15
+ export { DAMigration } from "./commands/runner/da-migration";
14
16
  //# sourceMappingURL=index.js.map