@arikajs/cli 0.10.2 → 0.10.3
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/dist/src/Bootstrap.d.ts.map +1 -1
- package/dist/src/Bootstrap.js +1 -0
- package/dist/src/Bootstrap.js.map +1 -1
- package/dist/src/Commands/StorageLinkCommand.d.ts +19 -0
- package/dist/src/Commands/StorageLinkCommand.d.ts.map +1 -0
- package/dist/src/Commands/StorageLinkCommand.js +88 -0
- package/dist/src/Commands/StorageLinkCommand.js.map +1 -0
- package/dist/templates/app/app/Console/Commands/ExampleCommand.ts +14 -0
- package/dist/templates/app/app/Providers/AuthServiceProvider.ts +36 -0
- package/dist/templates/app/app/Providers/ConsoleServiceProvider.ts +29 -0
- package/dist/templates/app/app/Providers/EventServiceProvider.ts +42 -0
- package/dist/templates/app/app/Providers/RouteServiceProvider.ts +7 -0
- package/dist/templates/app/bootstrap/app.ts +6 -0
- package/dist/templates/app/routes/console.ts +24 -0
- package/dist/templates/app/tsconfig.json +2 -1
- package/dist/tests/Cli.test.d.ts +2 -0
- package/dist/tests/Cli.test.d.ts.map +1 -0
- package/dist/tests/Cli.test.js +16 -0
- package/dist/tests/Cli.test.js.map +1 -0
- package/dist/tests/Commands.test.d.ts +2 -0
- package/dist/tests/Commands.test.d.ts.map +1 -0
- package/dist/tests/Commands.test.js +41 -0
- package/dist/tests/Commands.test.js.map +1 -0
- package/package.json +18 -17
- package/templates/app/app/Console/Commands/ExampleCommand.ts +14 -0
- package/templates/app/app/Providers/AuthServiceProvider.ts +36 -0
- package/templates/app/app/Providers/ConsoleServiceProvider.ts +29 -0
- package/templates/app/app/Providers/EventServiceProvider.ts +42 -0
- package/templates/app/app/Providers/RouteServiceProvider.ts +7 -0
- package/templates/app/bootstrap/app.ts +6 -0
- package/templates/app/routes/console.ts +24 -0
- package/templates/app/tsconfig.json +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../../src/Bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQnD,qBAAa,SAAS;WACE,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"Bootstrap.d.ts","sourceRoot":"","sources":["../../src/Bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAQnD,qBAAa,SAAS;WACE,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;CAiEvD"}
|
package/dist/src/Bootstrap.js
CHANGED
|
@@ -89,6 +89,7 @@ class Bootstrap {
|
|
|
89
89
|
registry.registerLazy('auth:install', 'Interactive menu to scaffold authentication system', () => Promise.resolve().then(() => __importStar(require('./Commands/AuthInstallCommand'))));
|
|
90
90
|
registry.registerLazy('auth:install:web', 'Scaffold web authentication views and routes (Session-based)', () => Promise.resolve().then(() => __importStar(require('./Commands/AuthWebInstallCommand'))));
|
|
91
91
|
registry.registerLazy('auth:install:api', 'Scaffold API authentication routes (JWT-based)', () => Promise.resolve().then(() => __importStar(require('./Commands/AuthApiInstallCommand'))));
|
|
92
|
+
registry.registerLazy('storage:link', 'Create a symbolic link from "storage/app/public" to "public/storage"', () => Promise.resolve().then(() => __importStar(require('./Commands/StorageLinkCommand'))));
|
|
92
93
|
const app = await ApplicationLoader_1.ApplicationLoader.load();
|
|
93
94
|
if (app.instance && typeof app.instance.boot === 'function') {
|
|
94
95
|
await app.instance.boot();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Bootstrap.js","sourceRoot":"","sources":["../../src/Bootstrap.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Bootstrap.js","sourceRoot":"","sources":["../../src/Bootstrap.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from '@arikajs/console';
|
|
2
|
+
/**
|
|
3
|
+
* Create a symbolic link from "storage/app/public" to "public/storage".
|
|
4
|
+
*/
|
|
5
|
+
export declare class StorageLinkCommand extends Command {
|
|
6
|
+
/**
|
|
7
|
+
* The signature of the console command.
|
|
8
|
+
*/
|
|
9
|
+
signature: string;
|
|
10
|
+
/**
|
|
11
|
+
* The description of the console command.
|
|
12
|
+
*/
|
|
13
|
+
description: string;
|
|
14
|
+
/**
|
|
15
|
+
* Execute the console command.
|
|
16
|
+
*/
|
|
17
|
+
handle(): Promise<number>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=StorageLinkCommand.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageLinkCommand.d.ts","sourceRoot":"","sources":["../../../src/Commands/StorageLinkCommand.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAI3C;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,OAAO;IAC3C;;OAEG;IACI,SAAS,SAAkB;IAElC;;OAEG;IACI,WAAW,SAA0E;IAE5F;;OAEG;IACU,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;CAkCzC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.StorageLinkCommand = void 0;
|
|
37
|
+
const console_1 = require("@arikajs/console");
|
|
38
|
+
const fs = __importStar(require("node:fs"));
|
|
39
|
+
const path = __importStar(require("node:path"));
|
|
40
|
+
/**
|
|
41
|
+
* Create a symbolic link from "storage/app/public" to "public/storage".
|
|
42
|
+
*/
|
|
43
|
+
class StorageLinkCommand extends console_1.Command {
|
|
44
|
+
constructor() {
|
|
45
|
+
super(...arguments);
|
|
46
|
+
/**
|
|
47
|
+
* The signature of the console command.
|
|
48
|
+
*/
|
|
49
|
+
this.signature = 'storage:link';
|
|
50
|
+
/**
|
|
51
|
+
* The description of the console command.
|
|
52
|
+
*/
|
|
53
|
+
this.description = 'Create a symbolic link from "storage/app/public" to "public/storage"';
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Execute the console command.
|
|
57
|
+
*/
|
|
58
|
+
async handle() {
|
|
59
|
+
const root = process.cwd();
|
|
60
|
+
const publicPath = path.join(root, 'public', 'storage');
|
|
61
|
+
const storagePath = path.join(root, 'storage', 'app', 'public');
|
|
62
|
+
if (fs.existsSync(publicPath)) {
|
|
63
|
+
this.error('The "public/storage" directory already exists.');
|
|
64
|
+
return 1;
|
|
65
|
+
}
|
|
66
|
+
if (!fs.existsSync(storagePath)) {
|
|
67
|
+
this.info('Creating source directory "storage/app/public"...');
|
|
68
|
+
fs.mkdirSync(storagePath, { recursive: true });
|
|
69
|
+
}
|
|
70
|
+
try {
|
|
71
|
+
// Determine link type if on Windows
|
|
72
|
+
const isWindows = process.platform === 'win32';
|
|
73
|
+
// Create symlink
|
|
74
|
+
fs.symlinkSync(storagePath, publicPath, isWindows ? 'junction' : 'dir');
|
|
75
|
+
this.info('The [public/storage] link has been connected to [storage/app/public].');
|
|
76
|
+
return 0;
|
|
77
|
+
}
|
|
78
|
+
catch (error) {
|
|
79
|
+
this.error(`Failed to create symbolic link: ${error.message}`);
|
|
80
|
+
if (process.platform === 'win32') {
|
|
81
|
+
this.comment('Try running the terminal as Administrator.');
|
|
82
|
+
}
|
|
83
|
+
return 1;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.StorageLinkCommand = StorageLinkCommand;
|
|
88
|
+
//# sourceMappingURL=StorageLinkCommand.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageLinkCommand.js","sourceRoot":"","sources":["../../../src/Commands/StorageLinkCommand.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,8CAA2C;AAC3C,4CAA8B;AAC9B,gDAAkC;AAElC;;GAEG;AACH,MAAa,kBAAmB,SAAQ,iBAAO;IAA/C;;QACI;;WAEG;QACI,cAAS,GAAG,cAAc,CAAC;QAElC;;WAEG;QACI,gBAAW,GAAG,sEAAsE,CAAC;IAuChG,CAAC;IArCG;;OAEG;IACI,KAAK,CAAC,MAAM;QACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;QAEhE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC5B,IAAI,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC;QACb,CAAC;QAED,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAC9B,IAAI,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;YAC/D,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC;YACD,oCAAoC;YACpC,MAAM,SAAS,GAAG,OAAO,CAAC,QAAQ,KAAK,OAAO,CAAC;YAE/C,iBAAiB;YACjB,EAAE,CAAC,WAAW,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAExE,IAAI,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;YACnF,OAAO,CAAC,CAAC;QACb,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,IAAI,CAAC,KAAK,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAE/D,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC/B,IAAI,CAAC,OAAO,CAAC,4CAA4C,CAAC,CAAC;YAC/D,CAAC;YAED,OAAO,CAAC,CAAC;QACb,CAAC;IACL,CAAC;CACJ;AAhDD,gDAgDC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from 'arikajs';
|
|
2
|
+
|
|
3
|
+
export class ExampleCommand extends Command {
|
|
4
|
+
|
|
5
|
+
public signature: string = 'app:example';
|
|
6
|
+
|
|
7
|
+
public description: string = 'An example command to demonstrate the ArikaJS CLI.';
|
|
8
|
+
|
|
9
|
+
public async handle(): Promise<void> {
|
|
10
|
+
const name = this.option('name', 'World');
|
|
11
|
+
|
|
12
|
+
this.info(`Hello, ${name}! Your ArikaJS console is working perfectly.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ServiceProvider } from 'arikajs';
|
|
2
|
+
import { Gate } from '@arikajs/authorization';
|
|
3
|
+
|
|
4
|
+
export class AuthServiceProvider extends ServiceProvider {
|
|
5
|
+
/**
|
|
6
|
+
* Register any application services.
|
|
7
|
+
*/
|
|
8
|
+
public register(): void {
|
|
9
|
+
//
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Bootstrap any application services.
|
|
14
|
+
*/
|
|
15
|
+
public boot(): void {
|
|
16
|
+
// --- DEFINE POLICIES ---
|
|
17
|
+
// Bind a Model to a Policy class to automatically authorize CRUD actions.
|
|
18
|
+
//
|
|
19
|
+
// Example:
|
|
20
|
+
// import { Post } from '@Models/Post';
|
|
21
|
+
// import { PostPolicy } from '@Policies/PostPolicy';
|
|
22
|
+
// Gate.policy(Post, PostPolicy);
|
|
23
|
+
|
|
24
|
+
// --- DEFINE CUSTOM GATES ---
|
|
25
|
+
// Define simple ability checks using a closure.
|
|
26
|
+
// Return true to authorize, false to deny.
|
|
27
|
+
//
|
|
28
|
+
// Example:
|
|
29
|
+
// Gate.define('admin-only', (user) => {
|
|
30
|
+
// return user.is_admin === true;
|
|
31
|
+
// });
|
|
32
|
+
//
|
|
33
|
+
// Usage in controller: await Gate.allows('admin-only')
|
|
34
|
+
// Usage in template: @can('admin-only') ... @endcan
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ServiceProvider, Command } from 'arikajs';
|
|
2
|
+
import { CommandRegistry } from '@arikajs/console';
|
|
3
|
+
import { ExampleCommand } from '@Console/Commands/ExampleCommand';
|
|
4
|
+
|
|
5
|
+
export class ConsoleServiceProvider extends ServiceProvider {
|
|
6
|
+
/**
|
|
7
|
+
* All the application's console commands.
|
|
8
|
+
*
|
|
9
|
+
* Register your custom commands here to make them available via the CLI.
|
|
10
|
+
* Run any command with: node arika.js <command-signature>
|
|
11
|
+
*/
|
|
12
|
+
protected commands: (new () => Command)[] = [
|
|
13
|
+
ExampleCommand,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
public register(): void {
|
|
17
|
+
//
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public boot(): void {
|
|
21
|
+
// If running in CLI context, register our commands with the registry
|
|
22
|
+
if ((this.app as any).has(CommandRegistry)) {
|
|
23
|
+
const registry = (this.app as any).make(CommandRegistry);
|
|
24
|
+
for (const command of this.commands) {
|
|
25
|
+
registry.register(command);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ServiceProvider, Event } from 'arikajs';
|
|
2
|
+
|
|
3
|
+
export class EventServiceProvider extends ServiceProvider {
|
|
4
|
+
/**
|
|
5
|
+
* The event to listener mappings for the application.
|
|
6
|
+
*
|
|
7
|
+
* Add your event → listener mappings here.
|
|
8
|
+
* The key is the Event class name, the value is an array of Listener classes.
|
|
9
|
+
*
|
|
10
|
+
* Example:
|
|
11
|
+
* import { UserRegisteredEvent } from '@Events/UserRegisteredEvent';
|
|
12
|
+
* import { SendWelcomeEmailListener } from '@Listeners/SendWelcomeEmailListener';
|
|
13
|
+
*
|
|
14
|
+
* protected listen = {
|
|
15
|
+
* [UserRegisteredEvent.name]: [
|
|
16
|
+
* SendWelcomeEmailListener,
|
|
17
|
+
* ],
|
|
18
|
+
* };
|
|
19
|
+
*/
|
|
20
|
+
protected listen: Record<string, any[]> = {
|
|
21
|
+
// [YourEvent.name]: [YourListener],
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Register any application services.
|
|
26
|
+
*/
|
|
27
|
+
public register(): void {
|
|
28
|
+
//
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Bootstrap any application services.
|
|
33
|
+
*/
|
|
34
|
+
public boot(): void {
|
|
35
|
+
// Automatically register all event → listener mappings defined above
|
|
36
|
+
for (const [eventName, listeners] of Object.entries(this.listen)) {
|
|
37
|
+
for (const listener of listeners) {
|
|
38
|
+
Event.listen(eventName, listener);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -31,5 +31,12 @@ export class RouteServiceProvider extends ServiceProvider {
|
|
|
31
31
|
Route.middleware('api').prefix('api').group(() => {
|
|
32
32
|
require(path.join(basePath, 'routes/api'));
|
|
33
33
|
});
|
|
34
|
+
|
|
35
|
+
// 3. Load Console/scheduled task routes
|
|
36
|
+
try {
|
|
37
|
+
require(path.join(basePath, 'routes/console'));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
// console routes optional
|
|
40
|
+
}
|
|
34
41
|
}
|
|
35
42
|
}
|
|
@@ -17,9 +17,15 @@ const app = createApp(
|
|
|
17
17
|
|
|
18
18
|
import { AppServiceProvider } from '@Providers/AppServiceProvider';
|
|
19
19
|
import { RouteServiceProvider } from '@Providers/RouteServiceProvider';
|
|
20
|
+
import { ConsoleServiceProvider } from '@Providers/ConsoleServiceProvider';
|
|
21
|
+
import { AuthServiceProvider } from '@Providers/AuthServiceProvider';
|
|
22
|
+
import { EventServiceProvider } from '@Providers/EventServiceProvider';
|
|
20
23
|
|
|
21
24
|
app.register(AppServiceProvider);
|
|
22
25
|
app.register(RouteServiceProvider);
|
|
26
|
+
app.register(ConsoleServiceProvider);
|
|
27
|
+
app.register(AuthServiceProvider);
|
|
28
|
+
app.register(EventServiceProvider);
|
|
23
29
|
|
|
24
30
|
/*
|
|
25
31
|
|--------------------------------------------------------------------------
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Schedule } from 'arikajs';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
|--------------------------------------------------------------------------
|
|
5
|
+
| Console Routes (Schedule)
|
|
6
|
+
|--------------------------------------------------------------------------
|
|
7
|
+
|
|
|
8
|
+
| This file is where you may define all of your scheduled tasks. These
|
|
9
|
+
| tasks are run by the scheduler (node arika.js schedule:work).
|
|
10
|
+
|
|
|
11
|
+
| Commands are registered in: app/Providers/ConsoleServiceProvider.ts
|
|
12
|
+
| Then scheduled here using their string signature.
|
|
13
|
+
|
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// Example: Run the example command every day at midnight
|
|
17
|
+
// Schedule.command('app:example').dailyAt('00:00');
|
|
18
|
+
|
|
19
|
+
// Other useful scheduling methods:
|
|
20
|
+
// Schedule.command('my:command').hourly();
|
|
21
|
+
// Schedule.command('my:command').everyMinute();
|
|
22
|
+
// Schedule.command('my:command').weekly();
|
|
23
|
+
// Schedule.command('my:command').monthlyOn(1, '08:00');
|
|
24
|
+
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.test.d.ts","sourceRoot":"","sources":["../../tests/Cli.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,16 @@
|
|
|
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
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
|
+
const src_1 = require("../src");
|
|
9
|
+
(0, node_test_1.describe)('CLI Bootstrap', () => {
|
|
10
|
+
(0, node_test_1.it)('boots correctly and returns a CommandRegistry', async () => {
|
|
11
|
+
const registry = await src_1.Bootstrap.boot();
|
|
12
|
+
node_assert_1.default.ok(registry !== null);
|
|
13
|
+
node_assert_1.default.strictEqual(typeof registry.run, 'function');
|
|
14
|
+
});
|
|
15
|
+
});
|
|
16
|
+
//# sourceMappingURL=Cli.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cli.test.js","sourceRoot":"","sources":["../../tests/Cli.test.ts"],"names":[],"mappings":";;;;;AACA,yCAA+C;AAC/C,8DAAiC;AACjC,gCAAmC;AAEnC,IAAA,oBAAQ,EAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,IAAA,cAAE,EAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,QAAQ,GAAG,MAAM,eAAS,CAAC,IAAI,EAAE,CAAC;QACxC,qBAAM,CAAC,EAAE,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;QAC7B,qBAAM,CAAC,WAAW,CAAC,OAAO,QAAQ,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Commands.test.d.ts","sourceRoot":"","sources":["../../tests/Commands.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,41 @@
|
|
|
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
|
+
const node_test_1 = require("node:test");
|
|
7
|
+
const node_assert_1 = __importDefault(require("node:assert"));
|
|
8
|
+
const src_1 = require("../src");
|
|
9
|
+
(0, node_test_1.describe)('CLI Commands Registration', () => {
|
|
10
|
+
(0, node_test_1.it)('registers all core commands', async () => {
|
|
11
|
+
const registry = await src_1.Bootstrap.boot();
|
|
12
|
+
const commands = registry.all();
|
|
13
|
+
const expectedSignatures = [
|
|
14
|
+
'new',
|
|
15
|
+
'list',
|
|
16
|
+
'serve',
|
|
17
|
+
'key:generate',
|
|
18
|
+
'migrate',
|
|
19
|
+
'auth:install',
|
|
20
|
+
'auth:install:web',
|
|
21
|
+
'auth:install:api',
|
|
22
|
+
'make:controller',
|
|
23
|
+
'make:model',
|
|
24
|
+
'make:migration'
|
|
25
|
+
];
|
|
26
|
+
expectedSignatures.forEach(sig => {
|
|
27
|
+
const command = registry.all().get(sig.split(' ')[0]);
|
|
28
|
+
node_assert_1.default.ok(command, `Command with signature "${sig}" should be registered`);
|
|
29
|
+
});
|
|
30
|
+
});
|
|
31
|
+
(0, node_test_1.it)('can load lazy-loaded commands', async () => {
|
|
32
|
+
const registry = await src_1.Bootstrap.boot();
|
|
33
|
+
// Since registry.all() might not trigger lazy loading of the actual classes
|
|
34
|
+
// if they are just strings/factories in the registry, we check if they exist.
|
|
35
|
+
const apiAuthCommand = registry.all().get('auth:install:api');
|
|
36
|
+
node_assert_1.default.ok(apiAuthCommand, 'auth:install:api should be registered');
|
|
37
|
+
const webAuthCommand = registry.all().get('auth:install:web');
|
|
38
|
+
node_assert_1.default.ok(webAuthCommand, 'auth:install:web should be registered');
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
//# sourceMappingURL=Commands.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Commands.test.js","sourceRoot":"","sources":["../../tests/Commands.test.ts"],"names":[],"mappings":";;;;;AACA,yCAA+C;AAC/C,8DAAiC;AACjC,gCAAmC;AAEnC,IAAA,oBAAQ,EAAC,2BAA2B,EAAE,GAAG,EAAE;IACvC,IAAA,cAAE,EAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,QAAQ,GAAG,MAAM,eAAS,CAAC,IAAI,EAAE,CAAC;QACxC,MAAM,QAAQ,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC;QAEhC,MAAM,kBAAkB,GAAG;YACvB,KAAK;YACL,MAAM;YACN,OAAO;YACP,cAAc;YACd,SAAS;YACT,cAAc;YACd,kBAAkB;YAClB,kBAAkB;YAClB,iBAAiB;YACjB,YAAY;YACZ,gBAAgB;SACnB,CAAC;QAEF,kBAAkB,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAC7B,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACtD,qBAAM,CAAC,EAAE,CAAC,OAAO,EAAE,2BAA2B,GAAG,wBAAwB,CAAC,CAAC;QAC/E,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAA,cAAE,EAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,QAAQ,GAAG,MAAM,eAAS,CAAC,IAAI,EAAE,CAAC;QACxC,6EAA6E;QAC7E,8EAA8E;QAE9E,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC9D,qBAAM,CAAC,EAAE,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;QAEnE,MAAM,cAAc,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;QAC9D,qBAAM,CAAC,EAAE,CAAC,cAAc,EAAE,uCAAuC,CAAC,CAAC;IACvE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@arikajs/cli",
|
|
3
|
-
"version": "0.10.
|
|
3
|
+
"version": "0.10.3",
|
|
4
4
|
"description": "The command-line interface for the ArikaJS framework.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -8,6 +8,15 @@
|
|
|
8
8
|
"bin": {
|
|
9
9
|
"arika": "dist/bin/arika.js"
|
|
10
10
|
},
|
|
11
|
+
"scripts": {
|
|
12
|
+
"build": "tsc -p tsconfig.json && cp -R templates dist/ && chmod +x dist/bin/arika.js",
|
|
13
|
+
"build:tests": "tsc -p tsconfig.test.json",
|
|
14
|
+
"clean": "rm -rf dist",
|
|
15
|
+
"prepare": "echo skip",
|
|
16
|
+
"test": "npm run build && npm run build:tests && node --test 'dist/tests/**/*.test.js'",
|
|
17
|
+
"test:watch": "npm run build && npm run build:tests && node --test --watch 'dist/tests/**/*.test.js'",
|
|
18
|
+
"dev": "tsc -p tsconfig.json --watch"
|
|
19
|
+
},
|
|
11
20
|
"files": [
|
|
12
21
|
"dist",
|
|
13
22
|
"templates"
|
|
@@ -32,16 +41,16 @@
|
|
|
32
41
|
},
|
|
33
42
|
"homepage": "https://github.com/ArikaJs/arikajs/tree/main/packages/cli#readme",
|
|
34
43
|
"dependencies": {
|
|
44
|
+
"@arikajs/benchmark": "workspace:*",
|
|
45
|
+
"@arikajs/console": "workspace:*",
|
|
46
|
+
"@arikajs/database": "workspace:*",
|
|
47
|
+
"@arikajs/docs": "workspace:*",
|
|
48
|
+
"@arikajs/scheduler": "workspace:*",
|
|
35
49
|
"dotenv": "^16.4.5",
|
|
36
50
|
"inquirer": "^8.2.7",
|
|
37
51
|
"ts-node": "^10.9.2",
|
|
38
52
|
"tsx": "^4.21.0",
|
|
39
|
-
"typescript": "^5.3.3"
|
|
40
|
-
"@arikajs/console": "0.10.2",
|
|
41
|
-
"@arikajs/benchmark": "0.10.2",
|
|
42
|
-
"@arikajs/docs": "0.10.2",
|
|
43
|
-
"@arikajs/scheduler": "0.10.2",
|
|
44
|
-
"@arikajs/database": "0.10.2"
|
|
53
|
+
"typescript": "^5.3.3"
|
|
45
54
|
},
|
|
46
55
|
"devDependencies": {
|
|
47
56
|
"@types/dotenv": "^8.2.3",
|
|
@@ -49,13 +58,5 @@
|
|
|
49
58
|
"@types/node": "^20.11.24",
|
|
50
59
|
"typescript": "^5.3.3"
|
|
51
60
|
},
|
|
52
|
-
"author": "Prakash Tank"
|
|
53
|
-
|
|
54
|
-
"build": "tsc -p tsconfig.json && cp -R templates dist/ && chmod +x dist/bin/arika.js",
|
|
55
|
-
"build:tests": "tsc -p tsconfig.test.json",
|
|
56
|
-
"clean": "rm -rf dist",
|
|
57
|
-
"test": "npm run build && npm run build:tests && node --test 'dist/tests/**/*.test.js'",
|
|
58
|
-
"test:watch": "npm run build && npm run build:tests && node --test --watch 'dist/tests/**/*.test.js'",
|
|
59
|
-
"dev": "tsc -p tsconfig.json --watch"
|
|
60
|
-
}
|
|
61
|
-
}
|
|
61
|
+
"author": "Prakash Tank"
|
|
62
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Command } from 'arikajs';
|
|
2
|
+
|
|
3
|
+
export class ExampleCommand extends Command {
|
|
4
|
+
|
|
5
|
+
public signature: string = 'app:example';
|
|
6
|
+
|
|
7
|
+
public description: string = 'An example command to demonstrate the ArikaJS CLI.';
|
|
8
|
+
|
|
9
|
+
public async handle(): Promise<void> {
|
|
10
|
+
const name = this.option('name', 'World');
|
|
11
|
+
|
|
12
|
+
this.info(`Hello, ${name}! Your ArikaJS console is working perfectly.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { ServiceProvider } from 'arikajs';
|
|
2
|
+
import { Gate } from '@arikajs/authorization';
|
|
3
|
+
|
|
4
|
+
export class AuthServiceProvider extends ServiceProvider {
|
|
5
|
+
/**
|
|
6
|
+
* Register any application services.
|
|
7
|
+
*/
|
|
8
|
+
public register(): void {
|
|
9
|
+
//
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Bootstrap any application services.
|
|
14
|
+
*/
|
|
15
|
+
public boot(): void {
|
|
16
|
+
// --- DEFINE POLICIES ---
|
|
17
|
+
// Bind a Model to a Policy class to automatically authorize CRUD actions.
|
|
18
|
+
//
|
|
19
|
+
// Example:
|
|
20
|
+
// import { Post } from '@Models/Post';
|
|
21
|
+
// import { PostPolicy } from '@Policies/PostPolicy';
|
|
22
|
+
// Gate.policy(Post, PostPolicy);
|
|
23
|
+
|
|
24
|
+
// --- DEFINE CUSTOM GATES ---
|
|
25
|
+
// Define simple ability checks using a closure.
|
|
26
|
+
// Return true to authorize, false to deny.
|
|
27
|
+
//
|
|
28
|
+
// Example:
|
|
29
|
+
// Gate.define('admin-only', (user) => {
|
|
30
|
+
// return user.is_admin === true;
|
|
31
|
+
// });
|
|
32
|
+
//
|
|
33
|
+
// Usage in controller: await Gate.allows('admin-only')
|
|
34
|
+
// Usage in template: @can('admin-only') ... @endcan
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ServiceProvider, Command } from 'arikajs';
|
|
2
|
+
import { CommandRegistry } from '@arikajs/console';
|
|
3
|
+
import { ExampleCommand } from '@Console/Commands/ExampleCommand';
|
|
4
|
+
|
|
5
|
+
export class ConsoleServiceProvider extends ServiceProvider {
|
|
6
|
+
/**
|
|
7
|
+
* All the application's console commands.
|
|
8
|
+
*
|
|
9
|
+
* Register your custom commands here to make them available via the CLI.
|
|
10
|
+
* Run any command with: node arika.js <command-signature>
|
|
11
|
+
*/
|
|
12
|
+
protected commands: (new () => Command)[] = [
|
|
13
|
+
ExampleCommand,
|
|
14
|
+
];
|
|
15
|
+
|
|
16
|
+
public register(): void {
|
|
17
|
+
//
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public boot(): void {
|
|
21
|
+
// If running in CLI context, register our commands with the registry
|
|
22
|
+
if ((this.app as any).has(CommandRegistry)) {
|
|
23
|
+
const registry = (this.app as any).make(CommandRegistry);
|
|
24
|
+
for (const command of this.commands) {
|
|
25
|
+
registry.register(command);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { ServiceProvider, Event } from 'arikajs';
|
|
2
|
+
|
|
3
|
+
export class EventServiceProvider extends ServiceProvider {
|
|
4
|
+
/**
|
|
5
|
+
* The event to listener mappings for the application.
|
|
6
|
+
*
|
|
7
|
+
* Add your event → listener mappings here.
|
|
8
|
+
* The key is the Event class name, the value is an array of Listener classes.
|
|
9
|
+
*
|
|
10
|
+
* Example:
|
|
11
|
+
* import { UserRegisteredEvent } from '@Events/UserRegisteredEvent';
|
|
12
|
+
* import { SendWelcomeEmailListener } from '@Listeners/SendWelcomeEmailListener';
|
|
13
|
+
*
|
|
14
|
+
* protected listen = {
|
|
15
|
+
* [UserRegisteredEvent.name]: [
|
|
16
|
+
* SendWelcomeEmailListener,
|
|
17
|
+
* ],
|
|
18
|
+
* };
|
|
19
|
+
*/
|
|
20
|
+
protected listen: Record<string, any[]> = {
|
|
21
|
+
// [YourEvent.name]: [YourListener],
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* Register any application services.
|
|
26
|
+
*/
|
|
27
|
+
public register(): void {
|
|
28
|
+
//
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
/**
|
|
32
|
+
* Bootstrap any application services.
|
|
33
|
+
*/
|
|
34
|
+
public boot(): void {
|
|
35
|
+
// Automatically register all event → listener mappings defined above
|
|
36
|
+
for (const [eventName, listeners] of Object.entries(this.listen)) {
|
|
37
|
+
for (const listener of listeners) {
|
|
38
|
+
Event.listen(eventName, listener);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -31,5 +31,12 @@ export class RouteServiceProvider extends ServiceProvider {
|
|
|
31
31
|
Route.middleware('api').prefix('api').group(() => {
|
|
32
32
|
require(path.join(basePath, 'routes/api'));
|
|
33
33
|
});
|
|
34
|
+
|
|
35
|
+
// 3. Load Console/scheduled task routes
|
|
36
|
+
try {
|
|
37
|
+
require(path.join(basePath, 'routes/console'));
|
|
38
|
+
} catch (e) {
|
|
39
|
+
// console routes optional
|
|
40
|
+
}
|
|
34
41
|
}
|
|
35
42
|
}
|
|
@@ -17,9 +17,15 @@ const app = createApp(
|
|
|
17
17
|
|
|
18
18
|
import { AppServiceProvider } from '@Providers/AppServiceProvider';
|
|
19
19
|
import { RouteServiceProvider } from '@Providers/RouteServiceProvider';
|
|
20
|
+
import { ConsoleServiceProvider } from '@Providers/ConsoleServiceProvider';
|
|
21
|
+
import { AuthServiceProvider } from '@Providers/AuthServiceProvider';
|
|
22
|
+
import { EventServiceProvider } from '@Providers/EventServiceProvider';
|
|
20
23
|
|
|
21
24
|
app.register(AppServiceProvider);
|
|
22
25
|
app.register(RouteServiceProvider);
|
|
26
|
+
app.register(ConsoleServiceProvider);
|
|
27
|
+
app.register(AuthServiceProvider);
|
|
28
|
+
app.register(EventServiceProvider);
|
|
23
29
|
|
|
24
30
|
/*
|
|
25
31
|
|--------------------------------------------------------------------------
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Schedule } from 'arikajs';
|
|
2
|
+
|
|
3
|
+
/*
|
|
4
|
+
|--------------------------------------------------------------------------
|
|
5
|
+
| Console Routes (Schedule)
|
|
6
|
+
|--------------------------------------------------------------------------
|
|
7
|
+
|
|
|
8
|
+
| This file is where you may define all of your scheduled tasks. These
|
|
9
|
+
| tasks are run by the scheduler (node arika.js schedule:work).
|
|
10
|
+
|
|
|
11
|
+
| Commands are registered in: app/Providers/ConsoleServiceProvider.ts
|
|
12
|
+
| Then scheduled here using their string signature.
|
|
13
|
+
|
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
// Example: Run the example command every day at midnight
|
|
17
|
+
// Schedule.command('app:example').dailyAt('00:00');
|
|
18
|
+
|
|
19
|
+
// Other useful scheduling methods:
|
|
20
|
+
// Schedule.command('my:command').hourly();
|
|
21
|
+
// Schedule.command('my:command').everyMinute();
|
|
22
|
+
// Schedule.command('my:command').weekly();
|
|
23
|
+
// Schedule.command('my:command').monthlyOn(1, '08:00');
|
|
24
|
+
|