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.
- package/Core/index.d.ts +4 -0
- package/Core/index.d.ts.map +1 -1
- package/Core/index.js +5 -0
- package/__tests__/Job.test.d.ts +2 -0
- package/__tests__/Job.test.d.ts.map +1 -0
- package/__tests__/Job.test.js +205 -0
- package/__tests__/MySqlSchemaBlueprint.test.d.ts +2 -0
- package/__tests__/MySqlSchemaBlueprint.test.d.ts.map +1 -0
- package/__tests__/MySqlSchemaBlueprint.test.js +55 -0
- package/__tests__/PostgresTranslator.test.d.ts +2 -0
- package/__tests__/PostgresTranslator.test.d.ts.map +1 -0
- package/__tests__/PostgresTranslator.test.js +82 -0
- package/__tests__/SQLiteTranslator.test.d.ts +2 -0
- package/__tests__/SQLiteTranslator.test.d.ts.map +1 -0
- package/__tests__/SQLiteTranslator.test.js +125 -0
- package/__tests__/SchemaAlterBlueprint.test.d.ts +2 -0
- package/__tests__/SchemaAlterBlueprint.test.d.ts.map +1 -0
- package/__tests__/SchemaAlterBlueprint.test.js +35 -0
- package/global.d.ts +3 -1
- package/index.d.ts +28 -3
- package/index.d.ts.map +1 -1
- package/index.js +33 -75
- package/lib/Application/Application.d.ts.map +1 -1
- package/lib/Application/Application.js +2 -2
- package/lib/Application/ApplicationBuilder.d.ts.map +1 -1
- package/lib/Application/ApplicationBuilder.js +22 -11
- package/lib/Auth/AuthMiddleware.d.ts.map +1 -1
- package/lib/Auth/AuthMiddleware.js +29 -12
- package/lib/Auth/index.d.ts +17 -3
- package/lib/Auth/index.d.ts.map +1 -1
- package/lib/Auth/index.js +128 -26
- package/lib/Auth/loginRateLimit.d.ts +6 -0
- package/lib/Auth/loginRateLimit.d.ts.map +1 -0
- package/lib/Auth/loginRateLimit.js +25 -0
- package/lib/Auth/refreshTokenStore.d.ts +24 -0
- package/lib/Auth/refreshTokenStore.d.ts.map +1 -0
- package/lib/Auth/refreshTokenStore.js +46 -0
- package/lib/Command-Line/DBCommand.d.ts.map +1 -1
- package/lib/Command-Line/DBCommand.js +9 -3
- package/lib/Command-Line/KeyGenerateCommand.d.ts +6 -0
- package/lib/Command-Line/KeyGenerateCommand.d.ts.map +1 -0
- package/lib/Command-Line/KeyGenerateCommand.js +47 -0
- package/lib/Command-Line/MakeCommand.d.ts +1 -0
- package/lib/Command-Line/MakeCommand.d.ts.map +1 -1
- package/lib/Command-Line/MakeCommand.js +36 -32
- package/lib/Command-Line/NodeArtisanCommand.d.ts +2 -0
- package/lib/Command-Line/NodeArtisanCommand.d.ts.map +1 -1
- package/lib/Command-Line/NodeArtisanCommand.js +24 -6
- package/lib/Command-Line/NodeTinker/Tinker.d.ts +5 -2
- package/lib/Command-Line/NodeTinker/Tinker.d.ts.map +1 -1
- package/lib/Command-Line/NodeTinker/Tinker.js +13 -3
- package/lib/Command-Line/WatchCommand.d.ts +29 -0
- package/lib/Command-Line/WatchCommand.d.ts.map +1 -0
- package/lib/Command-Line/WatchCommand.js +234 -0
- package/lib/Command-Line/files/Models.d.ts.map +1 -1
- package/lib/Command-Line/files/Models.js +67 -0
- package/lib/Console/Command.d.ts +18 -0
- package/lib/Console/Command.d.ts.map +1 -1
- package/lib/Console/Command.js +29 -0
- package/lib/Container/index.d.ts.map +1 -1
- package/lib/Container/index.js +22 -8
- package/lib/Database/Database.d.ts +21 -0
- package/lib/Database/Database.d.ts.map +1 -0
- package/lib/Database/Database.js +55 -0
- package/lib/Database/DatabaseServiceProvider.d.ts +22 -0
- package/lib/Database/DatabaseServiceProvider.d.ts.map +1 -0
- package/lib/Database/DatabaseServiceProvider.js +50 -0
- package/lib/Database/Drivers/KnexDriver.d.ts +13 -0
- package/lib/Database/Drivers/KnexDriver.d.ts.map +1 -0
- package/lib/Database/Drivers/KnexDriver.js +29 -0
- package/lib/Database/Drivers/MongooseDriver.d.ts +20 -0
- package/lib/Database/Drivers/MongooseDriver.d.ts.map +1 -0
- package/lib/Database/Drivers/MongooseDriver.js +57 -0
- package/lib/Database/Drivers/SequelizeDriver.d.ts +24 -0
- package/lib/Database/Drivers/SequelizeDriver.d.ts.map +1 -0
- package/lib/Database/Drivers/SequelizeDriver.js +82 -0
- package/lib/Database/index.d.ts +7 -0
- package/lib/Database/index.d.ts.map +1 -0
- package/lib/Database/index.js +11 -0
- package/lib/Database/interface.d.ts +14 -0
- package/lib/Database/interface.d.ts.map +1 -0
- package/lib/Database/interface.js +2 -0
- package/lib/Database/type.d.ts +18 -0
- package/lib/Database/type.d.ts.map +1 -0
- package/lib/Database/type.js +2 -0
- package/lib/Error/DisplayErrorCode.d.ts.map +1 -1
- package/lib/Error/DisplayErrorCode.js +27 -17
- package/lib/Error/MissMatchTokenException/index.d.ts +4 -0
- package/lib/Error/MissMatchTokenException/index.d.ts.map +1 -0
- package/lib/Error/MissMatchTokenException/index.js +9 -0
- package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts +9 -0
- package/lib/Error/SocialiteAuthError/SocialiteAuthError.d.ts.map +1 -0
- package/lib/Error/SocialiteAuthError/SocialiteAuthError.js +17 -0
- package/lib/Global/helpers.d.ts.map +1 -1
- package/lib/Global/helpers.js +7 -6
- package/lib/Http/index.d.ts +3 -1
- package/lib/Http/index.d.ts.map +1 -1
- package/lib/Http/index.js +26 -5
- package/lib/Interface/index.d.ts +17 -3
- package/lib/Interface/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Builder.d.ts +12 -1
- package/lib/Jcc-eloquent/lib/Builder.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Builder.js +119 -5
- package/lib/Jcc-eloquent/lib/Database/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Database/index.js +2 -1
- package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts +37 -2
- package/lib/Jcc-eloquent/lib/Interfaces/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Migration.d.ts +6 -0
- package/lib/Jcc-eloquent/lib/Migration.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Migration.js +24 -2
- package/lib/Jcc-eloquent/lib/Model.d.ts +24 -7
- package/lib/Jcc-eloquent/lib/Model.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Model.js +35 -2
- package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts +2 -1
- package/lib/Jcc-eloquent/lib/QueryBuilder.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/QueryBuilder.js +10 -1
- package/lib/Jcc-eloquent/lib/Rollback.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Rollback.js +9 -2
- package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/BaseSchemaEntity/index.js +3 -3
- package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts +6 -2
- package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/BluePrint/index.js +41 -12
- package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/Translator/Sqlite.js +21 -3
- package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts +1 -0
- package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/Translator/postgres.js +70 -14
- package/lib/Jcc-eloquent/lib/Schema/index.d.ts +12 -0
- package/lib/Jcc-eloquent/lib/Schema/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/Schema/index.js +27 -6
- package/lib/Jcc-eloquent/lib/utils/index.d.ts +13 -0
- package/lib/Jcc-eloquent/lib/utils/index.d.ts.map +1 -1
- package/lib/Jcc-eloquent/lib/utils/index.js +62 -0
- package/lib/Middleware/index.d.ts +1 -0
- package/lib/Middleware/index.d.ts.map +1 -1
- package/lib/Middleware/index.js +20 -8
- package/lib/Model/Sequelize.d.ts +3 -0
- package/lib/Model/Sequelize.d.ts.map +1 -0
- package/lib/Model/Sequelize.js +6 -0
- package/lib/Providers/RouteServiceProvider.d.ts.map +1 -1
- package/lib/Providers/RouteServiceProvider.js +3 -0
- package/lib/Providers/SessionServiceProvider.d.ts +12 -0
- package/lib/Providers/SessionServiceProvider.d.ts.map +1 -0
- package/lib/Providers/SessionServiceProvider.js +47 -0
- package/lib/Queue/Controllers/QueueControllers.d.ts +31 -0
- package/lib/Queue/Controllers/QueueControllers.d.ts.map +1 -0
- package/lib/Queue/Controllers/QueueControllers.js +126 -0
- package/lib/Queue/Drivers/DatabaseDriver.d.ts +6 -1
- package/lib/Queue/Drivers/DatabaseDriver.d.ts.map +1 -1
- package/lib/Queue/Drivers/DatabaseDriver.js +76 -21
- package/lib/Queue/Drivers/MemoryDriver.d.ts +17 -6
- package/lib/Queue/Drivers/MemoryDriver.d.ts.map +1 -1
- package/lib/Queue/Drivers/MemoryDriver.js +323 -14
- package/lib/Queue/Drivers/RedisDriver.d.ts +48 -0
- package/lib/Queue/Drivers/RedisDriver.d.ts.map +1 -0
- package/lib/Queue/Drivers/RedisDriver.js +533 -0
- package/lib/Queue/Job.d.ts +8 -0
- package/lib/Queue/Job.d.ts.map +1 -1
- package/lib/Queue/Job.js +25 -1
- package/lib/Queue/JobsLogger.d.ts.map +1 -1
- package/lib/Queue/JobsLogger.js +6 -3
- package/lib/Queue/Queue.d.ts +17 -0
- package/lib/Queue/Queue.d.ts.map +1 -1
- package/lib/Queue/Queue.js +146 -11
- package/lib/Queue/QueueServiceProvider.d.ts +6 -0
- package/lib/Queue/QueueServiceProvider.d.ts.map +1 -0
- package/lib/Queue/QueueServiceProvider.js +18 -0
- package/lib/Queue/Route/web.d.ts +2 -0
- package/lib/Queue/Route/web.d.ts.map +1 -0
- package/lib/Queue/Route/web.js +16 -0
- package/lib/Queue/index.d.ts +1 -0
- package/lib/Queue/index.d.ts.map +1 -1
- package/lib/Queue/index.js +3 -0
- package/lib/Queue/interface.d.ts +25 -0
- package/lib/Queue/interface.d.ts.map +1 -1
- package/lib/Queue/middleware/queueDashboardGuard.d.ts +7 -0
- package/lib/Queue/middleware/queueDashboardGuard.d.ts.map +1 -0
- package/lib/Queue/middleware/queueDashboardGuard.js +43 -0
- package/lib/Queue/type.d.ts +12 -1
- package/lib/Queue/type.d.ts.map +1 -1
- package/lib/Response/index.d.ts.map +1 -1
- package/lib/Response/index.js +6 -1
- package/lib/Routes/Route.d.ts +2 -2
- package/lib/Routes/Route.d.ts.map +1 -1
- package/lib/Routes/RouteBuilder.d.ts +2 -2
- package/lib/Routes/RouteBuilder.d.ts.map +1 -1
- package/lib/Security/CsrfMiddleware.d.ts +37 -0
- package/lib/Security/CsrfMiddleware.d.ts.map +1 -0
- package/lib/Security/CsrfMiddleware.js +85 -0
- package/lib/Security/MethodSpoofingMiddleware.d.ts +36 -0
- package/lib/Security/MethodSpoofingMiddleware.d.ts.map +1 -0
- package/lib/Security/MethodSpoofingMiddleware.js +51 -0
- package/lib/Security/index.d.ts +5 -0
- package/lib/Security/index.d.ts.map +1 -0
- package/lib/Security/index.js +7 -0
- package/lib/Session/DatabaseSession.d.ts +9 -3
- package/lib/Session/DatabaseSession.d.ts.map +1 -1
- package/lib/Session/DatabaseSession.js +38 -36
- package/lib/Session/ExpressJccSession.d.ts +23 -0
- package/lib/Session/ExpressJccSession.d.ts.map +1 -0
- package/lib/Session/ExpressJccSession.js +110 -0
- package/lib/Session/RedisSession.d.ts +2 -2
- package/lib/Session/RedisSession.d.ts.map +1 -1
- package/lib/Session/RedisSession.js +19 -5
- package/lib/Session/SessionManager.d.ts +18 -4
- package/lib/Session/SessionManager.d.ts.map +1 -1
- package/lib/Session/SessionManager.js +53 -17
- package/lib/Socialite/AbstractProvider.d.ts +60 -0
- package/lib/Socialite/AbstractProvider.d.ts.map +1 -0
- package/lib/Socialite/AbstractProvider.js +136 -0
- package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/facebook/FacebookDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/facebook/FacebookDriver.js +40 -0
- package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/facebook/FacebookProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/facebook/FacebookProvider.js +28 -0
- package/lib/Socialite/Drivers/github/GitHubDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/github/GitHubDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/github/GitHubDriver.js +54 -0
- package/lib/Socialite/Drivers/github/GitHubProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/github/GitHubProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/github/GitHubProvider.js +28 -0
- package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts +10 -0
- package/lib/Socialite/Drivers/gitlab/GitLabDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/gitlab/GitLabDriver.js +37 -0
- package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/gitlab/GitLabProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/gitlab/GitLabProvider.js +28 -0
- package/lib/Socialite/Drivers/google/GoogleDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/google/GoogleDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/google/GoogleDriver.js +39 -0
- package/lib/Socialite/Drivers/google/GoogleProvider.d.ts +15 -0
- package/lib/Socialite/Drivers/google/GoogleProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/google/GoogleProvider.js +28 -0
- package/lib/Socialite/Drivers/slack/SlackDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/slack/SlackDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/slack/SlackDriver.js +41 -0
- package/lib/Socialite/Drivers/slack/SlackProvider.d.ts +16 -0
- package/lib/Socialite/Drivers/slack/SlackProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/slack/SlackProvider.js +37 -0
- package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts +9 -0
- package/lib/Socialite/Drivers/twitter/TwitterDriver.d.ts.map +1 -0
- package/lib/Socialite/Drivers/twitter/TwitterDriver.js +57 -0
- package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts +16 -0
- package/lib/Socialite/Drivers/twitter/TwitterProvider.d.ts.map +1 -0
- package/lib/Socialite/Drivers/twitter/TwitterProvider.js +38 -0
- package/lib/Socialite/SocialUser.d.ts +42 -0
- package/lib/Socialite/SocialUser.d.ts.map +1 -0
- package/lib/Socialite/SocialUser.js +116 -0
- package/lib/Socialite/Socialite.d.ts +13 -0
- package/lib/Socialite/Socialite.d.ts.map +1 -0
- package/lib/Socialite/Socialite.js +41 -0
- package/lib/Socialite/SocialiteProvider.d.ts +9 -0
- package/lib/Socialite/SocialiteProvider.d.ts.map +1 -0
- package/lib/Socialite/SocialiteProvider.js +15 -0
- package/lib/Socialite/config.d.ts +7 -0
- package/lib/Socialite/config.d.ts.map +1 -0
- package/lib/Socialite/config.js +44 -0
- package/lib/Socialite/constant.d.ts +18 -0
- package/lib/Socialite/constant.d.ts.map +1 -0
- package/lib/Socialite/constant.js +20 -0
- package/lib/Socialite/index.d.ts +13 -0
- package/lib/Socialite/index.d.ts.map +1 -0
- package/lib/Socialite/index.js +25 -0
- package/lib/Socialite/types.d.ts +13 -0
- package/lib/Socialite/types.d.ts.map +1 -0
- package/lib/Socialite/types.js +2 -0
- package/lib/Templating-engine/benchmark.d.ts +7 -0
- package/lib/Templating-engine/benchmark.d.ts.map +1 -0
- package/lib/Templating-engine/benchmark.js +44 -0
- package/lib/Templating-engine/engineHelper.d.ts +37 -8
- package/lib/Templating-engine/engineHelper.d.ts.map +1 -1
- package/lib/Templating-engine/engineHelper.js +203 -26
- package/lib/Templating-engine/errors.d.ts +15 -0
- package/lib/Templating-engine/errors.d.ts.map +1 -0
- package/lib/Templating-engine/errors.js +35 -0
- package/lib/Templating-engine/expressions.d.ts +24 -0
- package/lib/Templating-engine/expressions.d.ts.map +1 -1
- package/lib/Templating-engine/expressions.js +27 -5
- package/lib/Templating-engine/index.d.ts +87 -17
- package/lib/Templating-engine/index.d.ts.map +1 -1
- package/lib/Templating-engine/index.js +701 -96
- package/lib/Templating-engine/plugins.d.ts +30 -0
- package/lib/Templating-engine/plugins.d.ts.map +1 -0
- package/lib/Templating-engine/plugins.js +47 -0
- package/lib/Type/index.d.ts +1 -0
- package/lib/Type/index.d.ts.map +1 -1
- package/lib/Validation/Validator/CustomValidation.d.ts.map +1 -1
- package/lib/Validation/Validator/CustomValidation.js +2 -2
- package/lib/Validation/Validator/helper.d.ts.map +1 -1
- package/lib/Validation/Validator/helper.js +8 -1
- package/lib/util/index.d.ts +42 -1
- package/lib/util/index.d.ts.map +1 -1
- package/lib/util/index.js +154 -17
- 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;
|
|
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(
|
|
19
|
+
return require(base);
|
|
19
20
|
}
|
|
20
|
-
catch
|
|
21
|
-
|
|
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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MakeCommand.d.ts","sourceRoot":"","sources":["../../../jcc-express-mvc/lib/Command-Line/MakeCommand.ts"],"names":[],"mappings":"
|
|
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}.
|
|
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}.
|
|
52
|
+
return console.log(`${controllerName} added successfully [${webControllerPath}/${controllerName}.${this.fileExtension}]`); // Log success message
|
|
49
53
|
}
|
|
50
|
-
fs_1.default.writeFileSync(`${webControllerPath}/${controllerName}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
103
|
-
return console.log(`${modelName} model added successfully [${modelPath}/${modelName}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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.
|
|
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.
|
|
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.
|
|
263
|
-
fs_1.default.writeFileSync(`${migrationPath}/${(0, utils_1.formatDate)()}__failed_jobs_table.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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}.
|
|
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.
|
|
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.
|
|
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;
|
|
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("
|
|
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.
|
|
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("
|
|
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
|
-
|
|
130
|
-
|
|
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;
|
|
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.
|
|
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
|
-
|
|
1101
|
-
|
|
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"}
|