@exisjs/cli 0.0.0-stage → 0.10.0-alpha.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 (75) hide show
  1. package/README.md +35 -2
  2. package/bin/exisjs.js +2 -0
  3. package/dist/commands/build.d.ts +17 -0
  4. package/dist/commands/build.d.ts.map +1 -0
  5. package/dist/commands/build.js +378 -0
  6. package/dist/commands/build.js.map +1 -0
  7. package/dist/commands/clean.d.ts +5 -0
  8. package/dist/commands/clean.d.ts.map +1 -0
  9. package/dist/commands/clean.js +30 -0
  10. package/dist/commands/clean.js.map +1 -0
  11. package/dist/commands/dev.d.ts +28 -0
  12. package/dist/commands/dev.d.ts.map +1 -0
  13. package/dist/commands/dev.js +884 -0
  14. package/dist/commands/dev.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +2 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +228 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/exports.d.ts +2 -0
  20. package/dist/commands/exports.d.ts.map +1 -0
  21. package/dist/commands/exports.js +48 -0
  22. package/dist/commands/exports.js.map +1 -0
  23. package/dist/commands/generate.d.ts +33 -0
  24. package/dist/commands/generate.d.ts.map +1 -0
  25. package/dist/commands/generate.js +469 -0
  26. package/dist/commands/generate.js.map +1 -0
  27. package/dist/commands/init.d.ts +2 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +37 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/migrate.d.ts +19 -0
  32. package/dist/commands/migrate.d.ts.map +1 -0
  33. package/dist/commands/migrate.js +116 -0
  34. package/dist/commands/migrate.js.map +1 -0
  35. package/dist/commands/repl.d.ts +6 -0
  36. package/dist/commands/repl.d.ts.map +1 -0
  37. package/dist/commands/repl.js +75 -0
  38. package/dist/commands/repl.js.map +1 -0
  39. package/dist/commands/run.d.ts +7 -0
  40. package/dist/commands/run.d.ts.map +1 -0
  41. package/dist/commands/run.js +101 -0
  42. package/dist/commands/run.js.map +1 -0
  43. package/dist/commands/start.d.ts +2 -0
  44. package/dist/commands/start.d.ts.map +1 -0
  45. package/dist/commands/start.js +8 -0
  46. package/dist/commands/start.js.map +1 -0
  47. package/dist/commands/test.d.ts +8 -0
  48. package/dist/commands/test.d.ts.map +1 -0
  49. package/dist/commands/test.js +166 -0
  50. package/dist/commands/test.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +276 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/lib/inspect-routes.d.ts +2 -0
  56. package/dist/lib/inspect-routes.d.ts.map +1 -0
  57. package/dist/lib/inspect-routes.js +150 -0
  58. package/dist/lib/inspect-routes.js.map +1 -0
  59. package/dist/lib/start-repl.d.ts +2 -0
  60. package/dist/lib/start-repl.d.ts.map +1 -0
  61. package/dist/lib/start-repl.js +120 -0
  62. package/dist/lib/start-repl.js.map +1 -0
  63. package/dist/manifest.d.ts +4 -0
  64. package/dist/manifest.d.ts.map +1 -0
  65. package/dist/manifest.js +489 -0
  66. package/dist/manifest.js.map +1 -0
  67. package/dist/routes.d.ts +17 -0
  68. package/dist/routes.d.ts.map +1 -0
  69. package/dist/routes.js +316 -0
  70. package/dist/routes.js.map +1 -0
  71. package/dist/utils.d.ts +24 -0
  72. package/dist/utils.d.ts.map +1 -0
  73. package/dist/utils.js +54 -0
  74. package/dist/utils.js.map +1 -0
  75. package/package.json +58 -4
