@warlock.js/core 4.0.1 → 4.0.2
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/cjs/dev2-server/config-loader.d.ts.map +1 -1
- package/cjs/dev2-server/config-loader.js +9 -4
- package/cjs/dev2-server/config-loader.js.map +1 -1
- package/cjs/dev2-server/connectors/base-connector.d.ts.map +1 -1
- package/cjs/dev2-server/connectors/base-connector.js +2 -2
- package/cjs/dev2-server/connectors/base-connector.js.map +1 -1
- package/cjs/dev2-server/connectors/database-connector.d.ts.map +1 -1
- package/cjs/dev2-server/connectors/database-connector.js +5 -1
- package/cjs/dev2-server/connectors/database-connector.js.map +1 -1
- package/cjs/dev2-server/dependency-graph.d.ts +9 -2
- package/cjs/dev2-server/dependency-graph.d.ts.map +1 -1
- package/cjs/dev2-server/dependency-graph.js +47 -6
- package/cjs/dev2-server/dependency-graph.js.map +1 -1
- package/cjs/dev2-server/dev-logger.js +1 -13
- package/cjs/dev2-server/dev-logger.js.map +1 -1
- package/cjs/dev2-server/development-server.d.ts.map +1 -1
- package/cjs/dev2-server/development-server.js +25 -13
- package/cjs/dev2-server/development-server.js.map +1 -1
- package/cjs/dev2-server/file-manager.d.ts +6 -1
- package/cjs/dev2-server/file-manager.d.ts.map +1 -1
- package/cjs/dev2-server/file-manager.js +6 -1
- package/cjs/dev2-server/file-manager.js.map +1 -1
- package/cjs/dev2-server/file-operations.js +4 -4
- package/cjs/dev2-server/file-operations.js.map +1 -1
- package/cjs/dev2-server/files-orchestrator.d.ts.map +1 -1
- package/cjs/dev2-server/files-orchestrator.js +10 -8
- package/cjs/dev2-server/files-orchestrator.js.map +1 -1
- package/cjs/dev2-server/import-transformer.d.ts.map +1 -1
- package/cjs/dev2-server/import-transformer.js +37 -8
- package/cjs/dev2-server/import-transformer.js.map +1 -1
- package/cjs/dev2-server/layer-executor.d.ts.map +1 -1
- package/cjs/dev2-server/layer-executor.js +67 -62
- package/cjs/dev2-server/layer-executor.js.map +1 -1
- package/cjs/dev2-server/module-loader.d.ts.map +1 -1
- package/cjs/dev2-server/module-loader.js +14 -15
- package/cjs/dev2-server/module-loader.js.map +1 -1
- package/cjs/dev2-server/parse-imports.d.ts.map +1 -1
- package/cjs/dev2-server/parse-imports.js +97 -43
- package/cjs/dev2-server/parse-imports.js.map +1 -1
- package/cjs/dev2-server/runtime-import-helper.d.ts.map +1 -1
- package/cjs/dev2-server/runtime-import-helper.js +86 -8
- package/cjs/dev2-server/runtime-import-helper.js.map +1 -1
- package/cjs/dev2-server/special-files-collector.d.ts +4 -4
- package/cjs/dev2-server/special-files-collector.js +9 -9
- package/cjs/dev2-server/special-files-collector.js.map +1 -1
- package/cjs/dev2-server/transpile-file.d.ts +4 -0
- package/cjs/dev2-server/transpile-file.d.ts.map +1 -1
- package/cjs/dev2-server/transpile-file.js +20 -3
- package/cjs/dev2-server/transpile-file.js.map +1 -1
- package/cjs/dev2-server/tsconfig-manager.d.ts +2 -2
- package/cjs/dev2-server/tsconfig-manager.d.ts.map +1 -1
- package/cjs/dev2-server/tsconfig-manager.js +8 -7
- package/cjs/dev2-server/tsconfig-manager.js.map +1 -1
- package/cjs/router/route-registry.d.ts +4 -0
- package/cjs/router/route-registry.d.ts.map +1 -1
- package/cjs/router/route-registry.js +26 -7
- package/cjs/router/route-registry.js.map +1 -1
- package/cjs/router/router.d.ts +0 -1
- package/cjs/router/router.d.ts.map +1 -1
- package/cjs/router/router.js +0 -4
- package/cjs/router/router.js.map +1 -1
- package/cjs/router/types.d.ts +2 -2
- package/cjs/router/types.d.ts.map +1 -1
- package/esm/dev2-server/config-loader.d.ts.map +1 -1
- package/esm/dev2-server/config-loader.js +9 -4
- package/esm/dev2-server/config-loader.js.map +1 -1
- package/esm/dev2-server/connectors/base-connector.d.ts.map +1 -1
- package/esm/dev2-server/connectors/base-connector.js +2 -2
- package/esm/dev2-server/connectors/base-connector.js.map +1 -1
- package/esm/dev2-server/connectors/database-connector.d.ts.map +1 -1
- package/esm/dev2-server/connectors/database-connector.js +5 -1
- package/esm/dev2-server/connectors/database-connector.js.map +1 -1
- package/esm/dev2-server/dependency-graph.d.ts +9 -2
- package/esm/dev2-server/dependency-graph.d.ts.map +1 -1
- package/esm/dev2-server/dependency-graph.js +47 -6
- package/esm/dev2-server/dependency-graph.js.map +1 -1
- package/esm/dev2-server/dev-logger.js +1 -13
- package/esm/dev2-server/dev-logger.js.map +1 -1
- package/esm/dev2-server/development-server.d.ts.map +1 -1
- package/esm/dev2-server/development-server.js +25 -13
- package/esm/dev2-server/development-server.js.map +1 -1
- package/esm/dev2-server/file-manager.d.ts +6 -1
- package/esm/dev2-server/file-manager.d.ts.map +1 -1
- package/esm/dev2-server/file-manager.js +6 -1
- package/esm/dev2-server/file-manager.js.map +1 -1
- package/esm/dev2-server/file-operations.js +4 -4
- package/esm/dev2-server/file-operations.js.map +1 -1
- package/esm/dev2-server/files-orchestrator.d.ts.map +1 -1
- package/esm/dev2-server/files-orchestrator.js +10 -8
- package/esm/dev2-server/files-orchestrator.js.map +1 -1
- package/esm/dev2-server/import-transformer.d.ts.map +1 -1
- package/esm/dev2-server/import-transformer.js +37 -8
- package/esm/dev2-server/import-transformer.js.map +1 -1
- package/esm/dev2-server/layer-executor.d.ts.map +1 -1
- package/esm/dev2-server/layer-executor.js +68 -63
- package/esm/dev2-server/layer-executor.js.map +1 -1
- package/esm/dev2-server/module-loader.d.ts.map +1 -1
- package/esm/dev2-server/module-loader.js +15 -16
- package/esm/dev2-server/module-loader.js.map +1 -1
- package/esm/dev2-server/parse-imports.d.ts.map +1 -1
- package/esm/dev2-server/parse-imports.js +98 -44
- package/esm/dev2-server/parse-imports.js.map +1 -1
- package/esm/dev2-server/runtime-import-helper.d.ts.map +1 -1
- package/esm/dev2-server/runtime-import-helper.js +86 -8
- package/esm/dev2-server/runtime-import-helper.js.map +1 -1
- package/esm/dev2-server/special-files-collector.d.ts +4 -4
- package/esm/dev2-server/special-files-collector.js +9 -9
- package/esm/dev2-server/special-files-collector.js.map +1 -1
- package/esm/dev2-server/transpile-file.d.ts +4 -0
- package/esm/dev2-server/transpile-file.d.ts.map +1 -1
- package/esm/dev2-server/transpile-file.js +20 -3
- package/esm/dev2-server/transpile-file.js.map +1 -1
- package/esm/dev2-server/tsconfig-manager.d.ts +2 -2
- package/esm/dev2-server/tsconfig-manager.d.ts.map +1 -1
- package/esm/dev2-server/tsconfig-manager.js +8 -7
- package/esm/dev2-server/tsconfig-manager.js.map +1 -1
- package/esm/router/route-registry.d.ts +4 -0
- package/esm/router/route-registry.d.ts.map +1 -1
- package/esm/router/route-registry.js +26 -7
- package/esm/router/route-registry.js.map +1 -1
- package/esm/router/router.d.ts +0 -1
- package/esm/router/router.d.ts.map +1 -1
- package/esm/router/router.js +1 -5
- package/esm/router/router.js.map +1 -1
- package/esm/router/types.d.ts +2 -2
- package/esm/router/types.d.ts.map +1 -1
- package/package.json +3 -3
- package/cjs/dev-server/file-health.d.ts +0 -9
- package/cjs/dev-server/file-health.d.ts.map +0 -1
- package/cjs/dev-server/file-manager.d.ts +0 -39
- package/cjs/dev-server/file-manager.d.ts.map +0 -1
- package/cjs/dev-server/files-orchestrator.d.ts +0 -1
- package/cjs/dev-server/files-orchestrator.d.ts.map +0 -1
- package/cjs/dev-server/types.d.ts +0 -2
- package/cjs/dev-server/types.d.ts.map +0 -1
- package/esm/dev-server/file-health.d.ts +0 -9
- package/esm/dev-server/file-health.d.ts.map +0 -1
- package/esm/dev-server/file-manager.d.ts +0 -39
- package/esm/dev-server/file-manager.d.ts.map +0 -1
- package/esm/dev-server/files-orchestrator.d.ts +0 -1
- package/esm/dev-server/files-orchestrator.d.ts.map +0 -1
- package/esm/dev-server/types.d.ts +0 -2
- package/esm/dev-server/types.d.ts.map +0 -1
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {devLogHMR}from'./dev-logger.js';/**
|
|
2
2
|
* LayerExecutor handles the execution of file reloads based on their layer type
|
|
3
3
|
*
|
|
4
4
|
* Strategy:
|
|
@@ -39,7 +39,7 @@ class LayerExecutor {
|
|
|
39
39
|
// Get invalidation chain for this file
|
|
40
40
|
const invalidationChain = this.dependencyGraph.getInvalidationChain(relativePath);
|
|
41
41
|
// Add to combined set
|
|
42
|
-
invalidationChain.forEach(
|
|
42
|
+
invalidationChain.forEach(file => allInvalidatedFiles.add(file));
|
|
43
43
|
// Determine strategy for this file
|
|
44
44
|
const strategy = this.determineReloadStrategy(invalidationChain, filesMap);
|
|
45
45
|
if (strategy === "FSR") {
|
|
@@ -49,58 +49,39 @@ class LayerExecutor {
|
|
|
49
49
|
hmrFiles.push(relativePath);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
const affectedConnectors = this.connectors.filter((connector) => connector.shouldRestart(configFiles));
|
|
65
|
-
if (configFiles.length === 1) {
|
|
66
|
-
devLogConfig(configFiles[0], affectedConnectors.map((connector) => connector.name));
|
|
67
|
-
}
|
|
68
|
-
else {
|
|
69
|
-
devLogConfig(`${configFiles.length} files`, affectedConnectors.map((connector) => connector.name));
|
|
52
|
+
try {
|
|
53
|
+
if (hmrFiles.length > 0 && fsrFiles.length === 0) {
|
|
54
|
+
if (hmrFiles.length === 1) {
|
|
55
|
+
const dependentCount = this.dependencyGraph.getInvalidationChain(hmrFiles[0]).length - 1;
|
|
56
|
+
devLogHMR(hmrFiles[0], dependentCount > 0 ? dependentCount : undefined);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
hmrFiles.forEach(file => {
|
|
60
|
+
const dependentCount = this.dependencyGraph.getInvalidationChain(file).length - 1;
|
|
61
|
+
devLogHMR(file, dependentCount > 0 ? dependentCount : undefined);
|
|
62
|
+
});
|
|
63
|
+
}
|
|
70
64
|
}
|
|
71
|
-
// await Promise.all(affectedConnectors.map((connector) => connector.restart()));
|
|
72
65
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
devLogFSR(nonConfigFsrFiles[0]);
|
|
76
|
-
}
|
|
77
|
-
else {
|
|
78
|
-
devLogFSR(`${nonConfigFsrFiles.length} files`);
|
|
79
|
-
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
console.log("ERRor in devLogHMR: ", error);
|
|
80
68
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
69
|
+
try {
|
|
70
|
+
// Execute reload once for all files
|
|
71
|
+
const invalidationChain = Array.from(allInvalidatedFiles);
|
|
72
|
+
if (fsrFiles.length > 0) {
|
|
73
|
+
// If any file requires FSR, do FSR for all
|
|
74
|
+
const firstFsrFile = filesMap.get(fsrFiles[0]);
|
|
75
|
+
await this.executeFullServerRestart(firstFsrFile, invalidationChain, filesMap);
|
|
85
76
|
}
|
|
86
77
|
else {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
});
|
|
78
|
+
// All files are HMR
|
|
79
|
+
const firstHmrFile = filesMap.get(hmrFiles[0]);
|
|
80
|
+
await this.executeHotModuleReplacement(firstHmrFile, invalidationChain, filesMap, hmrFiles);
|
|
91
81
|
}
|
|
92
82
|
}
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
if (fsrFiles.length > 0) {
|
|
96
|
-
// If any file requires FSR, do FSR for all
|
|
97
|
-
const firstFsrFile = filesMap.get(fsrFiles[0]);
|
|
98
|
-
await this.executeFullServerRestart(firstFsrFile, invalidationChain, filesMap);
|
|
99
|
-
}
|
|
100
|
-
else {
|
|
101
|
-
// All files are HMR
|
|
102
|
-
const firstHmrFile = filesMap.get(hmrFiles[0]);
|
|
103
|
-
await this.executeHotModuleReplacement(firstHmrFile, invalidationChain, filesMap);
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.log("ERRor in executeFullServerRestart: ", error);
|
|
104
85
|
}
|
|
105
86
|
}
|
|
106
87
|
/**
|
|
@@ -123,7 +104,7 @@ class LayerExecutor {
|
|
|
123
104
|
async executeFullServerRestart(changedFile, invalidationChain, filesMap) {
|
|
124
105
|
// Step 1: Handle config files specially
|
|
125
106
|
const configFiles = invalidationChain
|
|
126
|
-
.map(
|
|
107
|
+
.map(path => filesMap.get(path))
|
|
127
108
|
.filter((file) => file !== undefined && file.type === "config");
|
|
128
109
|
if (configFiles.length > 0) {
|
|
129
110
|
// Reload config files first
|
|
@@ -149,23 +130,24 @@ class LayerExecutor {
|
|
|
149
130
|
* Execute Hot Module Replacement
|
|
150
131
|
* This happens when only HMR layer files (controllers, services, etc.) change
|
|
151
132
|
*/
|
|
152
|
-
async executeHotModuleReplacement(changedFile, invalidationChain, filesMap) {
|
|
133
|
+
async executeHotModuleReplacement(changedFile, invalidationChain, filesMap, hmrFiles) {
|
|
153
134
|
// Step 1: Clear module cache for invalidation chain
|
|
154
135
|
this.clearModuleCacheForChain(invalidationChain, filesMap);
|
|
155
136
|
// Step 2: Reload affected modules
|
|
156
137
|
await this.reloadAffectedModules(invalidationChain, filesMap);
|
|
138
|
+
await this.restartAffectedConnectors(hmrFiles);
|
|
157
139
|
}
|
|
158
140
|
/**
|
|
159
141
|
* Restart connectors that are affected by the changed files
|
|
160
142
|
*/
|
|
161
143
|
async restartAffectedConnectors(affectedFiles) {
|
|
162
|
-
const connectorsToRestart = this.connectors.filter(
|
|
144
|
+
const connectorsToRestart = this.connectors.filter(connector => connector.shouldRestart(affectedFiles));
|
|
163
145
|
if (connectorsToRestart.length === 0) {
|
|
164
146
|
return;
|
|
165
147
|
}
|
|
166
148
|
// Restart in priority order
|
|
167
149
|
for (const connector of connectorsToRestart) {
|
|
168
|
-
|
|
150
|
+
connector.restart();
|
|
169
151
|
}
|
|
170
152
|
}
|
|
171
153
|
/**
|
|
@@ -177,9 +159,7 @@ class LayerExecutor {
|
|
|
177
159
|
if (file) {
|
|
178
160
|
this.moduleLoader.clearModuleCache(file.absolutePath);
|
|
179
161
|
// Update module version for HMR cache busting
|
|
180
|
-
|
|
181
|
-
global.__updateModuleVersion(`./${file.cachePath}`, Date.now());
|
|
182
|
-
}
|
|
162
|
+
__updateModuleVersion(`./${file.cachePath}`, Date.now());
|
|
183
163
|
}
|
|
184
164
|
}
|
|
185
165
|
}
|
|
@@ -204,10 +184,18 @@ class LayerExecutor {
|
|
|
204
184
|
return false;
|
|
205
185
|
};
|
|
206
186
|
// Check which special files are affected
|
|
207
|
-
const affectedMainFiles = this.specialFilesCollector
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
const
|
|
187
|
+
const affectedMainFiles = this.specialFilesCollector
|
|
188
|
+
.getMainFiles()
|
|
189
|
+
.filter(isAffected);
|
|
190
|
+
const affectedRouteFiles = this.specialFilesCollector
|
|
191
|
+
.getRouteFiles()
|
|
192
|
+
.filter(isAffected);
|
|
193
|
+
const affectedEventFiles = this.specialFilesCollector
|
|
194
|
+
.getEventFiles()
|
|
195
|
+
.filter(isAffected);
|
|
196
|
+
const affectedLocaleFiles = this.specialFilesCollector
|
|
197
|
+
.getLocaleFiles()
|
|
198
|
+
.filter(isAffected);
|
|
211
199
|
// Reload affected special files
|
|
212
200
|
if (affectedMainFiles.length > 0) {
|
|
213
201
|
for (const file of affectedMainFiles) {
|
|
@@ -251,17 +239,34 @@ class LayerExecutor {
|
|
|
251
239
|
return false;
|
|
252
240
|
};
|
|
253
241
|
// Check which special files are affected
|
|
254
|
-
const affectedMainFiles = this.specialFilesCollector
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
const
|
|
242
|
+
const affectedMainFiles = this.specialFilesCollector
|
|
243
|
+
.getMainFiles()
|
|
244
|
+
.filter(isAffected);
|
|
245
|
+
const affectedConfigFiles = this.specialFilesCollector
|
|
246
|
+
.getConfigFiles()
|
|
247
|
+
.filter(isAffected);
|
|
248
|
+
const affectedRouteFiles = this.specialFilesCollector
|
|
249
|
+
.getRouteFiles()
|
|
250
|
+
.filter(isAffected);
|
|
251
|
+
const affectedEventFiles = this.specialFilesCollector
|
|
252
|
+
.getEventFiles()
|
|
253
|
+
.filter(isAffected);
|
|
254
|
+
const affectedLocaleFiles = this.specialFilesCollector
|
|
255
|
+
.getLocaleFiles()
|
|
256
|
+
.filter(isAffected);
|
|
258
257
|
const hasSpecialFiles = affectedMainFiles.length > 0 ||
|
|
259
258
|
affectedRouteFiles.length > 0 ||
|
|
260
259
|
affectedEventFiles.length > 0 ||
|
|
261
|
-
affectedLocaleFiles.length > 0
|
|
260
|
+
affectedLocaleFiles.length > 0 ||
|
|
261
|
+
affectedConfigFiles.length > 0;
|
|
262
262
|
if (!hasSpecialFiles) {
|
|
263
263
|
return;
|
|
264
264
|
}
|
|
265
|
+
if (affectedConfigFiles.length > 0) {
|
|
266
|
+
for (const file of affectedConfigFiles) {
|
|
267
|
+
await this.configLoader.reloadConfig(file);
|
|
268
|
+
}
|
|
269
|
+
}
|
|
265
270
|
// Reload special files
|
|
266
271
|
if (affectedMainFiles.length > 0) {
|
|
267
272
|
for (const file of affectedMainFiles) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"layer-executor.js","sources":["../../src/dev2-server/layer-executor.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"layer-executor.js","sources":["../../src/dev2-server/layer-executor.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/dev2-server/module-loader.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module-loader.d.ts","sourceRoot":"","sources":["../../src/dev2-server/module-loader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAClD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAGvE;;;;GAIG;AACH,qBAAa,YAAY;IAUX,OAAO,CAAC,QAAQ,CAAC,qBAAqB;IATlD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA0B;IAExD;;OAEG;gBAC0B,qBAAqB,EAAE,qBAAqB;IAEzE;;OAEG;IACU,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAQrC;;;;OAIG;IACU,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAa3C;;;;OAIG;IACU,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;IAa7C;;;;OAIG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAa5C;;;;OAIG;IACU,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAc5C;;;;;OAKG;YACW,UAAU;IAoDxB;;;OAGG;IACU,YAAY,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC3D;;;;OAIG;IACI,gBAAgB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI;IAKnD;;;OAGG;IACI,wBAAwB,CAAC,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI;IAM9D;;;OAGG;IACI,mBAAmB,IAAI,IAAI;IAOlC;;;OAGG;IACI,eAAe,CAAC,YAAY,EAAE,MAAM,GAAG,GAAG,GAAG,SAAS;IAI7D;;;OAGG;IACI,cAAc,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO;IAIpD;;OAEG;IACI,oBAAoB,IAAI,MAAM,EAAE;IAIvC;;OAEG;IACI,QAAQ,IAAI;QACjB,WAAW,EAAE,MAAM,CAAC;QACpB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,WAAW,EAAE,MAAM,CAAC;KACrB;CASF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {pathToFileURL}from'node:url';import {router}from'../router/router.js';import {devLogError,formatModuleNotFoundError}from'./dev-logger.js';import {warlockCachePath}from'./utils.js';/**
|
|
1
|
+
import {pathToFileURL}from'node:url';import {router}from'../router/router.js';import {devLogInfo,devLogSuccess,devLogError,formatModuleNotFoundError}from'./dev-logger.js';import {warlockCachePath}from'./utils.js';/**
|
|
2
2
|
* Module Loader
|
|
3
3
|
* Dynamically loads and manages application modules (main, routes, events, locales)
|
|
4
4
|
* Handles module cache invalidation for HMR
|
|
@@ -21,12 +21,10 @@ class ModuleLoader {
|
|
|
21
21
|
*/
|
|
22
22
|
async loadAll() {
|
|
23
23
|
// Load in specific order
|
|
24
|
-
await
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
this.loadRouteFiles(),
|
|
29
|
-
]);
|
|
24
|
+
await this.loadLocaleFiles();
|
|
25
|
+
await this.loadEventFiles();
|
|
26
|
+
await this.loadMainFiles();
|
|
27
|
+
await this.loadRouteFiles();
|
|
30
28
|
}
|
|
31
29
|
/**
|
|
32
30
|
* Load all main.ts files
|
|
@@ -39,9 +37,9 @@ class ModuleLoader {
|
|
|
39
37
|
return;
|
|
40
38
|
}
|
|
41
39
|
// Load all main files in parallel
|
|
42
|
-
|
|
40
|
+
for (const file of mainFiles) {
|
|
43
41
|
await this.loadModule(file, "main");
|
|
44
|
-
}
|
|
42
|
+
}
|
|
45
43
|
}
|
|
46
44
|
/**
|
|
47
45
|
* Load all locale files
|
|
@@ -54,9 +52,9 @@ class ModuleLoader {
|
|
|
54
52
|
return;
|
|
55
53
|
}
|
|
56
54
|
// Load all locale files in parallel
|
|
57
|
-
|
|
55
|
+
for (const file of localeFiles) {
|
|
58
56
|
await this.loadModule(file, "locale");
|
|
59
|
-
}
|
|
57
|
+
}
|
|
60
58
|
}
|
|
61
59
|
/**
|
|
62
60
|
* Load all event files
|
|
@@ -69,9 +67,9 @@ class ModuleLoader {
|
|
|
69
67
|
return;
|
|
70
68
|
}
|
|
71
69
|
// Load all event files in parallel
|
|
72
|
-
|
|
70
|
+
for (const file of eventFiles) {
|
|
73
71
|
await this.loadModule(file, "event");
|
|
74
|
-
}
|
|
72
|
+
}
|
|
75
73
|
}
|
|
76
74
|
/**
|
|
77
75
|
* Load all route files
|
|
@@ -80,11 +78,11 @@ class ModuleLoader {
|
|
|
80
78
|
*/
|
|
81
79
|
async loadRouteFiles() {
|
|
82
80
|
const routeFiles = this.specialFilesCollector.getRouteFiles();
|
|
83
|
-
console.log("Loading route files", routeFiles.map(file => file.relativePath));
|
|
84
81
|
if (routeFiles.length === 0) {
|
|
85
82
|
return;
|
|
86
83
|
}
|
|
87
84
|
// Load route files sequentially
|
|
85
|
+
// because we are registering the source file, we must load routes sequentially
|
|
88
86
|
for (const file of routeFiles) {
|
|
89
87
|
await this.loadModule(file, "route");
|
|
90
88
|
}
|
|
@@ -98,6 +96,8 @@ class ModuleLoader {
|
|
|
98
96
|
async loadModule(file, type, bustCache = false) {
|
|
99
97
|
// Get the cached transpiled file path
|
|
100
98
|
const cachedFilePath = warlockCachePath(file.cachePath);
|
|
99
|
+
devLogInfo(`Loading module: ${file.relativePath} (${type})`);
|
|
100
|
+
let now = performance.now();
|
|
101
101
|
// Convert to file:// URL for cross-platform compatibility
|
|
102
102
|
let fileUrl = pathToFileURL(cachedFilePath).href;
|
|
103
103
|
try {
|
|
@@ -109,12 +109,10 @@ class ModuleLoader {
|
|
|
109
109
|
// For route files, wrap the import with source file tracking
|
|
110
110
|
if (type === "route") {
|
|
111
111
|
await router.withSourceFile(file.relativePath, async () => {
|
|
112
|
-
console.log("Loading route file", file.relativePath);
|
|
113
112
|
// Dynamic import the module (routes will be registered with sourceFile)
|
|
114
113
|
const module = await import(fileUrl);
|
|
115
114
|
// Store in cache (use source path as key for consistency)
|
|
116
115
|
this.loadedModules.set(file.absolutePath, module);
|
|
117
|
-
console.log("Loaded route file", file.relativePath);
|
|
118
116
|
});
|
|
119
117
|
}
|
|
120
118
|
else {
|
|
@@ -123,6 +121,7 @@ class ModuleLoader {
|
|
|
123
121
|
// Store in cache (use source path as key for consistency)
|
|
124
122
|
this.loadedModules.set(file.absolutePath, module);
|
|
125
123
|
}
|
|
124
|
+
devLogSuccess(`Module loaded: ${file.relativePath} (${type}) in ${performance.now() - now}ms`);
|
|
126
125
|
}
|
|
127
126
|
catch (error) {
|
|
128
127
|
// Format error message (especially for MODULE_NOT_FOUND)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"module-loader.js","sources":["../../src/dev2-server/module-loader.ts"],"sourcesContent":[null],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"module-loader.js","sources":["../../src/dev2-server/module-loader.ts"],"sourcesContent":[null],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-imports.d.ts","sourceRoot":"","sources":["../../src/dev2-server/parse-imports.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"parse-imports.d.ts","sourceRoot":"","sources":["../../src/dev2-server/parse-imports.ts"],"names":[],"mappings":"AAoJA;;;;;GAKG;AACH,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,gCAqDlE"}
|
|
@@ -1,55 +1,90 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {isDirectoryAsync,fileExistsAsync}from'@mongez/fs';import {parse}from'es-module-lexer';import path from'node:path';import {Path}from'./path.js';import {tsconfigManager}from'./tsconfig-manager.js';/**
|
|
2
2
|
* Extract import paths using regex (more reliable for TypeScript)
|
|
3
3
|
* This is a fallback when es-module-lexer fails
|
|
4
4
|
*/
|
|
5
5
|
function extractImportPathsWithRegex(source) {
|
|
6
6
|
const imports = [];
|
|
7
7
|
const seenPaths = new Set();
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Check if an import line is type-only
|
|
10
|
+
* Handles:
|
|
11
|
+
* - import type { Foo } from "module"
|
|
12
|
+
* - import type Foo from "module"
|
|
13
|
+
* - import type * as Foo from "module"
|
|
14
|
+
*/
|
|
15
|
+
const isTypeOnlyImport = (line) => {
|
|
10
16
|
const trimmed = line.trim();
|
|
11
17
|
return (trimmed.startsWith("import type ") ||
|
|
12
|
-
!!trimmed.match(
|
|
18
|
+
!!trimmed.match(/^import\s+type\s+[\{\*]/));
|
|
13
19
|
};
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
20
|
+
/**
|
|
21
|
+
* Check if an import has any runtime (non-type) imports
|
|
22
|
+
* Handles mixed imports: import { type Foo, runtimeBar } from "module"
|
|
23
|
+
* Returns true if there are runtime imports (should be tracked)
|
|
24
|
+
*/
|
|
25
|
+
const hasRuntimeImports = (line) => {
|
|
19
26
|
const trimmed = line.trim();
|
|
27
|
+
// If it's a pure type-only import, no runtime imports
|
|
28
|
+
if (isTypeOnlyImport(trimmed)) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
// Extract the import specifiers part: import { ... } from "module"
|
|
32
|
+
const specifiersMatch = trimmed.match(/import\s+\{([^}]+)\}/);
|
|
33
|
+
if (!specifiersMatch) {
|
|
34
|
+
// Not a destructured import, or it's a default/namespace import
|
|
35
|
+
// These are runtime imports unless marked with "import type"
|
|
36
|
+
return true;
|
|
37
|
+
}
|
|
38
|
+
const specifiers = specifiersMatch[1];
|
|
39
|
+
// Split by comma and check each specifier
|
|
40
|
+
const items = specifiers.split(',').map(s => s.trim());
|
|
41
|
+
// Check if ALL items are type-only (prefixed with "type ")
|
|
42
|
+
const allTypeOnly = items.every(item => {
|
|
43
|
+
// Match: "type Foo" or "type Foo as Bar"
|
|
44
|
+
return /^type\s+\w+/.test(item);
|
|
45
|
+
});
|
|
46
|
+
// If all are type-only, this import has no runtime imports
|
|
47
|
+
// Otherwise, it has at least one runtime import
|
|
48
|
+
return !allTypeOnly;
|
|
49
|
+
};
|
|
50
|
+
// Pattern 1: Standard ES module imports (handles multiline)
|
|
51
|
+
// Matches: import { ... } from "path", import Foo from "path", import Foo, { ... } from "path"
|
|
52
|
+
const importRegex = /import\s+(?:type\s+)?(\{[\s\S]*?\}|\*\s+as\s+\w+|\w+(?:\s*,\s*\{[\s\S]*?\})?)\s+from\s+['"]([^'"]+)['"]/g;
|
|
53
|
+
let match;
|
|
54
|
+
while ((match = importRegex.exec(source)) !== null) {
|
|
55
|
+
const fullMatch = match[0];
|
|
56
|
+
match[1];
|
|
57
|
+
const importPath = match[2];
|
|
20
58
|
// Skip type-only imports
|
|
21
|
-
if (
|
|
59
|
+
if (fullMatch.match(/^import\s+type\s+/)) {
|
|
22
60
|
continue;
|
|
23
61
|
}
|
|
24
|
-
//
|
|
25
|
-
|
|
26
|
-
if (fromMatch && trimmed.startsWith("import")) {
|
|
27
|
-
const importPath = fromMatch[1];
|
|
28
|
-
if (importPath && !seenPaths.has(importPath)) {
|
|
29
|
-
seenPaths.add(importPath);
|
|
30
|
-
imports.push({
|
|
31
|
-
path: importPath,
|
|
32
|
-
originalLine: line,
|
|
33
|
-
});
|
|
34
|
-
}
|
|
62
|
+
// Skip if it's a mixed import with only types
|
|
63
|
+
if (!hasRuntimeImports(fullMatch)) {
|
|
35
64
|
continue;
|
|
36
65
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
66
|
+
if (importPath && !seenPaths.has(importPath)) {
|
|
67
|
+
seenPaths.add(importPath);
|
|
68
|
+
imports.push({
|
|
69
|
+
path: importPath,
|
|
70
|
+
originalLine: fullMatch,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Pattern 1b: Side-effect imports - import "path"
|
|
75
|
+
const sideEffectRegex = /import\s+['"]([^'"]+)['"]/g;
|
|
76
|
+
while ((match = sideEffectRegex.exec(source)) !== null) {
|
|
77
|
+
const importPath = match[1];
|
|
78
|
+
if (importPath && !seenPaths.has(importPath)) {
|
|
79
|
+
seenPaths.add(importPath);
|
|
80
|
+
imports.push({
|
|
81
|
+
path: importPath,
|
|
82
|
+
originalLine: match[0],
|
|
83
|
+
});
|
|
48
84
|
}
|
|
49
85
|
}
|
|
50
86
|
// Pattern 2: Dynamic imports - import("path")
|
|
51
87
|
const dynamicImportPattern = /import\s*\(\s*['"]([^'"]+)['"]\s*\)/g;
|
|
52
|
-
let match;
|
|
53
88
|
while ((match = dynamicImportPattern.exec(source)) !== null) {
|
|
54
89
|
const importPath = match[1];
|
|
55
90
|
if (importPath && !seenPaths.has(importPath)) {
|
|
@@ -61,14 +96,20 @@ function extractImportPathsWithRegex(source) {
|
|
|
61
96
|
}
|
|
62
97
|
}
|
|
63
98
|
// Pattern 3: Export from - export ... from "path"
|
|
99
|
+
// Skip export type statements (e.g., export type { Foo } from "module")
|
|
64
100
|
const exportFromPattern = /export\s+(?:\{[^}]*\}|\*|\w+)\s+from\s+['"]([^'"]+)['"]/g;
|
|
65
101
|
while ((match = exportFromPattern.exec(source)) !== null) {
|
|
102
|
+
const fullMatch = match[0];
|
|
103
|
+
// Skip type-only exports: export type ... from "module"
|
|
104
|
+
if (/^export\s+type\s+/.test(fullMatch)) {
|
|
105
|
+
continue;
|
|
106
|
+
}
|
|
66
107
|
const importPath = match[1];
|
|
67
108
|
if (importPath && !seenPaths.has(importPath)) {
|
|
68
109
|
seenPaths.add(importPath);
|
|
69
110
|
imports.push({
|
|
70
111
|
path: importPath,
|
|
71
|
-
originalLine:
|
|
112
|
+
originalLine: fullMatch,
|
|
72
113
|
});
|
|
73
114
|
}
|
|
74
115
|
}
|
|
@@ -191,6 +232,16 @@ async function resolveRelativeImport(importPath, currentFilePath) {
|
|
|
191
232
|
* @TODO: For better performance, we need to check the files in files orchestrator
|
|
192
233
|
* instead of using the file system as we will be fetching all project files anyway.
|
|
193
234
|
*/
|
|
235
|
+
// Cache for file existence checks to avoid redundant filesystem calls
|
|
236
|
+
const fileExistsCache = new Map();
|
|
237
|
+
async function cachedFileExists(filePath) {
|
|
238
|
+
if (fileExistsCache.has(filePath)) {
|
|
239
|
+
return fileExistsCache.get(filePath);
|
|
240
|
+
}
|
|
241
|
+
const exists = await fileExistsAsync(filePath);
|
|
242
|
+
fileExistsCache.set(filePath, exists);
|
|
243
|
+
return exists;
|
|
244
|
+
}
|
|
194
245
|
async function tryResolveWithExtensions(basePath) {
|
|
195
246
|
// Normalize the base path first (handle Windows paths)
|
|
196
247
|
const normalizedBase = Path.normalize(basePath);
|
|
@@ -200,25 +251,28 @@ async function tryResolveWithExtensions(basePath) {
|
|
|
200
251
|
// If the path already has a VALID code file extension, check if it exists
|
|
201
252
|
const ext = path.extname(normalizedBase);
|
|
202
253
|
if (ext && validExtensions.has(ext)) {
|
|
203
|
-
if (await
|
|
254
|
+
if (await cachedFileExists(normalizedBase)) {
|
|
204
255
|
return normalizedBase;
|
|
205
256
|
}
|
|
206
257
|
// If explicit extension doesn't exist, return null
|
|
207
258
|
return null;
|
|
208
259
|
}
|
|
209
|
-
// Try
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
260
|
+
// Try all extensions in parallel for better performance
|
|
261
|
+
const pathsToCheck = extensions.map(extension => normalizedBase + extension);
|
|
262
|
+
const results = await Promise.all(pathsToCheck.map(async (p) => ({ path: p, exists: await cachedFileExists(p) })));
|
|
263
|
+
// Return the first one that exists (in order of preference)
|
|
264
|
+
for (const result of results) {
|
|
265
|
+
if (result.exists) {
|
|
266
|
+
return result.path;
|
|
214
267
|
}
|
|
215
268
|
}
|
|
216
269
|
// Try index files in directory
|
|
217
270
|
if (await isDirectoryAsync(normalizedBase)) {
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
271
|
+
const indexPaths = extensions.map(extension => Path.join(normalizedBase, `index${extension}`));
|
|
272
|
+
const indexResults = await Promise.all(indexPaths.map(async (p) => ({ path: p, exists: await cachedFileExists(p) })));
|
|
273
|
+
for (const result of indexResults) {
|
|
274
|
+
if (result.exists) {
|
|
275
|
+
return result.path;
|
|
222
276
|
}
|
|
223
277
|
}
|
|
224
278
|
}
|