@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/routes.js ADDED
@@ -0,0 +1,316 @@
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
+ exports.routesCommand = routesCommand;
40
+ const node_path_1 = __importDefault(require("node:path"));
41
+ const node_fs_1 = __importDefault(require("node:fs"));
42
+ const node_child_process_1 = require("node:child_process");
43
+ const node_url_1 = require("node:url");
44
+ const internal_1 = require("exisjs/internal");
45
+ async function routesCommand(cwd = process.cwd(), options = {}) {
46
+ process.env.EXIS_CLI_MODE = '1';
47
+ await (0, internal_1.loadConfig)(cwd);
48
+ const opts = typeof options === 'string' ? { entry: options } : options;
49
+ let appPath = null;
50
+ if (opts.entry) {
51
+ const abs = node_path_1.default.resolve(cwd, opts.entry);
52
+ appPath = node_fs_1.default.existsSync(abs) ? abs : null;
53
+ }
54
+ else {
55
+ const srcTs = node_path_1.default.join(cwd, 'src/http/server.ts');
56
+ const srcJs = node_path_1.default.join(cwd, 'src/http/server.js');
57
+ const rootTs = node_path_1.default.join(cwd, 'http/server.ts');
58
+ const rootJs = node_path_1.default.join(cwd, 'http/server.js');
59
+ if (node_fs_1.default.existsSync(srcTs))
60
+ appPath = srcTs;
61
+ else if (node_fs_1.default.existsSync(srcJs))
62
+ appPath = srcJs;
63
+ else if (node_fs_1.default.existsSync(rootTs))
64
+ appPath = rootTs;
65
+ else if (node_fs_1.default.existsSync(rootJs))
66
+ appPath = rootJs;
67
+ }
68
+ if (!appPath || !node_fs_1.default.existsSync(appPath)) {
69
+ console.error('\x1b[31m[Exis CLI Error]\x1b[0m Could not find application entry point (tried src/http/server.ts or http/server.ts).');
70
+ process.exit(1);
71
+ }
72
+ // Ensure path aliases work
73
+ try {
74
+ (0, internal_1.registerPathAliasLoader)(cwd);
75
+ }
76
+ catch {
77
+ /* ignore */
78
+ }
79
+ // Check if we can/should extract routes via tsx child process (mandatory for .ts / .mts files)
80
+ const isTsFile = appPath.endsWith('.ts') || appPath.endsWith('.mts');
81
+ let routes;
82
+ if (isTsFile) {
83
+ routes = await extractRoutesViaSubprocess(cwd, appPath);
84
+ }
85
+ else {
86
+ // Try in-process import for pure .js / .mjs
87
+ try {
88
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
89
+ const mod = await dynamicImport((0, node_url_1.pathToFileURL)(appPath).href);
90
+ const isApp = (obj) => !!(obj &&
91
+ typeof obj === 'object' &&
92
+ 'getRoutes' in obj &&
93
+ typeof obj.getRoutes === 'function');
94
+ let rawApp = mod.default || mod.app;
95
+ if (rawApp &&
96
+ !rawApp._isExisAppDefinition &&
97
+ typeof rawApp.create !== 'function' &&
98
+ rawApp.default) {
99
+ rawApp = rawApp.default;
100
+ }
101
+ let app;
102
+ if (rawApp && rawApp._isExisAppDefinition) {
103
+ const { App, setActiveAppInstance } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
104
+ app = new App(rawApp.options);
105
+ setActiveAppInstance(app);
106
+ }
107
+ else if (rawApp &&
108
+ typeof rawApp === 'function' &&
109
+ rawApp.prototype &&
110
+ rawApp.prototype[Symbol.for('exisjs:server_config')]) {
111
+ const serverConfig = rawApp.prototype[Symbol.for('exisjs:server_config')];
112
+ const { App, setActiveAppInstance } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
113
+ app = new App({ plugins: serverConfig.plugins });
114
+ setActiveAppInstance(app);
115
+ }
116
+ else {
117
+ const appExport = Object.values(mod).find(isApp);
118
+ app = isApp(rawApp) ? rawApp : appExport;
119
+ }
120
+ if (!app) {
121
+ throw new Error('Your entry file must export an instance of Exis App.');
122
+ }
123
+ try {
124
+ await app.create();
125
+ if (app.routeScanner?.loadAllRoutes) {
126
+ await app.routeScanner.loadAllRoutes();
127
+ }
128
+ }
129
+ catch {
130
+ /* ignore */
131
+ }
132
+ routes = app.getRoutes().map((r) => ({
133
+ method: r.method,
134
+ path: r.path,
135
+ handlersCount: r.handlers ? r.handlers.length : 1,
136
+ sourceFile: r.sourceFile || null,
137
+ }));
138
+ }
139
+ catch {
140
+ // Fallback to subprocess if in-process import failed
141
+ routes = await extractRoutesViaSubprocess(cwd, appPath);
142
+ }
143
+ }
144
+ // Filter by method if specified
145
+ if (opts.method) {
146
+ const targetMethod = opts.method.toUpperCase();
147
+ routes = routes.filter((r) => r.method.toUpperCase() === targetMethod);
148
+ }
149
+ // Filter by keyword if specified
150
+ if (opts.filter) {
151
+ const kw = opts.filter.toLowerCase();
152
+ routes = routes.filter((r) => r.path.toLowerCase().includes(kw) ||
153
+ r.method.toLowerCase().includes(kw) ||
154
+ (r.sourceFile && r.sourceFile.toLowerCase().includes(kw)));
155
+ }
156
+ // JSON Output
157
+ if (opts.json) {
158
+ const jsonOutput = routes.map((r) => ({
159
+ method: r.method,
160
+ path: r.path,
161
+ middlewares: Math.max(0, r.handlersCount - 1),
162
+ access: r.access ?? '-',
163
+ sourceFile: r.sourceFile
164
+ ? node_path_1.default.relative(cwd, r.sourceFile).replace(/\\/g, '/')
165
+ : null,
166
+ }));
167
+ console.log(JSON.stringify(jsonOutput, null, 2));
168
+ process.exit(0);
169
+ }
170
+ // Terminal Visual Output
171
+ const reset = '\x1b[0m';
172
+ const bold = '\x1b[1m';
173
+ const dim = '\x1b[2m';
174
+ const primary = '\x1b[38;2;160;70;255m';
175
+ const cyan = '\x1b[36m';
176
+ const yellow = '\x1b[33m';
177
+ const gray = '\x1b[90m';
178
+ const methodBadges = {
179
+ GET: '\x1b[1;30;42m GET \x1b[0m',
180
+ POST: '\x1b[1;37;44m POST \x1b[0m',
181
+ PUT: '\x1b[1;30;43m PUT \x1b[0m',
182
+ PATCH: '\x1b[1;37;45m PATCH \x1b[0m',
183
+ DELETE: '\x1b[1;37;41m DEL \x1b[0m',
184
+ OPTIONS: '\x1b[1;37;100m OPT \x1b[0m',
185
+ HEAD: '\x1b[1;37;100m HEAD \x1b[0m',
186
+ ALL: '\x1b[1;37;46m ALL \x1b[0m',
187
+ };
188
+ const formatPath = (routePath) => {
189
+ // Highlight dynamic parameters like :id or *slug with yellow/cyan
190
+ return routePath.replace(/(:[a-zA-Z0-9_]+|\*[a-zA-Z0-9_]+)/g, `${yellow}$1${reset}`);
191
+ };
192
+ console.log(`\n${primary}${bold}⚡ ExisJS Routing Table${reset}\n`);
193
+ if (routes.length === 0) {
194
+ console.log(` ${dim}No routes matching criteria.${reset}\n`);
195
+ process.exit(0);
196
+ }
197
+ // Compute column widths
198
+ const renderedPaths = routes.map((r) => r.path);
199
+ const maxPathLen = Math.max(20, ...renderedPaths.map((p) => p.length));
200
+ const maxAccessLen = Math.max(6, ...routes.map((r) => (r.access ?? '-').length));
201
+ const maxSourceLen = Math.max(15, ...routes.map((r) => {
202
+ if (!r.sourceFile)
203
+ return 6;
204
+ const rel = node_path_1.default.relative(cwd, r.sourceFile).replace(/\\/g, '/');
205
+ return rel.length;
206
+ }));
207
+ // Table Header
208
+ console.log(` ${dim}┌───────┬─${'─'.repeat(maxPathLen)}─┬────────────┬─${'─'.repeat(maxAccessLen)}─┬─${'─'.repeat(maxSourceLen)}─┐${reset}`);
209
+ console.log(` ${dim}│${reset} ${bold}METHOD${reset} ${dim}│${reset} ${bold}${'PATH'.padEnd(maxPathLen)}${reset} ${dim}│${reset} ${bold}MIDDLEWARES${reset} ${dim}│${reset} ${bold}${'ACCESS'.padEnd(maxAccessLen)}${reset} ${dim}│${reset} ${bold}${'SOURCE'.padEnd(maxSourceLen)}${reset} ${dim}│${reset}`);
210
+ console.log(` ${dim}├───────┼─${'─'.repeat(maxPathLen)}─┼────────────┼─${'─'.repeat(maxAccessLen)}─┼─${'─'.repeat(maxSourceLen)}─┤${reset}`);
211
+ const methodCounts = {};
212
+ for (const route of routes) {
213
+ const method = route.method.toUpperCase();
214
+ methodCounts[method] = (methodCounts[method] || 0) + 1;
215
+ const badge = methodBadges[method] || `\x1b[1;37;100m ${method.slice(0, 5)} \x1b[0m`;
216
+ const rawMethodLen = method === 'DELETE' ? 3 : method.length;
217
+ const methodPadding = ' '.repeat(Math.max(0, 5 - rawMethodLen));
218
+ const highlightedPath = formatPath(route.path);
219
+ const pathPadding = ' '.repeat(Math.max(0, maxPathLen - route.path.length));
220
+ const mwCount = Math.max(0, route.handlersCount - 1);
221
+ const mwStr = mwCount > 0
222
+ ? `${cyan}+${mwCount} step${mwCount > 1 ? 's' : ''}${reset}`
223
+ : `${dim}none${reset}`;
224
+ const mwPadding = ' '.repeat(Math.max(0, 10 - (mwCount > 0 ? (mwCount > 9 ? 8 : 7) : 4)));
225
+ const access = route.access ?? '-';
226
+ const accessStr = access === 'public'
227
+ ? `${yellow}${access}${reset}`
228
+ : access === '-'
229
+ ? `${dim}${access}${reset}`
230
+ : `${cyan}${access}${reset}`;
231
+ const accessPadding = ' '.repeat(Math.max(0, maxAccessLen - access.length));
232
+ let relSource = '-';
233
+ if (route.sourceFile) {
234
+ relSource = node_path_1.default.relative(cwd, route.sourceFile).replace(/\\/g, '/');
235
+ }
236
+ const sourcePadding = ' '.repeat(Math.max(0, maxSourceLen - relSource.length));
237
+ console.log(` ${dim}│${reset} ${badge}${methodPadding} ${dim}│${reset} ${highlightedPath}${pathPadding} ${dim}│${reset} ${mwStr}${mwPadding} ${dim}│${reset} ${accessStr}${accessPadding} ${dim}│${reset} ${dim}${relSource}${reset}${sourcePadding} ${dim}│${reset}`);
238
+ }
239
+ console.log(` ${dim}└───────┴─${'─'.repeat(maxPathLen)}─┴────────────┴─${'─'.repeat(maxAccessLen)}─┴─${'─'.repeat(maxSourceLen)}─┘${reset}`);
240
+ // Summary Card
241
+ const breakdown = Object.entries(methodCounts)
242
+ .map(([m, c]) => `${bold}${c}${reset} ${dim}${m}${reset}`)
243
+ .join(` ${gray}·${reset} `);
244
+ console.log(`\n ${primary}●${reset} Total Endpoints: ${bold}${routes.length}${reset} (${breakdown})\n`);
245
+ process.exit(0);
246
+ }
247
+ /**
248
+ * Spawns a subprocess with tsx runner to safely import and extract routes from TypeScript applications on Windows and POSIX.
249
+ */
250
+ async function extractRoutesViaSubprocess(cwd, appPath) {
251
+ const inspectScript = node_path_1.default.resolve(__dirname, 'lib/inspect-routes.js');
252
+ // Resolve tsx import or cli
253
+ let execArgv = [];
254
+ try {
255
+ const resolvedTsx = require.resolve('tsx', { paths: [cwd, __dirname] });
256
+ execArgv = ['--import', (0, node_url_1.pathToFileURL)(resolvedTsx).href];
257
+ }
258
+ catch {
259
+ try {
260
+ execArgv = [require.resolve('tsx/cli')];
261
+ }
262
+ catch {
263
+ execArgv = [];
264
+ }
265
+ }
266
+ return new Promise((resolve, reject) => {
267
+ let capturedRoutes = null;
268
+ const child = (0, node_child_process_1.fork)(inspectScript, [], {
269
+ cwd,
270
+ execArgv,
271
+ env: {
272
+ ...process.env,
273
+ EXIS_ENTRY_FILE: appPath,
274
+ EXIS_CLI_MODE: '1',
275
+ },
276
+ stdio: ['pipe', 'pipe', 'inherit', 'ipc'],
277
+ });
278
+ child.stdout?.on('data', (data) => {
279
+ const text = data.toString();
280
+ if (text.includes('__EXIS_ROUTES_PAYLOAD__:')) {
281
+ const line = text
282
+ .split('\n')
283
+ .find((l) => l.includes('__EXIS_ROUTES_PAYLOAD__:'));
284
+ if (line) {
285
+ try {
286
+ const rawJson = line.split('__EXIS_ROUTES_PAYLOAD__:')[1];
287
+ capturedRoutes = JSON.parse(rawJson);
288
+ }
289
+ catch {
290
+ /* ignore */
291
+ }
292
+ }
293
+ }
294
+ });
295
+ child.on('message', (msg) => {
296
+ if (msg && msg.type === 'exis:routes' && Array.isArray(msg.routes)) {
297
+ capturedRoutes = msg.routes;
298
+ }
299
+ });
300
+ child.on('exit', (code) => {
301
+ if (capturedRoutes) {
302
+ resolve(capturedRoutes);
303
+ }
304
+ else if (code === 0) {
305
+ resolve([]);
306
+ }
307
+ else {
308
+ reject(new Error(`Failed to extract routes (inspector process exited with code ${code}).`));
309
+ }
310
+ });
311
+ child.on('error', (err) => {
312
+ reject(err);
313
+ });
314
+ });
315
+ }
316
+ //# sourceMappingURL=routes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../src/routes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ export declare const c: {
2
+ reset: string;
3
+ bold: string;
4
+ dim: string;
5
+ red: string;
6
+ green: string;
7
+ yellow: string;
8
+ cyan: string;
9
+ white: string;
10
+ gray: string;
11
+ magenta: string;
12
+ bgCyan: string;
13
+ bgBlack: string;
14
+ bgMagenta: string;
15
+ primary: string;
16
+ blue: string;
17
+ };
18
+ export declare function banner(): void;
19
+ export declare function log(msg: string): void;
20
+ export declare function success(msg: string): void;
21
+ export declare function warn(msg: string): void;
22
+ export declare function error(msg: string): void;
23
+ export declare function info(msg: string): void;
24
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,eAAO,MAAM,CAAC;;;;;;;;;;;;;;;;CAgBb,CAAA;AAED,wBAAgB,MAAM,IAAI,IAAI,CAU7B;AAED,wBAAgB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAErC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEvC;AAED,wBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEtC"}
package/dist/utils.js ADDED
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.c = void 0;
4
+ exports.banner = banner;
5
+ exports.log = log;
6
+ exports.success = success;
7
+ exports.warn = warn;
8
+ exports.error = error;
9
+ exports.info = info;
10
+ // Terminal colors (no chalk dependency needed for these basics)
11
+ exports.c = {
12
+ reset: '\x1b[0m',
13
+ bold: '\x1b[1m',
14
+ dim: '\x1b[2m',
15
+ red: '\x1b[31m',
16
+ green: '\x1b[32m',
17
+ yellow: '\x1b[33m',
18
+ cyan: '\x1b[36m',
19
+ white: '\x1b[37m',
20
+ gray: '\x1b[90m',
21
+ magenta: '\x1b[35m',
22
+ bgCyan: '\x1b[46m',
23
+ bgBlack: '\x1b[40m',
24
+ bgMagenta: '\x1b[45m',
25
+ primary: '\x1b[38;2;160;70;255m',
26
+ blue: '\x1b[38;2;41;169;206m',
27
+ };
28
+ function banner() {
29
+ console.log(`
30
+ ${exports.c.primary}${exports.c.bold} ███████╗██╗ ██╗██╗███████╗ ██╗███████╗${exports.c.reset}
31
+ ${exports.c.primary}${exports.c.bold} ██╔════╝╚██╗██╔╝██║██╔════╝ ██║██╔════╝${exports.c.reset}
32
+ ${exports.c.primary}${exports.c.bold} █████╗ ╚███╔╝ ██║███████╗ ██║███████╗${exports.c.reset}
33
+ ${exports.c.primary}${exports.c.bold} ██╔══╝ ██╔██╗ ██║╚════██║ ██ ██║╚════██║${exports.c.reset}
34
+ ${exports.c.primary}${exports.c.bold} ███████╗██╔╝ ██╗██║███████║ ███████║███████║${exports.c.reset}
35
+ ${exports.c.primary}${exports.c.bold} ╚══════╝╚═╝ ╚═╝╚═╝╚══════╝ ╚══════╝╚══════╝${exports.c.reset}
36
+ ${exports.c.gray} The elegantly structured TypeScript Node.js framework${exports.c.reset}
37
+ `);
38
+ }
39
+ function log(msg) {
40
+ console.log(` ${msg}`);
41
+ }
42
+ function success(msg) {
43
+ console.log(`${exports.c.green}✓${exports.c.reset} ${msg}`);
44
+ }
45
+ function warn(msg) {
46
+ console.log(`${exports.c.yellow}⚠${exports.c.reset} ${msg}`);
47
+ }
48
+ function error(msg) {
49
+ console.error(`${exports.c.red}✗${exports.c.reset} ${msg}`);
50
+ }
51
+ function info(msg) {
52
+ console.log(`${exports.c.gray} ${msg}${exports.c.reset}`);
53
+ }
54
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;AAmBA,wBAUC;AAED,kBAEC;AAED,0BAEC;AAED,oBAEC;AAED,sBAEC;AAED,oBAEC;AAjDD,gEAAgE;AACnD,QAAA,CAAC,GAAG;IACf,KAAK,EAAE,SAAS;IAChB,IAAI,EAAE,SAAS;IACf,GAAG,EAAE,SAAS;IACd,GAAG,EAAE,UAAU;IACf,KAAK,EAAE,UAAU;IACjB,MAAM,EAAE,UAAU;IAClB,IAAI,EAAE,UAAU;IAChB,KAAK,EAAE,UAAU;IACjB,IAAI,EAAE,UAAU;IAChB,OAAO,EAAE,UAAU;IACnB,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,UAAU;IACnB,SAAS,EAAE,UAAU;IACrB,OAAO,EAAE,uBAAuB;IAChC,IAAI,EAAE,uBAAuB;CAC9B,CAAA;AAED,SAAgB,MAAM;IACpB,OAAO,CAAC,GAAG,CAAC;EACZ,SAAC,CAAC,OAAO,GAAG,SAAC,CAAC,IAAI,gDAAgD,SAAC,CAAC,KAAK;EACzE,SAAC,CAAC,OAAO,GAAG,SAAC,CAAC,IAAI,gDAAgD,SAAC,CAAC,KAAK;EACzE,SAAC,CAAC,OAAO,GAAG,SAAC,CAAC,IAAI,gDAAgD,SAAC,CAAC,KAAK;EACzE,SAAC,CAAC,OAAO,GAAG,SAAC,CAAC,IAAI,gDAAgD,SAAC,CAAC,KAAK;EACzE,SAAC,CAAC,OAAO,GAAG,SAAC,CAAC,IAAI,gDAAgD,SAAC,CAAC,KAAK;EACzE,SAAC,CAAC,OAAO,GAAG,SAAC,CAAC,IAAI,gDAAgD,SAAC,CAAC,KAAK;EACzE,SAAC,CAAC,IAAI,0DAA0D,SAAC,CAAC,KAAK;CACxE,CAAC,CAAA;AACF,CAAC;AAED,SAAgB,GAAG,CAAC,GAAW;IAC7B,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC,CAAA;AACzB,CAAC;AAED,SAAgB,OAAO,CAAC,GAAW;IACjC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAC,CAAC,KAAK,IAAI,SAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,SAAC,CAAC,MAAM,IAAI,SAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAA;AAC9C,CAAC;AAED,SAAgB,KAAK,CAAC,GAAW;IAC/B,OAAO,CAAC,KAAK,CAAC,GAAG,SAAC,CAAC,GAAG,IAAI,SAAC,CAAC,KAAK,IAAI,GAAG,EAAE,CAAC,CAAA;AAC7C,CAAC;AAED,SAAgB,IAAI,CAAC,GAAW;IAC9B,OAAO,CAAC,GAAG,CAAC,GAAG,SAAC,CAAC,IAAI,KAAK,GAAG,GAAG,SAAC,CAAC,KAAK,EAAE,CAAC,CAAA;AAC5C,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,60 @@
1
1
  {
2
2
  "name": "@exisjs/cli",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.10.0-alpha.0",
4
+ "description": "The exisjs command: dev server with hot reload, build, test, run and start for ExisJS apps. Install as a development dependency.",
5
+ "keywords": [
6
+ "exisjs",
7
+ "exis",
8
+ "cli",
9
+ "dev-server",
10
+ "build",
11
+ "typescript"
12
+ ],
13
+ "homepage": "https://github.com/v25group/exisjs/tree/main/packages/cli#readme",
14
+ "bugs": {
15
+ "url": "https://github.com/v25group/exisjs/issues"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/v25group/exisjs.git",
20
+ "directory": "packages/cli"
21
+ },
22
+ "license": "MIT",
23
+ "author": "V25 Group <support@v25group.com>",
24
+ "main": "dist/index.js",
25
+ "type": "commonjs",
26
+ "bin": {
27
+ "exisjs": "bin/exisjs.js",
28
+ "exis": "bin/exisjs.js"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "bin"
33
+ ],
34
+ "engines": {
35
+ "node": ">=20.0.0"
36
+ },
37
+ "scripts": {
38
+ "prebuild": "node -e \"require('fs').rmSync('dist', {recursive:true, force:true}); require('fs').rmSync('tsconfig.tsbuildinfo', {force:true})\"",
39
+ "build": "tsc",
40
+ "dev": "tsc --watch",
41
+ "prepublishOnly": "npm run build"
42
+ },
43
+ "dependencies": {
44
+ "chokidar": "^5.0.0",
45
+ "commander": "^15.0.0",
46
+ "esbuild": "^0.28.2",
47
+ "pino-pretty": "^13.2.0",
48
+ "tsx": "^4.23.15"
49
+ },
50
+ "peerDependencies": {
51
+ "exisjs": "0.10.0-alpha.0",
52
+ "typescript": ">=5.0.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/node": "^26.4.0"
56
+ },
57
+ "publishConfig": {
58
+ "access": "public"
59
+ }
60
+ }