@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/README.md CHANGED
@@ -1,3 +1,36 @@
1
- # Temporary Holding Version
1
+ # @exisjs/cli
2
2
 
3
- This version is a temporary placeholder for this package. An operational version to replace this has been submitted for review and is awaiting a staged release.
3
+ The `exisjs` command for [ExisJS](https://github.com/v25group/exisjs) apps: the development server with hot reload, `build`, `test`, `run`, `start` and code generators.
4
+
5
+ It is a development tool. Install it next to the runtime:
6
+
7
+ ```bash
8
+ npm install exisjs
9
+ npm install -D @exisjs/cli typescript
10
+ ```
11
+
12
+ ```json filename="package.json"
13
+ {
14
+ "scripts": {
15
+ "dev": "exisjs dev",
16
+ "build": "exisjs build",
17
+ "test": "exisjs test",
18
+ "start": "exisjs start"
19
+ }
20
+ }
21
+ ```
22
+
23
+ `exisjs start` comes with the `exisjs` runtime itself, so production needs only `exisjs` (`npm ci --omit=dev --omit=optional`): no TypeScript, esbuild or CLI in the image. Every other command needs `@exisjs/cli`.
24
+
25
+ `@exisjs/cli` is released together with `exisjs` and always has the same version.
26
+
27
+ ## Upgrading from ExisJS 0.9
28
+
29
+ Before 0.10 the command was part of the `exisjs` package. Run this once in the project:
30
+
31
+ ```bash
32
+ npx exisjs migrate
33
+ npm install
34
+ ```
35
+
36
+ Documentation: [CLI commands](https://github.com/v25group/exisjs/blob/main/docs/content/cli/commands.mdx) · [Deploying with Docker](https://github.com/v25group/exisjs/blob/main/docs/content/deployment.mdx)
package/bin/exisjs.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/index.js')
@@ -0,0 +1,17 @@
1
+ export interface BuildOptions {
2
+ outDir?: string;
3
+ clean?: boolean;
4
+ skipEnvCheck?: boolean;
5
+ dryRun?: boolean;
6
+ mode?: string;
7
+ }
8
+ export declare function buildCommand(options?: BuildOptions): Promise<void>;
9
+ /** `@types/*` packages listed in devDependencies that are not installed. */
10
+ export declare function findMissingTypePackages(cwd: string): string[];
11
+ /**
12
+ * Writes `<outDir>/main.js`, the production entry: `node .exis/server/main.js`
13
+ * runs the server in that one process, so it receives SIGTERM directly and
14
+ * production needs neither the CLI nor npm.
15
+ */
16
+ export declare function writeMainEntry(cwd: string, outDir: string, esm: boolean): string | null;
17
+ //# sourceMappingURL=build.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAoV5E;AAID,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB7D;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,OAAO,GACX,MAAM,GAAG,IAAI,CAkCf"}
@@ -0,0 +1,378 @@
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.buildCommand = buildCommand;
40
+ exports.findMissingTypePackages = findMissingTypePackages;
41
+ exports.writeMainEntry = writeMainEntry;
42
+ const node_path_1 = __importDefault(require("node:path"));
43
+ const node_fs_1 = __importDefault(require("node:fs"));
44
+ const node_url_1 = require("node:url");
45
+ const utils_1 = require("../utils");
46
+ const manifest_js_1 = require("../manifest.js");
47
+ const internal_1 = require("exisjs/internal");
48
+ async function buildCommand(options = {}) {
49
+ process.env.__EXIS_BUILD = 'true';
50
+ if (options.skipEnvCheck ||
51
+ options.dryRun ||
52
+ process.env.EXIS_SKIP_ENV_CHECK === 'true') {
53
+ process.env.EXIS_SKIP_ENV_CHECK = 'true';
54
+ process.env.__EXIS_SKIP_ENV_CHECK = 'true';
55
+ }
56
+ process.on('SIGINT', () => {
57
+ const time = (0, internal_1.getFormattedTime)();
58
+ const primary = '\x1b[38;2;160;70;255m';
59
+ console.log(`\n${utils_1.c.dim}${time}${utils_1.c.reset} ${primary}[exis]${utils_1.c.reset} ${utils_1.c.dim}build cancelled.${utils_1.c.reset}`);
60
+ process.exit(0);
61
+ });
62
+ const cwd = process.cwd();
63
+ // Load .env files so process.env is populated during build-time route validation
64
+ const mode = options.mode || process.env.NODE_ENV || 'production';
65
+ (0, internal_1.loadEnv)(cwd, mode, true);
66
+ const outDir = options.outDir ?? '.exis/server';
67
+ const tsconfigPath = node_path_1.default.join(cwd, 'tsconfig.json');
68
+ let version = '0.0.0';
69
+ try {
70
+ const pkgPath = node_path_1.default.join(__dirname, '..', '..', 'package.json');
71
+ version = JSON.parse(node_fs_1.default.readFileSync(pkgPath, 'utf-8')).version;
72
+ }
73
+ catch {
74
+ /* ignore */
75
+ }
76
+ // Validate tsconfig
77
+ if (!node_fs_1.default.existsSync(tsconfigPath)) {
78
+ console.log(`\n${utils_1.c.primary}EXIS v${version}${utils_1.c.reset} ${utils_1.c.green}building server environment for production...${utils_1.c.reset}`);
79
+ console.log(`${utils_1.c.yellow}No tsconfig.json found. Skipping build for native JS project.${utils_1.c.reset}`);
80
+ console.log(`\n Run ${utils_1.c.primary}exis start${utils_1.c.reset} to serve the app.\n`);
81
+ return;
82
+ }
83
+ console.log(`\n${utils_1.c.primary}EXIS v${version}${utils_1.c.reset} ${utils_1.c.green}building server environment for production...${utils_1.c.reset}`);
84
+ // Clean .exis/server
85
+ if (options.clean !== false) {
86
+ const serverPath = node_path_1.default.join(cwd, outDir);
87
+ if (node_fs_1.default.existsSync(serverPath)) {
88
+ process.stdout.write(`${utils_1.c.dim}cleaning...${utils_1.c.reset}`);
89
+ node_fs_1.default.rmSync(serverPath, { recursive: true, force: true });
90
+ process.stdout.write(`\r${utils_1.c.green}✓${utils_1.c.reset} ${utils_1.c.dim}cleaned output directory.${utils_1.c.reset}\n`);
91
+ }
92
+ }
93
+ process.stdout.write(`${utils_1.c.dim}compiling...${utils_1.c.reset}`);
94
+ const start = Date.now();
95
+ // Ensure we generate the exis.d.ts file with optional fallback node types BEFORE tsc runs
96
+ await (0, manifest_js_1.generateExisEnv)(cwd);
97
+ let ts;
98
+ try {
99
+ const req = typeof require !== 'undefined' ? require : eval('require');
100
+ const tsPath = req.resolve('typescript', { paths: [cwd, __dirname] });
101
+ ts = req(tsPath);
102
+ }
103
+ catch {
104
+ (0, utils_1.error)('TypeScript compiler not found in project.');
105
+ (0, utils_1.error)('Install it: npm install -D typescript');
106
+ process.exit(1);
107
+ }
108
+ // Normalize path for TS on Windows
109
+ const tsconfigPathForTs = tsconfigPath.replace(/\\/g, '/');
110
+ const configFile = ts.readConfigFile(tsconfigPathForTs, ts.sys.readFile);
111
+ if (configFile.error) {
112
+ (0, utils_1.error)('Error reading tsconfig.json');
113
+ process.exit(1);
114
+ }
115
+ const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, node_path_1.default.dirname(tsconfigPathForTs));
116
+ const isServerSourceFile = (filePath) => {
117
+ const rel = node_path_1.default.relative(cwd, filePath).replace(/\\/g, '/');
118
+ if (rel.startsWith('..') || node_path_1.default.isAbsolute(rel))
119
+ return false;
120
+ // Ignore test files, scripts, docs
121
+ if (rel.startsWith('tests/') ||
122
+ rel.startsWith('test/') ||
123
+ rel.startsWith('__tests__/') ||
124
+ rel.startsWith('scripts/') ||
125
+ rel.startsWith('docs/') ||
126
+ /\.(test|spec)\.[jt]sx?$/.test(rel)) {
127
+ return false;
128
+ }
129
+ // Exclude root tool config files (e.g. drizzle.config.ts, vite.config.ts, tailwind.config.ts)
130
+ // Only exis.config.* belongs to the ExisJS server configuration
131
+ if (!rel.includes('/')) {
132
+ const base = node_path_1.default.basename(rel);
133
+ return (base === 'exis.config.ts' ||
134
+ base === 'exis.config.js' ||
135
+ base === 'exis.config.mjs');
136
+ }
137
+ // Server code is strictly in src/ or http/
138
+ return rel.startsWith('src/') || rel.startsWith('http/');
139
+ };
140
+ const allNonDeclFiles = parsedConfig.fileNames.filter((f) => !f.endsWith('.d.ts'));
141
+ const serverEntryPoints = allNonDeclFiles.filter(isServerSourceFile);
142
+ const entryPoints = serverEntryPoints.length > 0 ? serverEntryPoints : allNonDeclFiles;
143
+ let format = 'cjs';
144
+ try {
145
+ const pkg = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(cwd, 'package.json'), 'utf8'));
146
+ if (pkg.type === 'module')
147
+ format = 'esm';
148
+ }
149
+ catch {
150
+ // default to cjs if package.json is missing or unparseable
151
+ }
152
+ // ─── TypeScript Type-Check ─────────────────────────────────────────────────
153
+ // Run the TS compiler in check-only mode (no emit) to catch type errors,
154
+ // broken imports, and syntax errors BEFORE esbuild runs.
155
+ // Hosts that install with NODE_ENV=production (Render, Heroku...) leave out
156
+ // devDependencies, so the @types packages are absent and every Node global
157
+ // would be reported as a type error. esbuild does not need types to compile.
158
+ const missingTypes = process.env.NODE_ENV === 'test' ? [] : findMissingTypePackages(cwd);
159
+ if (missingTypes.length > 0) {
160
+ process.stdout.write(`\r${utils_1.c.yellow}↷${utils_1.c.reset} ${utils_1.c.dim}type-check skipped: devDependencies are not installed (${missingTypes.join(', ')}).${utils_1.c.reset}\n` +
161
+ `${utils_1.c.dim} To type-check on this host, install with: npm install --include=dev${utils_1.c.reset}\n`);
162
+ }
163
+ else if (process.env.NODE_ENV !== 'test') {
164
+ process.stdout.write(`${utils_1.c.dim}type-checking...${utils_1.c.reset}`);
165
+ const filesToCheck = serverEntryPoints.length > 0 ? serverEntryPoints : parsedConfig.fileNames;
166
+ const program = ts.createProgram(filesToCheck, {
167
+ ...parsedConfig.options,
168
+ skipLibCheck: true,
169
+ noEmit: true,
170
+ });
171
+ const allDiagnostics = [
172
+ ...parsedConfig.errors,
173
+ ...ts.getPreEmitDiagnostics(program),
174
+ ];
175
+ // Only fail the build for errors that actually affect the server environment
176
+ const diagnostics = allDiagnostics.filter((diag) => {
177
+ if (!diag.file)
178
+ return true; // Global configuration error
179
+ return isServerSourceFile(diag.file.fileName);
180
+ });
181
+ if (diagnostics.length > 0) {
182
+ process.stdout.write('\n');
183
+ const formatted = ts.formatDiagnosticsWithColorAndContext(diagnostics, {
184
+ getCanonicalFileName: (f) => f,
185
+ getCurrentDirectory: ts.sys.getCurrentDirectory,
186
+ getNewLine: () => '\n',
187
+ });
188
+ process.stderr.write(formatted + '\n');
189
+ (0, utils_1.error)(`TYPE_CHECK_FAILED: ${diagnostics.length} error(s) found.`);
190
+ console.error(`\n${utils_1.c.yellow} Fix the errors above, then run ${utils_1.c.reset}${utils_1.c.primary}exis build${utils_1.c.reset}${utils_1.c.yellow} again.${utils_1.c.reset}\n`);
191
+ process.exit(1);
192
+ }
193
+ }
194
+ if (process.env.NODE_ENV === 'test') {
195
+ process.stdout.write(`\r${utils_1.c.yellow}↷${utils_1.c.reset} ${utils_1.c.dim}type-check skipped in test environment.${utils_1.c.reset}\n`);
196
+ }
197
+ else if (missingTypes.length === 0) {
198
+ process.stdout.write(`\r${utils_1.c.green}✓${utils_1.c.reset} ${utils_1.c.dim}type-check passed.${utils_1.c.reset}\n`);
199
+ }
200
+ // ─── esbuild Compilation ───────────────────────────────────────────────────
201
+ process.stdout.write(`${utils_1.c.dim}compiling...${utils_1.c.reset}`);
202
+ try {
203
+ const esbuild = await Promise.resolve().then(() => __importStar(require('esbuild')));
204
+ await esbuild.build({
205
+ entryPoints,
206
+ outdir: node_path_1.default.join(cwd, outDir),
207
+ // Keep the project layout (src/http/... -> outDir/src/http/...) even
208
+ // when every entry point sits in one sub-folder
209
+ outbase: cwd,
210
+ platform: 'node',
211
+ format: format,
212
+ bundle: false,
213
+ logLevel: 'error',
214
+ });
215
+ process.stdout.write(`\r${utils_1.c.green}✓${utils_1.c.reset} ${utils_1.c.dim}compiled via esbuild in ${Date.now() - start}ms.${utils_1.c.reset}\n`);
216
+ }
217
+ catch (err) {
218
+ console.error('');
219
+ (0, utils_1.error)(`COMPILE_FAILED: ${err?.message ?? 'esbuild encountered an error'}`);
220
+ process.exit(1);
221
+ }
222
+ // resolve path aliases natively (no external deps)
223
+ await fixPathAliases(cwd, outDir);
224
+ // Generate the .exis/manifest.js route map
225
+ try {
226
+ await (0, manifest_js_1.generateManifest)(cwd, outDir);
227
+ }
228
+ catch (err) {
229
+ console.error('');
230
+ (0, utils_1.error)(`ROUTE_SCAN_FAILED: ${err.message}`);
231
+ console.error(`\n${utils_1.c.yellow} Fix the routing errors above, then run ${utils_1.c.reset}${utils_1.c.primary}exis build${utils_1.c.reset}${utils_1.c.yellow} again.${utils_1.c.reset}\n`);
232
+ process.exit(1);
233
+ }
234
+ // Generate .exis/server/package.json to mirror host module type (ESM vs CJS)
235
+ try {
236
+ const serverPkgPath = node_path_1.default.join(cwd, outDir, 'package.json');
237
+ const serverPkgContent = JSON.stringify({
238
+ type: format === 'esm' ? 'module' : 'commonjs',
239
+ private: true,
240
+ }, null, 2);
241
+ node_fs_1.default.writeFileSync(serverPkgPath, serverPkgContent, 'utf8');
242
+ }
243
+ catch {
244
+ // ignore
245
+ }
246
+ writeMainEntry(cwd, outDir, format === 'esm');
247
+ // ─── Build-time Validation ──────────────────────────────────────────────────
248
+ // Eagerly import the generated manifest to catch route-level configuration
249
+ // errors (e.g. missing cache keyGenerator, invalid middleware options) NOW,
250
+ // at build time, rather than letting them crash the production server on first
251
+ // request or startup.
252
+ if (options.skipEnvCheck ||
253
+ options.dryRun ||
254
+ process.env.EXIS_SKIP_ENV_CHECK === 'true') {
255
+ process.stdout.write(`${utils_1.c.yellow}↷${utils_1.c.reset} ${utils_1.c.dim}route validation skipped (--skip-env-check).${utils_1.c.reset}\n`);
256
+ }
257
+ else {
258
+ process.stdout.write(`${utils_1.c.dim}validating routes...${utils_1.c.reset}`);
259
+ try {
260
+ const manifestPath = node_path_1.default.join(cwd, '.exis', 'routes-manifest.js');
261
+ if (node_fs_1.default.existsSync(manifestPath)) {
262
+ try {
263
+ const { registerPathAliasLoader } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
264
+ registerPathAliasLoader(cwd);
265
+ }
266
+ catch {
267
+ // ignore
268
+ }
269
+ const dynamicImport = new Function('specifier', 'return import(specifier)');
270
+ const built = await dynamicImport((0, node_url_1.pathToFileURL)(manifestPath).href);
271
+ // One controller style per project: fail the build, not the deploy
272
+ const { routeParadigm, mixedParadigmMessage } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
273
+ const oopFiles = [];
274
+ const functionalFiles = [];
275
+ for (const entry of built.manifest ?? []) {
276
+ const paradigm = routeParadigm(entry.module);
277
+ if (paradigm === 'oop')
278
+ oopFiles.push(entry.filePath);
279
+ else if (paradigm === 'functional')
280
+ functionalFiles.push(entry.filePath);
281
+ }
282
+ if (oopFiles.length > 0 && functionalFiles.length > 0) {
283
+ console.error('');
284
+ (0, utils_1.error)(mixedParadigmMessage(oopFiles, functionalFiles));
285
+ process.exit(1);
286
+ }
287
+ process.stdout.write(`\r${utils_1.c.green}✓${utils_1.c.reset} ${utils_1.c.dim}all routes validated.${utils_1.c.reset}\n`);
288
+ }
289
+ }
290
+ catch (err) {
291
+ const isEnvError = err.message?.includes('Validation Error') ||
292
+ err.message?.includes('Expected value, received undefined') ||
293
+ err.message?.includes('env') ||
294
+ err.code === 'VALIDATION_ERROR';
295
+ console.error('');
296
+ (0, utils_1.error)(`BUILD_VALIDATION_FAILED: ${err.message}`);
297
+ if (isEnvError) {
298
+ console.error(`\n${utils_1.c.yellow} Tip: If this environment variable is injected at runtime, run:${utils_1.c.reset}` +
299
+ `\n${utils_1.c.primary} exis build --skip-env-check${utils_1.c.reset}\n`);
300
+ }
301
+ else {
302
+ console.error(`\n${utils_1.c.yellow} Fix the error above, then run ${utils_1.c.reset}${utils_1.c.primary}exis build${utils_1.c.reset}${utils_1.c.yellow} again.${utils_1.c.reset}\n`);
303
+ }
304
+ process.exit(1);
305
+ }
306
+ }
307
+ const ms = Date.now() - start;
308
+ console.log(`\n${utils_1.c.green}✓ built in ${ms}ms${utils_1.c.reset}\n`);
309
+ process.exit(0);
310
+ }
311
+ // ─── Helpers ──────────────────────────────────────────────────────────────────
312
+ /** `@types/*` packages listed in devDependencies that are not installed. */
313
+ function findMissingTypePackages(cwd) {
314
+ let devDeps;
315
+ try {
316
+ devDeps =
317
+ JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(cwd, 'package.json'), 'utf8'))
318
+ .devDependencies ?? {};
319
+ }
320
+ catch {
321
+ return [];
322
+ }
323
+ const req = typeof require !== 'undefined' ? require : eval('require');
324
+ return Object.keys(devDeps).filter((name) => {
325
+ if (!name.startsWith('@types/'))
326
+ return false;
327
+ try {
328
+ req.resolve(`${name}/package.json`, { paths: [cwd] });
329
+ return false;
330
+ }
331
+ catch {
332
+ return true;
333
+ }
334
+ });
335
+ }
336
+ /**
337
+ * Writes `<outDir>/main.js`, the production entry: `node .exis/server/main.js`
338
+ * runs the server in that one process, so it receives SIGTERM directly and
339
+ * production needs neither the CLI nor npm.
340
+ */
341
+ function writeMainEntry(cwd, outDir, esm) {
342
+ const serverDir = node_path_1.default.join(cwd, outDir);
343
+ const entry = ['src/http/server.js', 'http/server.js'].find((p) => node_fs_1.default.existsSync(node_path_1.default.join(serverDir, p)));
344
+ if (!entry) {
345
+ console.warn(`${utils_1.c.yellow}⚠${utils_1.c.reset} ${utils_1.c.dim}No src/http/server.ts found: ${outDir}/main.js was not written.${utils_1.c.reset}`);
346
+ return null;
347
+ }
348
+ const root = node_path_1.default.relative(serverDir, cwd).split(node_path_1.default.sep).join('/') || '.';
349
+ const header = '// Generated by `exisjs build`. Starts the server in this process:\n' +
350
+ `// node ${outDir.split(node_path_1.default.sep).join('/')}/main.js\n`;
351
+ const body = (dir) => `process.chdir(path.resolve(${dir}, ${JSON.stringify(root)}))\n` +
352
+ // An empty NODE_ENV, which some platforms set, counts as unset
353
+ `if (!process.env.NODE_ENV) process.env.NODE_ENV = 'production'\n` +
354
+ `process.env.EXIS_ENTRY_FILE = path.join(${dir}, ${JSON.stringify(entry)})\n`;
355
+ const source = esm
356
+ ? header +
357
+ `import path from 'node:path'\n` +
358
+ `import { fileURLToPath } from 'node:url'\n\n` +
359
+ `const here = path.dirname(fileURLToPath(import.meta.url))\n` +
360
+ body('here') +
361
+ `await import('exisjs/start')\n`
362
+ : header +
363
+ `const path = require('node:path')\n\n` +
364
+ body('__dirname') +
365
+ `require('exisjs/start')\n`;
366
+ const file = node_path_1.default.join(serverDir, 'main.js');
367
+ node_fs_1.default.writeFileSync(file, source, 'utf8');
368
+ return file;
369
+ }
370
+ async function fixPathAliases(cwd, outDir) {
371
+ try {
372
+ await (0, internal_1.resolvePathAliases)(cwd, outDir);
373
+ }
374
+ catch (err) {
375
+ process.stdout.write(`\n${utils_1.c.yellow}⚠${utils_1.c.reset} ${utils_1.c.dim}alias resolution failed: ${err.message}${utils_1.c.reset}\n`);
376
+ }
377
+ }
378
+ //# sourceMappingURL=build.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export interface CleanOptions {
2
+ all?: boolean;
3
+ }
4
+ export declare function cleanCommand(options?: CleanOptions): Promise<void>;
5
+ //# sourceMappingURL=clean.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.d.ts","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,YAAY;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAA;CACd;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5E"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.cleanCommand = cleanCommand;
7
+ const node_path_1 = __importDefault(require("node:path"));
8
+ const node_fs_1 = __importDefault(require("node:fs"));
9
+ const utils_1 = require("../utils");
10
+ async function cleanCommand(options = {}) {
11
+ const cwd = process.cwd();
12
+ const exisDir = node_path_1.default.join(cwd, '.exis');
13
+ const distDir = node_path_1.default.join(cwd, 'dist');
14
+ let cleaned = 0;
15
+ if (node_fs_1.default.existsSync(exisDir)) {
16
+ node_fs_1.default.rmSync(exisDir, { recursive: true, force: true });
17
+ cleaned++;
18
+ }
19
+ if (options.all && node_fs_1.default.existsSync(distDir)) {
20
+ node_fs_1.default.rmSync(distDir, { recursive: true, force: true });
21
+ cleaned++;
22
+ }
23
+ if (cleaned > 0) {
24
+ (0, utils_1.success)('Cleaned .exis build artifacts and cached types.');
25
+ }
26
+ else {
27
+ console.log(`${utils_1.c.dim}No build artifacts found to clean.${utils_1.c.reset}`);
28
+ }
29
+ }
30
+ //# sourceMappingURL=clean.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clean.js","sourceRoot":"","sources":["../../src/commands/clean.ts"],"names":[],"mappings":";;;;;AAQA,oCAsBC;AA9BD,0DAA4B;AAC5B,sDAAwB;AACxB,oCAAqC;AAM9B,KAAK,UAAU,YAAY,CAAC,UAAwB,EAAE;IAC3D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAA;IACzB,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;IACvC,MAAM,OAAO,GAAG,mBAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAA;IAEtC,IAAI,OAAO,GAAG,CAAC,CAAA;IAEf,IAAI,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3B,iBAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,OAAO,CAAC,GAAG,IAAI,iBAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,iBAAE,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACpD,OAAO,EAAE,CAAA;IACX,CAAC;IAED,IAAI,OAAO,GAAG,CAAC,EAAE,CAAC;QAChB,IAAA,eAAO,EAAC,iDAAiD,CAAC,CAAA;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,GAAG,SAAC,CAAC,GAAG,qCAAqC,SAAC,CAAC,KAAK,EAAE,CAAC,CAAA;IACrE,CAAC;AACH,CAAC"}
@@ -0,0 +1,28 @@
1
+ export declare function isClosedChannelError(err: NodeJS.ErrnoException | null | undefined): boolean;
2
+ export declare const DEFAULT_WATCH_IGNORED: (string | RegExp)[];
3
+ export declare const RELOADABLE_EXTENSIONS: Set<string>;
4
+ export declare const RELOADABLE_CONFIG_FILES: Set<string>;
5
+ /**
6
+ * chokidar's `ignored` test. Patterns apply to the path inside the project:
7
+ * a project under a folder such as `D:\data` or `/srv/build` must still
8
+ * reload, which matching the absolute path prevented.
9
+ */
10
+ export declare function watchIgnore(cwd: string, userIgnored?: (string | RegExp)[]): (file: string) => boolean;
11
+ export declare function shouldReloadOnFile(file: string, userIgnored?: (string | RegExp)[], customExtensions?: string[]): boolean;
12
+ interface DevOptions {
13
+ port?: string;
14
+ host?: string;
15
+ entry?: string;
16
+ /** Start even if another dev server appears to use the same port */
17
+ force?: boolean;
18
+ _disableWatch?: boolean;
19
+ }
20
+ /**
21
+ * Another `exisjs dev` holds this lock when its PID is alive AND it still
22
+ * serves the port it recorded. A PID alone is not enough: after a crash the
23
+ * OS may hand the same number to an unrelated process.
24
+ */
25
+ export declare function isDevLockHeld(lockFile: string): Promise<boolean>;
26
+ export declare function devCommand(options?: DevOptions): Promise<void>;
27
+ export {};
28
+ //# sourceMappingURL=dev.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../src/commands/dev.ts"],"names":[],"mappings":"AA2BA,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,MAAM,CAAC,cAAc,GAAG,IAAI,GAAG,SAAS,GAC5C,OAAO,CAET;AASD,eAAO,MAAM,qBAAqB,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EA4BpD,CAAA;AAED,eAAO,MAAM,qBAAqB,aAOhC,CAAA;AAEF,eAAO,MAAM,uBAAuB,aAOlC,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAO,GACpC,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAqB3B;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,WAAW,GAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAO,EACrC,gBAAgB,CAAC,EAAE,MAAM,EAAE,GAC1B,OAAO,CAkDT;AAED,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAmBD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CActE;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAusBxE"}