jcc-express-mvc 1.8.7 → 1.8.21

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 (296) hide show
  1. package/Core/index.d.ts +4 -0
  2. package/Core/index.d.ts.map +1 -1
  3. package/Core/index.js +5 -0
  4. package/__tests__/Job.test.d.ts +2 -0
  5. package/__tests__/Job.test.d.ts.map +1 -0
  6. package/__tests__/Job.test.js +205 -0
  7. package/__tests__/MySqlSchemaBlueprint.test.d.ts +2 -0
  8. package/__tests__/MySqlSchemaBlueprint.test.d.ts.map +1 -0
  9. package/__tests__/MySqlSchemaBlueprint.test.js +55 -0
  10. package/__tests__/PostgresTranslator.test.d.ts +2 -0
  11. package/__tests__/PostgresTranslator.test.d.ts.map +1 -0
  12. package/__tests__/PostgresTranslator.test.js +82 -0
  13. package/__tests__/SQLiteTranslator.test.d.ts +2 -0
  14. package/__tests__/SQLiteTranslator.test.d.ts.map +1 -0
  15. package/__tests__/SQLiteTranslator.test.js +125 -0
  16. package/__tests__/SchemaAlterBlueprint.test.d.ts +2 -0
  17. package/__tests__/SchemaAlterBlueprint.test.d.ts.map +1 -0
  18. package/__tests__/SchemaAlterBlueprint.test.js +35 -0
  19. package/global.d.ts +3 -1
  20. package/index.d.ts +28 -3
  21. package/index.d.ts.map +1 -1
  22. package/index.js +33 -75
  23. package/lib/Application/Application.d.ts.map +1 -1
  24. package/lib/Application/Application.js +2 -2
  25. package/lib/Application/ApplicationBuilder.d.ts.map +1 -1
  26. package/lib/Application/ApplicationBuilder.js +22 -11
  27. package/lib/Auth/AuthMiddleware.d.ts.map +1 -1
  28. package/lib/Auth/AuthMiddleware.js +29 -12
  29. package/lib/Auth/index.d.ts +17 -3
  30. package/lib/Auth/index.d.ts.map +1 -1
  31. package/lib/Auth/index.js +128 -26
  32. package/lib/Auth/loginRateLimit.d.ts +6 -0
  33. package/lib/Auth/loginRateLimit.d.ts.map +1 -0
  34. package/lib/Auth/loginRateLimit.js +25 -0
  35. package/lib/Auth/refreshTokenStore.d.ts +24 -0
  36. package/lib/Auth/refreshTokenStore.d.ts.map +1 -0
  37. package/lib/Auth/refreshTokenStore.js +46 -0
  38. package/lib/Command-Line/DBCommand.d.ts.map +1 -1
  39. package/lib/Command-Line/DBCommand.js +9 -3
  40. package/lib/Command-Line/KeyGenerateCommand.d.ts +6 -0
  41. package/lib/Command-Line/KeyGenerateCommand.d.ts.map +1 -0
  42. package/lib/Command-Line/KeyGenerateCommand.js +47 -0
  43. package/lib/Command-Line/MakeCommand.d.ts +1 -0
  44. package/lib/Command-Line/MakeCommand.d.ts.map +1 -1
  45. package/lib/Command-Line/MakeCommand.js +36 -32
  46. package/lib/Command-Line/NodeArtisanCommand.d.ts +2 -0
  47. package/lib/Command-Line/NodeArtisanCommand.d.ts.map +1 -1
  48. package/lib/Command-Line/NodeArtisanCommand.js +24 -6
  49. package/lib/Command-Line/NodeTinker/Tinker.d.ts +5 -2
  50. package/lib/Command-Line/NodeTinker/Tinker.d.ts.map +1 -1
  51. package/lib/Command-Line/NodeTinker/Tinker.js +13 -3
  52. package/lib/Command-Line/WatchCommand.d.ts +29 -0
  53. package/lib/Command-Line/WatchCommand.d.ts.map +1 -0
  54. package/lib/Command-Line/WatchCommand.js +234 -0
  55. package/lib/Command-Line/files/Models.d.ts.map +1 -1
  56. package/lib/Command-Line/files/Models.js +67 -0
  57. package/lib/Console/Command.d.ts +18 -0
  58. package/lib/Console/Command.d.ts.map +1 -1
  59. package/lib/Console/Command.js +29 -0
  60. package/lib/Container/index.d.ts.map +1 -1
  61. package/lib/Container/index.js +22 -8
  62. package/lib/Database/Database.d.ts +21 -0
  63. package/lib/Database/Database.d.ts.map +1 -0
  64. package/lib/Database/Database.js +55 -0
  65. package/lib/Database/DatabaseServiceProvider.d.ts +22 -0
  66. package/lib/Database/DatabaseServiceProvider.d.ts.map +1 -0
  67. package/lib/Database/DatabaseServiceProvider.js +50 -0
  68. package/lib/Database/Drivers/KnexDriver.d.ts +13 -0
  69. package/lib/Database/Drivers/KnexDriver.d.ts.map +1 -0
  70. package/lib/Database/Drivers/KnexDriver.js +29 -0
  71. package/lib/Database/Drivers/MongooseDriver.d.ts +20 -0
  72. package/lib/Database/Drivers/MongooseDriver.d.ts.map +1 -0
  73. package/lib/Database/Drivers/MongooseDriver.js +57 -0
  74. package/lib/Database/Drivers/SequelizeDriver.d.ts +24 -0
  75. package/lib/Database/Drivers/SequelizeDriver.d.ts.map +1 -0
  76. package/lib/Database/Drivers/SequelizeDriver.js +82 -0
  77. package/lib/Database/index.d.ts +7 -0
  78. package/lib/Database/index.d.ts.map +1 -0
  79. package/lib/Database/index.js +11 -0
  80. package/lib/Database/interface.d.ts +14 -0
  81. package/lib/Database/interface.d.ts.map +1 -0
  82. package/lib/Database/interface.js +2 -0
  83. package/lib/Database/type.d.ts +18 -0
  84. package/lib/Database/type.d.ts.map +1 -0
  85. package/lib/Database/type.js +2 -0
  86. package/lib/Error/DisplayErrorCode.d.ts.map +1 -1
  87. package/lib/Error/DisplayErrorCode.js +27 -17
  88. package/lib/Error/MissMatchTokenException/index.d.ts +4 -0
  89. package/lib/Error/MissMatchTokenException/index.d.ts.map +1 -0
  90. package/lib/Error/MissMatchTokenException/index.js +9 -0
  91. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts +9 -0
  92. package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts.map +1 -0
  93. package/lib/Error/SocialiteAuthError/SocialiteAuthError.js +17 -0
  94. package/lib/Global/helpers.d.ts.map +1 -1
  95. package/lib/Global/helpers.js +7 -6
  96. package/lib/Http/index.d.ts +3 -1
  97. package/lib/Http/index.d.ts.map +1 -1
  98. package/lib/Http/index.js +26 -5
  99. package/lib/Interface/index.d.ts +17 -3
  100. package/lib/Interface/index.d.ts.map +1 -1
  101. package/lib/Jcc-eloquent/lib/Builder.d.ts +12 -1
  102. package/lib/Jcc-eloquent/lib/Builder.d.ts.map +1 -1
  103. package/lib/Jcc-eloquent/lib/Builder.js +119 -5
  104. package/lib/Jcc-eloquent/lib/Database/index.d.ts.map +1 -1
  105. package/lib/Jcc-eloquent/lib/Database/index.js +2 -1
  106. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts +37 -2
  107. package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts.map +1 -1
  108. package/lib/Jcc-eloquent/lib/Migration.d.ts +6 -0
  109. package/lib/Jcc-eloquent/lib/Migration.d.ts.map +1 -1
  110. package/lib/Jcc-eloquent/lib/Migration.js +24 -2
  111. package/lib/Jcc-eloquent/lib/Model.d.ts +24 -7
  112. package/lib/Jcc-eloquent/lib/Model.d.ts.map +1 -1
  113. package/lib/Jcc-eloquent/lib/Model.js +35 -2
  114. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts +2 -1
  115. package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts.map +1 -1
  116. package/lib/Jcc-eloquent/lib/QueryBuilder.js +10 -1
  117. package/lib/Jcc-eloquent/lib/Rollback.d.ts.map +1 -1
  118. package/lib/Jcc-eloquent/lib/Rollback.js +9 -2
  119. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.d.ts.map +1 -1
  120. package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.js +3 -3
  121. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts +6 -2
  122. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts.map +1 -1
  123. package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.js +41 -12
  124. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.d.ts.map +1 -1
  125. package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.js +21 -3
  126. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts +1 -0
  127. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts.map +1 -1
  128. package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.js +70 -14
  129. package/lib/Jcc-eloquent/lib/Schema/index.d.ts +12 -0
  130. package/lib/Jcc-eloquent/lib/Schema/index.d.ts.map +1 -1
  131. package/lib/Jcc-eloquent/lib/Schema/index.js +27 -6
  132. package/lib/Jcc-eloquent/lib/utils/index.d.ts +13 -0
  133. package/lib/Jcc-eloquent/lib/utils/index.d.ts.map +1 -1
  134. package/lib/Jcc-eloquent/lib/utils/index.js +62 -0
  135. package/lib/Middleware/index.d.ts +1 -0
  136. package/lib/Middleware/index.d.ts.map +1 -1
  137. package/lib/Middleware/index.js +20 -8
  138. package/lib/Model/Sequelize.d.ts +3 -0
  139. package/lib/Model/Sequelize.d.ts.map +1 -0
  140. package/lib/Model/Sequelize.js +6 -0
  141. package/lib/Providers/RouteServiceProvider.d.ts.map +1 -1
  142. package/lib/Providers/RouteServiceProvider.js +3 -0
  143. package/lib/Providers/SessionServiceProvider.d.ts +12 -0
  144. package/lib/Providers/SessionServiceProvider.d.ts.map +1 -0
  145. package/lib/Providers/SessionServiceProvider.js +47 -0
  146. package/lib/Queue/Controllers/QueueControllers.d.ts +31 -0
  147. package/lib/Queue/Controllers/QueueControllers.d.ts.map +1 -0
  148. package/lib/Queue/Controllers/QueueControllers.js +126 -0
  149. package/lib/Queue/Drivers/DatabaseDriver.d.ts +6 -1
  150. package/lib/Queue/Drivers/DatabaseDriver.d.ts.map +1 -1
  151. package/lib/Queue/Drivers/DatabaseDriver.js +76 -21
  152. package/lib/Queue/Drivers/MemoryDriver.d.ts +17 -6
  153. package/lib/Queue/Drivers/MemoryDriver.d.ts.map +1 -1
  154. package/lib/Queue/Drivers/MemoryDriver.js +323 -14
  155. package/lib/Queue/Drivers/RedisDriver.d.ts +48 -0
  156. package/lib/Queue/Drivers/RedisDriver.d.ts.map +1 -0
  157. package/lib/Queue/Drivers/RedisDriver.js +533 -0
  158. package/lib/Queue/Job.d.ts +8 -0
  159. package/lib/Queue/Job.d.ts.map +1 -1
  160. package/lib/Queue/Job.js +25 -1
  161. package/lib/Queue/JobsLogger.d.ts.map +1 -1
  162. package/lib/Queue/JobsLogger.js +6 -3
  163. package/lib/Queue/Queue.d.ts +17 -0
  164. package/lib/Queue/Queue.d.ts.map +1 -1
  165. package/lib/Queue/Queue.js +146 -11
  166. package/lib/Queue/QueueServiceProvider.d.ts +6 -0
  167. package/lib/Queue/QueueServiceProvider.d.ts.map +1 -0
  168. package/lib/Queue/QueueServiceProvider.js +18 -0
  169. package/lib/Queue/Route/web.d.ts +2 -0
  170. package/lib/Queue/Route/web.d.ts.map +1 -0
  171. package/lib/Queue/Route/web.js +16 -0
  172. package/lib/Queue/index.d.ts +1 -0
  173. package/lib/Queue/index.d.ts.map +1 -1
  174. package/lib/Queue/index.js +3 -0
  175. package/lib/Queue/interface.d.ts +25 -0
  176. package/lib/Queue/interface.d.ts.map +1 -1
  177. package/lib/Queue/middleware/queueDashboardGuard.d.ts +7 -0
  178. package/lib/Queue/middleware/queueDashboardGuard.d.ts.map +1 -0
  179. package/lib/Queue/middleware/queueDashboardGuard.js +43 -0
  180. package/lib/Queue/type.d.ts +12 -1
  181. package/lib/Queue/type.d.ts.map +1 -1
  182. package/lib/Response/index.d.ts.map +1 -1
  183. package/lib/Response/index.js +6 -1
  184. package/lib/Routes/Route.d.ts +2 -2
  185. package/lib/Routes/Route.d.ts.map +1 -1
  186. package/lib/Routes/RouteBuilder.d.ts +2 -2
  187. package/lib/Routes/RouteBuilder.d.ts.map +1 -1
  188. package/lib/Security/CsrfMiddleware.d.ts +37 -0
  189. package/lib/Security/CsrfMiddleware.d.ts.map +1 -0
  190. package/lib/Security/CsrfMiddleware.js +85 -0
  191. package/lib/Security/MethodSpoofingMiddleware.d.ts +36 -0
  192. package/lib/Security/MethodSpoofingMiddleware.d.ts.map +1 -0
  193. package/lib/Security/MethodSpoofingMiddleware.js +51 -0
  194. package/lib/Security/index.d.ts +5 -0
  195. package/lib/Security/index.d.ts.map +1 -0
  196. package/lib/Security/index.js +7 -0
  197. package/lib/Session/DatabaseSession.d.ts +9 -3
  198. package/lib/Session/DatabaseSession.d.ts.map +1 -1
  199. package/lib/Session/DatabaseSession.js +38 -36
  200. package/lib/Session/ExpressJccSession.d.ts +23 -0
  201. package/lib/Session/ExpressJccSession.d.ts.map +1 -0
  202. package/lib/Session/ExpressJccSession.js +110 -0
  203. package/lib/Session/RedisSession.d.ts +2 -2
  204. package/lib/Session/RedisSession.d.ts.map +1 -1
  205. package/lib/Session/RedisSession.js +19 -5
  206. package/lib/Session/SessionManager.d.ts +18 -4
  207. package/lib/Session/SessionManager.d.ts.map +1 -1
  208. package/lib/Session/SessionManager.js +53 -17
  209. package/lib/Socialite/AbstractProvider.d.ts +60 -0
  210. package/lib/Socialite/AbstractProvider.d.ts.map +1 -0
  211. package/lib/Socialite/AbstractProvider.js +136 -0
  212. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts +9 -0
  213. package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts.map +1 -0
  214. package/lib/Socialite/Drivers/facebook/FacebookDriver.js +40 -0
  215. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts +15 -0
  216. package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts.map +1 -0
  217. package/lib/Socialite/Drivers/facebook/FacebookProvider.js +28 -0
  218. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts +9 -0
  219. package/lib/Socialite/Drivers/github/GitHubDriver.d.ts.map +1 -0
  220. package/lib/Socialite/Drivers/github/GitHubDriver.js +54 -0
  221. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts +15 -0
  222. package/lib/Socialite/Drivers/github/GitHubProvider.d.ts.map +1 -0
  223. package/lib/Socialite/Drivers/github/GitHubProvider.js +28 -0
  224. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts +10 -0
  225. package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts.map +1 -0
  226. package/lib/Socialite/Drivers/gitlab/GitLabDriver.js +37 -0
  227. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts +15 -0
  228. package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts.map +1 -0
  229. package/lib/Socialite/Drivers/gitlab/GitLabProvider.js +28 -0
  230. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts +9 -0
  231. package/lib/Socialite/Drivers/google/GoogleDriver.d.ts.map +1 -0
  232. package/lib/Socialite/Drivers/google/GoogleDriver.js +39 -0
  233. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts +15 -0
  234. package/lib/Socialite/Drivers/google/GoogleProvider.d.ts.map +1 -0
  235. package/lib/Socialite/Drivers/google/GoogleProvider.js +28 -0
  236. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts +9 -0
  237. package/lib/Socialite/Drivers/slack/SlackDriver.d.ts.map +1 -0
  238. package/lib/Socialite/Drivers/slack/SlackDriver.js +41 -0
  239. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts +16 -0
  240. package/lib/Socialite/Drivers/slack/SlackProvider.d.ts.map +1 -0
  241. package/lib/Socialite/Drivers/slack/SlackProvider.js +37 -0
  242. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts +9 -0
  243. package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts.map +1 -0
  244. package/lib/Socialite/Drivers/twitter/TwitterDriver.js +57 -0
  245. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts +16 -0
  246. package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts.map +1 -0
  247. package/lib/Socialite/Drivers/twitter/TwitterProvider.js +38 -0
  248. package/lib/Socialite/SocialUser.d.ts +42 -0
  249. package/lib/Socialite/SocialUser.d.ts.map +1 -0
  250. package/lib/Socialite/SocialUser.js +116 -0
  251. package/lib/Socialite/Socialite.d.ts +13 -0
  252. package/lib/Socialite/Socialite.d.ts.map +1 -0
  253. package/lib/Socialite/Socialite.js +41 -0
  254. package/lib/Socialite/SocialiteProvider.d.ts +9 -0
  255. package/lib/Socialite/SocialiteProvider.d.ts.map +1 -0
  256. package/lib/Socialite/SocialiteProvider.js +15 -0
  257. package/lib/Socialite/config.d.ts +7 -0
  258. package/lib/Socialite/config.d.ts.map +1 -0
  259. package/lib/Socialite/config.js +44 -0
  260. package/lib/Socialite/constant.d.ts +18 -0
  261. package/lib/Socialite/constant.d.ts.map +1 -0
  262. package/lib/Socialite/constant.js +20 -0
  263. package/lib/Socialite/index.d.ts +13 -0
  264. package/lib/Socialite/index.d.ts.map +1 -0
  265. package/lib/Socialite/index.js +25 -0
  266. package/lib/Socialite/types.d.ts +13 -0
  267. package/lib/Socialite/types.d.ts.map +1 -0
  268. package/lib/Socialite/types.js +2 -0
  269. package/lib/Templating-engine/benchmark.d.ts +7 -0
  270. package/lib/Templating-engine/benchmark.d.ts.map +1 -0
  271. package/lib/Templating-engine/benchmark.js +44 -0
  272. package/lib/Templating-engine/engineHelper.d.ts +37 -8
  273. package/lib/Templating-engine/engineHelper.d.ts.map +1 -1
  274. package/lib/Templating-engine/engineHelper.js +203 -26
  275. package/lib/Templating-engine/errors.d.ts +15 -0
  276. package/lib/Templating-engine/errors.d.ts.map +1 -0
  277. package/lib/Templating-engine/errors.js +35 -0
  278. package/lib/Templating-engine/expressions.d.ts +24 -0
  279. package/lib/Templating-engine/expressions.d.ts.map +1 -1
  280. package/lib/Templating-engine/expressions.js +27 -5
  281. package/lib/Templating-engine/index.d.ts +87 -17
  282. package/lib/Templating-engine/index.d.ts.map +1 -1
  283. package/lib/Templating-engine/index.js +701 -96
  284. package/lib/Templating-engine/plugins.d.ts +30 -0
  285. package/lib/Templating-engine/plugins.d.ts.map +1 -0
  286. package/lib/Templating-engine/plugins.js +47 -0
  287. package/lib/Type/index.d.ts +1 -0
  288. package/lib/Type/index.d.ts.map +1 -1
  289. package/lib/Validation/Validator/CustomValidation.d.ts.map +1 -1
  290. package/lib/Validation/Validator/CustomValidation.js +2 -2
  291. package/lib/Validation/Validator/helper.d.ts.map +1 -1
  292. package/lib/Validation/Validator/helper.js +8 -1
  293. package/lib/util/index.d.ts +42 -1
  294. package/lib/util/index.d.ts.map +1 -1
  295. package/lib/util/index.js +154 -17
  296. package/package.json +1 -1
