apeframework 0.0.0-dev.1

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 (254) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +55 -0
  3. package/api/api.d.ts +7 -0
  4. package/api/api.js +2 -0
  5. package/api/api.ts +8 -0
  6. package/api/auth.d.ts +9 -0
  7. package/api/auth.js +11 -0
  8. package/api/auth.ts +9 -0
  9. package/api/config.d.ts +13 -0
  10. package/api/config.js +59 -0
  11. package/api/config.ts +69 -0
  12. package/api/endpoint.d.ts +20 -0
  13. package/api/endpoint.js +5 -0
  14. package/api/endpoint.ts +23 -0
  15. package/api/handler.d.ts +8 -0
  16. package/api/handler.js +13 -0
  17. package/api/handler.ts +23 -0
  18. package/api/index.d.ts +7 -0
  19. package/api/index.js +187 -0
  20. package/api/index.ts +97 -0
  21. package/api/route.d.ts +6 -0
  22. package/api/route.js +2 -0
  23. package/api/route.ts +4 -0
  24. package/api/router.d.ts +4 -0
  25. package/api/router.js +111 -0
  26. package/api/router.ts +36 -0
  27. package/api/schema.d.ts +29 -0
  28. package/api/schema.js +69 -0
  29. package/api/schema.ts +98 -0
  30. package/app/app.d.ts +6 -0
  31. package/app/app.js +2 -0
  32. package/app/app.ts +7 -0
  33. package/app/boot.d.ts +4 -0
  34. package/app/boot.js +2 -0
  35. package/app/boot.ts +5 -0
  36. package/app/bundle.d.ts +14 -0
  37. package/app/bundle.js +2 -0
  38. package/app/bundle.ts +15 -0
  39. package/app/config.d.ts +4 -0
  40. package/app/config.js +9 -0
  41. package/app/config.ts +9 -0
  42. package/app/index.d.ts +9 -0
  43. package/app/index.js +103 -0
  44. package/app/index.ts +32 -0
  45. package/bin/ape-cli-ts.js +4 -0
  46. package/bin/ape-cli.js +2 -0
  47. package/cli/command.d.ts +4 -0
  48. package/cli/command.js +2 -0
  49. package/cli/command.ts +7 -0
  50. package/cli/index.d.ts +2 -0
  51. package/cli/index.js +103 -0
  52. package/cli/index.ts +41 -0
  53. package/cli/internal/api.d.ts +3 -0
  54. package/cli/internal/api.js +110 -0
  55. package/cli/internal/api.ts +38 -0
  56. package/cli/internal/index.d.ts +2 -0
  57. package/cli/internal/index.js +13 -0
  58. package/cli/internal/index.ts +9 -0
  59. package/cli/internal/migration.d.ts +3 -0
  60. package/cli/internal/migration.js +214 -0
  61. package/cli/internal/migration.ts +110 -0
  62. package/cli/internal/queue.d.ts +3 -0
  63. package/cli/internal/queue.js +147 -0
  64. package/cli/internal/queue.ts +60 -0
  65. package/cli/utils.d.ts +18 -0
  66. package/cli/utils.js +52 -0
  67. package/cli/utils.ts +48 -0
  68. package/config/config.d.ts +5 -0
  69. package/config/config.js +2 -0
  70. package/config/config.ts +6 -0
  71. package/config/configuration.d.ts +63 -0
  72. package/config/configuration.js +2 -0
  73. package/config/configuration.ts +72 -0
  74. package/config/default.d.ts +33 -0
  75. package/config/default.js +34 -0
  76. package/config/default.ts +40 -0
  77. package/config/env.d.ts +66 -0
  78. package/config/env.js +72 -0
  79. package/config/env.ts +79 -0
  80. package/config/index.d.ts +8 -0
  81. package/config/index.js +91 -0
  82. package/config/index.ts +101 -0
  83. package/config/loadFile.d.ts +2 -0
  84. package/config/loadFile.js +13 -0
  85. package/config/loadFile.ts +9 -0
  86. package/config/node.d.ts +5 -0
  87. package/config/node.js +11 -0
  88. package/config/node.ts +7 -0
  89. package/config/store.d.ts +6 -0
  90. package/config/store.js +20 -0
  91. package/config/store.ts +15 -0
  92. package/db/config/index.d.ts +10 -0
  93. package/db/config/index.js +43 -0
  94. package/db/config/index.ts +35 -0
  95. package/db/config/memory.d.ts +3 -0
  96. package/db/config/memory.js +15 -0
  97. package/db/config/memory.ts +13 -0
  98. package/db/config/mysql.d.ts +3 -0
  99. package/db/config/mysql.js +56 -0
  100. package/db/config/mysql.ts +58 -0
  101. package/db/config/postgres.d.ts +3 -0
  102. package/db/config/postgres.js +59 -0
  103. package/db/config/postgres.ts +61 -0
  104. package/db/config/sqlite.d.ts +3 -0
  105. package/db/config/sqlite.js +21 -0
  106. package/db/config/sqlite.ts +20 -0
  107. package/db/database.d.ts +3 -0
  108. package/db/database.js +3 -0
  109. package/db/database.ts +5 -0
  110. package/db/index.d.ts +10 -0
  111. package/db/index.js +32 -0
  112. package/db/index.ts +26 -0
  113. package/db/postProcess.d.ts +3 -0
  114. package/db/postProcess.js +25 -0
  115. package/db/postProcess.ts +27 -0
  116. package/db/schema/builder/_.d.ts +30 -0
  117. package/db/schema/builder/_.js +87 -0
  118. package/db/schema/builder/_.ts +101 -0
  119. package/db/schema/builder/columnBuilder.d.ts +7 -0
  120. package/db/schema/builder/columnBuilder.js +14 -0
  121. package/db/schema/builder/columnBuilder.ts +15 -0
  122. package/db/schema/builder/dataType.d.ts +28 -0
  123. package/db/schema/builder/dataType.js +170 -0
  124. package/db/schema/builder/dataType.ts +184 -0
  125. package/db/schema/builder/index.d.ts +15 -0
  126. package/db/schema/builder/index.js +42 -0
  127. package/db/schema/builder/index.ts +50 -0
  128. package/db/schema/builder/tableBuilder.d.ts +45 -0
  129. package/db/schema/builder/tableBuilder.js +307 -0
  130. package/db/schema/builder/tableBuilder.ts +409 -0
  131. package/db/schema/config.d.ts +4 -0
  132. package/db/schema/config.js +5 -0
  133. package/db/schema/config.ts +3 -0
  134. package/db/schema/index.d.ts +7 -0
  135. package/db/schema/index.js +252 -0
  136. package/db/schema/index.ts +88 -0
  137. package/db/schema/migration.d.ts +6 -0
  138. package/db/schema/migration.js +2 -0
  139. package/db/schema/migration.ts +7 -0
  140. package/db/schema/migrationList.d.ts +5 -0
  141. package/db/schema/migrationList.js +2 -0
  142. package/db/schema/migrationList.ts +5 -0
  143. package/db/schema/migrationSource.d.ts +10 -0
  144. package/db/schema/migrationSource.js +60 -0
  145. package/db/schema/migrationSource.ts +24 -0
  146. package/db/schema/schema.d.ts +6 -0
  147. package/db/schema/schema.js +2 -0
  148. package/db/schema/schema.ts +7 -0
  149. package/db/utils/index.d.ts +7 -0
  150. package/db/utils/index.js +10 -0
  151. package/db/utils/index.ts +8 -0
  152. package/db/utils/insertGetKey.d.ts +8 -0
  153. package/db/utils/insertGetKey.js +109 -0
  154. package/db/utils/insertGetKey.ts +80 -0
  155. package/i18n/config.d.ts +4 -0
  156. package/i18n/config.js +9 -0
  157. package/i18n/config.ts +9 -0
  158. package/i18n/i18n.d.ts +5 -0
  159. package/i18n/i18n.js +2 -0
  160. package/i18n/i18n.ts +6 -0
  161. package/i18n/index.d.ts +8 -0
  162. package/i18n/index.js +155 -0
  163. package/i18n/index.ts +42 -0
  164. package/i18n/internationalization.d.ts +3 -0
  165. package/i18n/internationalization.js +2 -0
  166. package/i18n/internationalization.ts +5 -0
  167. package/i18n/translation.d.ts +4 -0
  168. package/i18n/translation.js +2 -0
  169. package/i18n/translation.ts +4 -0
  170. package/jwt/config.d.ts +5 -0
  171. package/jwt/config.js +12 -0
  172. package/jwt/config.ts +11 -0
  173. package/jwt/index.d.ts +8 -0
  174. package/jwt/index.js +90 -0
  175. package/jwt/index.ts +60 -0
  176. package/jwt/jwt.d.ts +6 -0
  177. package/jwt/jwt.js +2 -0
  178. package/jwt/jwt.ts +19 -0
  179. package/jwt/user.d.ts +4 -0
  180. package/jwt/user.js +2 -0
  181. package/jwt/user.ts +4 -0
  182. package/log/config.d.ts +23 -0
  183. package/log/config.js +47 -0
  184. package/log/config.ts +43 -0
  185. package/log/index.d.ts +4 -0
  186. package/log/index.js +9 -0
  187. package/log/index.ts +9 -0
  188. package/log/logger.d.ts +3 -0
  189. package/log/logger.js +2 -0
  190. package/log/logger.ts +5 -0
  191. package/mail/config.d.ts +4 -0
  192. package/mail/config.js +5 -0
  193. package/mail/config.ts +3 -0
  194. package/mail/email.d.ts +20 -0
  195. package/mail/email.js +2 -0
  196. package/mail/email.ts +21 -0
  197. package/mail/index.d.ts +2 -0
  198. package/mail/index.js +4 -0
  199. package/mail/index.ts +3 -0
  200. package/mail/mail.d.ts +12 -0
  201. package/mail/mail.js +2 -0
  202. package/mail/mail.ts +13 -0
  203. package/mail/module/bypass/index.d.ts +6 -0
  204. package/mail/module/bypass/index.js +74 -0
  205. package/mail/module/bypass/index.ts +9 -0
  206. package/mail/module/config.d.ts +11 -0
  207. package/mail/module/config.js +24 -0
  208. package/mail/module/config.ts +25 -0
  209. package/mail/module/index.d.ts +8 -0
  210. package/mail/module/index.js +107 -0
  211. package/mail/module/index.ts +61 -0
  212. package/mail/module/smtp/config.d.ts +6 -0
  213. package/mail/module/smtp/config.js +25 -0
  214. package/mail/module/smtp/config.ts +25 -0
  215. package/mail/module/smtp/index.d.ts +9 -0
  216. package/mail/module/smtp/index.js +104 -0
  217. package/mail/module/smtp/index.ts +36 -0
  218. package/mq/index.d.ts +3 -0
  219. package/mq/index.js +27 -0
  220. package/mq/index.ts +4 -0
  221. package/mq/module/bypass/index.d.ts +13 -0
  222. package/mq/module/bypass/index.js +86 -0
  223. package/mq/module/bypass/index.ts +20 -0
  224. package/mq/module/config.d.ts +6 -0
  225. package/mq/module/config.js +15 -0
  226. package/mq/module/config.ts +14 -0
  227. package/mq/module/index.d.ts +9 -0
  228. package/mq/module/index.js +93 -0
  229. package/mq/module/index.ts +24 -0
  230. package/mq/module/redis/config.d.ts +27 -0
  231. package/mq/module/redis/config.js +37 -0
  232. package/mq/module/redis/config.ts +34 -0
  233. package/mq/module/redis/index.d.ts +15 -0
  234. package/mq/module/redis/index.js +132 -0
  235. package/mq/module/redis/index.ts +60 -0
  236. package/mq/mq.d.ts +15 -0
  237. package/mq/mq.js +2 -0
  238. package/mq/mq.ts +18 -0
  239. package/mq/queue.d.ts +9 -0
  240. package/mq/queue.js +2 -0
  241. package/mq/queue.ts +11 -0
  242. package/package.json +53 -0
  243. package/pwd/config.d.ts +4 -0
  244. package/pwd/config.js +9 -0
  245. package/pwd/config.ts +9 -0
  246. package/pwd/index.d.ts +6 -0
  247. package/pwd/index.js +21 -0
  248. package/pwd/index.ts +20 -0
  249. package/pwd/pwd.d.ts +4 -0
  250. package/pwd/pwd.js +2 -0
  251. package/pwd/pwd.ts +4 -0
  252. package/utils/index.d.ts +25 -0
  253. package/utils/index.js +72 -0
  254. package/utils/index.ts +56 -0
