exisjs 0.7.4 → 0.7.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli/commands/build.d.ts +4 -2
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/build.js +80 -22
- package/dist/cli/commands/build.js.map +1 -1
- package/dist/cli/commands/dev.d.ts.map +1 -1
- package/dist/cli/commands/dev.js +229 -64
- package/dist/cli/commands/dev.js.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +5 -2
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/generate.d.ts +1 -0
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +25 -0
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/start.d.ts.map +1 -1
- package/dist/cli/commands/start.js +65 -15
- package/dist/cli/commands/start.js.map +1 -1
- package/dist/cli/index.js +20 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/manifest.d.ts.map +1 -1
- package/dist/cli/manifest.js +118 -17
- package/dist/cli/manifest.js.map +1 -1
- package/dist/cli/resolve-aliases.d.ts +1 -1
- package/dist/cli/resolve-aliases.d.ts.map +1 -1
- package/dist/cli/resolve-aliases.js +30 -13
- package/dist/cli/resolve-aliases.js.map +1 -1
- package/dist/config/config.d.ts +3 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js.map +1 -1
- package/dist/config/env.d.ts.map +1 -1
- package/dist/config/env.js +8 -0
- package/dist/config/env.js.map +1 -1
- package/dist/config/types.d.ts +2 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/decorators/constants.d.ts +2 -0
- package/dist/decorators/constants.d.ts.map +1 -1
- package/dist/decorators/middleware.d.ts +65 -2
- package/dist/decorators/middleware.d.ts.map +1 -1
- package/dist/decorators/middleware.js +148 -62
- package/dist/decorators/middleware.js.map +1 -1
- package/dist/decorators/params.d.ts +5 -0
- package/dist/decorators/params.d.ts.map +1 -1
- package/dist/decorators/params.js +11 -1
- package/dist/decorators/params.js.map +1 -1
- package/dist/decorators/response.d.ts.map +1 -1
- package/dist/decorators/response.js +32 -22
- package/dist/decorators/response.js.map +1 -1
- package/dist/di/container.d.ts.map +1 -1
- package/dist/di/container.js +6 -1
- package/dist/di/container.js.map +1 -1
- package/dist/docs/content/boundaries.mdx +33 -3
- package/dist/docs/content/cli/commands.mdx +1 -1
- package/dist/docs/content/config.mdx +26 -0
- package/dist/docs/content/controllers.mdx +127 -10
- package/dist/docs/content/decorators.mdx +22 -4
- package/dist/docs/content/errors.mdx +38 -2
- package/dist/docs/content/introduction.mdx +7 -7
- package/dist/docs/content/middleware.mdx +269 -6
- package/dist/docs/content/requests.mdx +217 -10
- package/dist/docs/content/responses.mdx +323 -34
- package/dist/docs/content/routing.mdx +46 -0
- package/dist/docs/content/security.mdx +17 -4
- package/dist/docs/content/structure.mdx +91 -12
- package/dist/docs/content/validation.mdx +226 -11
- package/dist/docs/reference/context.mdx +11 -0
- package/dist/docs/reference/decorators.mdx +14 -4
- package/dist/docs/reference/error.mdx +44 -0
- package/dist/docs/reference/logger.mdx +175 -43
- package/dist/docs/reference/middleware.mdx +31 -0
- package/dist/docs/reference/router.mdx +22 -0
- package/dist/docs/reference/validator.mdx +83 -23
- package/dist/error/errors.d.ts.map +1 -1
- package/dist/error/errors.js +95 -43
- package/dist/error/errors.js.map +1 -1
- package/dist/error/index.d.ts +1 -0
- package/dist/error/index.d.ts.map +1 -1
- package/dist/error/index.js +11 -1
- package/dist/error/index.js.map +1 -1
- package/dist/error/overlay.d.ts +42 -0
- package/dist/error/overlay.d.ts.map +1 -0
- package/dist/error/overlay.js +306 -0
- package/dist/error/overlay.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +22 -1
- package/dist/index.js.map +1 -1
- package/dist/lib/start-server.js +49 -7
- package/dist/lib/start-server.js.map +1 -1
- package/dist/logger/index.d.ts +1 -1
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +9 -1
- package/dist/logger/index.js.map +1 -1
- package/dist/middleware/guard.d.ts +2 -2
- package/dist/middleware/guard.d.ts.map +1 -1
- package/dist/middleware/guard.js.map +1 -1
- package/dist/middleware/ip-filter.d.ts +1 -0
- package/dist/middleware/ip-filter.d.ts.map +1 -1
- package/dist/middleware/ip-filter.js +2 -0
- package/dist/middleware/ip-filter.js.map +1 -1
- package/dist/middleware/middleware.d.ts +2 -2
- package/dist/middleware/middleware.d.ts.map +1 -1
- package/dist/middleware/middleware.js +20 -2
- package/dist/middleware/middleware.js.map +1 -1
- package/dist/middleware/rate-limit.d.ts.map +1 -1
- package/dist/middleware/rate-limit.js +9 -0
- package/dist/middleware/rate-limit.js.map +1 -1
- package/dist/middleware/security.d.ts +43 -1
- package/dist/middleware/security.d.ts.map +1 -1
- package/dist/middleware/security.js +101 -0
- package/dist/middleware/security.js.map +1 -1
- package/dist/response/index.d.ts +229 -6
- package/dist/response/index.d.ts.map +1 -1
- package/dist/response/index.js +272 -2
- package/dist/response/index.js.map +1 -1
- package/dist/router/boundary.d.ts +25 -5
- package/dist/router/boundary.d.ts.map +1 -1
- package/dist/router/boundary.js.map +1 -1
- package/dist/router/controller-registrar.d.ts.map +1 -1
- package/dist/router/controller-registrar.js +56 -1
- package/dist/router/controller-registrar.js.map +1 -1
- package/dist/router/index.d.ts +2 -2
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +2 -1
- package/dist/router/index.js.map +1 -1
- package/dist/router/route-builder.d.ts +70 -36
- package/dist/router/route-builder.d.ts.map +1 -1
- package/dist/router/route-builder.js +13 -15
- package/dist/router/route-builder.js.map +1 -1
- package/dist/router/route-scanner.d.ts +1 -0
- package/dist/router/route-scanner.d.ts.map +1 -1
- package/dist/router/route-scanner.js +217 -10
- package/dist/router/route-scanner.js.map +1 -1
- package/dist/router/router.d.ts.map +1 -1
- package/dist/router/router.js +35 -17
- package/dist/router/router.js.map +1 -1
- package/dist/router/types.d.ts +11 -1
- package/dist/router/types.d.ts.map +1 -1
- package/dist/sanitize/index.d.ts +6 -6
- package/dist/sanitize/index.d.ts.map +1 -1
- package/dist/sanitize/index.js +8 -8
- package/dist/sanitize/index.js.map +1 -1
- package/dist/server/app.d.ts +2 -0
- package/dist/server/app.d.ts.map +1 -1
- package/dist/server/app.js +14 -0
- package/dist/server/app.js.map +1 -1
- package/dist/server/bootstrapper.d.ts.map +1 -1
- package/dist/server/bootstrapper.js +91 -30
- package/dist/server/bootstrapper.js.map +1 -1
- package/dist/server/cluster.d.ts.map +1 -1
- package/dist/server/cluster.js +13 -2
- package/dist/server/cluster.js.map +1 -1
- package/dist/server/context.d.ts +8 -0
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js +50 -6
- package/dist/server/context.js.map +1 -1
- package/dist/server/engines/node-engine.d.ts.map +1 -1
- package/dist/server/engines/node-engine.js +1 -0
- package/dist/server/engines/node-engine.js.map +1 -1
- package/dist/server/lifecycle.d.ts +22 -0
- package/dist/server/lifecycle.d.ts.map +1 -0
- package/dist/server/lifecycle.js +106 -0
- package/dist/server/lifecycle.js.map +1 -0
- package/dist/server/request-handler.d.ts +1 -0
- package/dist/server/request-handler.d.ts.map +1 -1
- package/dist/server/request-handler.js +42 -18
- package/dist/server/request-handler.js.map +1 -1
- package/dist/server/request.d.ts +6 -0
- package/dist/server/request.d.ts.map +1 -1
- package/dist/server/request.js +112 -33
- package/dist/server/request.js.map +1 -1
- package/dist/server/response.d.ts +13 -2
- package/dist/server/response.d.ts.map +1 -1
- package/dist/server/response.js +250 -10
- package/dist/server/response.js.map +1 -1
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +6 -1
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/mocks.d.ts.map +1 -1
- package/dist/testing/mocks.js +15 -3
- package/dist/testing/mocks.js.map +1 -1
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -1
- package/dist/utils/logger.js +184 -1
- package/dist/utils/logger.js.map +1 -1
- package/dist/validator/tex-types.d.ts +2 -1
- package/dist/validator/tex-types.d.ts.map +1 -1
- package/dist/validator/tex-types.js +2 -1
- package/dist/validator/tex-types.js.map +1 -1
- package/dist/validator/tex.d.ts +38 -22
- package/dist/validator/tex.d.ts.map +1 -1
- package/dist/validator/tex.js +490 -40
- package/dist/validator/tex.js.map +1 -1
- package/package.json +10 -10
- package/dist/dev/error-overlay.d.ts +0 -3
- package/dist/dev/error-overlay.d.ts.map +0 -1
- package/dist/dev/error-overlay.js +0 -118
- package/dist/dev/error-overlay.js.map +0 -1
|
@@ -1,7 +1,9 @@
|
|
|
1
|
-
interface BuildOptions {
|
|
1
|
+
export interface BuildOptions {
|
|
2
2
|
outDir?: string;
|
|
3
3
|
clean?: boolean;
|
|
4
|
+
skipEnvCheck?: boolean;
|
|
5
|
+
dryRun?: boolean;
|
|
6
|
+
mode?: string;
|
|
4
7
|
}
|
|
5
8
|
export declare function buildCommand(options?: BuildOptions): Promise<void>;
|
|
6
|
-
export {};
|
|
7
9
|
//# sourceMappingURL=build.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AASA,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"AASA,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,CAoS5E"}
|
|
@@ -47,6 +47,12 @@ const resolve_aliases_js_1 = require("../resolve-aliases.js");
|
|
|
47
47
|
const env_js_1 = require("../../config/env.js");
|
|
48
48
|
async function buildCommand(options = {}) {
|
|
49
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
|
+
}
|
|
50
56
|
process.on('SIGINT', () => {
|
|
51
57
|
const time = (0, time_1.getFormattedTime)();
|
|
52
58
|
const primary = '\x1b[38;2;160;70;255m';
|
|
@@ -55,7 +61,8 @@ async function buildCommand(options = {}) {
|
|
|
55
61
|
});
|
|
56
62
|
const cwd = process.cwd();
|
|
57
63
|
// Load .env files so process.env is populated during build-time route validation
|
|
58
|
-
|
|
64
|
+
const mode = options.mode || process.env.NODE_ENV || 'production';
|
|
65
|
+
(0, env_js_1.loadEnv)(cwd, mode, true);
|
|
59
66
|
const outDir = options.outDir ?? '.exis/server';
|
|
60
67
|
const tsconfigPath = node_path_1.default.join(cwd, 'tsconfig.json');
|
|
61
68
|
let version = '0.0.0';
|
|
@@ -106,7 +113,33 @@ async function buildCommand(options = {}) {
|
|
|
106
113
|
process.exit(1);
|
|
107
114
|
}
|
|
108
115
|
const parsedConfig = ts.parseJsonConfigFileContent(configFile.config, ts.sys, node_path_1.default.dirname(tsconfigPathForTs));
|
|
109
|
-
const
|
|
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;
|
|
110
143
|
let format = 'cjs';
|
|
111
144
|
try {
|
|
112
145
|
const pkg = JSON.parse(node_fs_1.default.readFileSync(node_path_1.default.join(cwd, 'package.json'), 'utf8'));
|
|
@@ -121,14 +154,22 @@ async function buildCommand(options = {}) {
|
|
|
121
154
|
// broken imports, and syntax errors BEFORE esbuild runs.
|
|
122
155
|
if (process.env.NODE_ENV !== 'test') {
|
|
123
156
|
process.stdout.write(`${utils_1.c.dim}type-checking...${utils_1.c.reset}`);
|
|
124
|
-
const
|
|
157
|
+
const filesToCheck = serverEntryPoints.length > 0 ? serverEntryPoints : parsedConfig.fileNames;
|
|
158
|
+
const program = ts.createProgram(filesToCheck, {
|
|
125
159
|
...parsedConfig.options,
|
|
160
|
+
skipLibCheck: true,
|
|
126
161
|
noEmit: true,
|
|
127
162
|
});
|
|
128
|
-
const
|
|
163
|
+
const allDiagnostics = [
|
|
129
164
|
...parsedConfig.errors,
|
|
130
165
|
...ts.getPreEmitDiagnostics(program),
|
|
131
166
|
];
|
|
167
|
+
// Only fail the build for errors that actually affect the server environment
|
|
168
|
+
const diagnostics = allDiagnostics.filter((diag) => {
|
|
169
|
+
if (!diag.file)
|
|
170
|
+
return true; // Global configuration error
|
|
171
|
+
return isServerSourceFile(diag.file.fileName);
|
|
172
|
+
});
|
|
132
173
|
if (diagnostics.length > 0) {
|
|
133
174
|
process.stdout.write('\n');
|
|
134
175
|
const formatted = ts.formatDiagnosticsWithColorAndContext(diagnostics, {
|
|
@@ -184,28 +225,45 @@ async function buildCommand(options = {}) {
|
|
|
184
225
|
// errors (e.g. missing cache keyGenerator, invalid middleware options) NOW,
|
|
185
226
|
// at build time, rather than letting them crash the production server on first
|
|
186
227
|
// request or startup.
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
228
|
+
if (options.skipEnvCheck ||
|
|
229
|
+
options.dryRun ||
|
|
230
|
+
process.env.EXIS_SKIP_ENV_CHECK === 'true') {
|
|
231
|
+
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`);
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
process.stdout.write(`${utils_1.c.dim}validating routes...${utils_1.c.reset}`);
|
|
235
|
+
try {
|
|
236
|
+
const manifestPath = node_path_1.default.join(cwd, '.exis', 'routes-manifest.js');
|
|
237
|
+
if (node_fs_1.default.existsSync(manifestPath)) {
|
|
238
|
+
try {
|
|
239
|
+
const { registerPathAliasLoader } = await Promise.resolve().then(() => __importStar(require('../resolve-aliases.js')));
|
|
240
|
+
registerPathAliasLoader(cwd);
|
|
241
|
+
}
|
|
242
|
+
catch {
|
|
243
|
+
// ignore
|
|
244
|
+
}
|
|
245
|
+
const dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
246
|
+
await dynamicImport((0, node_url_1.pathToFileURL)(manifestPath).href);
|
|
247
|
+
process.stdout.write(`\r${utils_1.c.green}✓${utils_1.c.reset} ${utils_1.c.dim}all routes validated.${utils_1.c.reset}\n`);
|
|
194
248
|
}
|
|
195
|
-
|
|
196
|
-
|
|
249
|
+
}
|
|
250
|
+
catch (err) {
|
|
251
|
+
const isEnvError = err.message?.includes('Validation Error') ||
|
|
252
|
+
err.message?.includes('Expected value, received undefined') ||
|
|
253
|
+
err.message?.includes('env') ||
|
|
254
|
+
err.code === 'VALIDATION_ERROR';
|
|
255
|
+
console.error('');
|
|
256
|
+
(0, utils_1.error)(`BUILD_VALIDATION_FAILED: ${err.message}`);
|
|
257
|
+
if (isEnvError) {
|
|
258
|
+
console.error(`\n${utils_1.c.yellow} Tip: If this environment variable is injected at runtime, run:${utils_1.c.reset}` +
|
|
259
|
+
`\n${utils_1.c.primary} exis build --skip-env-check${utils_1.c.reset}\n`);
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
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`);
|
|
197
263
|
}
|
|
198
|
-
|
|
199
|
-
await dynamicImport((0, node_url_1.pathToFileURL)(manifestPath).href);
|
|
200
|
-
process.stdout.write(`\r${utils_1.c.green}✓${utils_1.c.reset} ${utils_1.c.dim}all routes validated.${utils_1.c.reset}\n`);
|
|
264
|
+
process.exit(1);
|
|
201
265
|
}
|
|
202
266
|
}
|
|
203
|
-
catch (err) {
|
|
204
|
-
console.error('');
|
|
205
|
-
(0, utils_1.error)(`BUILD_VALIDATION_FAILED: ${err.message}`);
|
|
206
|
-
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`);
|
|
207
|
-
process.exit(1);
|
|
208
|
-
}
|
|
209
267
|
const ms = Date.now() - start;
|
|
210
268
|
console.log(`\n${utils_1.c.green}✓ built in ${ms}ms${utils_1.c.reset}\n`);
|
|
211
269
|
process.exit(0);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../../src/cli/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"dev.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/dev.ts"],"names":[],"mappings":"AAWA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,wBAAsB,UAAU,CAAC,OAAO,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CA2nBxE"}
|
package/dist/cli/commands/dev.js
CHANGED
|
@@ -42,6 +42,7 @@ const node_path_1 = __importDefault(require("node:path"));
|
|
|
42
42
|
const node_fs_1 = __importDefault(require("node:fs"));
|
|
43
43
|
const node_http_1 = __importDefault(require("node:http"));
|
|
44
44
|
const node_net_1 = __importDefault(require("node:net"));
|
|
45
|
+
const node_url_1 = require("node:url");
|
|
45
46
|
const utils_1 = require("../utils");
|
|
46
47
|
const time_1 = require("../../utils/time");
|
|
47
48
|
const env_1 = require("../../config/env");
|
|
@@ -133,15 +134,23 @@ async function devCommand(options = {}) {
|
|
|
133
134
|
const time = (0, time_1.getFormattedTime)();
|
|
134
135
|
console.log(`\n${utils_1.c.dim}${time}${utils_1.c.reset} ${primary}[exis]${utils_1.c.reset} ${utils_1.c.dim}starting development server (v${version})...${utils_1.c.reset}`);
|
|
135
136
|
// Hardcode Esbuild (tsx) as the Native HMR runner
|
|
137
|
+
let tsxArgs = [require.resolve('tsx/cli')];
|
|
138
|
+
try {
|
|
139
|
+
const resolved = require.resolve('tsx', { paths: [cwd, __dirname] });
|
|
140
|
+
tsxArgs = ['--import', (0, node_url_1.pathToFileURL)(resolved).href];
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
/* fallback to tsx/cli if resolve fails */
|
|
144
|
+
}
|
|
136
145
|
const runner = {
|
|
137
146
|
name: 'tsx',
|
|
138
147
|
bin: process.execPath,
|
|
139
|
-
args:
|
|
148
|
+
args: tsxArgs,
|
|
140
149
|
needsManualWatch: true,
|
|
141
150
|
};
|
|
142
151
|
let child = null;
|
|
143
152
|
let isShuttingDown = false;
|
|
144
|
-
|
|
153
|
+
let watcher = null;
|
|
145
154
|
function cleanupPid() {
|
|
146
155
|
try {
|
|
147
156
|
if (node_fs_1.default.existsSync(pidFile)) {
|
|
@@ -152,14 +161,45 @@ async function devCommand(options = {}) {
|
|
|
152
161
|
/* ignore */
|
|
153
162
|
}
|
|
154
163
|
}
|
|
164
|
+
let forceExitTriggered = false;
|
|
155
165
|
async function handleSessionStop(_signal) {
|
|
156
|
-
if (isShuttingDown)
|
|
166
|
+
if (isShuttingDown) {
|
|
167
|
+
if (!forceExitTriggered) {
|
|
168
|
+
forceExitTriggered = true;
|
|
169
|
+
cleanupPid();
|
|
170
|
+
if (child && child.pid) {
|
|
171
|
+
try {
|
|
172
|
+
if (process.platform === 'win32') {
|
|
173
|
+
(0, node_child_process_1.spawnSync)('taskkill', ['/pid', String(child.pid), '/f', '/t'], {
|
|
174
|
+
stdio: 'ignore',
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
else {
|
|
178
|
+
child.kill('SIGKILL');
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
/* ignore */
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
process.exit(0);
|
|
186
|
+
}
|
|
157
187
|
return;
|
|
188
|
+
}
|
|
158
189
|
isShuttingDown = true;
|
|
159
190
|
cleanupPid();
|
|
160
191
|
const time = (0, time_1.getFormattedTime)();
|
|
161
192
|
const primary = '\x1b[38;2;160;70;255m';
|
|
162
193
|
console.log(`\n${utils_1.c.dim}${time}${utils_1.c.reset} ${primary}[exis]${utils_1.c.reset} ${utils_1.c.dim}gracefully shutting down server...${utils_1.c.reset}`);
|
|
194
|
+
if (watcher) {
|
|
195
|
+
try {
|
|
196
|
+
watcher.close();
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
/* ignore */
|
|
200
|
+
}
|
|
201
|
+
watcher = null;
|
|
202
|
+
}
|
|
163
203
|
if (global._tscProcess) {
|
|
164
204
|
try {
|
|
165
205
|
;
|
|
@@ -169,14 +209,30 @@ async function devCommand(options = {}) {
|
|
|
169
209
|
/* ignore */
|
|
170
210
|
}
|
|
171
211
|
}
|
|
172
|
-
if (child &&
|
|
173
|
-
|
|
174
|
-
|
|
212
|
+
if (child &&
|
|
213
|
+
child.pid &&
|
|
214
|
+
child.exitCode === null &&
|
|
215
|
+
child.signalCode === null) {
|
|
216
|
+
try {
|
|
217
|
+
if (child.connected) {
|
|
218
|
+
child.send({ type: 'exis:shutdown' });
|
|
219
|
+
child.disconnect();
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
catch {
|
|
223
|
+
/* ignore */
|
|
224
|
+
}
|
|
225
|
+
try {
|
|
226
|
+
if (process.platform !== 'win32') {
|
|
227
|
+
child.kill('SIGTERM');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
catch {
|
|
231
|
+
/* ignore */
|
|
175
232
|
}
|
|
176
233
|
const exitTimeout = setTimeout(() => {
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
try {
|
|
234
|
+
try {
|
|
235
|
+
if (child && !child.killed) {
|
|
180
236
|
if (process.platform === 'win32') {
|
|
181
237
|
(0, node_child_process_1.spawnSync)('taskkill', ['/pid', String(child.pid), '/f', '/t'], {
|
|
182
238
|
stdio: 'ignore',
|
|
@@ -186,33 +242,18 @@ async function devCommand(options = {}) {
|
|
|
186
242
|
child.kill('SIGKILL');
|
|
187
243
|
}
|
|
188
244
|
}
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
245
|
+
}
|
|
246
|
+
catch {
|
|
247
|
+
/* ignore */
|
|
192
248
|
}
|
|
193
249
|
process.exit(0);
|
|
194
|
-
},
|
|
195
|
-
|
|
250
|
+
}, 2000);
|
|
251
|
+
const onChildDone = () => {
|
|
196
252
|
clearTimeout(exitTimeout);
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
});
|
|
202
|
-
try {
|
|
203
|
-
if (process.platform === 'win32') {
|
|
204
|
-
// On Windows, signals are not natively supported — send Ctrl+C
|
|
205
|
-
// event to the child's console group so it can shut down gracefully.
|
|
206
|
-
// The child already receives SIGINT from the terminal directly, so
|
|
207
|
-
// this is a no-op safety net; the real fix is the drain delay above.
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
child.kill('SIGTERM');
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
catch {
|
|
214
|
-
/* ignore */
|
|
215
|
-
}
|
|
253
|
+
process.exit(0);
|
|
254
|
+
};
|
|
255
|
+
child.once('close', onChildDone);
|
|
256
|
+
child.once('exit', onChildDone);
|
|
216
257
|
}
|
|
217
258
|
else {
|
|
218
259
|
process.exit(0);
|
|
@@ -232,9 +273,31 @@ async function devCommand(options = {}) {
|
|
|
232
273
|
fallbackServer = null;
|
|
233
274
|
}
|
|
234
275
|
}
|
|
235
|
-
|
|
276
|
+
let configuredPort = null;
|
|
277
|
+
try {
|
|
278
|
+
const configTs = node_path_1.default.join(cwd, 'exis.config.ts');
|
|
279
|
+
const configJs = node_path_1.default.join(cwd, 'exis.config.js');
|
|
280
|
+
const configFile = node_fs_1.default.existsSync(configTs)
|
|
281
|
+
? configTs
|
|
282
|
+
: node_fs_1.default.existsSync(configJs)
|
|
283
|
+
? configJs
|
|
284
|
+
: null;
|
|
285
|
+
if (configFile) {
|
|
286
|
+
const content = node_fs_1.default.readFileSync(configFile, 'utf8');
|
|
287
|
+
const match = content.match(/\bport\s*:\s*(\d+)/);
|
|
288
|
+
if (match) {
|
|
289
|
+
configuredPort = parseInt(match[1], 10);
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
catch {
|
|
294
|
+
/* ignore */
|
|
295
|
+
}
|
|
296
|
+
function startFallbackServer(errorMessage, customPort) {
|
|
236
297
|
closeFallbackServer();
|
|
237
|
-
const port =
|
|
298
|
+
const port = customPort ??
|
|
299
|
+
(process.env.PORT ? parseInt(process.env.PORT, 10) : configuredPort) ??
|
|
300
|
+
4000;
|
|
238
301
|
fallbackServer = node_http_1.default.createServer((req, res) => {
|
|
239
302
|
res.writeHead(500, { 'Content-Type': 'text/html' });
|
|
240
303
|
res.end(`
|
|
@@ -268,25 +331,89 @@ async function devCommand(options = {}) {
|
|
|
268
331
|
});
|
|
269
332
|
}
|
|
270
333
|
let isRestarting = false;
|
|
334
|
+
let pendingRestart = false;
|
|
335
|
+
let reloadDebounceTimer = null;
|
|
336
|
+
const queuedChangedFiles = new Set();
|
|
337
|
+
const RELOAD_DEBOUNCE_MS = 150;
|
|
338
|
+
const RELOAD_TIMEOUT_MS = 3000;
|
|
339
|
+
async function killChildGracefully() {
|
|
340
|
+
if (!child || child.killed)
|
|
341
|
+
return;
|
|
342
|
+
// 1. Send IPC shutdown message so the child can run app.close() / onClose hooks
|
|
343
|
+
try {
|
|
344
|
+
if (child.connected) {
|
|
345
|
+
child.send({ type: 'exis:shutdown' });
|
|
346
|
+
}
|
|
347
|
+
}
|
|
348
|
+
catch {
|
|
349
|
+
/* ignore — child may have already exited */
|
|
350
|
+
}
|
|
351
|
+
// 2. Disconnect the IPC channel IMMEDIATELY after sending the shutdown message.
|
|
352
|
+
// On Windows, this is CRITICAL: it closes the parent's end of the IPC pipe
|
|
353
|
+
// before the child starts tearing down its libuv handles, preventing the
|
|
354
|
+
// UV_HANDLE_CLOSING assertion crash in src\win\async.c.
|
|
355
|
+
try {
|
|
356
|
+
if (child.connected) {
|
|
357
|
+
child.disconnect();
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
catch {
|
|
361
|
+
/* ignore — channel may already be closed */
|
|
362
|
+
}
|
|
363
|
+
// 3. On non-Windows, also send SIGTERM as a direct signal
|
|
364
|
+
try {
|
|
365
|
+
if (process.platform !== 'win32') {
|
|
366
|
+
child.kill('SIGTERM');
|
|
367
|
+
}
|
|
368
|
+
}
|
|
369
|
+
catch {
|
|
370
|
+
/* ignore */
|
|
371
|
+
}
|
|
372
|
+
// 4. Wait for clean exit with a generous graceful timeout (3000ms).
|
|
373
|
+
// Child will usually exit in ~50-200ms once onClose finishes.
|
|
374
|
+
await new Promise((resolve) => {
|
|
375
|
+
let resolved = false;
|
|
376
|
+
const onExitOrClose = () => {
|
|
377
|
+
if (resolved)
|
|
378
|
+
return;
|
|
379
|
+
resolved = true;
|
|
380
|
+
clearTimeout(timer);
|
|
381
|
+
resolve();
|
|
382
|
+
};
|
|
383
|
+
const timer = setTimeout(() => {
|
|
384
|
+
if (resolved)
|
|
385
|
+
return;
|
|
386
|
+
resolved = true;
|
|
387
|
+
// Timeout expired — force kill the child process tree
|
|
388
|
+
if (child && !child.killed) {
|
|
389
|
+
try {
|
|
390
|
+
if (process.platform === 'win32') {
|
|
391
|
+
(0, node_child_process_1.spawnSync)('taskkill', ['/pid', String(child.pid), '/f', '/t'], {
|
|
392
|
+
stdio: 'ignore',
|
|
393
|
+
});
|
|
394
|
+
}
|
|
395
|
+
else {
|
|
396
|
+
child.kill('SIGKILL');
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
/* ignore */
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
resolve();
|
|
404
|
+
}, RELOAD_TIMEOUT_MS);
|
|
405
|
+
child.once('close', onExitOrClose);
|
|
406
|
+
child.once('exit', onExitOrClose);
|
|
407
|
+
});
|
|
408
|
+
}
|
|
271
409
|
async function startProcess() {
|
|
272
|
-
if (isRestarting)
|
|
410
|
+
if (isRestarting) {
|
|
411
|
+
pendingRestart = true;
|
|
273
412
|
return;
|
|
413
|
+
}
|
|
274
414
|
isRestarting = true;
|
|
275
415
|
closeFallbackServer();
|
|
276
|
-
|
|
277
|
-
child.kill('SIGTERM');
|
|
278
|
-
await new Promise((resolve) => {
|
|
279
|
-
const timeout = setTimeout(() => {
|
|
280
|
-
if (child)
|
|
281
|
-
child.kill('SIGKILL');
|
|
282
|
-
resolve();
|
|
283
|
-
}, 5000);
|
|
284
|
-
child.once('exit', () => {
|
|
285
|
-
clearTimeout(timeout);
|
|
286
|
-
resolve();
|
|
287
|
-
});
|
|
288
|
-
});
|
|
289
|
-
}
|
|
416
|
+
await killChildGracefully();
|
|
290
417
|
child = (0, node_child_process_1.spawn)(runner.bin, [...runner.args, startServerPath], {
|
|
291
418
|
cwd,
|
|
292
419
|
env: {
|
|
@@ -295,14 +422,11 @@ async function devCommand(options = {}) {
|
|
|
295
422
|
__EXIS_IS_RESTART: global._hasStartedBefore ? '1' : '',
|
|
296
423
|
EXIS_ENTRY_FILE: entryFile,
|
|
297
424
|
},
|
|
298
|
-
stdio: ['inherit', '
|
|
425
|
+
stdio: ['inherit', 'inherit', 'pipe', 'ipc'],
|
|
299
426
|
shell: runner.bin === process.execPath ? false : true,
|
|
300
427
|
});
|
|
301
428
|
global._hasStartedBefore = true;
|
|
302
429
|
let stderrBuffer = '';
|
|
303
|
-
child.stdout?.on('data', (chunk) => {
|
|
304
|
-
process.stdout.write(chunk);
|
|
305
|
-
});
|
|
306
430
|
child.stderr?.on('data', (chunk) => {
|
|
307
431
|
const str = chunk.toString();
|
|
308
432
|
process.stderr.write(chunk);
|
|
@@ -330,29 +454,70 @@ async function devCommand(options = {}) {
|
|
|
330
454
|
}
|
|
331
455
|
});
|
|
332
456
|
isRestarting = false;
|
|
457
|
+
// If more file changes arrived while we were restarting, trigger consolidated reload
|
|
458
|
+
if (pendingRestart) {
|
|
459
|
+
pendingRestart = false;
|
|
460
|
+
startProcess();
|
|
461
|
+
}
|
|
462
|
+
}
|
|
463
|
+
function scheduleReload(file) {
|
|
464
|
+
if (file) {
|
|
465
|
+
queuedChangedFiles.add(file);
|
|
466
|
+
}
|
|
467
|
+
if (reloadDebounceTimer) {
|
|
468
|
+
clearTimeout(reloadDebounceTimer);
|
|
469
|
+
}
|
|
470
|
+
reloadDebounceTimer = setTimeout(async () => {
|
|
471
|
+
reloadDebounceTimer = null;
|
|
472
|
+
const files = Array.from(queuedChangedFiles);
|
|
473
|
+
queuedChangedFiles.clear();
|
|
474
|
+
const time = (0, time_1.getFormattedTime)();
|
|
475
|
+
const primary = '\x1b[38;2;160;70;255m';
|
|
476
|
+
const fileLabel = files.length === 1
|
|
477
|
+
? files[0]
|
|
478
|
+
: files.length > 1
|
|
479
|
+
? `${files[0]} (+${files.length - 1} other files)`
|
|
480
|
+
: 'file changes';
|
|
481
|
+
console.log(`${utils_1.c.dim}${time}${utils_1.c.reset} ${primary}[exis]${utils_1.c.reset} ${utils_1.c.dim}reloading due to change in ${fileLabel}${utils_1.c.reset}`);
|
|
482
|
+
await generateManifest(cwd, '', true);
|
|
483
|
+
startProcess();
|
|
484
|
+
}, RELOAD_DEBOUNCE_MS);
|
|
333
485
|
}
|
|
334
486
|
// Handle restarts for runners that don't support watch natively
|
|
335
487
|
if (runner.needsManualWatch && !options._disableWatch) {
|
|
336
488
|
const chokidar = await importChokidar();
|
|
337
489
|
if (chokidar) {
|
|
338
|
-
|
|
490
|
+
watcher = chokidar.watch([cwd], {
|
|
339
491
|
cwd,
|
|
340
492
|
ignoreInitial: true,
|
|
341
493
|
ignored: [
|
|
342
494
|
// eslint-disable-next-line no-useless-escape
|
|
343
|
-
/(^|[\/\\])\../, // ignore dotfiles
|
|
495
|
+
/(^|[\/\\])\../, // ignore dotfiles (.git, .vscode, .idea, etc.)
|
|
344
496
|
/node_modules/,
|
|
345
497
|
/\.exis/,
|
|
346
498
|
/dist/,
|
|
499
|
+
/build/,
|
|
347
500
|
/exis\.d\.ts$/,
|
|
501
|
+
/\.(rar|zip|7z|tar|gz|tgz|bz2|xz|iso)$/i, // compressed archives
|
|
502
|
+
/\.(bak|tmp|temp|swp|swo|lock|pid)$/i, // temporary and lock files
|
|
503
|
+
/\.(log|log\.\d+|sqlite|sqlite3|db|db-shm|db-wal|db-journal)$/i, // logs and databases
|
|
504
|
+
/\.(png|jpe?g|gif|svg|ico|webp|avif|mp4|webm|mov|mp3|wav|pdf|docx?|xlsx?|pptx?)$/i, // media & binary docs
|
|
348
505
|
],
|
|
349
506
|
});
|
|
507
|
+
watcher.on('error', (err) => {
|
|
508
|
+
// Suppress non-fatal Windows file lock / permission errors (EBUSY / EPERM)
|
|
509
|
+
if (err?.code === 'EBUSY' ||
|
|
510
|
+
err?.code === 'EPERM' ||
|
|
511
|
+
err?.code === 'UNKNOWN') {
|
|
512
|
+
return;
|
|
513
|
+
}
|
|
514
|
+
console.warn(`\x1b[33m[exis watcher notice]\x1b[0m ${err?.message || err}`);
|
|
515
|
+
});
|
|
350
516
|
watcher.on('all', async (eventName, file) => {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
startProcess();
|
|
517
|
+
if (/\.(rar|zip|7z|tar|gz|tgz|bz2|xz|iso|bak|tmp|temp|swp|swo|lock|pid|log|sqlite|sqlite3|db|png|jpe?g|gif|svg|ico|webp|pdf)$/i.test(file)) {
|
|
518
|
+
return;
|
|
519
|
+
}
|
|
520
|
+
scheduleReload(file);
|
|
356
521
|
});
|
|
357
522
|
}
|
|
358
523
|
}
|
|
@@ -388,13 +553,13 @@ async function devCommand(options = {}) {
|
|
|
388
553
|
}
|
|
389
554
|
else if (line.includes('error TS')) {
|
|
390
555
|
const time = getTime();
|
|
391
|
-
console.error(`\n${utils_1.c.red}
|
|
556
|
+
console.error(`\n${utils_1.c.red}${time} ERROR:${utils_1.c.reset} ${line}`);
|
|
392
557
|
tscErrors.push(line);
|
|
393
558
|
}
|
|
394
559
|
else if (line.includes('Found') && line.includes('error')) {
|
|
395
560
|
// "Found X errors." summary line
|
|
396
561
|
const time = getTime();
|
|
397
|
-
console.error(`\n${utils_1.c.yellow}
|
|
562
|
+
console.error(`\n${utils_1.c.yellow}${time} INFO:${utils_1.c.reset} ${line}`);
|
|
398
563
|
if (tscErrors.length > 0) {
|
|
399
564
|
startFallbackServer(`TypeScript Compilation Errors\n${'─'.repeat(50)}\n\n` +
|
|
400
565
|
tscErrors.join('\n'));
|
|
@@ -403,7 +568,7 @@ async function devCommand(options = {}) {
|
|
|
403
568
|
else if (!line.includes('Starting compilation in watch mode') &&
|
|
404
569
|
!line.includes('File change detected')) {
|
|
405
570
|
const time = getTime();
|
|
406
|
-
console.error(`${utils_1.c.yellow}
|
|
571
|
+
console.error(`${utils_1.c.yellow}${time} INFO:${utils_1.c.reset} ${line}`);
|
|
407
572
|
}
|
|
408
573
|
}
|
|
409
574
|
});
|