@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
@@ -0,0 +1,116 @@
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.START_CMD = void 0;
7
+ exports.migratePackageJson = migratePackageJson;
8
+ exports.dockerfileAdvice = dockerfileAdvice;
9
+ exports.migrateCommand = migrateCommand;
10
+ const node_fs_1 = __importDefault(require("node:fs"));
11
+ const node_path_1 = __importDefault(require("node:path"));
12
+ const utils_1 = require("../utils");
13
+ // What a container should run: the binary itself, with no npm in between
14
+ exports.START_CMD = 'CMD ["node_modules/.bin/exisjs", "start"]';
15
+ function cliVersion() {
16
+ try {
17
+ const pkg = node_path_1.default.join(__dirname, '..', '..', 'package.json');
18
+ return JSON.parse(node_fs_1.default.readFileSync(pkg, 'utf8')).version;
19
+ }
20
+ catch {
21
+ return 'latest';
22
+ }
23
+ }
24
+ function installedTypeScript(cwd) {
25
+ try {
26
+ const pkg = require.resolve('typescript/package.json', { paths: [cwd] });
27
+ return JSON.parse(node_fs_1.default.readFileSync(pkg, 'utf8')).version;
28
+ }
29
+ catch {
30
+ return null;
31
+ }
32
+ }
33
+ /**
34
+ * Updates package.json for the 0.10 layout: the CLI as a development
35
+ * dependency, and TypeScript listed by the project itself. `exisjs start`
36
+ * keeps working: the runtime runs it without the CLI. Returns what changed.
37
+ */
38
+ function migratePackageJson(cwd, write) {
39
+ const file = node_path_1.default.join(cwd, 'package.json');
40
+ const text = node_fs_1.default.readFileSync(file, 'utf8');
41
+ const pkg = JSON.parse(text);
42
+ const changes = [];
43
+ const has = (name) => Boolean(pkg.dependencies?.[name] || pkg.devDependencies?.[name]);
44
+ if (!has('@exisjs/cli')) {
45
+ const range = cliVersion() === 'latest' ? 'latest' : `^${cliVersion()}`;
46
+ pkg.devDependencies = { ...pkg.devDependencies, '@exisjs/cli': range };
47
+ changes.push({
48
+ file: 'package.json',
49
+ description: `devDependencies: add "@exisjs/cli": "${range}"`,
50
+ });
51
+ }
52
+ // exisjs used to install TypeScript for the project; the CLI only borrows it
53
+ if (node_fs_1.default.existsSync(node_path_1.default.join(cwd, 'tsconfig.json')) && !has('typescript')) {
54
+ const version = installedTypeScript(cwd);
55
+ const range = version ? `^${version}` : '^5.9.3';
56
+ pkg.devDependencies = { ...pkg.devDependencies, typescript: range };
57
+ changes.push({
58
+ file: 'package.json',
59
+ description: `devDependencies: add "typescript": "${range}"`,
60
+ });
61
+ }
62
+ if (write && changes.length > 0) {
63
+ const indent = /^[ \t]+(?=")/m.exec(text)?.[0] ?? ' ';
64
+ const eol = text.includes('\r\n') ? '\r\n' : '\n';
65
+ const out = JSON.stringify(pkg, null, indent).replace(/\n/g, eol) + eol;
66
+ node_fs_1.default.writeFileSync(file, out, 'utf8');
67
+ }
68
+ return changes;
69
+ }
70
+ /** Dockerfile lines that should change; the file is not edited */
71
+ function dockerfileAdvice(cwd) {
72
+ const file = node_path_1.default.join(cwd, 'Dockerfile');
73
+ if (!node_fs_1.default.existsSync(file))
74
+ return [];
75
+ const advice = [];
76
+ const lines = node_fs_1.default.readFileSync(file, 'utf8').split(/\r?\n/);
77
+ lines.forEach((line, i) => {
78
+ const n = `Dockerfile:${i + 1}`;
79
+ // npm between the platform and the server turns SIGTERM into an error
80
+ if (/^\s*CMD\b/i.test(line) && /\bnpm\b.*\bstart/.test(line)) {
81
+ advice.push(`${n}: ${exports.START_CMD} (was: ${line.trim()})`);
82
+ }
83
+ if (/npm\s+(ci|install)\b.*--omit=dev/.test(line) &&
84
+ !/--omit=optional/.test(line)) {
85
+ advice.push(`${n}: add --omit=optional so the build tooling stays out of the image (was: ${line.trim()})`);
86
+ }
87
+ });
88
+ return advice;
89
+ }
90
+ async function migrateCommand(options = {}) {
91
+ const cwd = process.cwd();
92
+ if (!node_fs_1.default.existsSync(node_path_1.default.join(cwd, 'package.json'))) {
93
+ (0, utils_1.error)('No package.json in this directory.');
94
+ process.exit(1);
95
+ }
96
+ const changes = migratePackageJson(cwd, !options.dryRun);
97
+ const docker = dockerfileAdvice(cwd);
98
+ if (changes.length === 0 && docker.length === 0) {
99
+ (0, utils_1.success)('This project already uses the @exisjs/cli layout.');
100
+ return;
101
+ }
102
+ if (changes.length > 0) {
103
+ console.log(`\n${utils_1.c.bold}${options.dryRun ? 'Would change' : 'Changed'}:${utils_1.c.reset}`);
104
+ for (const ch of changes)
105
+ console.log(` ${utils_1.c.green}•${utils_1.c.reset} ${ch.description}`);
106
+ }
107
+ if (docker.length > 0) {
108
+ console.log(`\n${utils_1.c.bold}Update by hand:${utils_1.c.reset}`);
109
+ for (const line of docker)
110
+ console.log(` ${utils_1.c.yellow}•${utils_1.c.reset} ${line}`);
111
+ }
112
+ if (!options.dryRun && changes.length > 0) {
113
+ console.log(`\nNext: run ${utils_1.c.cyan}npm install${utils_1.c.reset}, then ${utils_1.c.cyan}npm run build${utils_1.c.reset} and ${utils_1.c.cyan}npm start${utils_1.c.reset} to check the server starts.\n`);
114
+ }
115
+ }
116
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../src/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface ReplOptions {
2
+ entry?: string;
3
+ }
4
+ export declare function replCommand(options?: ReplOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=repl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.d.ts","sourceRoot":"","sources":["../../src/commands/repl.ts"],"names":[],"mappings":"AAKA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqD1E"}
@@ -0,0 +1,75 @@
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.replCommand = replCommand;
7
+ const node_child_process_1 = require("node:child_process");
8
+ const node_path_1 = __importDefault(require("node:path"));
9
+ const node_fs_1 = __importDefault(require("node:fs"));
10
+ const utils_1 = require("../utils");
11
+ async function replCommand(options = {}) {
12
+ const cwd = process.cwd();
13
+ const entryFile = resolveEntry(cwd, options.entry);
14
+ if (!entryFile) {
15
+ (0, utils_1.error)('Could not find entry file. Expected src/http/server.ts or http/server.ts');
16
+ process.exit(1);
17
+ }
18
+ // Build environment
19
+ const env = {
20
+ ...process.env,
21
+ NODE_ENV: 'development',
22
+ FORCE_COLOR: '1',
23
+ __EXIS_CLI: 'true',
24
+ __EXIS_REPL: 'true',
25
+ EXIS_ENTRY_FILE: entryFile,
26
+ };
27
+ const startReplPath = node_path_1.default.join(__dirname, '../lib/start-repl.js');
28
+ // Use tsx to run the repl
29
+ const runner = {
30
+ name: 'tsx',
31
+ bin: process.execPath,
32
+ args: [require.resolve('tsx/cli')],
33
+ };
34
+ console.log(`\n${utils_1.c.cyan}[exis]${utils_1.c.reset} starting interactive console...`);
35
+ const child = (0, node_child_process_1.spawn)(runner.bin, [...runner.args, startReplPath], {
36
+ cwd,
37
+ env,
38
+ stdio: 'inherit',
39
+ shell: runner.bin === process.execPath ? false : true,
40
+ });
41
+ child.on('error', (err) => {
42
+ (0, utils_1.error)(`Failed to start REPL: ${err.message}`);
43
+ });
44
+ child.on('exit', (code, signal) => {
45
+ if (code !== 0 && signal !== 'SIGTERM' && signal !== 'SIGINT') {
46
+ if (code === 128 + 15 || code === 143) {
47
+ return;
48
+ }
49
+ process.exit(code ?? 1);
50
+ }
51
+ else {
52
+ process.exit(0);
53
+ }
54
+ });
55
+ }
56
+ function resolveEntry(cwd, custom) {
57
+ if (custom) {
58
+ const abs = node_path_1.default.resolve(cwd, custom);
59
+ return node_fs_1.default.existsSync(abs) ? abs : null;
60
+ }
61
+ const srcTs = node_path_1.default.join(cwd, 'src/http/server.ts');
62
+ const srcJs = node_path_1.default.join(cwd, 'src/http/server.js');
63
+ const rootTs = node_path_1.default.join(cwd, 'http/server.ts');
64
+ const rootJs = node_path_1.default.join(cwd, 'http/server.js');
65
+ if (node_fs_1.default.existsSync(srcTs))
66
+ return srcTs;
67
+ if (node_fs_1.default.existsSync(srcJs))
68
+ return srcJs;
69
+ if (node_fs_1.default.existsSync(rootTs))
70
+ return rootTs;
71
+ if (node_fs_1.default.existsSync(rootJs))
72
+ return rootJs;
73
+ return null;
74
+ }
75
+ //# sourceMappingURL=repl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repl.js","sourceRoot":"","sources":["../../src/commands/repl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ interface RunOptions {
2
+ env?: string;
3
+ mode?: string;
4
+ }
5
+ export declare function runCommand(scriptOrCmd: string, args?: string[], options?: RunOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=run.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAMA,UAAU,UAAU;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,wBAAsB,UAAU,CAC9B,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,MAAM,EAAO,EACnB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,IAAI,CAAC,CA6Df"}
@@ -0,0 +1,101 @@
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.runCommand = runCommand;
40
+ const node_child_process_1 = require("node:child_process");
41
+ const node_path_1 = __importDefault(require("node:path"));
42
+ const node_fs_1 = __importDefault(require("node:fs"));
43
+ const internal_1 = require("exisjs/internal");
44
+ const utils_1 = require("../utils");
45
+ async function runCommand(scriptOrCmd, args = [], options = {}) {
46
+ const cwd = process.cwd();
47
+ // 1. Automatically load .env, .env.local, .env.[mode], etc. into process.env
48
+ (0, internal_1.loadEnv)(cwd, options.mode);
49
+ if (options.env) {
50
+ const customEnvPath = node_path_1.default.resolve(cwd, options.env);
51
+ if (node_fs_1.default.existsSync(customEnvPath)) {
52
+ try {
53
+ const { parseEnv } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
54
+ const parsed = parseEnv(node_fs_1.default.readFileSync(customEnvPath, 'utf-8'));
55
+ Object.assign(process.env, parsed);
56
+ }
57
+ catch (err) {
58
+ (0, utils_1.error)(`Failed to load custom env file: ${err.message}`);
59
+ }
60
+ }
61
+ }
62
+ // 2. Check if script is a file or npm command / executable
63
+ const isTsFile = scriptOrCmd.endsWith('.ts') ||
64
+ scriptOrCmd.endsWith('.mts') ||
65
+ node_fs_1.default.existsSync(node_path_1.default.resolve(cwd, scriptOrCmd));
66
+ let executable;
67
+ let execArgs;
68
+ if (isTsFile) {
69
+ // Resolve tsx for seamless TypeScript execution
70
+ let tsxCli;
71
+ try {
72
+ tsxCli = require.resolve('tsx/cli');
73
+ }
74
+ catch {
75
+ tsxCli = 'tsx';
76
+ }
77
+ executable = process.execPath;
78
+ execArgs = [tsxCli, scriptOrCmd, ...args];
79
+ }
80
+ else {
81
+ // Run external command (e.g. drizzle-kit, prisma, custom script)
82
+ executable = scriptOrCmd;
83
+ execArgs = args;
84
+ }
85
+ const isDirectNode = executable === process.execPath;
86
+ const child = (0, node_child_process_1.spawn)(executable, execArgs, {
87
+ cwd,
88
+ env: process.env,
89
+ stdio: 'inherit',
90
+ shell: isDirectNode ? false : process.platform === 'win32',
91
+ windowsHide: true,
92
+ });
93
+ child.on('error', (err) => {
94
+ (0, utils_1.error)(`Failed to execute command "${scriptOrCmd}": ${err.message}`);
95
+ process.exit(1);
96
+ });
97
+ child.on('exit', (code) => {
98
+ process.exit(code ?? 0);
99
+ });
100
+ }
101
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { startBuiltServer as startCommand } from 'exisjs/internal';
2
+ //# sourceMappingURL=start.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAA"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.startCommand = void 0;
4
+ // The implementation lives in the runtime, which runs `exisjs start` on its
5
+ // own when @exisjs/cli is not installed (production)
6
+ var internal_1 = require("exisjs/internal");
7
+ Object.defineProperty(exports, "startCommand", { enumerable: true, get: function () { return internal_1.startBuiltServer; } });
8
+ //# sourceMappingURL=start.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"start.js","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":";;;AAAA,4EAA4E;AAC5E,qDAAqD;AACrD,4CAAkE;AAAzD,wGAAA,gBAAgB,OAAgB"}
@@ -0,0 +1,8 @@
1
+ export interface TestOptions {
2
+ watch?: boolean;
3
+ update?: boolean;
4
+ entry?: string;
5
+ files?: string[];
6
+ }
7
+ export declare function testCommand(options: TestOptions): Promise<void>;
8
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CACjB;AAcD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgIrE"}
@@ -0,0 +1,166 @@
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.testCommand = testCommand;
37
+ const node_child_process_1 = require("node:child_process");
38
+ const utils_1 = require("../utils");
39
+ const path = __importStar(require("node:path"));
40
+ const fs = __importStar(require("node:fs"));
41
+ const node_url_1 = require("node:url");
42
+ function resolveEntry(cwd, custom) {
43
+ if (custom) {
44
+ const abs = path.resolve(cwd, custom);
45
+ if (fs.existsSync(abs))
46
+ return abs;
47
+ }
48
+ const srcTs = path.join(cwd, 'src/http/server.ts');
49
+ const rootTs = path.join(cwd, 'http/server.ts');
50
+ if (fs.existsSync(srcTs))
51
+ return srcTs;
52
+ if (fs.existsSync(rootTs))
53
+ return rootTs;
54
+ return '';
55
+ }
56
+ async function testCommand(options) {
57
+ const cwd = process.cwd();
58
+ // Ensure entry file is resolved so we can set EXIS_ENTRY_FILE
59
+ const entryFile = resolveEntry(cwd, options.entry);
60
+ // We are going to spawn tsx with --test
61
+ const runner = {
62
+ name: 'tsx',
63
+ bin: process.execPath,
64
+ args: [require.resolve('tsx/cli')],
65
+ };
66
+ const { TEST_REPORTER_PATH } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
67
+ const reporterPath = (0, node_url_1.pathToFileURL)(TEST_REPORTER_PATH).href;
68
+ const testArgs = ['--test', '--test-reporter', reporterPath];
69
+ process.env.NODE_ENV = 'test';
70
+ const { loadEnv } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
71
+ const { parsedEnv } = loadEnv(cwd, 'test');
72
+ // Load Exis Config
73
+ const { loadConfig } = await Promise.resolve().then(() => __importStar(require('exisjs/internal')));
74
+ let exisConfig = {};
75
+ try {
76
+ exisConfig = await loadConfig(cwd);
77
+ }
78
+ catch {
79
+ /* ignore */
80
+ }
81
+ const testConfig = exisConfig.test || {};
82
+ if (options.watch) {
83
+ testArgs.push('--watch');
84
+ }
85
+ if (options.update) {
86
+ testArgs.push('--test-update-snapshots');
87
+ }
88
+ // Apply configs
89
+ if (testConfig.concurrency) {
90
+ testArgs.push(typeof testConfig.concurrency === 'number'
91
+ ? `--test-concurrency=${testConfig.concurrency}`
92
+ : '--test-concurrency');
93
+ }
94
+ if (testConfig.coverage) {
95
+ testArgs.push('--experimental-test-coverage');
96
+ }
97
+ if (testConfig.setupFiles) {
98
+ for (const file of testConfig.setupFiles) {
99
+ testArgs.push('--import', (0, node_url_1.pathToFileURL)(path.resolve(cwd, file)).href);
100
+ }
101
+ }
102
+ // If specific files were provided by the user, pass them along
103
+ if (options.files && options.files.length > 0) {
104
+ testArgs.push(...options.files);
105
+ }
106
+ else if (testConfig.include && testConfig.include.length > 0) {
107
+ testArgs.push(...testConfig.include);
108
+ }
109
+ else {
110
+ // Prevent workspace symlink traversal by explicitly scoping to tests/ and test/ and src/
111
+ testArgs.push('tests/**/*.test.ts', 'tests/**/*.spec.ts');
112
+ }
113
+ const env = {
114
+ ...process.env,
115
+ ...parsedEnv,
116
+ NODE_ENV: 'test',
117
+ FORCE_COLOR: '1',
118
+ __EXIS_CLI: 'true',
119
+ __EXIS_TEST: 'true',
120
+ EXIS_ENTRY_FILE: entryFile,
121
+ };
122
+ let version = '0.0.0';
123
+ try {
124
+ const pkgPath = path.join(__dirname, '..', '..', 'package.json');
125
+ version = JSON.parse(fs.readFileSync(pkgPath, 'utf-8')).version;
126
+ }
127
+ catch {
128
+ /* ignore */
129
+ }
130
+ // Print minimalist test runner banner
131
+ const primary = '\x1b[38;2;160;70;255m';
132
+ console.log(`\n ${primary}${utils_1.c.bold}EXIS TEST RUNNER${utils_1.c.reset} ${utils_1.c.dim}v${version}${utils_1.c.reset}`);
133
+ console.log(` ${utils_1.c.dim}powered by node:test${utils_1.c.reset}\n`);
134
+ let child = null;
135
+ function startProcess() {
136
+ if (child) {
137
+ child.kill('SIGTERM');
138
+ }
139
+ child = (0, node_child_process_1.spawn)(runner.bin, [...runner.args, ...testArgs], {
140
+ cwd,
141
+ env,
142
+ stdio: 'inherit',
143
+ // If we use process.execPath (Node binary), shell is typically false
144
+ shell: runner.bin === process.execPath ? false : true,
145
+ });
146
+ child.on('error', (err) => {
147
+ (0, utils_1.error)(`Failed to start test runner: ${err.message}`);
148
+ });
149
+ child.on('exit', (code, signal) => {
150
+ if (signal !== 'SIGTERM' && code !== 0 && code !== null) {
151
+ if (code === 128 + 15 || code === 143) {
152
+ // Normal sigterm exits
153
+ return;
154
+ }
155
+ process.exit(code);
156
+ }
157
+ else if (code === 0) {
158
+ if (!options.watch) {
159
+ process.exit(0);
160
+ }
161
+ }
162
+ });
163
+ }
164
+ startProcess();
165
+ }
166
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}