@@ -0,0 +1,25 @@
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.registerRateLimit = exports.loginRateLimit = void 0;
7
+ const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
8
+ /** Stricter limit for login attempts (per IP). */
9
+ exports.loginRateLimit = (0, express_rate_limit_1.default)({
10
+ windowMs: 15 * 60 * 1000,
11
+ max: 20,
12
+ message: { message: "Too many login attempts. Try again later." },
13
+ standardHeaders: true,
14
+ legacyHeaders: false,
15
+ validate: { trustProxy: false },
16
+ });
17
+ /** Stricter limit for registration (per IP). */
18
+ exports.registerRateLimit = (0, express_rate_limit_1.default)({
19
+ windowMs: 60 * 60 * 1000,
20
+ max: 10,
21
+ message: { message: "Too many registration attempts. Try again later." },
22
+ standardHeaders: true,
23
+ legacyHeaders: false,
24
+ validate: { trustProxy: false },
25
+ });
@@ -0,0 +1,24 @@
1
+ export type RefreshSession = {
2
+ userId: string;
3
+ expiresAt: number;
4
+ };
5
+ /** Pluggable store for refresh-token `jti` rotation (swap for Redis in multi-instance). */
6
+ export interface IRefreshTokenStore {
7
+ generateJti(): string;
8
+ register(jti: string, userId: string, ttlMs: number): void;
9
+ /** Remove and return the session if `jti` is valid and not expired. */
10
+ consume(jti: string): RefreshSession | undefined;
11
+ revoke(jti: string): void;
12
+ revokeAllForUser(userId: string): void;
13
+ }
14
+ export declare class MemoryRefreshTokenStore implements IRefreshTokenStore {
15
+ private readonly byJti;
16
+ generateJti(): string;
17
+ register(jti: string, userId: string, ttlMs: number): void;
18
+ consume(jti: string): RefreshSession | undefined;
19
+ revoke(jti: string): void;
20
+ revokeAllForUser(userId: string): void;
21
+ private prune;
22
+ }
23
+ export declare const defaultRefreshTokenStore: MemoryRefreshTokenStore;
24
+ //# sourceMappingURL=refreshTokenStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refreshTokenStore.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Auth/refreshTokenStore.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,cAAc,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,2FAA2F;AAC3F,MAAM,WAAW,kBAAkB;IACjC,WAAW,IAAI,MAAM,CAAC;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3D,uEAAuE;IACvE,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAAC;IACjD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACxC;AAED,qBAAa,uBAAwB,YAAW,kBAAkB;IAChE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAE3D,WAAW,IAAI,MAAM;IAIrB,QAAQ,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAQ1D,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAQhD,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIzB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAMtC,OAAO,CAAC,KAAK;CAMd;AAED,eAAO,MAAM,wBAAwB,yBAAgC,CAAC"}
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaultRefreshTokenStore = exports.MemoryRefreshTokenStore = void 0;
4
+ const crypto_1 = require("crypto");
5
+ class MemoryRefreshTokenStore {
6
+ constructor() {
7
+ this.byJti = new Map();
8
+ }
9
+ generateJti() {
10
+ return (0, crypto_1.randomBytes)(32).toString("hex");
11
+ }
12
+ register(jti, userId, ttlMs) {
13
+ this.prune();
14
+ this.byJti.set(jti, {
15
+ userId,
16
+ expiresAt: Date.now() + ttlMs,
17
+ });
18
+ }
19
+ consume(jti) {
20
+ const row = this.byJti.get(jti);
21
+ if (!row)
22
+ return undefined;
23
+ this.byJti.delete(jti);
24
+ if (Date.now() > row.expiresAt)
25
+ return undefined;
26
+ return row;
27
+ }
28
+ revoke(jti) {
29
+ this.byJti.delete(jti);
30
+ }
31
+ revokeAllForUser(userId) {
32
+ for (const [k, v] of this.byJti) {
33
+ if (v.userId === userId)
34
+ this.byJti.delete(k);
35
+ }
36
+ }
37
+ prune() {
38
+ const now = Date.now();
39
+ for (const [k, v] of this.byJti) {
40
+ if (v.expiresAt < now)
41
+ this.byJti.delete(k);
42
+ }
43
+ }
44
+ }
45
+ exports.MemoryRefreshTokenStore = MemoryRefreshTokenStore;
46
+ exports.defaultRefreshTokenStore = new MemoryRefreshTokenStore();
@@ -1 +1 @@
1
- {"version":3,"file":"DBCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/DBCommand.ts"],"names":[],"mappings":"AAMA,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAA0C;IAE7D,OAAO,CAAC,YAAY;IAQd,IAAI;IAqBJ,YAAY,CAAC,UAAU,EAAE,MAAM;IAW/B,IAAI;CA+BX"}
1
+ {"version":3,"file":"DBCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/DBCommand.ts"],"names":[],"mappings":"AAMA,qBAAa,SAAS;IACpB,OAAO,CAAC,WAAW,CAA0C;IAE7D,OAAO,CAAC,YAAY;IAad,IAAI;IAqBJ,YAAY,CAAC,UAAU,EAAE,MAAM;IAW/B,IAAI;CA+BX"}
@@ -14,11 +14,17 @@ class DBCommand {
14
14
  this.seedersPath = `${rootPath}/database/seeders`;
15
15
  }