package/dist/index.js ADDED
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const commander_1 = require("commander");
38
+ const utils_1 = require("./utils");
39
+ const dev_1 = require("./commands/dev");
40
+ const build_1 = require("./commands/build");
41
+ const start_1 = require("./commands/start");
42
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
43
+ const pkg = require('../package.json');
44
+ const program = new commander_1.Command();
45
+ program
46
+ .name('exisjs')
47
+ .alias('exis')
48
+ .description('The ExisJS Framework CLI')
49
+ .version(pkg.version, '-v, --version', 'Output the current version');
50
+ // ─── dev ─────────────────────────────────────────────────────────────────────
51
+ program
52
+ .command('dev')
53
+ .description('Start the development server with hot reload')
54
+ .option('-p, --port <port>', 'Port to listen on')
55
+ .option('-H, --host <host>', 'Host to bind to')
56
+ .option('-e, --entry <file>', 'Custom entry file path')
57
+ .option('--force', 'Start even if a dev server for this port is running')
58
+ .action(async (options) => {
59
+ await (0, dev_1.devCommand)(options);
60
+ });
61
+ // ─── build ────────────────────────────────────────────────────────────────────
62
+ program
63
+ .command('build')
64
+ .description('Compile TypeScript to production JavaScript')
65
+ .option('-o, --out-dir <dir>', 'Output directory (default: dist)')
66
+ .option('--no-clean', 'Skip cleaning the output directory')
67
+ .option('--skip-env-check', 'Skip build-time route and environment validation')
68
+ .option('--dry-run', 'Compile and bundle without failing on missing environment variables')
69
+ .option('-m, --mode <mode>', 'Environment mode to load (e.g. production, staging, development)')
70
+ .action(async (options) => {
71
+ await (0, build_1.buildCommand)(options);
72
+ });
73
+ // ─── clean ────────────────────────────────────────────────────────────────────
74
+ program
75
+ .command('migrate')
76
+ .description('Update this project to the @exisjs/cli layout (0.10)')
77
+ .option('--dry-run', 'Show the changes without writing them')
78
+ .action(async (options) => {
79
+ const { migrateCommand } = await Promise.resolve().then(() => __importStar(require('./commands/migrate')));
80
+ await migrateCommand(options);
81
+ });
82
+ program
83
+ .command('clean')
84
+ .alias('cl')
85
+ .description('Clean .exis build artifacts and cached types')
86
+ .option('-a, --all', 'Also remove dist/ directory if present')
87
+ .action(async (options) => {
88
+ const { cleanCommand } = await Promise.resolve().then(() => __importStar(require('./commands/clean')));
89
+ await cleanCommand(options);
90
+ });
91
+ // ─── start ────────────────────────────────────────────────────────────────────
92
+ program
93
+ .command('start')
94
+ .description('Start the production server')
95
+ .option('-p, --port <port>', 'Port to listen on')
96
+ .option('-H, --host <host>', 'Host to bind to')
97
+ .option('-e, --entry <file>', 'Custom entry file path')
98
+ .action(async (options) => {
99
+ await (0, start_1.startCommand)(options);
100
+ });
101
+ // ─── routes ───────────────────────────────────────────────────────────────────
102
+ program
103
+ .command('routes')
104
+ .description('Print the application routing table')
105
+ .option('-e, --entry <file>', 'Custom entry file path')
106
+ .option('-m, --method <method>', 'Filter endpoints by HTTP method (e.g. GET, POST)')
107
+ .option('-f, --filter <keyword>', 'Filter endpoints by path, method, or source')
108
+ .option('--json', 'Output routes as JSON')
109
+ .action(async (options) => {
110
+ const { routesCommand } = await Promise.resolve().then(() => __importStar(require('./routes')));
111
+ await routesCommand(process.cwd(), options);
112
+ });
113
+ // ─── init ─────────────────────────────────────────────────────────────────────
114
+ program
115
+ .command('init')
116
+ .description('Initialize a new Exis JS project in the current directory')
117
+ .action(async () => {
118
+ const { initCommand } = await Promise.resolve().then(() => __importStar(require('./commands/init')));
119
+ await initCommand();
120
+ });
121
+ // ─── exports ──────────────────────────────────────────────────────────────────
122
+ program
123
+ .command('exports')
124
+ .description('List all available framework exports')
125
+ .action(async () => {
126
+ const { exportsCommand } = await Promise.resolve().then(() => __importStar(require('./commands/exports')));
127
+ await exportsCommand();
128
+ });
129
+ // ─── console ──────────────────────────────────────────────────────────────────
130
+ program
131
+ .command('console')
132
+ .alias('repl')
133
+ .description('Start the interactive REPL console')
134
+ .option('-e, --entry <file>', 'Custom entry file path')
135
+ .action(async (options) => {
136
+ const { replCommand } = await Promise.resolve().then(() => __importStar(require('./commands/repl')));
137
+ await replCommand(options);
138
+ });
139
+ // ─── test ─────────────────────────────────────────────────────────────────────
140
+ program
141
+ .command('test [files...]')
142
+ .description('Run the native test suite (node:test)')
143
+ .option('--watch', 'Watch for file changes and re-run tests')
144
+ .option('-u, --update', 'Update test snapshots')
145
+ .option('-e, --entry <file>', 'Custom entry file path')
146
+ .action(async (files, options) => {
147
+ const { testCommand } = await Promise.resolve().then(() => __importStar(require('./commands/test')));
148
+ await testCommand({ ...options, files });
149
+ });
150
+ // ─── run / exec ───────────────────────────────────────────────────────────────
151
+ program
152
+ .command('run <scriptOrCmd> [args...]')
153
+ .alias('exec')
154
+ .description('Execute a TypeScript/JavaScript script or CLI tool with ExisJS .env loaded')
155
+ .allowUnknownOption()
156
+ .option('-e, --env <file>', 'Custom env file to load')
157
+ .option('-m, --mode <mode>', 'Environment mode to load (e.g. production, development, staging)')
158
+ .action(async (scriptOrCmd, args, options) => {
159
+ const { runCommand } = await Promise.resolve().then(() => __importStar(require('./commands/run')));
160
+ await runCommand(scriptOrCmd, args, options);
161
+ });
162
+ // ─── info ─────────────────────────────────────────────────────────────────────
163
+ program
164
+ .command('info')
165
+ .description('Show environment and version information')
166
+ .action(() => {
167
+ (0, utils_1.banner)();
168
+ console.log(`${utils_1.c.gray} Version: ${utils_1.c.reset}${utils_1.c.cyan}${pkg.version}${utils_1.c.reset}`);
169
+ console.log(`${utils_1.c.gray} Node.js: ${utils_1.c.reset}${utils_1.c.cyan}${process.version}${utils_1.c.reset}`);
170
+ console.log(`${utils_1.c.gray} Platform: ${utils_1.c.reset}${utils_1.c.cyan}${process.platform}${utils_1.c.reset}`);
171
+ console.log(`${utils_1.c.gray} Arch: ${utils_1.c.reset}${utils_1.c.cyan}${process.arch}${utils_1.c.reset}`);
172
+ console.log();
173
+ });
174
+ // ─── doctor ───────────────────────────────────────────────────────────────────
175
+ program
176
+ .command('doctor')
177
+ .description('Diagnose project health, native Rust acceleration, routes, and config')
178
+ .action(async () => {
179
+ const { doctorCommand } = await Promise.resolve().then(() => __importStar(require('./commands/doctor')));
180
+ await doctorCommand();
181
+ });
182
+ // ─── Default: show banner on bare `exisjs` / `exis` ─────────────────────────
183
+ if (process.argv.length === 2) {
184
+ (0, utils_1.banner)();
185
+ console.log(`${utils_1.c.gray} Usage:${utils_1.c.reset}`);
186
+ console.log(` ${utils_1.c.cyan}exisjs dev${utils_1.c.reset} Start dev server`);
187
+ console.log(` ${utils_1.c.cyan}exisjs build${utils_1.c.reset} Build for production`);
188
+ console.log(` ${utils_1.c.cyan}exisjs start${utils_1.c.reset} Start production server`);
189
+ console.log(` ${utils_1.c.cyan}exisjs routes${utils_1.c.reset} Inspect application routing table`);
190
+ console.log(` ${utils_1.c.cyan}exisjs test${utils_1.c.reset} Run test suite`);
191
+ console.log(` ${utils_1.c.cyan}exisjs run <file>${utils_1.c.reset} Run script or tool with ExisJS .env loaded`);
192
+ console.log(` ${utils_1.c.cyan}exisjs doctor${utils_1.c.reset} Run project health and environment diagnostics`);
193
+ console.log(` ${utils_1.c.cyan}exisjs info${utils_1.c.reset} Show environment info`);
194
+ console.log(` ${utils_1.c.cyan}exisjs init${utils_1.c.reset} Initialize a project in current directory`);
195
+ console.log(` ${utils_1.c.cyan}exisjs exports${utils_1.c.reset} List all available framework exports`);
196
+ console.log(` ${utils_1.c.cyan}exisjs generate <type>${utils_1.c.reset} Scaffold a new feature`);
197
+ console.log();
198
+ console.log(`${utils_1.c.dim} (Short alias '${utils_1.c.cyan}exis${utils_1.c.dim}' is also available)${utils_1.c.reset}`);
199
+ console.log();
200
+ process.exit(0);
201
+ }
202
+ // ─── generate ─────────────────────────────────────────────────────────────────
203
+ program
204
+ .command('generate')
205
+ .alias('g')
206
+ .description('Generate new features')
207
+ .argument('<type>', 'Type to generate (resource|crud|route|controller|service|schema|model|boundary|plugin|middleware|test)')
208
+ .argument('[name]', 'Name of the feature')
209
+ .option('--oop', 'Generate using Class-Based (OOP) paradigm instead of Functional')
210
+ .option('-n, --named', 'Prefix filenames with the feature name (e.g. user.route.ts, user.schema.ts)')
211
+ .action(async (type, name, options) => {
212
+ const { generateCrud, generateModel, generateController, generateService, generateSchema, generateBoundary, generateErrorHandler, generateCronJob, generatePlugin, generateMiddleware, generateTest, } = await Promise.resolve().then(() => __importStar(require('./commands/generate')));
213
+ if (!name && type !== 'error' && type !== 'err')
214
+ return console.error('Name is required');
215
+ const cwd = process.cwd();
216
+ switch (type) {
217
+ case 'cron':
218
+ case 'job':
219
+ await generateCronJob(name, cwd, options);
220
+ break;
221
+ case 'error':
222
+ case 'err':
223
+ await generateErrorHandler(cwd, options);
224
+ break;
225
+ case 'resource':
226
+ case 'crud':
227
+ await generateCrud(name, cwd, options);
228
+ break;
229
+ case 'model':
230
+ await generateModel(name, cwd, options);
231
+ break;
232
+ case 'route':
233
+ case 'controller':
234
+ case 'r':
235
+ case 'c':
236
+ await generateController(name, cwd, options);
237
+ break;
238
+ case 'service':
239
+ case 's':
240
+ await generateService(name, cwd, options);
241
+ break;
242
+ case 'schema':
243
+ case 'sc':
244
+ await generateSchema(name, cwd);
245
+ break;
246
+ case 'boundary':
247
+ case 'b':
248
+ await generateBoundary(name, cwd, options);
249
+ break;
250
+ case 'plugin':
251
+ case 'p':
252
+ await generatePlugin(name);
253
+ break;
254
+ case 'middleware':
255
+ case 'm':
256
+ await generateMiddleware(name);
257
+ break;
258
+ case 'test':
259
+ case 't':
260
+ await generateTest(name);
261
+ break;
262
+ default:
263
+ console.error('Unknown type. Supported: resource, crud, route, controller, service, schema, model, boundary, error, plugin, middleware, test');
264
+ }
265
+ });
266
+ program.parseAsync(process.argv).catch(async (err) => {
267
+ try {
268
+ const { formatCliError } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
269
+ formatCliError(err instanceof Error ? err : new Error(String(err)));
270
+ }
271
+ catch {
272
+ console.error(err);
273
+ }
274
+ process.exit(1);
275
+ });
276
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=inspect-routes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-routes.d.ts","sourceRoot":"","sources":["../../src/lib/inspect-routes.ts"],"names":[],"mappings":""}
@@ -0,0 +1,150 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_url_1 = require("node:url");
40
+ const node_path_1 = __importDefault(require("node:path"));
41
+ const node_fs_1 = __importDefault(require("node:fs"));
42
+ const internal_1 = require("exisjs/internal");
43
+ async function inspect() {
44
+ const entryFile = process.env.EXIS_ENTRY_FILE;
45
+ if (!entryFile) {
46
+ console.error('EXIS_ENTRY_FILE environment variable is missing.');
47
+ process.exit(1);
48
+ }
49
+ const cwd = process.cwd();
50
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
51
+ // 1. Load .env
52
+ try {
53
+ const { loadEnv } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
54
+ loadEnv(cwd);
55
+ }
56
+ catch {
57
+ /* ignore */
58
+ }
59
+ // 2. Register path alias loader
60
+ try {
61
+ const { registerPathAliasLoader } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
62
+ registerPathAliasLoader(cwd);
63
+ }
64
+ catch {
65
+ /* ignore */
66
+ }
67
+ // 3. Auto-load Environment variables validation file if it exists
68
+ const envFiles = [
69
+ node_path_1.default.join(cwd, 'src', 'config', 'env.ts'),
70
+ node_path_1.default.join(cwd, 'src', 'config', 'env.js'),
71
+ ];
72
+ for (const envFile of envFiles) {
73
+ if (node_fs_1.default.existsSync(envFile)) {
74
+ await dynamicImport((0, node_url_1.pathToFileURL)(envFile).href).catch(() => {
75
+ /* ignore */
76
+ });
77
+ break;
78
+ }
79
+ }
80
+ try {
81
+ const url = (0, node_url_1.pathToFileURL)(entryFile).href;
82
+ const mod = await dynamicImport(url);
83
+ const isApp = (obj) => !!(obj &&
84
+ typeof obj === 'object' &&
85
+ 'getRoutes' in obj &&
86
+ typeof obj.getRoutes === 'function');
87
+ let rawApp = mod.default || mod.app;
88
+ if (rawApp &&
89
+ !rawApp._isExisAppDefinition &&
90
+ typeof rawApp.create !== 'function' &&
91
+ rawApp.default) {
92
+ rawApp = rawApp.default;
93
+ }
94
+ let app;
95
+ if (rawApp && rawApp._isExisAppDefinition) {
96
+ const { App, setActiveAppInstance } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
97
+ app = new App(rawApp.options);
98
+ setActiveAppInstance(app);
99
+ }
100
+ else if (rawApp &&
101
+ typeof rawApp === 'function' &&
102
+ rawApp.prototype &&
103
+ rawApp.prototype[Symbol.for('exisjs:server_config')]) {
104
+ const serverConfig = rawApp.prototype[Symbol.for('exisjs:server_config')];
105
+ const { App, setActiveAppInstance } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
106
+ app = new App({ plugins: serverConfig.plugins });
107
+ setActiveAppInstance(app);
108
+ }
109
+ else {
110
+ const appExport = Object.values(mod).find(isApp);
111
+ app = isApp(rawApp) ? rawApp : appExport;
112
+ }
113
+ if (!app) {
114
+ console.error('\x1b[31m[Exis CLI Error]\x1b[0m Your entry file must export an instance of Exis App.');
115
+ process.exit(1);
116
+ }
117
+ // Boot the app to register file-system routes
118
+ try {
119
+ await app.create();
120
+ if (app.routeScanner?.loadAllRoutes) {
121
+ await app.routeScanner.loadAllRoutes();
122
+ }
123
+ }
124
+ catch {
125
+ /* ignore if already created */
126
+ }
127
+ const routes = app.getRoutes().map((r) => ({
128
+ method: r.method,
129
+ path: r.path,
130
+ handlersCount: r.handlers ? r.handlers.length : 1,
131
+ sourceFile: r.sourceFile || null,
132
+ access: (0, internal_1.describeAccess)(r.schema?.access),
133
+ }));
134
+ // Send the extracted routes via IPC if available, otherwise print serialized payload marker
135
+ if (process.send) {
136
+ process.send({ type: 'exis:routes', routes });
137
+ process.exit(0);
138
+ }
139
+ else {
140
+ console.log(`__EXIS_ROUTES_PAYLOAD__:${JSON.stringify(routes)}`);
141
+ process.exit(0);
142
+ }
143
+ }
144
+ catch (err) {
145
+ console.error('\x1b[31m[Exis CLI Error]\x1b[0m Failed to import app:', err?.message || err);
146
+ process.exit(1);
147
+ }
148
+ }
149
+ inspect();
150
+ //# sourceMappingURL=inspect-routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspect-routes.js","sourceRoot":"","sources":["../../src/lib/inspect-routes.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,uCAAwC;AACxC,0DAA4B;AAC5B,sDAAwB;AACxB,8CAAgD;AAEhD,KAAK,UAAU,OAAO;IACpB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,CAAA;IAC7C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAA;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAA;IAE3E,eAAe;IACf,IAAI,CAAC;QACH,MAAM,EAAE,OAAO,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAA;QACnD,OAAO,CAAC,GAAG,CAAC,CAAA;IACd,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,EAAE,uBAAuB,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAA;QACnE,uBAAuB,CAAC,GAAG,CAAC,CAAA;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,YAAY;IACd,CAAC;IAED,kEAAkE;IAClE,MAAM,QAAQ,GAAG;QACf,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;QACzC,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC;KAC1C,CAAA;IACD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC3B,MAAM,aAAa,CAAC,IAAA,wBAAa,EAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;gBAC1D,YAAY;YACd,CAAC,CAAC,CAAA;YACF,MAAK;QACP,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAA,wBAAa,EAAC,SAAS,CAAC,CAAC,IAAI,CAAA;QACzC,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,GAAG,CAAC,CAAA;QAEpC,MAAM,KAAK,GAAG,CAAC,GAAY,EAAW,EAAE,CACtC,CAAC,CAAC,CACA,GAAG;YACH,OAAO,GAAG,KAAK,QAAQ;YACvB,WAAW,IAAI,GAAG;YAClB,OAAQ,GAA+B,CAAC,SAAS,KAAK,UAAU,CACjE,CAAA;QAEH,IAAI,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,GAAG,CAAA;QACnC,IACE,MAAM;YACN,CAAC,MAAM,CAAC,oBAAoB;YAC5B,OAAO,MAAM,CAAC,MAAM,KAAK,UAAU;YACnC,MAAM,CAAC,OAAO,EACd,CAAC;YACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAA;QACzB,CAAC;QAED,IAAI,GAAQ,CAAA;QAEZ,IAAI,MAAM,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAC1C,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAA;YACrE,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;YAC7B,oBAAoB,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;aAAM,IACL,MAAM;YACN,OAAO,MAAM,KAAK,UAAU;YAC5B,MAAM,CAAC,SAAS;YAChB,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,EACpD,CAAC;YACD,MAAM,YAAY,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC,CAAA;YACzE,MAAM,EAAE,GAAG,EAAE,oBAAoB,EAAE,GAAG,wDAAa,iBAAiB,GAAC,CAAA;YACrE,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,OAAO,EAAE,CAAC,CAAA;YAChD,oBAAoB,CAAC,GAAG,CAAC,CAAA;QAC3B,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YAChD,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAA;QAC1C,CAAC;QAED,IAAI,CAAC,GAAG,EAAE,CAAC;YACT,OAAO,CAAC,KAAK,CACX,sFAAsF,CACvF,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QAED,8CAA8C;QAC9C,IAAI,CAAC;YACH,MAAM,GAAG,CAAC,MAAM,EAAE,CAAA;YAClB,IAAI,GAAG,CAAC,YAAY,EAAE,aAAa,EAAE,CAAC;gBACpC,MAAM,GAAG,CAAC,YAAY,CAAC,aAAa,EAAE,CAAA;YACxC,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+BAA+B;QACjC,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,SAAS,EAAE,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC;YAC9C,MAAM,EAAE,CAAC,CAAC,MAAM;YAChB,IAAI,EAAE,CAAC,CAAC,IAAI;YACZ,aAAa,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACjD,UAAU,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI;YAChC,MAAM,EAAE,IAAA,yBAAc,EAAC,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC;SACzC,CAAC,CAAC,CAAA;QAEH,4FAA4F;QAC5F,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,CAAC,CAAA;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,2BAA2B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;YAChE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAO,CAAC,KAAK,CACX,uDAAuD,EACvD,GAAG,EAAE,OAAO,IAAI,GAAG,CACpB,CAAA;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;AACH,CAAC;AAED,OAAO,EAAE,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=start-repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-repl.d.ts","sourceRoot":"","sources":["../../src/lib/start-repl.ts"],"names":[],"mappings":""}
@@ -0,0 +1,120 @@
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
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ const node_repl_1 = __importDefault(require("node:repl"));
40
+ const node_url_1 = require("node:url");
41
+ const node_fs_1 = __importDefault(require("node:fs"));
42
+ const node_path_1 = __importDefault(require("node:path"));
43
+ async function startRepl() {
44
+ const entryFile = process.env.EXIS_ENTRY_FILE;
45
+ if (!entryFile) {
46
+ console.error('EXIS_ENTRY_FILE environment variable is missing.');
47
+ process.exit(1);
48
+ }
49
+ try {
50
+ const cwd = process.cwd();
51
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
52
+ // 1. Load .env files so process.env is populated
53
+ const { loadEnv } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
54
+ loadEnv(cwd);
55
+ // 2. Auto-load Environment variables validation file if it exists
56
+ const envFiles = [
57
+ node_path_1.default.join(cwd, 'src', 'config', 'env.ts'),
58
+ node_path_1.default.join(cwd, 'src', 'config', 'env.js'),
59
+ ];
60
+ for (const envFile of envFiles) {
61
+ if (node_fs_1.default.existsSync(envFile)) {
62
+ await dynamicImport((0, node_url_1.pathToFileURL)(envFile).href);
63
+ break;
64
+ }
65
+ }
66
+ const url = (0, node_url_1.pathToFileURL)(entryFile).href;
67
+ const mod = await dynamicImport(url);
68
+ // Support declarative `export default exis({ ... })`
69
+ const app = mod.default || mod.app;
70
+ if (app &&
71
+ typeof app.create === 'function' &&
72
+ typeof app.listen === 'function') {
73
+ // Boot the app plugins and database connections without starting HTTP server
74
+ await app.create();
75
+ if (typeof app.onStartHook === 'function') {
76
+ await app.onStartHook(app);
77
+ }
78
+ }
79
+ // 3. Auto-discover and inject Models
80
+ const modelsToInject = {};
81
+ const possibleModelDirs = [
82
+ node_path_1.default.join(cwd, 'src', 'models'),
83
+ node_path_1.default.join(cwd, 'models'),
84
+ ];
85
+ for (const dir of possibleModelDirs) {
86
+ if (node_fs_1.default.existsSync(dir)) {
87
+ const files = node_fs_1.default.readdirSync(dir);
88
+ for (const file of files) {
89
+ if (file.endsWith('.ts') || file.endsWith('.js')) {
90
+ const modelPath = node_path_1.default.join(dir, file);
91
+ const modelUrl = (0, node_url_1.pathToFileURL)(modelPath).href;
92
+ const modelMod = await dynamicImport(modelUrl).catch(() => ({}));
93
+ // Look for exported classes/variables that might be models
94
+ for (const key in modelMod) {
95
+ if (key === 'default') {
96
+ const name = node_path_1.default.basename(file, node_path_1.default.extname(file));
97
+ modelsToInject[name] = modelMod.default;
98
+ }
99
+ else {
100
+ modelsToInject[key] = modelMod[key];
101
+ }
102
+ }
103
+ }
104
+ }
105
+ }
106
+ }
107
+ if (Object.keys(modelsToInject).length > 0) {
108
+ console.log(`\x1b[32m[exis]\x1b[0m Auto-injected models: ${Object.keys(modelsToInject).join(', ')}`);
109
+ }
110
+ const replServer = node_repl_1.default.start({ prompt: 'exis> ' });
111
+ replServer.context.app = app;
112
+ Object.assign(replServer.context, modelsToInject);
113
+ }
114
+ catch (err) {
115
+ console.error(err);
116
+ process.exit(1);
117
+ }
118
+ }
119
+ startRepl();
120
+ //# sourceMappingURL=start-repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start-repl.js","sourceRoot":"","sources":["../../src/lib/start-repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare function atomicWriteFile(filePath: string, content: string): Promise<void>;
2
+ export declare function generateManifest(cwd: string, outDir: string, isDev?: boolean): Promise<void>;
3
+ export declare function generateExisEnv(cwd: string): Promise<void>;
4
+ //# sourceMappingURL=manifest.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.d.ts","sourceRoot":"","sources":["../src/manifest.ts"],"names":[],"mappings":"AAKA,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC,CAgBf;AAED,wBAAsB,gBAAgB,CACpC,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,KAAK,UAAQ,GACZ,OAAO,CAAC,IAAI,CAAC,CAqTf;AA+GD,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAyEhE"}