package/mq/mq.ts ADDED
@@ -0,0 +1,18 @@
1
+ import type { Job, Queue } from './queue'
2
+
3
+ export interface Mq {
4
+ getQueues: () => Promise<Queue[]>,
5
+ getQueue: (queueId: string) => Promise<Queue | undefined>,
6
+ createSender: (queue: Queue) => Sender,
7
+ createWorker: (queue: Queue) => Worker,
8
+ }
9
+
10
+ export interface Sender {
11
+ send: <Data>(job: Job, data: Data) => Promise<void>,
12
+ close: () => Promise<void>,
13
+ }
14
+
15
+ export interface Worker {
16
+ start: () => void,
17
+ close: () => Promise<void>,
18
+ }
package/mq/queue.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ export interface Queue {
2
+ queueId: string;
3
+ jobs: Job[];
4
+ }
5
+ export interface Job {
6
+ jobId: string;
7
+ process: (data: any, progress: Progress) => Promise<void>;
8
+ }
9
+ export type Progress = (current: number, total: number) => void;
package/mq/queue.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/mq/queue.ts ADDED
@@ -0,0 +1,11 @@
1
+ export interface Queue {
2
+ queueId: string,
3
+ jobs: Job[],
4
+ }
5
+
6
+ export interface Job {
7
+ jobId: string,
8
+ process: (data: any, progress: Progress) => Promise<void>,
9
+ }
10
+
11
+ export type Progress = (current: number, total: number) => void
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "apeframework",
3
+ "version": "0.0.0-dev.1",
4
+ "license": "MIT",
5
+ "author": "Matthieu Symoens",
6
+ "description": "Node.js API framework.",
7
+ "keywords": [
8
+ "ape",
9
+ "framework"
10
+ ],
11
+ "repository": {
12
+ "type": "git",
13
+ "url": "git+https://github.com/ApeCommerce/ape-framework.git"
14
+ },
15
+ "publishConfig": {
16
+ "access": "public"
17
+ },
18
+ "main": "index.js",
19
+ "types": "index.d.ts",
20
+ "bin": {
21
+ "ape-cli": "bin/ape-cli.js",
22
+ "ape-cli-ts": "bin/ape-cli-ts.js"
23
+ },
24
+ "engines": {
25
+ "node": "^18"
26
+ },
27
+ "dependencies": {
28
+ "@fastify/cors": "^8.4",
29
+ "@fastify/response-validation": "^2.5",
30
+ "@fastify/swagger": "^8.10",
31
+ "bcrypt": "^5.1",
32
+ "bullmq": "^4.11",
33
+ "bytes": "^3.1",
34
+ "dotenv": "^16.3",
35
+ "fastify": "^4.23",
36
+ "fs-extra": "^11.1",
37
+ "i18next": "^23.5",
38
+ "ioredis": "^5.3",
39
+ "jose": "^4.14",
40
+ "knex": "^2.5",
41
+ "mailgen": "^2.0",
42
+ "mysql2": "^3.6",
43
+ "nodemailer": "^6.9",
44
+ "openapi-types": "^12.1",
45
+ "parse-duration": "^1.1",
46
+ "pg": "^8.11",
47
+ "pino": "^8.15",
48
+ "pino-pretty": "^10.2",
49
+ "sonic-boom": "^3.3",
50
+ "sqlite3": "^5.1",
51
+ "yargs-parser": "^21.1"
52
+ }
53
+ }
@@ -0,0 +1,4 @@
1
+ declare const _default: {
2
+ hashCost: number;
3
+ };
4
+ export default _default;
package/pwd/config.js ADDED
@@ -0,0 +1,9 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var config_1 = require("../config");
4
+ var config = (0, config_1.getConfig)();
5
+ if (!config.pwdHashCost)
6
+ throw new Error('pwd: hash cost not provided');
7
+ exports.default = {
8
+ hashCost: config.pwdHashCost,
9
+ };
package/pwd/config.ts ADDED
@@ -0,0 +1,9 @@
1
+ import { getConfig } from '../config'
2
+
3
+ const config = getConfig()
4
+
5
+ if (!config.pwdHashCost) throw new Error('pwd: hash cost not provided')
6
+
7
+ export default {
8
+ hashCost: config.pwdHashCost,
9
+ }
package/pwd/index.d.ts ADDED
@@ -0,0 +1,6 @@
1
+ import type { Pwd } from './pwd';
2
+ export { Pwd };
3
+ export declare const hashPassword: (password: string) => Promise<string>;
4
+ export declare const verifyPassword: (password: string, hash: string) => Promise<boolean>;
5
+ declare const pwd: Pwd;
6
+ export default pwd;
package/pwd/index.js ADDED
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.verifyPassword = exports.hashPassword = void 0;
7
+ var bcrypt_1 = __importDefault(require("bcrypt"));
8
+ var config_1 = __importDefault(require("./config"));
9
+ var hashPassword = function (password) {
10
+ return bcrypt_1.default.hash(password, config_1.default.hashCost);
11
+ };
12
+ exports.hashPassword = hashPassword;
13
+ var verifyPassword = function (password, hash) {
14
+ return bcrypt_1.default.compare(password, hash);
15
+ };
16
+ exports.verifyPassword = verifyPassword;
17
+ var pwd = {
18
+ hashPassword: exports.hashPassword,
19
+ verifyPassword: exports.verifyPassword,
20
+ };
21
+ exports.default = pwd;
package/pwd/index.ts ADDED
@@ -0,0 +1,20 @@
1
+ import bcrypt from 'bcrypt'
2
+ import config from './config'
3
+ import type { Pwd } from './pwd'
4
+
5
+ export { Pwd }
6
+
7
+ export const hashPassword = (password: string) => {
8
+ return bcrypt.hash(password, config.hashCost)
9
+ }
10
+
11
+ export const verifyPassword = (password: string, hash: string) => {
12
+ return bcrypt.compare(password, hash)
13
+ }
14
+
15
+ const pwd: Pwd = {
16
+ hashPassword,
17
+ verifyPassword,
18
+ }
19
+
20
+ export default pwd
package/pwd/pwd.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export interface Pwd {
2
+ hashPassword: (password: string) => Promise<string>;
3
+ verifyPassword: (password: string, hash: string) => Promise<boolean>;
4
+ }
package/pwd/pwd.js ADDED
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
package/pwd/pwd.ts ADDED
@@ -0,0 +1,4 @@
1
+ export interface Pwd {
2
+ hashPassword: (password: string) => Promise<string>,
3
+ verifyPassword: (password: string, hash: string) => Promise<boolean>,
4
+ }
@@ -0,0 +1,25 @@
1
+ export declare const parseBoolean: (value: any) => boolean;
2
+ export declare const parseNumber: (value: any) => number;
3
+ export declare const parseString: (value: any) => string;
4
+ export declare const basePath: (path?: string, separator?: string) => string;
5
+ export declare const parseBytes: (value: any) => number;
6
+ export declare const parseMilliseconds: (value: any) => number;
7
+ export declare const parseSeconds: (value: any) => number;
8
+ export declare const randomString: (length: number) => string;
9
+ export declare const timestamp: () => number;
10
+ export declare const uuid: () => `${string}-${string}-${string}-${string}-${string}`;
11
+ export declare const wait: (milliseconds: number) => Promise<void>;
12
+ declare const _default: {
13
+ basePath: (path?: string | undefined, separator?: string) => string;
14
+ parseBoolean: (value: any) => boolean;
15
+ parseBytes: (value: any) => number;
16
+ parseMilliseconds: (value: any) => number;
17
+ parseNumber: (value: any) => number;
18
+ parseSeconds: (value: any) => number;
19
+ parseString: (value: any) => string;
20
+ randomString: (length: number) => string;
21
+ timestamp: () => number;
22
+ uuid: () => `${string}-${string}-${string}-${string}-${string}`;
23
+ wait: (milliseconds: number) => Promise<void>;
24
+ };
25
+ export default _default;
package/utils/index.js ADDED
@@ -0,0 +1,72 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.wait = exports.uuid = exports.timestamp = exports.randomString = exports.parseSeconds = exports.parseMilliseconds = exports.parseBytes = exports.basePath = exports.parseString = exports.parseNumber = exports.parseBoolean = void 0;
7
+ var crypto_1 = require("crypto");
8
+ var bytes_1 = __importDefault(require("bytes"));
9
+ var parse_duration_1 = __importDefault(require("parse-duration"));
10
+ var parseBoolean = function (value) {
11
+ return value === true || value === 1 || value === '1';
12
+ };
13
+ exports.parseBoolean = parseBoolean;
14
+ var parseNumber = function (value) {
15
+ return value === true ? 0 : Number(value) || 0;
16
+ };
17
+ exports.parseNumber = parseNumber;
18
+ var parseString = function (value) {
19
+ return ['boolean', 'function', 'object'].includes(typeof value)
20
+ ? ''
21
+ : value === 0 ? '0' : String(value || '');
22
+ };
23
+ exports.parseString = parseString;
24
+ var basePath = function (path, separator) {
25
+ if (separator === void 0) { separator = '/'; }
26
+ return (0, exports.parseString)(path).split(separator).filter(function (value) { return value; })[0] || '';
27
+ };
28
+ exports.basePath = basePath;
29
+ var parseBytes = function (value) {
30
+ return (0, bytes_1.default)((0, exports.parseString)(value)) || 0;
31
+ };
32
+ exports.parseBytes = parseBytes;
33
+ var parseMilliseconds = function (value) {
34
+ var _a;
35
+ return Math.floor((_a = (0, parse_duration_1.default)((0, exports.parseString)(value))) !== null && _a !== void 0 ? _a : 0);
36
+ };
37
+ exports.parseMilliseconds = parseMilliseconds;
38
+ var parseSeconds = function (value) {
39
+ return Math.floor((0, exports.parseNumber)(value) || (0, exports.parseMilliseconds)(value) / 1000);
40
+ };
41
+ exports.parseSeconds = parseSeconds;
42
+ var randomString = function (length) {
43
+ return (0, crypto_1.randomBytes)(length / 2 + 1).toString('hex').substring(0, length);
44
+ };
45
+ exports.randomString = randomString;
46
+ var timestamp = function () {
47
+ return Math.floor(Date.now() / 1000);
48
+ };
49
+ exports.timestamp = timestamp;
50
+ var uuid = function () {
51
+ return (0, crypto_1.randomUUID)();
52
+ };
53
+ exports.uuid = uuid;
54
+ var wait = function (milliseconds) {
55
+ return new Promise(function (resolve) { return setTimeout(function () {
56
+ resolve();
57
+ }, milliseconds); });
58
+ };
59
+ exports.wait = wait;
60
+ exports.default = {
61
+ basePath: exports.basePath,
62
+ parseBoolean: exports.parseBoolean,
63
+ parseBytes: exports.parseBytes,
64
+ parseMilliseconds: exports.parseMilliseconds,
65
+ parseNumber: exports.parseNumber,
66
+ parseSeconds: exports.parseSeconds,
67
+ parseString: exports.parseString,
68
+ randomString: exports.randomString,
69
+ timestamp: exports.timestamp,
70
+ uuid: exports.uuid,
71
+ wait: exports.wait,
72
+ };
package/utils/index.ts ADDED
@@ -0,0 +1,56 @@
1
+ import { randomBytes, randomUUID } from 'crypto'
2
+ import bytes from 'bytes'
3
+ import parseDuration from 'parse-duration'
4
+
5
+ export const parseBoolean = (value: any) => {
6
+ return value === true || value === 1 || value === '1'
7
+ }
8
+ export const parseNumber = (value: any) => {
9
+ return value === true ? 0 : Number(value) || 0
10
+ }
11
+ export const parseString = (value: any) => {
12
+ return ['boolean', 'function', 'object'].includes(typeof value)
13
+ ? ''
14
+ : value === 0 ? '0' : String(value || '')
15
+ }
16
+
17
+ export const basePath = (path?: string, separator = '/') => {
18
+ return parseString(path).split(separator).filter((value) => value)[0] || ''
19
+ }
20
+ export const parseBytes = (value: any) => {
21
+ return bytes(parseString(value)) || 0
22
+ }
23
+ export const parseMilliseconds = (value: any) => {
24
+ return Math.floor(parseDuration(parseString(value)) ?? 0)
25
+ }
26
+ export const parseSeconds = (value: any) => {
27
+ return Math.floor(parseNumber(value) || parseMilliseconds(value) / 1000)
28
+ }
29
+ export const randomString = (length: number) => {
30
+ return randomBytes(length / 2 + 1).toString('hex').substring(0, length)
31
+ }
32
+ export const timestamp = () => {
33
+ return Math.floor(Date.now() / 1000)
34
+ }
35
+ export const uuid = () => {
36
+ return randomUUID()
37
+ }
38
+ export const wait = (milliseconds: number) => {
39
+ return new Promise<void>((resolve) => setTimeout(() => {
40
+ resolve()
41
+ }, milliseconds))
42
+ }
43
+
44
+ export default {
45
+ basePath,
46
+ parseBoolean,
47
+ parseBytes,
48
+ parseMilliseconds,
49
+ parseNumber,
50
+ parseSeconds,
51
+ parseString,
52
+ randomString,
53
+ timestamp,
54
+ uuid,
55
+ wait,
56
+ }