16
16
  getSeederDir(seederFile) {
17
+ const base = `${this.seedersPath}/${seederFile}`;
17
18
  try {
18
- return require(`${this.seedersPath}/${seederFile}`);
19
+ return require(base);
19
20
  }
20
- catch (error) {
21
- console.log(`Can't get the seeder with name of ${seederFile}`);
21
+ catch {
22
+ try {
23
+ return require(`${base}.ts`);
24
+ }
25
+ catch {
26
+ console.log(`Can't get the seeder with name of ${seederFile}`);
27
+ }
22
28
  }
23
29
  }
24
30
  async seed() {
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Generate a cryptographically strong secret (64 hex chars = 32 bytes).
3
+ * Default env key: JWT_SECRET (meets production length checks in this framework).
4
+ */
5
+ export declare function runKeyGenerate(firstArg?: string, secondArg?: string): void;
6
+ //# sourceMappingURL=KeyGenerateCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"KeyGenerateCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/KeyGenerateCommand.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,SAAK,EAAE,SAAS,SAAK,GAAG,IAAI,CAoClE"}
@@ -0,0 +1,47 @@
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.runKeyGenerate = runKeyGenerate;
7
+ const crypto_1 = require("crypto");
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const app_root_path_1 = __importDefault(require("app-root-path"));
11
+ const colors_1 = __importDefault(require("colors"));
12
+ function escapeRegex(s) {
13
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
14
+ }
15
+ /**
16
+ * Generate a cryptographically strong secret (64 hex chars = 32 bytes).
17
+ * Default env key: JWT_SECRET (meets production length checks in this framework).
18
+ */
19
+ function runKeyGenerate(firstArg = "", secondArg = "") {
20
+ const showOnly = firstArg === "show" ||
21
+ secondArg === "show" ||
22
+ secondArg === "--show";
23
+ const keyName = firstArg && firstArg !== "show" ? firstArg : "JWT_SECRET";
24
+ const value = (0, crypto_1.randomBytes)(32).toString("hex");
25
+ if (showOnly) {
26
+ console.log(colors_1.default.green(`${keyName}=`) + value);
27
+ return;
28
+ }
29
+ const envPath = path_1.default.join(app_root_path_1.default.path, ".env");
30
+ if (!fs_1.default.existsSync(envPath)) {
31
+ console.log(colors_1.default.yellow(".env not found. Add this line to your environment file:\n"));
32
+ console.log(colors_1.default.cyan(`${keyName}=${value}\n`));
33
+ return;
34
+ }
35
+ let contents = fs_1.default.readFileSync(envPath, "utf8");
36
+ const re = new RegExp(`^${escapeRegex(keyName)}=.*$`, "m");
37
+ const line = `${keyName}=${value}`;
38
+ if (re.test(contents)) {
39
+ contents = contents.replace(re, line);
40
+ }
41
+ else {
42
+ contents = contents.replace(/\s*$/, "") + "\n" + line + "\n";
43
+ }
44
+ fs_1.default.writeFileSync(envPath, contents, "utf8");
45
+ console.log(colors_1.default.green(`✓ Set ${keyName} in .env`) +
46
+ colors_1.default.gray(` (${value.length} characters)`));
47
+ }
@@ -1,4 +1,5 @@
1
1
  export declare class MakeCommand {
2
+ private fileExtension;
2
3
  createController(controllerName: string, modelName?: boolean): any;
3
4
  createApiController(controllerName: string, modelName?: boolean): any;
4
5
  createModel(modelName: string): any;
@@ -1 +1 @@
1
- {"version":3,"file":"MakeCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/MakeCommand.ts"],"names":[],"mappings":"AA6BA,qBAAa,WAAW;IACtB,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,GAAG;IAkChE,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,GAAG;IAkDnE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG;IAoBnC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG;IA0BvC,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,GAAG;IA4BlE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IA2B/B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG;IA8B/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IA8B3B,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG;IAmC1D,gBAAgB;IA+BhB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG;IAiCjD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG;IAmC/C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,GAAG;IAkC1D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;CA8BrC"}
1
+ {"version":3,"file":"MakeCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/MakeCommand.ts"],"names":[],"mappings":"AA8BA,qBAAa,WAAW;IACtB,OAAO,CAAC,aAAa,CAA0C;IAE/D,gBAAgB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,GAAG;IAsChE,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,GAAG;IAkDnE,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,GAAG;IAuBnC,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,GAAG;IA4BvC,eAAe,CAAC,aAAa,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,GAAG;IA4BlE,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;IA2B/B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG;IA8B/B,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG;IA8B3B,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,GAAG;IAmC1D,gBAAgB;IA+BhB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG;IAiCjD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG;IAmC/C,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,MAAM,GAAG,GAAG;IAmC1D,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG;CAkCrC"}
@@ -23,6 +23,7 @@ const Observer_1 = __importDefault(require("./files/Observer"));
23
23
  const Policy_1 = __importDefault(require("./files/Policy"));
24
24
  const Command_1 = __importDefault(require("./files/Command"));
25
25
  const FeatureTest_1 = require("./files/FeatureTest");
26
+ const Config_1 = require("../Config/Config");
26
27
  const rootPath = app_root_path_1.default.path;
27
28
  /** Convert PascalCase to kebab-case (e.g. SendEmails -> send:emails) */
28
29
  const toSignature = (name) => name
@@ -31,6 +32,9 @@ const toSignature = (name) => name
31
32
  .replace(/^:/, "");
32
33
  colors_1.default.enable();
33
34
  class MakeCommand {
35
+ constructor() {
36
+ this.fileExtension = Config_1.config.get("FILE_EXT") || "ts";
37
+ }
34
38
  createController(controllerName, modelName = false) {
35
39
  try {
36
40
  if (!controllerName) {
@@ -38,18 +42,18 @@ class MakeCommand {
38
42
  return;
39
43
  }
40
44
  let webControllerPath = path_1.default.resolve(`${rootPath}/app/Http/Controllers`); // Resolve path to web controllers directory
41
- if (fs_1.default.existsSync(`${webControllerPath}/${controllerName}.ts`)) {
45
+ if (fs_1.default.existsSync(`${webControllerPath}/${controllerName}.${this.fileExtension}`)) {
42
46
  // Check if controller file already exists
43
47
  return console.log(colors_1.default.yellow(`${controllerName} already exist`)); // Log a warning if controller already exists
44
48
  }
45
49
  if (modelName && typeof modelName === "string") {
46
50
  // If model name is provided, create a resource controller
47
51
  fs_1.default.writeFileSync(`${webControllerPath}/${controllerName}`, (0, ResourcesController_1.default)(controllerName, modelName));
48
- return console.log(`${controllerName} added successfully [${webControllerPath}/${controllerName}.ts]`); // Log success message
52
+ return console.log(`${controllerName} added successfully [${webControllerPath}/${controllerName}.${this.fileExtension}]`); // Log success message
49
53
  }
50
- fs_1.default.writeFileSync(`${webControllerPath}/${controllerName}.ts`, (0, Controller_1.default)(controllerName) // Create a basic controller file
54
+ fs_1.default.writeFileSync(`${webControllerPath}/${controllerName}.${this.fileExtension}`, (0, Controller_1.default)(controllerName) // Create a basic controller file
51
55
  );
52
- return console.log(`${controllerName} added successfully [${webControllerPath}/${controllerName}.ts]`); // Log success message
56
+ return console.log(`${controllerName} added successfully [${webControllerPath}/${controllerName}.${this.fileExtension}]`); // Log success message
53
57
  }
54
58
  catch (err) {
55
59
  console.log(colors_1.default.red(`${controllerName} admin controller not added`)); // Log error if controller addition fails
@@ -67,7 +71,7 @@ class MakeCommand {
67
71
  fs_1.default.mkdirSync(apiPath, { recursive: true });
68
72
  // console.log(colors.green(`Created folder: ${apiPath}`));
69
73
  }
70
- const controllerFile = `${apiPath}/${controllerName}.ts`;
74
+ const controllerFile = `${apiPath}/${controllerName}.${this.fileExtension}`;
71
75
  // Check if API controller already exists
72
76
  if (fs_1.default.existsSync(controllerFile)) {
73
77
  console.log(colors_1.default.yellow(`${controllerName} API controller already exists`));
@@ -95,12 +99,12 @@ class MakeCommand {
95
99
  return;
96
100
  }
97
101
  let modelPath = path_1.default.resolve(`${rootPath}/app/Models`); // Resolve path to models directory
98
- if (fs_1.default.existsSync(`${modelPath}/${modelName}.ts`)) {
102
+ if (fs_1.default.existsSync(`${modelPath}/${modelName}.${this.fileExtension}`)) {
99
103
  // Check if model file already exists
100
104
  return console.log(colors_1.default.yellow(`${modelName} model already exist`)); // Log a warning if model already exists
101
105
  }
102
- fs_1.default.writeFileSync(`${modelPath}/${modelName}.ts`, (0, Models_1.default)(modelName)); // Create a model file
103
- return console.log(`${modelName} model added successfully [${modelPath}/${modelName}.ts]`); // Log success message
106
+ fs_1.default.writeFileSync(`${modelPath}/${modelName}.${this.fileExtension}`, (0, Models_1.default)(modelName)); // Create a model file
107
+ return console.log(`${modelName} model added successfully [${modelPath}/${modelName}.${this.fileExtension}]`); // Log success message
104
108
  }
105
109
  catch (err) {
106
110
  return console.log(colors_1.default.red(`${modelName} model not added`)); // Log error if model addition fails
@@ -113,13 +117,13 @@ class MakeCommand {
113
117
  return;
114
118
  }
115
119
  let requestPath = path_1.default.resolve(`${rootPath}/app/Http/Requests`); // Resolve path to request files directory
116
- if (fs_1.default.existsSync(`${requestPath}/${requestName}.ts`)) {
120
+ if (fs_1.default.existsSync(`${requestPath}/${requestName}.${this.fileExtension}`)) {
117
121
  // Check if request file already exists
118
122
  return console.log(colors_1.default.yellow(`${requestName} already exist`)); // Log a warning if request file already exists
119
123
  }
120
- fs_1.default.writeFileSync(`${requestPath}/${requestName}.ts`, (0, Request_1.default)(requestName) // Create a request file
124
+ fs_1.default.writeFileSync(`${requestPath}/${requestName}.${this.fileExtension}`, (0, Request_1.default)(requestName) // Create a request file
121
125
  );
122
- return console.log(`${requestName} added successfully [${requestPath}/${requestName}.ts]`); // Log success message
126
+ return console.log(`${requestName} added successfully [${requestPath}/${requestName}.${this.fileExtension}]`); // Log success message
123
127
  }
124
128
  catch (err) {
125
129
  return console.log(colors_1.default.red(`${requestName} request not added`), {
@@ -137,11 +141,11 @@ class MakeCommand {
137
141
  let migrationPath = path_1.default.resolve(`${rootPath}/database/migrations`);
138
142
  // Resolve path to request files directory
139
143
  const fullName = `${(0, utils_1.formatDate)()}_${migrationName}`;
140
- if (fs_1.default.existsSync(`${migrationPath}/${fullName}.ts`)) {
144
+ if (fs_1.default.existsSync(`${migrationPath}/${fullName}.${this.fileExtension}`)) {
141
145
  // Check if request file already exists
142
146
  return console.log(colors_1.default.yellow(`${tableName} already exist`)); // Log a warning if request file already exists
143
147
  }
144
- fs_1.default.writeFileSync(`${migrationPath}/${fullName}.ts`, (0, Migration_1.default)(tableName, migrationName, optionalTable) // Create a request file
148
+ fs_1.default.writeFileSync(`${migrationPath}/${fullName}.${this.fileExtension}`, (0, Migration_1.default)(tableName, migrationName, optionalTable) // Create a request file
145
149
  );
146
150
  return console.log(colors_1.default.green(`${fullName} added successfully`)); // Log success message
147
151
  }
@@ -159,13 +163,13 @@ class MakeCommand {
159
163
  }
160
164
  let seederPath = path_1.default.resolve(`${rootPath}/database/seeders`);
161
165
  // Resolve path to request files directory
162
- if (fs_1.default.existsSync(`${seederPath}/${name}.ts`)) {
166
+ if (fs_1.default.existsSync(`${seederPath}/${name}.${this.fileExtension}`)) {
163
167
  // Check if request file already exists
164
168
  return console.log(colors_1.default.yellow(`${name} already exist`)); // Log a warning if request file already exists
165
169
  }
166
- fs_1.default.writeFileSync(`${seederPath}/${name}.ts`, (0, Seeder_1.default)(name) // Create a request file
170
+ fs_1.default.writeFileSync(`${seederPath}/${name}.${this.fileExtension}`, (0, Seeder_1.default)(name) // Create a request file
167
171
  );
168
- return console.log(`${name} added successfully [${seederPath}/${name}.ts]`); // Log success message
172
+ return console.log(`${name} added successfully [${seederPath}/${name}.${this.fileExtension}]`); // Log success message
169
173
  }
170
174
  catch (err) {
171
175
  return console.log(colors_1.default.red(`${name} migration not added`), {
@@ -183,12 +187,12 @@ class MakeCommand {
183
187
  if (!fs_1.default.existsSync(eventsPath)) {
184
188
  fs_1.default.mkdirSync(eventsPath, { recursive: true });
185
189
  }
186
- const eventFile = `${eventsPath}/${event}.ts`;
190
+ const eventFile = `${eventsPath}/${event}.${this.fileExtension}`;
187
191
  if (fs_1.default.existsSync(eventFile)) {
188
192
  console.log(colors_1.default.yellow(`${eventsPath} Event already exists`));
189
193
  return;
190
194
  }
191
- fs_1.default.writeFileSync(`${eventsPath}/${event}.ts`, (0, Event_1.default)(event) // Create a basic controller file
195
+ fs_1.default.writeFileSync(`${eventsPath}/${event}.${this.fileExtension}`, (0, Event_1.default)(event) // Create a basic controller file
192
196
  );
193
197
  return console.log(`${event} Event added successfully [${eventFile}]`);
194
198
  }
@@ -207,12 +211,12 @@ class MakeCommand {
207
211
  if (!fs_1.default.existsSync(jobsPath)) {
208
212
  fs_1.default.mkdirSync(jobsPath, { recursive: true });
209
213
  }
210
- const jobFile = `${jobsPath}/${job}.ts`;
214
+ const jobFile = `${jobsPath}/${job}.${this.fileExtension}`;
211
215
  if (fs_1.default.existsSync(jobFile)) {
212
216
  console.log(colors_1.default.yellow(`${jobsPath} Event already exists`));
213
217
  return;
214
218
  }
215
- fs_1.default.writeFileSync(`${jobsPath}/${job}.ts`, (0, jobClass_1.createJobClass)(job) // Create a basic controller file
219
+ fs_1.default.writeFileSync(`${jobsPath}/${job}.${this.fileExtension}`, (0, jobClass_1.createJobClass)(job) // Create a basic controller file
216
220
  );
217
221
  return console.log(`${job} Job added successfully [${jobFile}]`);
218
222
  }
@@ -231,12 +235,12 @@ class MakeCommand {
231
235
  if (!fs_1.default.existsSync(eventsListenerPath)) {
232
236
  fs_1.default.mkdirSync(eventsListenerPath, { recursive: true });
233
237
  }
234
- const eventFile = `${eventsListenerPath}/${event}.ts`;
238
+ const eventFile = `${eventsListenerPath}/${event}.${this.fileExtension}`;
235
239
  if (fs_1.default.existsSync(eventFile)) {
236
240
  console.log(colors_1.default.yellow(`${eventsListenerPath} Event listner already exists`));
237
241
  return;
238
242
  }
239
- fs_1.default.writeFileSync(`${eventsListenerPath}/${event}.ts`, (0, Listener_1.default)(event, listener) // Create a basic controller file
243
+ fs_1.default.writeFileSync(`${eventsListenerPath}/${event}.${this.fileExtension}`, (0, Listener_1.default)(event, listener) // Create a basic controller file
240
244
  );
241
245
  return console.log(`${event} Event listener added successfully [${eventFile}]`);
242
246
  }
@@ -251,16 +255,16 @@ class MakeCommand {
251
255
  if (!fs_1.default.existsSync(migrationPath)) {
252
256
  fs_1.default.mkdirSync(migrationPath, { recursive: true });
253
257
  }
254
- if (fs_1.default.existsSync(`${migrationPath}/jobs.ts`)) {
258
+ if (fs_1.default.existsSync(`${migrationPath}/jobs.${this.fileExtension}`)) {
255
259
  // Check if request file already exists
256
260
  return console.log(colors_1.default.yellow(`jobs table already exist`)); // Log a warning if request file already exists
257
261
  }
258
- if (fs_1.default.existsSync(`${migrationPath}/failed_jobs.ts`)) {
262
+ if (fs_1.default.existsSync(`${migrationPath}/failed_jobs.${this.fileExtension}`)) {
259
263
  // Check if request file already exists
260
264
  return console.log(colors_1.default.yellow(`failed_jobs table already exist`)); // Log a warning if request file already exists
261
265
  }
262
- fs_1.default.writeFileSync(`${migrationPath}/${(0, utils_1.formatDate)()}_jobs_table.ts`, jobs_1.jobsMigration);
263
- fs_1.default.writeFileSync(`${migrationPath}/${(0, utils_1.formatDate)()}__failed_jobs_table.ts`, jobs_1.failedJobsMigration);
266
+ fs_1.default.writeFileSync(`${migrationPath}/${(0, utils_1.formatDate)()}_jobs_table.${this.fileExtension}`, jobs_1.jobsMigration);
267
+ fs_1.default.writeFileSync(`${migrationPath}/${(0, utils_1.formatDate)()}__failed_jobs_table.${this.fileExtension}`, jobs_1.failedJobsMigration);
264
268
  return console.log(colors_1.default.green("Queue table created successfully"));
265
269
  }
266
270
  catch (error) {
@@ -278,12 +282,12 @@ class MakeCommand {
278
282
  if (!fs_1.default.existsSync(observerPath)) {
279
283
  fs_1.default.mkdirSync(observerPath, { recursive: true });
280
284
  }
281
- const observerFile = `${observerPath}/${name}.ts`;
285
+ const observerFile = `${observerPath}/${name}.${this.fileExtension}`;
282
286
  if (fs_1.default.existsSync(observerFile)) {
283
287
  console.log(colors_1.default.yellow(`${observerPath} Observer already exists`));
284
288
  return;
285
289
  }
286
- fs_1.default.writeFileSync(`${observerPath}/${name}.ts`, (0, Observer_1.default)(name, model));
290
+ fs_1.default.writeFileSync(`${observerPath}/${name}.${this.fileExtension}`, (0, Observer_1.default)(name, model));
287
291
  return console.log(`${name} Observer added successfully [${observerFile}]`);
288
292
  }
289
293
  catch (err) {
@@ -305,7 +309,7 @@ class MakeCommand {
305
309
  if (!fs_1.default.existsSync(policyPath)) {
306
310
  fs_1.default.mkdirSync(policyPath, { recursive: true });
307
311
  }
308
- const policyFile = `${policyPath}/${name}.ts`;
312
+ const policyFile = `${policyPath}/${name}.${this.fileExtension}`;
309
313
  if (fs_1.default.existsSync(policyFile)) {
310
314
  console.log(colors_1.default.yellow(`${name} Policy already exists`));
311
315
  return;
@@ -331,7 +335,7 @@ class MakeCommand {
331
335
  if (!fs_1.default.existsSync(commandPath)) {
332
336
  fs_1.default.mkdirSync(commandPath, { recursive: true });
333
337
  }
334
- const commandFile = `${commandPath}/${className}.ts`;
338
+ const commandFile = `${commandPath}/${className}.${this.fileExtension}`;
335
339
  if (fs_1.default.existsSync(commandFile)) {
336
340
  console.log(colors_1.default.yellow(`${className} already exists`));
337
341
  return;
@@ -355,9 +359,9 @@ class MakeCommand {
355
359
  if (!fs_1.default.existsSync(testsPath)) {
356
360
  fs_1.default.mkdirSync(testsPath, { recursive: true });
357
361
  }
358
- const testFile = `${testsPath}/${testName}.test.ts`;
362
+ const testFile = `${testsPath}/${testName}.test.${this.fileExtension}`;
359
363
  if (fs_1.default.existsSync(testFile)) {
360
- console.log(colors_1.default.yellow(`${testName}.test.ts already exists`));
364
+ console.log(colors_1.default.yellow(`${testName}.test.${this.fileExtension} already exists`));
361
365
  return;
362
366
  }
363
367
  fs_1.default.writeFileSync(testFile, (0, FeatureTest_1.createFeatureTest)(testName));
@@ -9,12 +9,14 @@ export declare class ConsoleKernel {
9
9
  private _make;
10
10
  private _route;
11
11
  private _schedule;
12
+ private _watch;
12
13
  private _app;
13
14
  private get migrate();
14
15
  private get db();
15
16
  private get make();
16
17
  private get route();
17
18
  private get schedule();
19
+ private get watch();
18
20
  private app;
19
21
  constructor();
20
22
  /** Load user commands from app/Console/Command (guarded, non-blocking for missing dir) */
@@ -1 +1 @@
1
- {"version":3,"file":"NodeArtisanCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/NodeArtisanCommand.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmCpC,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAK1B;IACF,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,IAAI,CAAc;IAE1B,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,KAAK,EAAE,GAEb;IAED,OAAO,KAAK,IAAI,GAEf;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,QAAQ,GAEnB;IACD,OAAO,CAAC,GAAG;;IAWX,0FAA0F;IAC1F,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,aAAa;IAOrB,wFAAwF;IACxF,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,aAAa;IA+JrB,OAAO,CAAC,QAAQ;IAiIhB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;CA4BpD"}
1
+ {"version":3,"file":"NodeArtisanCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/NodeArtisanCommand.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAK1B;IACF,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAwB;IACxC,OAAO,CAAC,GAAG,CAA0B;IACrC,OAAO,CAAC,KAAK,CAA4B;IACzC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,IAAI,CAAc;IAE1B,OAAO,KAAK,OAAO,GAElB;IAED,OAAO,KAAK,EAAE,GAEb;IAED,OAAO,KAAK,IAAI,GAEf;IAED,OAAO,KAAK,KAAK,GAEhB;IAED,OAAO,KAAK,QAAQ,GAEnB;IAED,OAAO,KAAK,KAAK,GAEhB;IACD,OAAO,CAAC,GAAG;;IAWX,0FAA0F;IAC1F,OAAO,CAAC,kBAAkB;IA0B1B,OAAO,CAAC,aAAa;IAOrB,wFAAwF;IACxF,OAAO,CAAC,SAAS;IAkBjB,OAAO,CAAC,aAAa;IAoLrB,OAAO,CAAC,QAAQ;IA+HhB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;CA4BpD"}
@@ -18,7 +18,9 @@ const MakeCommand_1 = require("./MakeCommand");
18
18
  const RouteCommand_1 = require("./RouteCommand");
19
19
  const ScheduleCommand_1 = require("./ScheduleCommand");
20
20
  const InertiaCommand_1 = require("./InertiaCommand");
21
+ const KeyGenerateCommand_1 = require("./KeyGenerateCommand");
21
22
  const Tinker_1 = require("./NodeTinker/Tinker");
23
+ const WatchCommand_1 = require("./WatchCommand");
22
24
  const util_1 = require("../util");
23
25
  /** Parse key=value from secondArg (e.g. steps=2, class=UserSeeder) */
24
26
  const parseOption = (secondArg, key) => {
@@ -43,6 +45,9 @@ class ConsoleKernel {
43
45
  get schedule() {
44
46
  return (this._schedule ??= new ScheduleCommand_1.ScheduleCommand());
45
47
  }
48
+ get watch() {
49
+ return (this._watch ??= new WatchCommand_1.WatchCommand());
50
+ }
46
51
  app() {
47
52
  const bootstrap = require(`${app_root_path_1.default.path}/bootstrap/app`);
48
53
  const app = bootstrap.app;
@@ -57,6 +62,7 @@ class ConsoleKernel {
57
62
  this._make = null;
58
63
  this._route = null;
59
64
  this._schedule = null;
65
+ this._watch = null;
60
66
  this._app = this.app();
61
67
  this.loadCustomCommands();
62
68
  }
@@ -172,10 +178,11 @@ class ConsoleKernel {
172
178
  }));
173
179
  this.defineCommand("db:wipe").action(this.runAction(() => this.db.wipe()));
174
180
  // ─── route / queue / tinker / inertia ─────────────────────────────────
175
- this.defineCommand("queue:work").action(this.runAction(async () => {
176
- console.log("Starting the queue worker...");
181
+ this.defineCommand("queue:work").action(this.runAction(async (queueName) => {
182
+ console.log("\n");
183
+ console.log(`${colors_1.default.bgBlue(" INFO ")} Starting the queue worker... \n`);
177
184
  const queue = app.resolve("Queue");
178
- await queue.work();
185
+ await queue.work(queueName || undefined);
179
186
  }, { exit: false }));
180
187
  this.defineCommand("route:list").action(this.runAction((firstArg) => {
181
188
  const mw = firstArg?.includes("middleware")
@@ -183,13 +190,22 @@ class ConsoleKernel {
183
190
  : undefined;
184
191
  return this.route.display(mw);
185
192
  }));
186
- this.defineCommand("tinker").action(this.runAction(() => Tinker_1.tinker.start(), { exit: false }));
187
- this.defineCommand("inertia:start-ssr").action(this.runAction(() => InertiaCommand_1.InertiaCommand.startInertiaSSR()));
193
+ this.defineCommand("tinker").action(this.runAction(() => (0, Tinker_1.getTinker)().start(), { exit: false }));
194
+ this.defineCommand("inertia:start-ssr").action(this.runAction(() => InertiaCommand_1.InertiaCommand.startInertiaSSR(), { exit: false }));
195
+ this.defineCommand("serve")
196
+ .alias("watch")
197
+ .action(this.runAction((firstArg) => this.watch.run(firstArg || "server.ts"), {
198
+ exit: false,
199
+ }));
188
200
  // ─── schedule (was missing) ─────────────────────────────────────────
189
201
  this.defineCommand("schedule:run").action(this.runAction(() => this.schedule.run(), { exit: false }));
190
202
  this.defineCommand("schedule:list").action(this.runAction(() => this.schedule.list()));
191
203
  // ─── build ──────────────────────────────────────────────────────────
192
204
  this.defineCommand("build").action(this.runAction(() => (0, buildCommand_1.BuildCommand)()));
205
+ // ─── key (JWT / app secrets) ─────────────────────────────────────────
206
+ this.defineCommand("key:generate")
207
+ .description("Generate a random secret (default: JWT_SECRET in .env). Use 'show' to print only.")
208
+ .action(this.runAction((firstArg, secondArg) => (0, KeyGenerateCommand_1.runKeyGenerate)(firstArg ?? "", secondArg ?? "")));
193
209
  // ─── custom user commands ────────────────────────────────────────────
194
210
  for (const { signature, description, CommandClass } of this
195
211
  .customCommands) {
@@ -234,7 +250,9 @@ class ConsoleKernel {
234
250
  console.log(line("route:list [middleware=]", "Display routes (optionally filtered)\n"));
235
251
  console.log(section("⚡ Development Tools:"));
236
252
  console.log(line("tinker", "Start the interactive Tinker REPL"));
237
- console.log(line("build", "Build the application for production\n"));
253
+ console.log(line("serve [entry]", "Watch files and restart app on changes"));
254
+ console.log(line("build", "Build the application for production"));
255
+ console.log(line("key:generate [name] [show]", "Random secret → .env (default JWT_SECRET); name=env key, show=print only") + "\n");
238
256
  console.log(section("⏰ Schedule Commands:"));
239
257
  console.log(line("schedule:run", "Run scheduled tasks (runs continuously)"));
240
258
  console.log(line("schedule:list", "List all scheduled tasks\n"));
@@ -126,6 +126,9 @@ export declare class Tinker {
126
126
  */
127
127
  private exit;
128
128
  }
129
- declare const tinker: Tinker;
130
- export { tinker };
129
+ /**
130
+ * Lazily construct Tinker so importing the artisan kernel does not attach
131
+ * readline to stdin/stdout (which felt like Tinker “running” for every command).
132
+ */
133
+ export declare function getTinker(config?: TinkerConfig): Tinker;
131
134
  //# sourceMappingURL=Tinker.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tinker.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Command-Line/NodeTinker/Tinker.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,YAAiB;IAsBrC;;OAEG;IACH,OAAO,CAAC,YAAY;IAiEpB;;OAEG;YACW,oBAAoB;IAyFlC;;OAEG;YACW,UAAU;IAgIxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;YACW,WAAW;IA+CzB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4ErB;;OAEG;IACH,OAAO,CAAC,6BAA6B;IASrC;;OAEG;YACW,WAAW;IAiDzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2CxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqGpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmFpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmCpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;OAEG;IACU,KAAK;IAQlB;;OAEG;IACH,OAAO,CAAC,IAAI;CAKb;AAED,QAAA,MAAM,MAAM,QAEV,CAAC;AAEH,OAAO,EAAC,MAAM,EAAC,CAAA"}
1
+ {"version":3,"file":"Tinker.d.ts","sourceRoot":"","sources":["../../../../jcc-express-mvc/lib/Command-Line/NodeTinker/Tinker.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,qBAAa,MAAM;IACjB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,OAAO,CAAgB;IAC/B,OAAO,CAAC,eAAe,CAAc;IACrC,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,QAAQ,CAAS;gBAEb,MAAM,GAAE,YAAiB;IAsBrC;;OAEG;IACH,OAAO,CAAC,YAAY;IAiEpB;;OAEG;YACW,oBAAoB;IAyFlC;;OAEG;YACW,UAAU;IAgIxB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAkC1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAmCrB;;OAEG;IACH,OAAO,CAAC,aAAa;IAsBrB;;OAEG;YACW,WAAW;IA+CzB;;OAEG;IACH,OAAO,CAAC,aAAa;IA4ErB;;OAEG;IACH,OAAO,CAAC,6BAA6B;IASrC;;OAEG;YACW,WAAW;IAiDzB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA2CxB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2BvB;;OAEG;IACH,OAAO,CAAC,YAAY;IAqGpB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmFpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,OAAO,CAAC,YAAY;IAOpB;;OAEG;IACH,OAAO,CAAC,WAAW;IAcnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAYnB;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB;;OAEG;IACH,OAAO,CAAC,UAAU;IAmBlB;;OAEG;IACH,OAAO,CAAC,aAAa;IAmBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAa1B;;OAEG;IACH,OAAO,CAAC,aAAa;IAsCrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAmCpB;;OAEG;IACH,OAAO,CAAC,QAAQ;IAsBhB;;OAEG;IACU,KAAK;IAQlB;;OAEG;IACH,OAAO,CAAC,IAAI;CAKb;AAID;;;GAGG;AACH,wBAAgB,SAAS,CAAC,MAAM,GAAE,YAAiB,GAAG,MAAM,CAK3D"}
@@ -36,7 +36,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
36
36
  return (mod && mod.__esModule) ? mod : { "default": mod };
37
37
  };
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.tinker = exports.Tinker = void 0;
39
+ exports.Tinker = void 0;
40
+ exports.getTinker = getTinker;
40
41
  const readline_1 = require("readline");
41
42
  const util_1 = require("util");
42
43
  const vm = __importStar(require("vm"));
@@ -1097,5 +1098,14 @@ class Tinker {
1097
1098
  }
1098
1099
  }
1099
1100
  exports.Tinker = Tinker;
1100
- const tinker = new Tinker({});
1101
- exports.tinker = tinker;
1101
+ let tinkerInstance = null;
1102
+ /**
1103
+ * Lazily construct Tinker so importing the artisan kernel does not attach
1104
+ * readline to stdin/stdout (which felt like Tinker “running” for every command).
1105
+ */
1106
+ function getTinker(config = {}) {
1107
+ if (!tinkerInstance) {
1108
+ tinkerInstance = new Tinker(config);
1109
+ }
1110
+ return tinkerInstance;
1111
+ }
@@ -0,0 +1,29 @@
1
+ export declare class WatchCommand {
2
+ private readonly rootPath;
3
+ private readonly ignoredDirs;
4
+ private readonly defaultWatchTargets;
5
+ private readonly rootFilesToWatch;
6
+ private watchers;
7
+ private child;
8
+ private restartTimer;
9
+ private isRestarting;
10
+ private suppressNextExitLog;
11
+ private pendingChanges;
12
+ private lastRestartAt;
13
+ private readonly minRestartGapMs;
14
+ private entryFile;
15
+ run(entryFile?: string): Promise<void>;
16
+ private refreshWatchers;
17
+ private collectWatchDirectories;
18
+ private walkDirectories;
19
+ private onFileChanged;
20
+ private shouldIgnore;
21
+ private startServer;
22
+ private restartServer;
23
+ private stopServer;
24
+ private closeWatchers;
25
+ private installSignalHandlers;
26
+ private renderServeHeader;
27
+ private clearTerminal;
28
+ }
29
+ //# sourceMappingURL=WatchCommand.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WatchCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/WatchCommand.ts"],"names":[],"mappings":"AAOA,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAQzB;IACH,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CASlC;IACF,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAqB;IAEtD,OAAO,CAAC,QAAQ,CAAsB;IACtC,OAAO,CAAC,KAAK,CAA6B;IAC1C,OAAO,CAAC,YAAY,CAA+B;IACnD,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,mBAAmB,CAAS;IACpC,OAAO,CAAC,cAAc,CAAqB;IAC3C,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,SAAS,CAAe;IAE1B,GAAG,CAAC,SAAS,SAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IAcjD,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,uBAAuB;IAkB/B,OAAO,CAAC,eAAe;IAoBvB,OAAO,CAAC,aAAa;IAarB,OAAO,CAAC,YAAY;IAepB,OAAO,CAAC,WAAW;IAmBnB,OAAO,CAAC,aAAa;IA8BrB,OAAO,CAAC,UAAU;IAWlB,OAAO,CAAC,aAAa;IAKrB,OAAO,CAAC,qBAAqB;IAW7B,OAAO,CAAC,iBAAiB;IAWzB,OAAO,CAAC,aAAa;CAQtB"}