@davnx/webpack 1.0.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.
- package/README.md +390 -0
- package/create-webpack-dev.d.ts +24 -0
- package/create-webpack-dev.js +155 -0
- package/create-webpack-dev.js.map +1 -0
- package/create-webpack-prod.d.ts +32 -0
- package/create-webpack-prod.js +186 -0
- package/create-webpack-prod.js.map +1 -0
- package/executors/build/build.impl.d.ts +42 -0
- package/executors/build/build.impl.js +107 -0
- package/executors/build/build.impl.js.map +1 -0
- package/executors/build/schema.json +115 -0
- package/executors/serve/schema.json +94 -0
- package/executors/serve/serve.impl.d.ts +42 -0
- package/executors/serve/serve.impl.js +227 -0
- package/executors/serve/serve.impl.js.map +1 -0
- package/executors.json +14 -0
- package/index.d.ts +3 -0
- package/index.js +8 -0
- package/index.js.map +1 -0
- package/main.devserver.d.ts +2 -0
- package/main.devserver.js +482 -0
- package/main.devserver.js.map +1 -0
- package/package.json +58 -0
|
@@ -0,0 +1,482 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Parent/Child dual-mode runner with multi-child round-robin + hot reload.
|
|
3
|
+
//
|
|
4
|
+
// Parent (default):
|
|
5
|
+
// - Stable public port (env.PORT or first free >= 8100).
|
|
6
|
+
// - Spawns N children (env.CHILD_COUNT, default 2), each runs this file with APP_RUNNER=1.
|
|
7
|
+
// - Round-robin load balancing to healthy children.
|
|
8
|
+
// - POST /webpack/reload:
|
|
9
|
+
// * forwards 'reload' to all healthy children (they hot-swap in-process)
|
|
10
|
+
// * respawns any unhealthy/crashed children
|
|
11
|
+
// - If a child crashes, it is marked unhealthy; parent keeps serving via others.
|
|
12
|
+
// - If ALL are down, parent returns 503 with last errors. Parent only dies on user interrupt.
|
|
13
|
+
//
|
|
14
|
+
// Child (APP_RUNNER=1):
|
|
15
|
+
// - Loads webpack bundle (BUNDLE_PATH, default ./main.js) exporting global.createChildApp().
|
|
16
|
+
// - createChildApp() bootstraps NestJS+Fastify, returns a raw http.RequestListener handler.
|
|
17
|
+
// - Child wraps handler in http.createServer on a Unix socket; reports {type:'ready', socketPath} via IPC.
|
|
18
|
+
// - On 'reload' IPC or POST /webpack/reload, closes old app, re-imports bundle, swaps handler in-place.
|
|
19
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
20
|
+
if (k2 === undefined) k2 = k;
|
|
21
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
22
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
23
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
24
|
+
}
|
|
25
|
+
Object.defineProperty(o, k2, desc);
|
|
26
|
+
}) : (function(o, m, k, k2) {
|
|
27
|
+
if (k2 === undefined) k2 = k;
|
|
28
|
+
o[k2] = m[k];
|
|
29
|
+
}));
|
|
30
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
31
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
32
|
+
}) : function(o, v) {
|
|
33
|
+
o["default"] = v;
|
|
34
|
+
});
|
|
35
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
36
|
+
var ownKeys = function(o) {
|
|
37
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
38
|
+
var ar = [];
|
|
39
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
40
|
+
return ar;
|
|
41
|
+
};
|
|
42
|
+
return ownKeys(o);
|
|
43
|
+
};
|
|
44
|
+
return function (mod) {
|
|
45
|
+
if (mod && mod.__esModule) return mod;
|
|
46
|
+
var result = {};
|
|
47
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
48
|
+
__setModuleDefault(result, mod);
|
|
49
|
+
return result;
|
|
50
|
+
};
|
|
51
|
+
})();
|
|
52
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
53
|
+
const path = __importStar(require("node:path"));
|
|
54
|
+
const fs = __importStar(require("node:fs"));
|
|
55
|
+
const os = __importStar(require("node:os"));
|
|
56
|
+
const node_child_process_1 = require("node:child_process");
|
|
57
|
+
const http = __importStar(require("node:http"));
|
|
58
|
+
const readline = __importStar(require("node:readline"));
|
|
59
|
+
const inspector = __importStar(require("node:inspector"));
|
|
60
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
61
|
+
const httpProxy = require('http-proxy');
|
|
62
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports
|
|
63
|
+
const { prettyFactory } = require('pino-pretty');
|
|
64
|
+
// ----------------------------- Shared Config ----------------------------------
|
|
65
|
+
const BUNDLE_PATH = process.env.BUNDLE_PATH?.trim() || './main.js';
|
|
66
|
+
const SERVICE_NAME = process.env.SERVICE_NAME || '';
|
|
67
|
+
const SERVICE_PREFIX = SERVICE_NAME ? `/${SERVICE_NAME}` : '';
|
|
68
|
+
// ----------------------------- Socket Helpers ---------------------------------
|
|
69
|
+
const SOCK_DIR = path.join(os.tmpdir(), `${SERVICE_NAME || 'agencloud'}-devserver`);
|
|
70
|
+
function childSockPath(id) {
|
|
71
|
+
return path.join(SOCK_DIR, `child-${id}.sock`);
|
|
72
|
+
}
|
|
73
|
+
function cleanupSock(sockPath) {
|
|
74
|
+
if (!sockPath)
|
|
75
|
+
return;
|
|
76
|
+
try {
|
|
77
|
+
fs.unlinkSync(sockPath);
|
|
78
|
+
}
|
|
79
|
+
catch { }
|
|
80
|
+
}
|
|
81
|
+
// delete from CJS cache + require fresh
|
|
82
|
+
async function importFresh(spec) {
|
|
83
|
+
process.env.DEVSERVER_MODE = '1';
|
|
84
|
+
const resolved = path.isAbsolute(spec) ? spec : path.join(__dirname, spec);
|
|
85
|
+
eval(`delete require.cache["${resolved}"]`); // delete from CJS cache
|
|
86
|
+
return eval(`require("${resolved}")`);
|
|
87
|
+
}
|
|
88
|
+
function debounce(fn, ms) {
|
|
89
|
+
let t = null;
|
|
90
|
+
return (...args) => {
|
|
91
|
+
if (t)
|
|
92
|
+
clearTimeout(t);
|
|
93
|
+
t = setTimeout(() => fn(...args), ms);
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
// ===================================================================================
|
|
97
|
+
// CHILD MODE (APP_RUNNER=1) — loads bundle, bootstraps NestJS app, listens on socket
|
|
98
|
+
// ===================================================================================
|
|
99
|
+
if (process.env.APP_RUNNER === '1') {
|
|
100
|
+
(async () => {
|
|
101
|
+
let current = null;
|
|
102
|
+
let swapping = false;
|
|
103
|
+
// Delegate starts as 503; swapped to the real handler after first boot
|
|
104
|
+
let delegate = (_req, res) => {
|
|
105
|
+
res.statusCode = 503;
|
|
106
|
+
res.end('starting');
|
|
107
|
+
};
|
|
108
|
+
async function swapNow() {
|
|
109
|
+
if (swapping)
|
|
110
|
+
return current;
|
|
111
|
+
swapping = true;
|
|
112
|
+
// ── Stale-handler cleanup ──
|
|
113
|
+
// @frontegg/nestjs-common/app-builder registers process.on('uncaughtException')
|
|
114
|
+
// during build() and never removes it on close. After swap, the OLD handler
|
|
115
|
+
// fires during background teardown and crashes because its AsyncLocalStorage
|
|
116
|
+
// context is destroyed. Fix: wipe all handlers before re-import, then add
|
|
117
|
+
// a safe catch-all. The fresh bundle will register its own valid handlers.
|
|
118
|
+
process.removeAllListeners('uncaughtException');
|
|
119
|
+
process.removeAllListeners('unhandledRejection');
|
|
120
|
+
process.on('uncaughtException', (err, origin) => {
|
|
121
|
+
console.error(`[child] uncaughtException (${origin}):`, err);
|
|
122
|
+
});
|
|
123
|
+
process.on('unhandledRejection', (reason) => {
|
|
124
|
+
// Suppress known stale-context rejections from previous app's background teardown.
|
|
125
|
+
const msg = reason instanceof Error ? reason.stack || reason.message : String(reason);
|
|
126
|
+
if (msg.includes('FronteggContextScope') || msg.includes('populateLoggerMetadata')) {
|
|
127
|
+
return; // swallow — old app context is gone, nothing to do
|
|
128
|
+
}
|
|
129
|
+
console.error('[child] unhandledRejection:', reason);
|
|
130
|
+
});
|
|
131
|
+
await importFresh(BUNDLE_PATH);
|
|
132
|
+
if (typeof global.createChildApp !== 'function') {
|
|
133
|
+
swapping = false;
|
|
134
|
+
throw new Error(`Bundle '${BUNDLE_PATH}' does not export createChildApp(). ` +
|
|
135
|
+
`Ensure your deployments/service/main.ts sets global.createChildApp when DEVSERVER_MODE === '1'.`);
|
|
136
|
+
}
|
|
137
|
+
const next = await global.createChildApp();
|
|
138
|
+
const prev = current;
|
|
139
|
+
current = next;
|
|
140
|
+
delegate = next.handler;
|
|
141
|
+
console.log(`[child] Swapped to fresh app (previous closing in background)`);
|
|
142
|
+
if (prev)
|
|
143
|
+
prev.close().catch(err => console.error('[child] background close error:', err));
|
|
144
|
+
swapping = false;
|
|
145
|
+
return next;
|
|
146
|
+
}
|
|
147
|
+
// Create ONE debounced swapper that lives across requests
|
|
148
|
+
const debouncedSwap = debounce(async () => {
|
|
149
|
+
try {
|
|
150
|
+
console.log('[child] /webpack/reload');
|
|
151
|
+
await swapNow();
|
|
152
|
+
}
|
|
153
|
+
catch (e) {
|
|
154
|
+
console.error('[child] reload failed:', e);
|
|
155
|
+
}
|
|
156
|
+
}, 250);
|
|
157
|
+
// Raw HTTP server: admin reload endpoint + delegate all else to NestJS handler
|
|
158
|
+
const server = http.createServer((req, res) => {
|
|
159
|
+
if (req.method === 'POST' && req.url === '/webpack/reload') {
|
|
160
|
+
res.writeHead(200, { 'content-type': 'application/json' });
|
|
161
|
+
res.end(JSON.stringify({ ok: true }));
|
|
162
|
+
debouncedSwap();
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
delegate(req, res);
|
|
166
|
+
});
|
|
167
|
+
const sockPath = process.env.CHILD_SOCK_PATH;
|
|
168
|
+
// boot once, then listen on Unix socket
|
|
169
|
+
try {
|
|
170
|
+
await swapNow();
|
|
171
|
+
const resolvedBundle = path.isAbsolute(BUNDLE_PATH) ? BUNDLE_PATH : path.join(__dirname, BUNDLE_PATH);
|
|
172
|
+
console.log(`[child] Using bundle: ${resolvedBundle}`);
|
|
173
|
+
cleanupSock(sockPath); // remove stale socket from previous run
|
|
174
|
+
server.listen(sockPath, () => {
|
|
175
|
+
console.log(`[child] Listening on ${sockPath}`);
|
|
176
|
+
if (process.send)
|
|
177
|
+
process.send({ type: 'ready', socketPath: sockPath });
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
console.error('[child] Startup error:', err);
|
|
182
|
+
if (process.send)
|
|
183
|
+
process.send({ type: 'boot-error', error: String(err?.stack || err) });
|
|
184
|
+
process.exitCode = 1;
|
|
185
|
+
return;
|
|
186
|
+
}
|
|
187
|
+
// IPC reload handler (parent-initiated reloads)
|
|
188
|
+
process.on('message', async (msg) => {
|
|
189
|
+
if (!msg || typeof msg !== 'object')
|
|
190
|
+
return;
|
|
191
|
+
if (msg.type === 'reload') {
|
|
192
|
+
try {
|
|
193
|
+
await swapNow();
|
|
194
|
+
if (process.send)
|
|
195
|
+
process.send({ type: 'reloaded', socketPath: sockPath });
|
|
196
|
+
}
|
|
197
|
+
catch (e) {
|
|
198
|
+
console.error('[child] reload error:', e);
|
|
199
|
+
if (process.send)
|
|
200
|
+
process.send({ type: 'reload-error', error: String(e?.stack || e) });
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
});
|
|
204
|
+
process.on('beforeExit', () => {
|
|
205
|
+
try {
|
|
206
|
+
inspector?.close?.();
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
}
|
|
210
|
+
});
|
|
211
|
+
const shutdown = async (sig) => {
|
|
212
|
+
console.log(`[child ${sig}] shutting down…`);
|
|
213
|
+
const closingApp = current?.close().catch(err => console.error('[child] close error:', err));
|
|
214
|
+
const closingServer = new Promise(resolve => server.close(() => resolve()));
|
|
215
|
+
cleanupSock(sockPath);
|
|
216
|
+
setTimeout(() => process.exit(0), 700).unref();
|
|
217
|
+
await Promise.all([closingApp, closingServer]);
|
|
218
|
+
process.exit(0);
|
|
219
|
+
};
|
|
220
|
+
['SIGINT', 'SIGTERM', 'SIGHUP', 'SIGQUIT', 'SIGUSR2'].forEach(sig => {
|
|
221
|
+
process.on(sig, () => {
|
|
222
|
+
inspector?.close?.();
|
|
223
|
+
void shutdown(sig);
|
|
224
|
+
});
|
|
225
|
+
});
|
|
226
|
+
})();
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
// ---------- Colored prefix helpers (no deps) ----------
|
|
230
|
+
const COLORS = [
|
|
231
|
+
'\x1b[36m', // cyan
|
|
232
|
+
'\x1b[33m', // yellow
|
|
233
|
+
'\x1b[35m', // magenta
|
|
234
|
+
'\x1b[32m', // green
|
|
235
|
+
'\x1b[34m', // blue
|
|
236
|
+
'\x1b[31m' // red
|
|
237
|
+
];
|
|
238
|
+
const RESET = '\x1b[0m';
|
|
239
|
+
const CHILD_COUNT = Math.max(1, Number(process.env.CHILD_COUNT || 1));
|
|
240
|
+
const colorFor = (id) => {
|
|
241
|
+
return COLORS[(id - 1) % COLORS.length];
|
|
242
|
+
};
|
|
243
|
+
const tagFor = (id) => {
|
|
244
|
+
if (CHILD_COUNT === 1) {
|
|
245
|
+
return '';
|
|
246
|
+
}
|
|
247
|
+
const base = `[child#${id}] `;
|
|
248
|
+
return `${colorFor(id)}${base}${RESET}`;
|
|
249
|
+
};
|
|
250
|
+
const isJsonLog = (log) => {
|
|
251
|
+
return log.startsWith('{') && log.endsWith('}');
|
|
252
|
+
};
|
|
253
|
+
const wireChildLogging = (info) => {
|
|
254
|
+
const prettyLog = prettyFactory({
|
|
255
|
+
sync: true,
|
|
256
|
+
colorize: true,
|
|
257
|
+
crlf: true,
|
|
258
|
+
messageKey: 'message',
|
|
259
|
+
errorLikeObjectKeys: ['err', 'error'],
|
|
260
|
+
errorProps: 'type,message,stack',
|
|
261
|
+
ignore: [
|
|
262
|
+
'logContext', 'context', 'hostname', 'req', 'res', 'err.driverError',
|
|
263
|
+
'module', 'cloudEnvironment',
|
|
264
|
+
'frontegg-application-id', 'frontegg-tenant-id',
|
|
265
|
+
'frontegg-trace-id', 'frontegg-vendor-id',
|
|
266
|
+
'host', 'service', 'version',
|
|
267
|
+
'err', 'error',
|
|
268
|
+
].join(','),
|
|
269
|
+
messageFormat: '{if module}[{module}] {end}{if context}[{context}] {end}{if logContext}[{logContext}] {end}{message}',
|
|
270
|
+
customPrettifiers: {
|
|
271
|
+
stack: (value) => '\n' + String(value),
|
|
272
|
+
},
|
|
273
|
+
});
|
|
274
|
+
const write = (kind, line) => {
|
|
275
|
+
const dest = kind === 'stdout' ? process.stdout : process.stderr;
|
|
276
|
+
const log = isJsonLog(line) ? prettyLog(line) : `${line}\n`;
|
|
277
|
+
dest.write(`${tagFor(info.id)}${log}`);
|
|
278
|
+
};
|
|
279
|
+
const attach = (stream, kind) => {
|
|
280
|
+
if (!stream)
|
|
281
|
+
return;
|
|
282
|
+
const rl = readline.createInterface({ input: stream });
|
|
283
|
+
rl.on('line', (line) => write(kind, line));
|
|
284
|
+
rl.on('close', () => { });
|
|
285
|
+
};
|
|
286
|
+
attach(info.proc.stdout, 'stdout');
|
|
287
|
+
attach(info.proc.stderr, 'stderr');
|
|
288
|
+
};
|
|
289
|
+
(async () => {
|
|
290
|
+
// Ensure socket directory exists
|
|
291
|
+
fs.mkdirSync(SOCK_DIR, { recursive: true });
|
|
292
|
+
const proxy = httpProxy.createProxyServer({});
|
|
293
|
+
let publicPort = Number(process.env.PORT) || 0;
|
|
294
|
+
if (!publicPort)
|
|
295
|
+
publicPort = 9090;
|
|
296
|
+
const children = [];
|
|
297
|
+
let nextId = 1;
|
|
298
|
+
let rrIndex = 0;
|
|
299
|
+
function healthyChildren() {
|
|
300
|
+
return children.filter(c => c.healthy && typeof c.socketPath === 'string');
|
|
301
|
+
}
|
|
302
|
+
function pickChild() {
|
|
303
|
+
const healthy = healthyChildren();
|
|
304
|
+
if (healthy.length === 0)
|
|
305
|
+
return null;
|
|
306
|
+
const idx = rrIndex % healthy.length;
|
|
307
|
+
rrIndex = (rrIndex + 1) % healthy.length;
|
|
308
|
+
return healthy[idx];
|
|
309
|
+
}
|
|
310
|
+
async function spawnChild() {
|
|
311
|
+
const id = nextId++;
|
|
312
|
+
const sockPath = childSockPath(id);
|
|
313
|
+
cleanupSock(sockPath); // remove stale socket
|
|
314
|
+
const proc = (0, node_child_process_1.fork)(__filename, {
|
|
315
|
+
env: {
|
|
316
|
+
...process.env,
|
|
317
|
+
APP_RUNNER: '1',
|
|
318
|
+
CHILD_SOCK_PATH: sockPath,
|
|
319
|
+
CHILD_DEBUG_PORT: CHILD_COUNT == 1 ? '1' : '0',
|
|
320
|
+
},
|
|
321
|
+
stdio: ['inherit', 'pipe', 'pipe', 'ipc'],
|
|
322
|
+
// Compiled JS — no @swc-node/register needed
|
|
323
|
+
execArgv: ['--enable-source-maps']
|
|
324
|
+
});
|
|
325
|
+
const info = { id, proc, healthy: false, lastError: null };
|
|
326
|
+
proc.on('message', (msg) => {
|
|
327
|
+
if (!msg || typeof msg !== 'object')
|
|
328
|
+
return;
|
|
329
|
+
const m = msg;
|
|
330
|
+
if (m.type === 'ready') {
|
|
331
|
+
info.socketPath = String(m.socketPath);
|
|
332
|
+
info.healthy = true;
|
|
333
|
+
console.log(`[parent] Child#${info.id} ready on socket ${info.socketPath}`);
|
|
334
|
+
}
|
|
335
|
+
else if (m.type === 'inspector-url') {
|
|
336
|
+
console.log(`[parent] Child#${info.id} inspector: ${m.url}`);
|
|
337
|
+
}
|
|
338
|
+
else if (m.type === 'reloaded') {
|
|
339
|
+
info.socketPath = String(m.socketPath);
|
|
340
|
+
info.healthy = true;
|
|
341
|
+
console.log(`[parent] Child#${info.id} hot-swapped on socket ${info.socketPath}`);
|
|
342
|
+
}
|
|
343
|
+
else if (m.type === 'reload-error') {
|
|
344
|
+
info.lastError = String(m.error || 'unknown reload error');
|
|
345
|
+
console.error(`[parent] Child#${info.id} reload error: ${info.lastError}`);
|
|
346
|
+
info.healthy = false;
|
|
347
|
+
}
|
|
348
|
+
else if (m.type === 'boot-error') {
|
|
349
|
+
info.lastError = String(m.error || 'unknown boot error');
|
|
350
|
+
console.error(`[parent] Child#${info.id} boot error: ${info.lastError}`);
|
|
351
|
+
info.healthy = false;
|
|
352
|
+
}
|
|
353
|
+
});
|
|
354
|
+
proc.on('exit', (code, signal) => {
|
|
355
|
+
const clean = signal === 'SIGINT' || signal === 'SIGTERM' || code === 0;
|
|
356
|
+
if (clean) {
|
|
357
|
+
console.log(`[parent] Child#${info.id} exited cleanly (code=${code}, signal=${signal ?? 'none'})`);
|
|
358
|
+
}
|
|
359
|
+
else {
|
|
360
|
+
console.error(`[parent] Child#${info.id} crashed (code=${code}, signal=${signal ?? 'none'})`);
|
|
361
|
+
if (!info.lastError)
|
|
362
|
+
info.lastError = `Child exited abnormally (code=${code}, signal=${signal ?? 'none'})`;
|
|
363
|
+
}
|
|
364
|
+
info.healthy = false;
|
|
365
|
+
cleanupSock(info.socketPath);
|
|
366
|
+
info.socketPath = undefined;
|
|
367
|
+
});
|
|
368
|
+
children.push(info);
|
|
369
|
+
// connect stdout/stderr now that it's piped
|
|
370
|
+
wireChildLogging(info);
|
|
371
|
+
return info;
|
|
372
|
+
}
|
|
373
|
+
async function ensurePoolSize(n) {
|
|
374
|
+
const live = children.filter(c => c.proc.killed === false);
|
|
375
|
+
const need = n - live.length;
|
|
376
|
+
for (let i = 0; i < need; i++) {
|
|
377
|
+
await spawnChild();
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
async function respawnUnhealthy() {
|
|
381
|
+
// Kill & replace children that are unhealthy or missing socketPaths
|
|
382
|
+
const toReplace = children.filter(c => !c.healthy || typeof c.socketPath !== 'string');
|
|
383
|
+
await Promise.all(toReplace.map(async (c) => {
|
|
384
|
+
try {
|
|
385
|
+
c.proc.kill('SIGTERM');
|
|
386
|
+
}
|
|
387
|
+
catch { /* ignore */
|
|
388
|
+
}
|
|
389
|
+
cleanupSock(c.socketPath);
|
|
390
|
+
c.socketPath = undefined;
|
|
391
|
+
// Remove from array
|
|
392
|
+
const idx = children.indexOf(c);
|
|
393
|
+
if (idx >= 0)
|
|
394
|
+
children.splice(idx, 1);
|
|
395
|
+
// Spawn a fresh one
|
|
396
|
+
await spawnChild();
|
|
397
|
+
}));
|
|
398
|
+
}
|
|
399
|
+
// Create ONE debounced forwarder that lives across requests
|
|
400
|
+
const debouncedForwardReload = debounce(async () => {
|
|
401
|
+
const healthies = healthyChildren();
|
|
402
|
+
if (healthies.length > 0) {
|
|
403
|
+
console.log(`[parent] Forwarding reload to ${healthies.length} child(ren)`);
|
|
404
|
+
for (const c of healthies)
|
|
405
|
+
c.proc.send?.({ type: 'reload' });
|
|
406
|
+
}
|
|
407
|
+
await respawnUnhealthy();
|
|
408
|
+
}, 200);
|
|
409
|
+
// Start parent server (stable port)
|
|
410
|
+
const server = http.createServer(async (req, res) => {
|
|
411
|
+
// Admin endpoint: trigger rolling hot-reload & respawn crashed
|
|
412
|
+
if (req.method === 'POST' && req.url === '/webpack/reload') {
|
|
413
|
+
res.writeHead(200, { 'content-type': 'application/json' });
|
|
414
|
+
res.end(JSON.stringify({ ok: true }));
|
|
415
|
+
debouncedForwardReload();
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
// Enforce service prefix (mimics production gateway)
|
|
419
|
+
if (SERVICE_PREFIX) {
|
|
420
|
+
if (!req.url?.startsWith(SERVICE_PREFIX)) {
|
|
421
|
+
res.writeHead(404, { 'content-type': 'text/plain; charset=utf-8' });
|
|
422
|
+
res.end(`Not found. This service is mounted at ${SERVICE_PREFIX}/`);
|
|
423
|
+
return;
|
|
424
|
+
}
|
|
425
|
+
req.url = req.url.slice(SERVICE_PREFIX.length) || '/';
|
|
426
|
+
}
|
|
427
|
+
// Proxy all other traffic using round-robin among healthy children
|
|
428
|
+
const targetChild = pickChild();
|
|
429
|
+
if (!targetChild) {
|
|
430
|
+
res.statusCode = 503;
|
|
431
|
+
res.setHeader('content-type', 'text/plain; charset=utf-8');
|
|
432
|
+
const errs = children.map(c => `#${c.id}: ${c.lastError ?? 'no error recorded'}`).join('\n');
|
|
433
|
+
res.end(`No healthy children available. POST /webpack/reload to recover.\n\nLast errors:\n${errs}`);
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
proxy.web(req, res, {
|
|
437
|
+
target: { socketPath: targetChild.socketPath },
|
|
438
|
+
autoRewrite: true,
|
|
439
|
+
headers: {
|
|
440
|
+
'x-proxy-child-id': String(targetChild.id) // for logging/debugging
|
|
441
|
+
}
|
|
442
|
+
}, (err) => {
|
|
443
|
+
console.error(`[parent] proxy error to Child#${targetChild.id}:`, err);
|
|
444
|
+
// Mark this child unhealthy so next request won't pick it
|
|
445
|
+
targetChild.healthy = false;
|
|
446
|
+
targetChild.lastError = String(err?.stack || err);
|
|
447
|
+
res.statusCode = 502;
|
|
448
|
+
res.setHeader('content-type', 'text/plain; charset=utf-8');
|
|
449
|
+
res.end(`Upstream error from Child#${targetChild.id}. Try /webpack/reload.\n${targetChild.lastError}`);
|
|
450
|
+
});
|
|
451
|
+
});
|
|
452
|
+
server.listen(publicPort, async () => {
|
|
453
|
+
console.log(`[parent] Listening on :${publicPort}`);
|
|
454
|
+
if (SERVICE_PREFIX) {
|
|
455
|
+
console.log(`[parent] Service prefix: "${SERVICE_PREFIX}" (enforced — requests without it will get 404)`);
|
|
456
|
+
}
|
|
457
|
+
console.log(`POST http://localhost:${publicPort}/webpack/reload to trigger rolling swap/respawn`);
|
|
458
|
+
await ensurePoolSize(CHILD_COUNT);
|
|
459
|
+
});
|
|
460
|
+
// Graceful shutdown of parent (children get SIGTERM)
|
|
461
|
+
const shutdown = async (sig) => {
|
|
462
|
+
console.log(`[${sig}] [parent] shutting down…`);
|
|
463
|
+
for (const c of children) {
|
|
464
|
+
try {
|
|
465
|
+
c.proc.kill('SIGTERM');
|
|
466
|
+
}
|
|
467
|
+
catch { /* ignore */
|
|
468
|
+
}
|
|
469
|
+
if (c.socketPath)
|
|
470
|
+
cleanupSock(c.socketPath);
|
|
471
|
+
}
|
|
472
|
+
// Clean up socket directory
|
|
473
|
+
try {
|
|
474
|
+
fs.rmdirSync(SOCK_DIR);
|
|
475
|
+
}
|
|
476
|
+
catch { }
|
|
477
|
+
setTimeout(() => process.exit(0), 700).unref();
|
|
478
|
+
};
|
|
479
|
+
['SIGINT', 'SIGTERM', 'SIGHUP', 'SIGQUIT', 'SIGUSR2'].forEach(sig => process.on(sig, () => void shutdown(sig)));
|
|
480
|
+
})();
|
|
481
|
+
}
|
|
482
|
+
//# sourceMappingURL=main.devserver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.devserver.js","sourceRoot":"","sources":["../../../libs/webpack/src/main.devserver.ts"],"names":[],"mappings":";AAAA,2EAA2E;AAC3E,EAAE;AACF,oBAAoB;AACpB,0DAA0D;AAC1D,4FAA4F;AAC5F,qDAAqD;AACrD,2BAA2B;AAC3B,8EAA8E;AAC9E,iDAAiD;AACjD,kFAAkF;AAClF,+FAA+F;AAC/F,EAAE;AACF,wBAAwB;AACxB,8FAA8F;AAC9F,6FAA6F;AAC7F,4GAA4G;AAC5G,yGAAyG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEzG,gDAAkC;AAClC,4CAA8B;AAC9B,4CAA8B;AAC9B,2DAAwD;AACxD,gDAAkC;AAClC,wDAA0C;AAC1C,0DAA4C;AAE5C,iEAAiE;AACjE,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AACxC,iEAAiE;AACjE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAEjD,iFAAiF;AACjF,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,EAAE,IAAI,WAAW,CAAC;AACnE,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,EAAE,CAAC;AACpD,MAAM,cAAc,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAE9D,iFAAiF;AACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,YAAY,IAAI,WAAW,YAAY,CAAC,CAAC;AAEpF,SAAS,aAAa,CAAC,EAAU;IAC/B,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AACjD,CAAC;AAED,SAAS,WAAW,CAAC,QAA4B;IAC/C,IAAI,CAAC,QAAQ;QAAE,OAAO;IACtB,IAAI,CAAC;QAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;AAC3C,CAAC;AASD,wCAAwC;AACxC,KAAK,UAAU,WAAW,CAAc,IAAY;IAClD,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,GAAG,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IAC3E,IAAI,CAAC,yBAAyB,QAAQ,IAAI,CAAC,CAAC,CAAC,wBAAwB;IACrE,OAAO,IAAI,CAAC,YAAY,QAAQ,IAAI,CAAM,CAAC;AAC7C,CAAC;AAED,SAAS,QAAQ,CAAyC,EAAK,EAAE,EAAU;IACzE,IAAI,CAAC,GAA0B,IAAI,CAAC;IACpC,OAAO,CAAC,GAAG,IAAmB,EAAE,EAAE;QAChC,IAAI,CAAC;YAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACvB,CAAC,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC,CAAC;IACxC,CAAC,CAAC;AACJ,CAAC;AAGD,sFAAsF;AACtF,qFAAqF;AACrF,sFAAsF;AACtF,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,KAAK,GAAG,EAAE,CAAC;IACnC,CAAC,KAAK,IAAI,EAAE;QACV,IAAI,OAAO,GAAyB,IAAI,CAAC;QACzC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,uEAAuE;QACvE,IAAI,QAAQ,GAAyB,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;YACjD,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;YACrB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACtB,CAAC,CAAC;QAEF,KAAK,UAAU,OAAO;YACpB,IAAI,QAAQ;gBAAE,OAAO,OAAQ,CAAC;YAC9B,QAAQ,GAAG,IAAI,CAAC;YAEhB,8BAA8B;YAC9B,gFAAgF;YAChF,4EAA4E;YAC5E,6EAA6E;YAC7E,0EAA0E;YAC1E,2EAA2E;YAC3E,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAC;YAChD,OAAO,CAAC,kBAAkB,CAAC,oBAAoB,CAAC,CAAC;YACjD,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,EAAE;gBAC9C,OAAO,CAAC,KAAK,CAAC,8BAA8B,MAAM,IAAI,EAAE,GAAG,CAAC,CAAC;YAC/D,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,MAAM,EAAE,EAAE;gBAC1C,mFAAmF;gBACnF,MAAM,GAAG,GAAG,MAAM,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBACtF,IAAI,GAAG,CAAC,QAAQ,CAAC,sBAAsB,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;oBACnF,OAAO,CAAC,mDAAmD;gBAC7D,CAAC;gBACD,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,MAAM,CAAC,CAAC;YACvD,CAAC,CAAC,CAAC;YAEH,MAAM,WAAW,CAAC,WAAW,CAAC,CAAC;YAE/B,IAAI,OAAQ,MAAkC,CAAC,cAAc,KAAK,UAAU,EAAE,CAAC;gBAC7E,QAAQ,GAAG,KAAK,CAAC;gBACjB,MAAM,IAAI,KAAK,CACb,WAAW,WAAW,sCAAsC;oBAC5D,iGAAiG,CAClG,CAAC;YACJ,CAAC;YAED,MAAM,IAAI,GAAkB,MAAQ,MAAkC,CAAC,cAA+C,EAAE,CAAC;YAEzH,MAAM,IAAI,GAAG,OAAO,CAAC;YACrB,OAAO,GAAG,IAAI,CAAC;YACf,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,+DAA+D,CAAC,CAAC;YAE7E,IAAI,IAAI;gBAAE,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC,CAAC;YAE3F,QAAQ,GAAG,KAAK,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,0DAA0D;QAC1D,MAAM,aAAa,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE;YACxC,IAAI,CAAC;gBACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,MAAM,OAAO,EAAE,CAAC;YAClB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,CAAC;YAC7C,CAAC;QACH,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,+EAA+E;QAC/E,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,iBAAiB,EAAE,CAAC;gBAC3D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtC,aAAa,EAAE,CAAC;gBAChB,OAAO;YACT,CAAC;YACD,QAAQ,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACrB,CAAC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,eAAgB,CAAC;QAE9C,wCAAwC;QACxC,IAAI,CAAC;YACH,MAAM,OAAO,EAAE,CAAC;YAChB,MAAM,cAAc,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;YACtG,OAAO,CAAC,GAAG,CAAC,yBAAyB,cAAc,EAAE,CAAC,CAAC;YACvD,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,wCAAwC;YAC/D,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,GAAG,EAAE;gBAC3B,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;gBAChD,IAAI,OAAO,CAAC,IAAI;oBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC1E,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,GAAG,CAAC,CAAC;YAC7C,IAAI,OAAO,CAAC,IAAI;gBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,CAAE,GAAa,EAAE,KAAK,IAAI,GAAG,CAAC,EAAE,CAAC,CAAC;YACpG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACrB,OAAO;QACT,CAAC;QAED,gDAAgD;QAChD,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,KAAK,EAAE,GAAY,EAAE,EAAE;YAC3C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;gBAAE,OAAO;YAC5C,IAAK,GAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACvD,IAAI,CAAC;oBACH,MAAM,OAAO,EAAE,CAAC;oBAChB,IAAI,OAAO,CAAC,IAAI;wBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;gBAC7E,CAAC;gBAAC,OAAO,CAAC,EAAE,CAAC;oBACX,OAAO,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC,CAAC,CAAC;oBAC1C,IAAI,OAAO,CAAC,IAAI;wBAAE,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,CAAE,CAAW,EAAE,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;gBACpG,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,EAAE,CAAC,YAAY,EAAE,GAAG,EAAE;YAC5B,IAAI,CAAC;gBACH,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;YACT,CAAC;QACH,CAAC,CAAC,CAAC;QACH,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,UAAU,GAAG,kBAAkB,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG,OAAO,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7F,MAAM,aAAa,GAAG,IAAI,OAAO,CAAO,OAAO,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YAClF,WAAW,CAAC,QAAQ,CAAC,CAAC;YACtB,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;YAC/C,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC,CAAC;QACF,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;YAClE,OAAO,CAAC,EAAE,CAAC,GAAqB,EAAE,GAAG,EAAE;gBACrC,SAAS,EAAE,KAAK,EAAE,EAAE,CAAC;gBACrB,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,EAAE,CAAC;AACP,CAAC;KAAM,CAAC;IAYN,yDAAyD;IACzD,MAAM,MAAM,GAAG;QACb,UAAU,EAAE,OAAO;QACnB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,OAAO;QACnB,UAAU,CAAC,MAAM;KAClB,CAAC;IACF,MAAM,KAAK,GAAG,SAAS,CAAC;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC;IAEtE,MAAM,QAAQ,GAAG,CAAC,EAAU,EAAU,EAAE;QACtC,OAAO,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,MAAM,MAAM,GAAG,CAAC,EAAU,EAAU,EAAE;QAEpC,IAAG,WAAW,KAAI,CAAC,EAAC,CAAC;YACnB,OAAO,EAAE,CAAA;QACX,CAAC;QACD,MAAM,IAAI,GAAG,UAAU,EAAE,IAAI,CAAC;QAC9B,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;IAC1C,CAAC,CAAC;IAEF,MAAM,SAAS,GAAG,CAAC,GAAU,EAAC,EAAE;QAC9B,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IAClD,CAAC,CAAA;IACD,MAAM,gBAAgB,GAAG,CAAC,IAAe,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,aAAa,CAAC;YAC9B,IAAI,EAAE,IAAI;YACV,QAAQ,EAAE,IAAI;YACd,IAAI,EAAE,IAAI;YACV,UAAU,EAAE,SAAS;YACrB,mBAAmB,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;YACrC,UAAU,EAAE,oBAAoB;YAChC,MAAM,EAAE;gBACN,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB;gBACpE,QAAQ,EAAE,kBAAkB;gBAC5B,yBAAyB,EAAE,oBAAoB;gBAC/C,mBAAmB,EAAE,oBAAoB;gBACzC,MAAM,EAAE,SAAS,EAAE,SAAS;gBAC5B,KAAK,EAAE,OAAO;aACf,CAAC,IAAI,CAAC,GAAG,CAAC;YACX,aAAa,EAAE,sGAAsG;YACrH,iBAAiB,EAAE;gBACjB,KAAK,EAAE,CAAC,KAAc,EAAE,EAAE,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC;aAChD;SACF,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,CAAC,IAAyB,EAAE,IAAY,EAAE,EAAE;YACxD,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC;YACjE,MAAM,GAAG,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;YAC5D,IAAI,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,CAAC;QACzC,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,MAAgD,EAAE,IAAyB,EAAE,EAAE;YAC7F,IAAI,CAAC,MAAM;gBAAE,OAAO;YACpB,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACvD,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC3C,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC3B,CAAC,CAAC;QAEF,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;QACnC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IACrC,CAAC,CAAC;IAEF,CAAC,KAAK,IAAI,EAAE;QACV,iCAAiC;QACjC,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE5C,MAAM,KAAK,GAAG,SAAS,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;QAE9C,IAAI,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,IAAI,CAAC;QAEnC,MAAM,QAAQ,GAAgB,EAAE,CAAC;QACjC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,OAAO,GAAG,CAAC,CAAC;QAEhB,SAAS,eAAe;YACtB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;QAC7E,CAAC;QAED,SAAS,SAAS;YAChB,MAAM,OAAO,GAAG,eAAe,EAAE,CAAC;YAClC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO,IAAI,CAAC;YACtC,MAAM,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;YACrC,OAAO,GAAG,CAAC,OAAO,GAAG,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC;YACzC,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;QAED,KAAK,UAAU,UAAU;YACvB,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,aAAa,CAAC,EAAE,CAAC,CAAC;YACnC,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,sBAAsB;YAE7C,MAAM,IAAI,GAAG,IAAA,yBAAI,EAAC,UAAU,EAAE;gBAC5B,GAAG,EAAE;oBACH,GAAG,OAAO,CAAC,GAAG;oBACd,UAAU,EAAE,GAAG;oBACf,eAAe,EAAE,QAAQ;oBACzB,gBAAgB,EAAE,WAAW,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG;iBAC/C;gBACD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC;gBACzC,6CAA6C;gBAC7C,QAAQ,EAAE,CAAC,sBAAsB,CAAC;aACnC,CAAC,CAAC;YACH,MAAM,IAAI,GAAc,EAAE,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;YAEtE,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,GAAY,EAAE,EAAE;gBAClC,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ;oBAAE,OAAO;gBAC5C,MAAM,CAAC,GAAG,GAA8B,CAAC;gBAEzC,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;oBACvB,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,oBAAoB,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBAC9E,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;oBACtC,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;gBAC/D,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;oBACjC,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;oBACvC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;oBACpB,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,0BAA0B,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;gBACpF,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,cAAc,EAAE,CAAC;oBACrC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,sBAAsB,CAAC,CAAC;oBAC3D,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,kBAAkB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBAC3E,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,IAAI,CAAC,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBACnC,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAC;oBACzD,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,gBAAgB,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;oBACzE,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACvB,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;gBAC/B,MAAM,KAAK,GAAG,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,SAAS,IAAI,IAAI,KAAK,CAAC,CAAC;gBACxE,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,GAAG,CAAC,kBAAkB,IAAI,CAAC,EAAE,yBAAyB,IAAI,YAAY,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC;gBACrG,CAAC;qBAAM,CAAC;oBACN,OAAO,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,EAAE,kBAAkB,IAAI,YAAY,MAAM,IAAI,MAAM,GAAG,CAAC,CAAC;oBAC9F,IAAI,CAAC,IAAI,CAAC,SAAS;wBAAE,IAAI,CAAC,SAAS,GAAG,iCAAiC,IAAI,YAAY,MAAM,IAAI,MAAM,GAAG,CAAC;gBAC7G,CAAC;gBACD,IAAI,CAAC,OAAO,GAAG,KAAK,CAAC;gBACrB,WAAW,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;gBAC7B,IAAI,CAAC,UAAU,GAAG,SAAS,CAAC;YAC9B,CAAC,CAAC,CAAC;YAEH,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpB,4CAA4C;YAC5C,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAEvB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,KAAK,UAAU,cAAc,CAAC,CAAS;YACrC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC;YAC3D,MAAM,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;YAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;gBAC9B,MAAM,UAAU,EAAE,CAAC;YACrB,CAAC;QACH,CAAC;QAED,KAAK,UAAU,gBAAgB;YAC7B,oEAAoE;YACpE,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,UAAU,KAAK,QAAQ,CAAC,CAAC;YACvF,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,CAAC;oBACH,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY;gBACtB,CAAC;gBACD,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;gBAC1B,CAAC,CAAC,UAAU,GAAG,SAAS,CAAC;gBACzB,oBAAoB;gBACpB,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;gBAChC,IAAI,GAAG,IAAI,CAAC;oBAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;gBACtC,oBAAoB;gBACpB,MAAM,UAAU,EAAE,CAAC;YACrB,CAAC,CAAC,CAAC,CAAC;QACN,CAAC;QAED,4DAA4D;QAC5D,MAAM,sBAAsB,GAAG,QAAQ,CAAC,KAAK,IAAI,EAAE;YACjD,MAAM,SAAS,GAAG,eAAe,EAAE,CAAC;YACpC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,iCAAiC,SAAS,CAAC,MAAM,aAAa,CAAC,CAAC;gBAC5E,KAAK,MAAM,CAAC,IAAI,SAAS;oBAAE,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;YAC/D,CAAC;YACD,MAAM,gBAAgB,EAAE,CAAC;QAC3B,CAAC,EAAE,GAAG,CAAC,CAAC;QAER,oCAAoC;QACpC,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;YAClD,+DAA+D;YAC/D,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,GAAG,KAAK,iBAAiB,EAAE,CAAC;gBAC3D,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;gBACtC,sBAAsB,EAAE,CAAC;gBACzB,OAAO;YACT,CAAC;YAED,qDAAqD;YACrD,IAAI,cAAc,EAAE,CAAC;gBACnB,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;oBACzC,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAC,CAAC;oBACpE,GAAG,CAAC,GAAG,CAAC,yCAAyC,cAAc,GAAG,CAAC,CAAC;oBACpE,OAAO;gBACT,CAAC;gBACD,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC;YACxD,CAAC;YAED,mEAAmE;YACnE,MAAM,WAAW,GAAG,SAAS,EAAE,CAAC;YAChC,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;gBAC3D,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,SAAS,IAAI,mBAAmB,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC7F,GAAG,CAAC,GAAG,CAAC,oFAAoF,IAAI,EAAE,CAAC,CAAC;gBACpG,OAAO;YACT,CAAC;YAED,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;gBAClB,MAAM,EAAE,EAAE,UAAU,EAAE,WAAW,CAAC,UAAW,EAAuB;gBACpE,WAAW,EAAE,IAAI;gBACjB,OAAO,EAAE;oBACP,kBAAkB,EAAE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAE,wBAAwB;iBACrE;aACF,EAAE,CAAC,GAAG,EAAE,EAAE;gBACT,OAAO,CAAC,KAAK,CAAC,iCAAiC,WAAW,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBACvE,0DAA0D;gBAC1D,WAAW,CAAC,OAAO,GAAG,KAAK,CAAC;gBAC5B,WAAW,CAAC,SAAS,GAAG,MAAM,CAAE,GAAa,EAAE,KAAK,IAAI,GAAG,CAAC,CAAC;gBAC7D,GAAG,CAAC,UAAU,GAAG,GAAG,CAAC;gBACrB,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,2BAA2B,CAAC,CAAC;gBAC3D,GAAG,CAAC,GAAG,CAAC,6BAA6B,WAAW,CAAC,EAAE,2BAA2B,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;YACzG,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,KAAK,IAAI,EAAE;YACnC,OAAO,CAAC,GAAG,CAAC,0BAA0B,UAAU,EAAE,CAAC,CAAC;YACpD,IAAI,cAAc,EAAE,CAAC;gBACnB,OAAO,CAAC,GAAG,CAAC,6BAA6B,cAAc,iDAAiD,CAAC,CAAC;YAC5G,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,iDAAiD,CAAC,CAAC;YAClG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,qDAAqD;QACrD,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAW,EAAE,EAAE;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,2BAA2B,CAAC,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;gBACzB,IAAI,CAAC;oBACH,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACzB,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY;gBACtB,CAAC;gBACD,IAAI,CAAC,CAAC,UAAU;oBAAE,WAAW,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;YAC9C,CAAC;YACD,4BAA4B;YAC5B,IAAI,CAAC;gBAAC,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;YAAC,CAAC;YAAC,MAAM,CAAC,CAAA,CAAC;YACxC,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC;QACjD,CAAC,CAAC;QACF,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAClE,OAAO,CAAC,EAAE,CAAC,GAAqB,EAAE,GAAG,EAAE,CAAC,KAAK,QAAQ,CAAC,GAAG,CAAC,CAAC,CAC5D,CAAC;IACJ,CAAC,CAAC,EAAE,CAAC;AAEP,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@davnx/webpack",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Custom Nx executors for building and serving NestJS applications with webpack",
|
|
5
|
+
"main": "./index.js",
|
|
6
|
+
"types": "./index.d.ts",
|
|
7
|
+
"executors": "./executors.json",
|
|
8
|
+
"license": "MIT",
|
|
9
|
+
"author": "David Antoon <davidmantoon@gmail.com>",
|
|
10
|
+
"repository": {
|
|
11
|
+
"type": "git",
|
|
12
|
+
"url": "https://github.com/davidantoon/davnx.git",
|
|
13
|
+
"directory": "libs/webpack"
|
|
14
|
+
},
|
|
15
|
+
"homepage": "https://github.com/davidantoon/davnx/tree/main/libs/webpack#readme",
|
|
16
|
+
"bugs": {
|
|
17
|
+
"url": "https://github.com/davidantoon/davnx/issues"
|
|
18
|
+
},
|
|
19
|
+
"keywords": [
|
|
20
|
+
"nx",
|
|
21
|
+
"webpack",
|
|
22
|
+
"nestjs",
|
|
23
|
+
"executor",
|
|
24
|
+
"build",
|
|
25
|
+
"devserver",
|
|
26
|
+
"monorepo"
|
|
27
|
+
],
|
|
28
|
+
"peerDependencies": {
|
|
29
|
+
"webpack": "^5.0.0",
|
|
30
|
+
"@nx/webpack": ">=20.0.0",
|
|
31
|
+
"@nx/devkit": ">=20.0.0"
|
|
32
|
+
},
|
|
33
|
+
"dependencies": {
|
|
34
|
+
"fork-ts-checker-webpack-plugin": "^9.0.0",
|
|
35
|
+
"glob": "^11.0.0",
|
|
36
|
+
"http-proxy": "^1.18.0",
|
|
37
|
+
"js-yaml": "^4.1.0",
|
|
38
|
+
"pino-pretty": "^13.0.0",
|
|
39
|
+
"webpack-node-externals": "^3.0.0"
|
|
40
|
+
},
|
|
41
|
+
"devDependencies": {
|
|
42
|
+
"@types/http-proxy": "^1.17.0",
|
|
43
|
+
"@types/js-yaml": "^4.0.9",
|
|
44
|
+
"@types/node": "^25.0.0"
|
|
45
|
+
},
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public"
|
|
48
|
+
},
|
|
49
|
+
"files": [
|
|
50
|
+
"**/*.js",
|
|
51
|
+
"**/*.d.ts",
|
|
52
|
+
"**/*.json",
|
|
53
|
+
"**/*.js.map",
|
|
54
|
+
"executors.json",
|
|
55
|
+
"README.md"
|
|
56
|
+
],
|
|
57
|
+
"type": "commonjs"
|
|
58
|
+
}
|