@tyravel/cli 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (129) hide show
  1. package/dist/bin/tyravel.d.ts +3 -0
  2. package/dist/bin/tyravel.d.ts.map +1 -0
  3. package/dist/bin/tyravel.js +5 -0
  4. package/dist/bin/tyravel.js.map +1 -0
  5. package/dist/command.d.ts +13 -0
  6. package/dist/command.d.ts.map +1 -0
  7. package/dist/command.js +11 -0
  8. package/dist/command.js.map +1 -0
  9. package/dist/commands/auth-install.d.ts +8 -0
  10. package/dist/commands/auth-install.d.ts.map +1 -0
  11. package/dist/commands/auth-install.js +39 -0
  12. package/dist/commands/auth-install.js.map +1 -0
  13. package/dist/commands/make-controller.d.ts +8 -0
  14. package/dist/commands/make-controller.d.ts.map +1 -0
  15. package/dist/commands/make-controller.js +31 -0
  16. package/dist/commands/make-controller.js.map +1 -0
  17. package/dist/commands/make-event.d.ts +8 -0
  18. package/dist/commands/make-event.d.ts.map +1 -0
  19. package/dist/commands/make-event.js +31 -0
  20. package/dist/commands/make-event.js.map +1 -0
  21. package/dist/commands/make-job.d.ts +8 -0
  22. package/dist/commands/make-job.d.ts.map +1 -0
  23. package/dist/commands/make-job.js +32 -0
  24. package/dist/commands/make-job.js.map +1 -0
  25. package/dist/commands/make-listener.d.ts +8 -0
  26. package/dist/commands/make-listener.d.ts.map +1 -0
  27. package/dist/commands/make-listener.js +32 -0
  28. package/dist/commands/make-listener.js.map +1 -0
  29. package/dist/commands/make-migration.d.ts +8 -0
  30. package/dist/commands/make-migration.d.ts.map +1 -0
  31. package/dist/commands/make-migration.js +50 -0
  32. package/dist/commands/make-migration.js.map +1 -0
  33. package/dist/commands/make-model.d.ts +8 -0
  34. package/dist/commands/make-model.d.ts.map +1 -0
  35. package/dist/commands/make-model.js +31 -0
  36. package/dist/commands/make-model.js.map +1 -0
  37. package/dist/commands/make-provider.d.ts +8 -0
  38. package/dist/commands/make-provider.d.ts.map +1 -0
  39. package/dist/commands/make-provider.js +32 -0
  40. package/dist/commands/make-provider.js.map +1 -0
  41. package/dist/commands/make-subscriber.d.ts +8 -0
  42. package/dist/commands/make-subscriber.d.ts.map +1 -0
  43. package/dist/commands/make-subscriber.js +30 -0
  44. package/dist/commands/make-subscriber.js.map +1 -0
  45. package/dist/commands/make-test.d.ts +8 -0
  46. package/dist/commands/make-test.d.ts.map +1 -0
  47. package/dist/commands/make-test.js +24 -0
  48. package/dist/commands/make-test.js.map +1 -0
  49. package/dist/commands/make-view.d.ts +8 -0
  50. package/dist/commands/make-view.d.ts.map +1 -0
  51. package/dist/commands/make-view.js +36 -0
  52. package/dist/commands/make-view.js.map +1 -0
  53. package/dist/commands/migrate.d.ts +8 -0
  54. package/dist/commands/migrate.d.ts.map +1 -0
  55. package/dist/commands/migrate.js +32 -0
  56. package/dist/commands/migrate.js.map +1 -0
  57. package/dist/commands/new.d.ts +8 -0
  58. package/dist/commands/new.d.ts.map +1 -0
  59. package/dist/commands/new.js +57 -0
  60. package/dist/commands/new.js.map +1 -0
  61. package/dist/commands/new.test.d.ts +2 -0
  62. package/dist/commands/new.test.d.ts.map +1 -0
  63. package/dist/commands/new.test.js +28 -0
  64. package/dist/commands/new.test.js.map +1 -0
  65. package/dist/commands/queue-failed.d.ts +20 -0
  66. package/dist/commands/queue-failed.d.ts.map +1 -0
  67. package/dist/commands/queue-failed.js +143 -0
  68. package/dist/commands/queue-failed.js.map +1 -0
  69. package/dist/commands/queue-table.d.ts +8 -0
  70. package/dist/commands/queue-table.d.ts.map +1 -0
  71. package/dist/commands/queue-table.js +38 -0
  72. package/dist/commands/queue-table.js.map +1 -0
  73. package/dist/commands/queue-work.d.ts +8 -0
  74. package/dist/commands/queue-work.d.ts.map +1 -0
  75. package/dist/commands/queue-work.js +55 -0
  76. package/dist/commands/queue-work.js.map +1 -0
  77. package/dist/commands/serve.d.ts +8 -0
  78. package/dist/commands/serve.d.ts.map +1 -0
  79. package/dist/commands/serve.js +77 -0
  80. package/dist/commands/serve.js.map +1 -0
  81. package/dist/commands/version.d.ts +7 -0
  82. package/dist/commands/version.d.ts.map +1 -0
  83. package/dist/commands/version.js +16 -0
  84. package/dist/commands/version.js.map +1 -0
  85. package/dist/console.d.ts +17 -0
  86. package/dist/console.d.ts.map +1 -0
  87. package/dist/console.js +114 -0
  88. package/dist/console.js.map +1 -0
  89. package/dist/console.test.d.ts +2 -0
  90. package/dist/console.test.d.ts.map +1 -0
  91. package/dist/console.test.js +42 -0
  92. package/dist/console.test.js.map +1 -0
  93. package/dist/index.d.ts +7 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +5 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/kernel.d.ts +3 -0
  98. package/dist/kernel.d.ts.map +1 -0
  99. package/dist/kernel.js +44 -0
  100. package/dist/kernel.js.map +1 -0
  101. package/dist/project.d.ts +12 -0
  102. package/dist/project.d.ts.map +1 -0
  103. package/dist/project.js +34 -0
  104. package/dist/project.js.map +1 -0
  105. package/dist/project.test.d.ts +2 -0
  106. package/dist/project.test.d.ts.map +1 -0
  107. package/dist/project.test.js +24 -0
  108. package/dist/project.test.js.map +1 -0
  109. package/dist/stubs-ecosystem.d.ts +5 -0
  110. package/dist/stubs-ecosystem.d.ts.map +1 -0
  111. package/dist/stubs-ecosystem.js +79 -0
  112. package/dist/stubs-ecosystem.js.map +1 -0
  113. package/dist/stubs-testing.d.ts +3 -0
  114. package/dist/stubs-testing.d.ts.map +1 -0
  115. package/dist/stubs-testing.js +33 -0
  116. package/dist/stubs-testing.js.map +1 -0
  117. package/dist/stubs.d.ts +35 -0
  118. package/dist/stubs.d.ts.map +1 -0
  119. package/dist/stubs.js +753 -0
  120. package/dist/stubs.js.map +1 -0
  121. package/dist/utils.d.ts +9 -0
  122. package/dist/utils.d.ts.map +1 -0
  123. package/dist/utils.js +70 -0
  124. package/dist/utils.js.map +1 -0
  125. package/dist/utils.test.d.ts +2 -0
  126. package/dist/utils.test.d.ts.map +1 -0
  127. package/dist/utils.test.js +13 -0
  128. package/dist/utils.test.js.map +1 -0
  129. package/package.json +42 -0
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=tyravel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tyravel.d.ts","sourceRoot":"","sources":["../../src/bin/tyravel.ts"],"names":[],"mappings":""}
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { createKernel } from '../kernel.js';
3
+ const code = await createKernel().run(process.argv.slice(2));
4
+ process.exit(code);
5
+ //# sourceMappingURL=tyravel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tyravel.js","sourceRoot":"","sources":["../../src/bin/tyravel.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC7D,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC"}
@@ -0,0 +1,13 @@
1
+ export interface CommandDefinition {
2
+ name: string;
3
+ description: string;
4
+ usage?: string;
5
+ }
6
+ export declare abstract class Command {
7
+ abstract readonly name: string;
8
+ abstract readonly description: string;
9
+ readonly usage?: string;
10
+ abstract handle(args: string[]): Promise<number>;
11
+ definition(): CommandDefinition;
12
+ }
13
+ //# sourceMappingURL=command.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.d.ts","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,8BAAsB,OAAO;IAC3B,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAExB,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAEhD,UAAU,IAAI,iBAAiB;CAOhC"}
@@ -0,0 +1,11 @@
1
+ export class Command {
2
+ usage;
3
+ definition() {
4
+ return {
5
+ name: this.name,
6
+ description: this.description,
7
+ usage: this.usage,
8
+ };
9
+ }
10
+ }
11
+ //# sourceMappingURL=command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command.js","sourceRoot":"","sources":["../src/command.ts"],"names":[],"mappings":"AAMA,MAAM,OAAgB,OAAO;IAGlB,KAAK,CAAU;IAIxB,UAAU;QACR,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class AuthInstallCommand extends Command {
3
+ readonly name = "auth:install";
4
+ readonly description = "Scaffold auth (session + API tokens, policies, password reset, OAuth)";
5
+ readonly usage = "tyravel auth:install";
6
+ handle(): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=auth-install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-install.d.ts","sourceRoot":"","sources":["../../src/commands/auth-install.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAkBxC,qBAAa,kBAAmB,SAAQ,OAAO;IAC7C,SAAkB,IAAI,kBAAkB;IACxC,SAAkB,WAAW,2EAC6C;IAC1E,SAAkB,KAAK,0BAA0B;IAE3C,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;CA+ChC"}
@@ -0,0 +1,39 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { appServiceProviderWithAuth, authConfig, authController, authRoutes, mainEntryWithAuth, oauthAccountsMigration, passwordResetTokensMigration, personalAccessTokensMigration, postPolicyStub, sessionsTableMigration, userModel, usersTableMigration, } from '../stubs.js';
5
+ import { projectPath, writeFile } from '../utils.js';
6
+ export class AuthInstallCommand extends Command {
7
+ name = 'auth:install';
8
+ description = 'Scaffold auth (session + API tokens, policies, password reset, OAuth)';
9
+ usage = 'tyravel auth:install';
10
+ async handle() {
11
+ const root = requireProjectRoot();
12
+ const configPath = projectPath(root, 'config/auth.ts');
13
+ if (existsSync(configPath)) {
14
+ console.error('config/auth.ts already exists.');
15
+ return 1;
16
+ }
17
+ writeFile(configPath, authConfig());
18
+ writeFile(projectPath(root, 'src/models/User.ts'), userModel());
19
+ writeFile(projectPath(root, 'src/controllers/AuthController.ts'), authController());
20
+ writeFile(projectPath(root, 'src/routes/auth.ts'), authRoutes());
21
+ writeFile(projectPath(root, 'src/policies/PostPolicy.ts'), postPolicyStub());
22
+ writeFile(projectPath(root, 'src/providers/app-service-provider.ts'), appServiceProviderWithAuth());
23
+ writeFile(projectPath(root, 'database/migrations/20260101000000_create_users_table.ts'), usersTableMigration());
24
+ writeFile(projectPath(root, 'database/migrations/20260101000001_create_sessions_table.ts'), sessionsTableMigration());
25
+ writeFile(projectPath(root, 'database/migrations/20260101000002_create_password_reset_tokens_table.ts'), passwordResetTokensMigration());
26
+ writeFile(projectPath(root, 'database/migrations/20260101000003_create_personal_access_tokens_table.ts'), personalAccessTokensMigration());
27
+ writeFile(projectPath(root, 'database/migrations/20260101000004_create_oauth_accounts_table.ts'), oauthAccountsMigration());
28
+ writeFile(projectPath(root, 'src/main.ts'), mainEntryWithAuth());
29
+ console.log('Auth scaffolding installed.');
30
+ console.log('');
31
+ console.log('Next steps:');
32
+ console.log(' tyravel migrate');
33
+ console.log(' POST /login | POST /tokens (session) | Authorization: Bearer <token> (api guard)');
34
+ console.log(' POST /forgot-password | POST /reset-password');
35
+ console.log(' GET /auth/github/redirect | GET /auth/github/callback');
36
+ return 0;
37
+ }
38
+ }
39
+ //# sourceMappingURL=auth-install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth-install.js","sourceRoot":"","sources":["../../src/commands/auth-install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,0BAA0B,EAC1B,UAAU,EACV,cAAc,EACd,UAAU,EACV,iBAAiB,EACjB,sBAAsB,EACtB,4BAA4B,EAC5B,6BAA6B,EAC7B,cAAc,EACd,sBAAsB,EACtB,SAAS,EACT,mBAAmB,GACpB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAErD,MAAM,OAAO,kBAAmB,SAAQ,OAAO;IAC3B,IAAI,GAAG,cAAc,CAAC;IACtB,WAAW,GAC3B,uEAAuE,CAAC;IACxD,KAAK,GAAG,sBAAsB,CAAC;IAEjD,KAAK,CAAC,MAAM;QACV,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAElC,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;QACvD,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3B,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,UAAU,EAAE,UAAU,EAAE,CAAC,CAAC;QACpC,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC;QAChE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,mCAAmC,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QACpF,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,oBAAoB,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC;QACjE,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,4BAA4B,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC;QAC7E,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,uCAAuC,CAAC,EAAE,0BAA0B,EAAE,CAAC,CAAC;QACpG,SAAS,CACP,WAAW,CAAC,IAAI,EAAE,0DAA0D,CAAC,EAC7E,mBAAmB,EAAE,CACtB,CAAC;QACF,SAAS,CACP,WAAW,CAAC,IAAI,EAAE,6DAA6D,CAAC,EAChF,sBAAsB,EAAE,CACzB,CAAC;QACF,SAAS,CACP,WAAW,CAAC,IAAI,EAAE,0EAA0E,CAAC,EAC7F,4BAA4B,EAAE,CAC/B,CAAC;QACF,SAAS,CACP,WAAW,CAAC,IAAI,EAAE,2EAA2E,CAAC,EAC9F,6BAA6B,EAAE,CAChC,CAAC;QACF,SAAS,CACP,WAAW,CAAC,IAAI,EAAE,mEAAmE,CAAC,EACtF,sBAAsB,EAAE,CACzB,CAAC;QACF,SAAS,CAAC,WAAW,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;QAEjE,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC3B,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;QACtG,OAAO,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC;QAChE,OAAO,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;QAEzE,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeControllerCommand extends Command {
3
+ readonly name = "make:controller";
4
+ readonly description = "Create a new HTTP controller class";
5
+ readonly usage = "tyravel make:controller <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-controller.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-controller.d.ts","sourceRoot":"","sources":["../../src/commands/make-controller.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,qBAAsB,SAAQ,OAAO;IAChD,SAAkB,IAAI,qBAAqB;IAC3C,SAAkB,WAAW,wCAAwC;IACrE,SAAkB,KAAK,oCAAoC;IAErD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB9C"}
@@ -0,0 +1,31 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { controller } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeControllerCommand extends Command {
7
+ name = 'make:controller';
8
+ description = 'Create a new HTTP controller class';
9
+ usage = 'tyravel make:controller <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Controller name is required.');
15
+ console.error('Usage: tyravel make:controller <Name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const name = toPascalCase(rawName.replace(/Controller$/i, ''));
20
+ const fileName = `${name}Controller.ts`;
21
+ const target = projectPath(root, 'src/controllers', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Controller already exists: src/controllers/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, controller(name));
27
+ console.log(`Controller created: src/controllers/${fileName}`);
28
+ return 0;
29
+ }
30
+ }
31
+ //# sourceMappingURL=make-controller.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-controller.js","sourceRoot":"","sources":["../../src/commands/make-controller.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,qBAAsB,SAAQ,OAAO;IAC9B,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,oCAAoC,CAAC;IACnD,KAAK,GAAG,gCAAgC,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;YACvD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,QAAQ,GAAG,GAAG,IAAI,eAAe,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,QAAQ,CAAC,CAAC;QAE9D,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,8CAA8C,QAAQ,EAAE,CAAC,CAAC;YACxE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,uCAAuC,QAAQ,EAAE,CAAC,CAAC;QAE/D,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeEventCommand extends Command {
3
+ readonly name = "make:event";
4
+ readonly description = "Create a new domain event class";
5
+ readonly usage = "tyravel make:event <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-event.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-event.d.ts","sourceRoot":"","sources":["../../src/commands/make-event.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,SAAkB,IAAI,gBAAgB;IACtC,SAAkB,WAAW,qCAAqC;IAClE,SAAkB,KAAK,+BAA+B;IAEhD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB9C"}
@@ -0,0 +1,31 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { domainEvent } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeEventCommand extends Command {
7
+ name = 'make:event';
8
+ description = 'Create a new domain event class';
9
+ usage = 'tyravel make:event <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Event name is required.');
15
+ console.error('Usage: tyravel make:event <Name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const name = toPascalCase(rawName);
20
+ const fileName = `${name}.ts`;
21
+ const target = projectPath(root, 'src/events', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Event already exists: src/events/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, domainEvent(name));
27
+ console.log(`Event created: src/events/${fileName}`);
28
+ return 0;
29
+ }
30
+ }
31
+ //# sourceMappingURL=make-event.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-event.js","sourceRoot":"","sources":["../../src/commands/make-event.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,gBAAiB,SAAQ,OAAO;IACzB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,iCAAiC,CAAC;IAChD,KAAK,GAAG,2BAA2B,CAAC;IAEtD,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAEzD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;QAErD,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeJobCommand extends Command {
3
+ readonly name = "make:job";
4
+ readonly description = "Create a new queue job class";
5
+ readonly usage = "tyravel make:job <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-job.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-job.d.ts","sourceRoot":"","sources":["../../src/commands/make-job.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,cAAe,SAAQ,OAAO;IACzC,SAAkB,IAAI,cAAc;IACpC,SAAkB,WAAW,kCAAkC;IAC/D,SAAkB,KAAK,6BAA6B;IAE9C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA0B9C"}
@@ -0,0 +1,32 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { job } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeJobCommand extends Command {
7
+ name = 'make:job';
8
+ description = 'Create a new queue job class';
9
+ usage = 'tyravel make:job <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Job name is required.');
15
+ console.error('Usage: tyravel make:job <Name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const name = toPascalCase(rawName);
20
+ const fileName = `${name}.ts`;
21
+ const target = projectPath(root, 'src/jobs', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Job already exists: src/jobs/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, job(name));
27
+ console.log(`Job created: src/jobs/${fileName}`);
28
+ console.log('Register it in AppServiceProvider with jobs.registry.register(...)');
29
+ return 0;
30
+ }
31
+ }
32
+ //# sourceMappingURL=make-job.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-job.js","sourceRoot":"","sources":["../../src/commands/make-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,cAAe,SAAQ,OAAO;IACvB,IAAI,GAAG,UAAU,CAAC;IAClB,WAAW,GAAG,8BAA8B,CAAC;IAC7C,KAAK,GAAG,yBAAyB,CAAC;IAEpD,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACvC,OAAO,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;QAEvD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,gCAAgC,QAAQ,EAAE,CAAC,CAAC;YAC1D,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,yBAAyB,QAAQ,EAAE,CAAC,CAAC;QACjD,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;QAElF,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeListenerCommand extends Command {
3
+ readonly name = "make:listener";
4
+ readonly description = "Create a new event listener class";
5
+ readonly usage = "tyravel make:listener <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-listener.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-listener.d.ts","sourceRoot":"","sources":["../../src/commands/make-listener.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,mBAAoB,SAAQ,OAAO;IAC9C,SAAkB,IAAI,mBAAmB;IACzC,SAAkB,WAAW,uCAAuC;IACpE,SAAkB,KAAK,kCAAkC;IAEnD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA0B9C"}
@@ -0,0 +1,32 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { eventListener } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeListenerCommand extends Command {
7
+ name = 'make:listener';
8
+ description = 'Create a new event listener class';
9
+ usage = 'tyravel make:listener <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Listener name is required.');
15
+ console.error('Usage: tyravel make:listener <Name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const name = toPascalCase(rawName);
20
+ const fileName = `${name}.ts`;
21
+ const target = projectPath(root, 'src/listeners', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Listener already exists: src/listeners/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, eventListener(name));
27
+ console.log(`Listener created: src/listeners/${fileName}`);
28
+ console.log('Register it in config/events.ts or with Events.listen(...)');
29
+ return 0;
30
+ }
31
+ }
32
+ //# sourceMappingURL=make-listener.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-listener.js","sourceRoot":"","sources":["../../src/commands/make-listener.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,mBAAoB,SAAQ,OAAO;IAC5B,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,mCAAmC,CAAC;IAClD,KAAK,GAAG,8BAA8B,CAAC;IAEzD,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,OAAO,CAAC,GAAG,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,4DAA4D,CAAC,CAAC;QAE1E,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeMigrationCommand extends Command {
3
+ readonly name = "make:migration";
4
+ readonly description = "Create a new database migration";
5
+ readonly usage = "tyravel make:migration <name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-migration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-migration.d.ts","sourceRoot":"","sources":["../../src/commands/make-migration.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,oBAAqB,SAAQ,OAAO;IAC/C,SAAkB,IAAI,oBAAoB;IAC1C,SAAkB,WAAW,qCAAqC;IAClE,SAAkB,KAAK,mCAAmC;IAEpD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB9C"}
@@ -0,0 +1,50 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { migration } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeMigrationCommand extends Command {
7
+ name = 'make:migration';
8
+ description = 'Create a new database migration';
9
+ usage = 'tyravel make:migration <name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Migration name is required.');
15
+ console.error('Usage: tyravel make:migration <name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const className = toPascalCase(rawName);
20
+ const fileName = `${timestamp()}_${snakeCase(rawName)}.ts`;
21
+ const target = projectPath(root, 'database/migrations', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Migration already exists: database/migrations/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, migration(className));
27
+ console.log(`Migration created: database/migrations/${fileName}`);
28
+ return 0;
29
+ }
30
+ }
31
+ function timestamp() {
32
+ const now = new Date();
33
+ const pad = (value) => String(value).padStart(2, '0');
34
+ return [
35
+ now.getFullYear(),
36
+ pad(now.getMonth() + 1),
37
+ pad(now.getDate()),
38
+ pad(now.getHours()),
39
+ pad(now.getMinutes()),
40
+ pad(now.getSeconds()),
41
+ ].join('_');
42
+ }
43
+ function snakeCase(value) {
44
+ return value
45
+ .replace(/([a-z0-9])([A-Z])/g, '$1_$2')
46
+ .replace(/[^a-zA-Z0-9]+/g, '_')
47
+ .replace(/^_+|_+$/g, '')
48
+ .toLowerCase();
49
+ }
50
+ //# sourceMappingURL=make-migration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-migration.js","sourceRoot":"","sources":["../../src/commands/make-migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,oBAAqB,SAAQ,OAAO;IAC7B,IAAI,GAAG,gBAAgB,CAAC;IACxB,WAAW,GAAG,iCAAiC,CAAC;IAChD,KAAK,GAAG,+BAA+B,CAAC;IAE1D,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC7C,OAAO,CAAC,KAAK,CAAC,sCAAsC,CAAC,CAAC;YACtD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,GAAG,SAAS,EAAE,IAAI,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC;QAC3D,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,qBAAqB,EAAE,QAAQ,CAAC,CAAC;QAElE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,iDAAiD,QAAQ,EAAE,CAAC,CAAC;YAC3E,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;QAElE,OAAO,CAAC,CAAC;IACX,CAAC;CACF;AAED,SAAS,SAAS;IAChB,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO;QACL,GAAG,CAAC,WAAW,EAAE;QACjB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACvB,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QAClB,GAAG,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC;QACnB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QACrB,GAAG,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;KACtB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACd,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,KAAK;SACT,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,WAAW,EAAE,CAAC;AACnB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeModelCommand extends Command {
3
+ readonly name = "make:model";
4
+ readonly description = "Create a new Eloquent model class";
5
+ readonly usage = "tyravel make:model <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-model.d.ts","sourceRoot":"","sources":["../../src/commands/make-model.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,gBAAiB,SAAQ,OAAO;IAC3C,SAAkB,IAAI,gBAAgB;IACtC,SAAkB,WAAW,uCAAuC;IACpE,SAAkB,KAAK,+BAA+B;IAEhD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAyB9C"}
@@ -0,0 +1,31 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { model } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeModelCommand extends Command {
7
+ name = 'make:model';
8
+ description = 'Create a new Eloquent model class';
9
+ usage = 'tyravel make:model <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Model name is required.');
15
+ console.error('Usage: tyravel make:model <Name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const name = toPascalCase(rawName);
20
+ const fileName = `${name}.ts`;
21
+ const target = projectPath(root, 'src/models', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Model already exists: src/models/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, model(name));
27
+ console.log(`Model created: src/models/${fileName}`);
28
+ return 0;
29
+ }
30
+ }
31
+ //# sourceMappingURL=make-model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-model.js","sourceRoot":"","sources":["../../src/commands/make-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,gBAAiB,SAAQ,OAAO;IACzB,IAAI,GAAG,YAAY,CAAC;IACpB,WAAW,GAAG,mCAAmC,CAAC;IAClD,KAAK,GAAG,2BAA2B,CAAC;IAEtD,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;YAClD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;QACnC,MAAM,QAAQ,GAAG,GAAG,IAAI,KAAK,CAAC;QAC9B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;QAEzD,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,oCAAoC,QAAQ,EAAE,CAAC,CAAC;YAC9D,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,6BAA6B,QAAQ,EAAE,CAAC,CAAC;QAErD,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeProviderCommand extends Command {
3
+ readonly name = "make:provider";
4
+ readonly description = "Create a new service provider class";
5
+ readonly usage = "tyravel make:provider <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-provider.d.ts","sourceRoot":"","sources":["../../src/commands/make-provider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,mBAAoB,SAAQ,OAAO;IAC9C,SAAkB,IAAI,mBAAmB;IACzC,SAAkB,WAAW,yCAAyC;IACtE,SAAkB,KAAK,kCAAkC;IAEnD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA0B9C"}
@@ -0,0 +1,32 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { provider } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeProviderCommand extends Command {
7
+ name = 'make:provider';
8
+ description = 'Create a new service provider class';
9
+ usage = 'tyravel make:provider <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [rawName] = positionalArgs(args);
13
+ if (!rawName) {
14
+ console.error('Provider name is required.');
15
+ console.error('Usage: tyravel make:provider <Name>');
16
+ return 1;
17
+ }
18
+ const root = requireProjectRoot();
19
+ const name = toPascalCase(rawName.replace(/ServiceProvider$/i, ''));
20
+ const fileName = `${name}ServiceProvider.ts`;
21
+ const target = projectPath(root, 'src/providers', fileName);
22
+ if (existsSync(target)) {
23
+ console.error(`Provider already exists: src/providers/${fileName}`);
24
+ return 1;
25
+ }
26
+ writeFile(target, provider(name));
27
+ console.log(`Provider created: src/providers/${fileName}`);
28
+ console.log(`Register it in src/main.ts: app.register(${name}ServiceProvider);`);
29
+ return 0;
30
+ }
31
+ }
32
+ //# sourceMappingURL=make-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-provider.js","sourceRoot":"","sources":["../../src/commands/make-provider.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,mBAAoB,SAAQ,OAAO;IAC5B,IAAI,GAAG,eAAe,CAAC;IACvB,WAAW,GAAG,qCAAqC,CAAC;IACpD,KAAK,GAAG,8BAA8B,CAAC;IAEzD,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEvC,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YAC5C,OAAO,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,IAAI,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,CAAC,mBAAmB,EAAE,EAAE,CAAC,CAAC,CAAC;QACpE,MAAM,QAAQ,GAAG,GAAG,IAAI,oBAAoB,CAAC;QAC7C,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC;QAE5D,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,0CAA0C,QAAQ,EAAE,CAAC,CAAC;YACpE,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,mCAAmC,QAAQ,EAAE,CAAC,CAAC;QAC3D,OAAO,CAAC,GAAG,CAAC,4CAA4C,IAAI,mBAAmB,CAAC,CAAC;QAEjF,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeSubscriberCommand extends Command {
3
+ readonly name = "make:subscriber";
4
+ readonly description = "Create an event subscriber class";
5
+ readonly usage = "tyravel make:subscriber <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-subscriber.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-subscriber.d.ts","sourceRoot":"","sources":["../../src/commands/make-subscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,qBAAsB,SAAQ,OAAO;IAChD,SAAkB,IAAI,qBAAqB;IAC3C,SAAkB,WAAW,sCAAsC;IACnE,SAAkB,KAAK,oCAAoC;IAErD,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAwB9C"}
@@ -0,0 +1,30 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { eventSubscriber } from '../stubs.js';
5
+ import { parseOptions, positionalArgs, projectPath, toPascalCase, writeFile, } from '../utils.js';
6
+ export class MakeSubscriberCommand extends Command {
7
+ name = 'make:subscriber';
8
+ description = 'Create an event subscriber class';
9
+ usage = 'tyravel make:subscriber <Name>';
10
+ async handle(args) {
11
+ parseOptions(args);
12
+ const [name] = positionalArgs(args);
13
+ if (!name) {
14
+ console.error('Subscriber name is required.');
15
+ return 1;
16
+ }
17
+ const className = toPascalCase(name);
18
+ const root = requireProjectRoot();
19
+ const target = projectPath(root, 'src/subscribers', `${className}.ts`);
20
+ if (existsSync(target)) {
21
+ console.error(`Subscriber already exists: src/subscribers/${className}.ts`);
22
+ return 1;
23
+ }
24
+ writeFile(target, eventSubscriber(className));
25
+ console.log(`Subscriber created: src/subscribers/${className}.ts`);
26
+ console.log(`Register it in config/events.ts subscribers: [${className}]`);
27
+ return 0;
28
+ }
29
+ }
30
+ //# sourceMappingURL=make-subscriber.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-subscriber.js","sourceRoot":"","sources":["../../src/commands/make-subscriber.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EACL,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,EACZ,SAAS,GACV,MAAM,aAAa,CAAC;AAErB,MAAM,OAAO,qBAAsB,SAAQ,OAAO;IAC9B,IAAI,GAAG,iBAAiB,CAAC;IACzB,WAAW,GAAG,kCAAkC,CAAC;IACjD,KAAK,GAAG,gCAAgC,CAAC;IAE3D,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC9C,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,SAAS,KAAK,CAAC,CAAC;QAEvE,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACvB,OAAO,CAAC,KAAK,CAAC,8CAA8C,SAAS,KAAK,CAAC,CAAC;YAC5E,OAAO,CAAC,CAAC;QACX,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,uCAAuC,SAAS,KAAK,CAAC,CAAC;QACnE,OAAO,CAAC,GAAG,CAAC,iDAAiD,SAAS,GAAG,CAAC,CAAC;QAE3E,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeTestCommand extends Command {
3
+ readonly name = "make:test";
4
+ readonly description = "Create a feature test class";
5
+ readonly usage = "tyravel make:test <Name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-test.d.ts","sourceRoot":"","sources":["../../src/commands/make-test.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAIxC,qBAAa,eAAgB,SAAQ,OAAO;IAC1C,SAAkB,IAAI,eAAe;IACrC,SAAkB,WAAW,iCAAiC;IAC9D,SAAkB,KAAK,8BAA8B;IAE/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CAgB9C"}
@@ -0,0 +1,24 @@
1
+ import { projectPath, writeFile } from '../utils.js';
2
+ import { Command } from '../command.js';
3
+ import { requireProjectRoot } from '../project.js';
4
+ import { featureTestStub } from '../stubs-testing.js';
5
+ export class MakeTestCommand extends Command {
6
+ name = 'make:test';
7
+ description = 'Create a feature test class';
8
+ usage = 'tyravel make:test <Name>';
9
+ async handle(args) {
10
+ const name = args[0];
11
+ if (!name) {
12
+ console.error('Usage: tyravel make:test <Name>');
13
+ return 1;
14
+ }
15
+ const root = requireProjectRoot();
16
+ const className = name.endsWith('Test') ? name : `${name}Test`;
17
+ const fileName = className.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
18
+ const target = projectPath(root, `tests/feature/${fileName}.ts`);
19
+ writeFile(target, featureTestStub(className));
20
+ console.log(`Created ${target}`);
21
+ return 0;
22
+ }
23
+ }
24
+ //# sourceMappingURL=make-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-test.js","sourceRoot":"","sources":["../../src/commands/make-test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,MAAM,OAAO,eAAgB,SAAQ,OAAO;IACxB,IAAI,GAAG,WAAW,CAAC;IACnB,WAAW,GAAG,6BAA6B,CAAC;IAC5C,KAAK,GAAG,0BAA0B,CAAC;IAErD,KAAK,CAAC,MAAM,CAAC,IAAc;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;YACjD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,IAAI,GAAG,kBAAkB,EAAE,CAAC;QAClC,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,MAAM,CAAC;QAC/D,MAAM,QAAQ,GAAG,SAAS,CAAC,OAAO,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAC7E,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,iBAAiB,QAAQ,KAAK,CAAC,CAAC;QAEjE,SAAS,CAAC,MAAM,EAAE,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;QACjC,OAAO,CAAC,CAAC;IACX,CAAC;CACF"}
@@ -0,0 +1,8 @@
1
+ import { Command } from '../command.js';
2
+ export declare class MakeViewCommand extends Command {
3
+ readonly name = "make:view";
4
+ readonly description = "Create a new Tyr template view";
5
+ readonly usage = "tyravel make:view <name>";
6
+ handle(args: string[]): Promise<number>;
7
+ }
8
+ //# sourceMappingURL=make-view.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"make-view.d.ts","sourceRoot":"","sources":["../../src/commands/make-view.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAWxC,qBAAa,eAAgB,SAAQ,OAAO;IAC1C,SAAkB,IAAI,eAAe;IACrC,SAAkB,WAAW,oCAAoC;IACjE,SAAkB,KAAK,8BAA8B;IAE/C,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;CA6B9C"}