@modern-js/app-tools 2.63.2 → 2.63.3
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/cjs/compat/hooks.js +16 -1
- package/dist/cjs/compat/index.js +3 -1
- package/dist/cjs/compat/utils.js +29 -8
- package/dist/cjs/plugins/deploy/platforms/netlify.js +7 -4
- package/dist/cjs/plugins/deploy/platforms/node.js +6 -3
- package/dist/cjs/plugins/deploy/platforms/vercel.js +7 -4
- package/dist/esm/compat/hooks.js +83 -24
- package/dist/esm/compat/index.js +4 -2
- package/dist/esm/compat/utils.js +29 -8
- package/dist/esm/plugins/deploy/platforms/netlify.js +6 -3
- package/dist/esm/plugins/deploy/platforms/node.js +5 -2
- package/dist/esm/plugins/deploy/platforms/vercel.js +6 -3
- package/dist/esm-node/compat/hooks.js +16 -1
- package/dist/esm-node/compat/index.js +4 -2
- package/dist/esm-node/compat/utils.js +29 -8
- package/dist/esm-node/plugins/deploy/platforms/netlify.js +6 -3
- package/dist/esm-node/plugins/deploy/platforms/node.js +5 -2
- package/dist/esm-node/plugins/deploy/platforms/vercel.js +6 -3
- package/dist/types/compat/utils.d.ts +8 -1
- package/package.json +19 -23
- package/dist/cjs/plugins/deploy/dependencies/index.js +0 -237
- package/dist/cjs/plugins/deploy/dependencies/utils.js +0 -179
- package/dist/cjs/plugins/deploy/exports.js +0 -28
- package/dist/esm/plugins/deploy/dependencies/index.js +0 -615
- package/dist/esm/plugins/deploy/dependencies/utils.js +0 -421
- package/dist/esm/plugins/deploy/exports.js +0 -4
- package/dist/esm-node/plugins/deploy/dependencies/index.js +0 -202
- package/dist/esm-node/plugins/deploy/dependencies/utils.js +0 -137
- package/dist/esm-node/plugins/deploy/exports.js +0 -4
- package/dist/types/plugins/deploy/dependencies/index.d.ts +0 -20
- package/dist/types/plugins/deploy/dependencies/utils.d.ts +0 -44
- package/dist/types/plugins/deploy/exports.d.ts +0 -1
@@ -1,421 +0,0 @@
|
|
1
|
-
import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
|
2
|
-
import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
|
3
|
-
import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
|
4
|
-
import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
|
5
|
-
import os from "node:os";
|
6
|
-
import path from "path";
|
7
|
-
import { fs as fse } from "@modern-js/utils";
|
8
|
-
import { nodeFileTrace, resolve } from "@vercel/nft";
|
9
|
-
import { parseNodeModulePath } from "mlly";
|
10
|
-
function applyPublicCondition(pkg) {
|
11
|
-
var _pkg_publishConfig;
|
12
|
-
if (pkg === null || pkg === void 0 ? void 0 : (_pkg_publishConfig = pkg.publishConfig) === null || _pkg_publishConfig === void 0 ? void 0 : _pkg_publishConfig.exports) {
|
13
|
-
var _pkg_publishConfig1;
|
14
|
-
pkg.exports = pkg === null || pkg === void 0 ? void 0 : (_pkg_publishConfig1 = pkg.publishConfig) === null || _pkg_publishConfig1 === void 0 ? void 0 : _pkg_publishConfig1.exports;
|
15
|
-
}
|
16
|
-
}
|
17
|
-
var writePackage = function() {
|
18
|
-
var _ref = _async_to_generator(function(options) {
|
19
|
-
var pkg, version, projectDir, _pkgPath, pkgPath, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, src, subpath, dest, dirname, subpath1, dest1, dirname1, err, pkgJSON, packageJsonPath;
|
20
|
-
return _ts_generator(this, function(_state) {
|
21
|
-
switch (_state.label) {
|
22
|
-
case 0:
|
23
|
-
pkg = options.pkg, version = options.version, projectDir = options.projectDir, _pkgPath = options._pkgPath;
|
24
|
-
pkgPath = _pkgPath || pkg.name;
|
25
|
-
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
|
26
|
-
_state.label = 1;
|
27
|
-
case 1:
|
28
|
-
_state.trys.push([
|
29
|
-
1,
|
30
|
-
10,
|
31
|
-
11,
|
32
|
-
12
|
33
|
-
]);
|
34
|
-
_iterator = pkg.versions[version].files[Symbol.iterator]();
|
35
|
-
_state.label = 2;
|
36
|
-
case 2:
|
37
|
-
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done))
|
38
|
-
return [
|
39
|
-
3,
|
40
|
-
9
|
41
|
-
];
|
42
|
-
src = _step.value;
|
43
|
-
if (!src.includes("node_modules"))
|
44
|
-
return [
|
45
|
-
3,
|
46
|
-
5
|
47
|
-
];
|
48
|
-
subpath = parseNodeModulePath(src).subpath;
|
49
|
-
dest = path.join(projectDir, "node_modules", pkgPath, subpath);
|
50
|
-
dirname = path.dirname(dest);
|
51
|
-
return [
|
52
|
-
4,
|
53
|
-
fse.ensureDir(dirname)
|
54
|
-
];
|
55
|
-
case 3:
|
56
|
-
_state.sent();
|
57
|
-
return [
|
58
|
-
4,
|
59
|
-
fse.copyFile(src, dest)
|
60
|
-
];
|
61
|
-
case 4:
|
62
|
-
_state.sent();
|
63
|
-
return [
|
64
|
-
3,
|
65
|
-
8
|
66
|
-
];
|
67
|
-
case 5:
|
68
|
-
subpath1 = path.relative(pkg.versions[version].path, src);
|
69
|
-
dest1 = path.join(projectDir, "node_modules", pkgPath, subpath1);
|
70
|
-
dirname1 = path.dirname(dest1);
|
71
|
-
return [
|
72
|
-
4,
|
73
|
-
fse.ensureDir(dirname1)
|
74
|
-
];
|
75
|
-
case 6:
|
76
|
-
_state.sent();
|
77
|
-
return [
|
78
|
-
4,
|
79
|
-
fse.copyFile(src, dest1)
|
80
|
-
];
|
81
|
-
case 7:
|
82
|
-
_state.sent();
|
83
|
-
_state.label = 8;
|
84
|
-
case 8:
|
85
|
-
_iteratorNormalCompletion = true;
|
86
|
-
return [
|
87
|
-
3,
|
88
|
-
2
|
89
|
-
];
|
90
|
-
case 9:
|
91
|
-
return [
|
92
|
-
3,
|
93
|
-
12
|
94
|
-
];
|
95
|
-
case 10:
|
96
|
-
err = _state.sent();
|
97
|
-
_didIteratorError = true;
|
98
|
-
_iteratorError = err;
|
99
|
-
return [
|
100
|
-
3,
|
101
|
-
12
|
102
|
-
];
|
103
|
-
case 11:
|
104
|
-
try {
|
105
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
106
|
-
_iterator.return();
|
107
|
-
}
|
108
|
-
} finally {
|
109
|
-
if (_didIteratorError) {
|
110
|
-
throw _iteratorError;
|
111
|
-
}
|
112
|
-
}
|
113
|
-
return [
|
114
|
-
7
|
115
|
-
];
|
116
|
-
case 12:
|
117
|
-
pkgJSON = pkg.versions[version].pkgJSON;
|
118
|
-
applyPublicCondition(pkgJSON);
|
119
|
-
packageJsonPath = path.join(projectDir, "node_modules", pkgPath, "package.json");
|
120
|
-
return [
|
121
|
-
4,
|
122
|
-
fse.ensureDir(path.dirname(packageJsonPath))
|
123
|
-
];
|
124
|
-
case 13:
|
125
|
-
_state.sent();
|
126
|
-
return [
|
127
|
-
4,
|
128
|
-
fse.writeFile(packageJsonPath, JSON.stringify(pkgJSON, null, 2))
|
129
|
-
];
|
130
|
-
case 14:
|
131
|
-
_state.sent();
|
132
|
-
return [
|
133
|
-
2
|
134
|
-
];
|
135
|
-
}
|
136
|
-
});
|
137
|
-
});
|
138
|
-
return function writePackage2(options) {
|
139
|
-
return _ref.apply(this, arguments);
|
140
|
-
};
|
141
|
-
}();
|
142
|
-
var isWindows = os.platform() === "win32";
|
143
|
-
var linkPackage = function() {
|
144
|
-
var _ref = _async_to_generator(function(from, to, projectRootDir) {
|
145
|
-
var src, dest, dstStat, exists;
|
146
|
-
return _ts_generator(this, function(_state) {
|
147
|
-
switch (_state.label) {
|
148
|
-
case 0:
|
149
|
-
src = path.join(projectRootDir, "node_modules", from);
|
150
|
-
dest = path.join(projectRootDir, "node_modules", to);
|
151
|
-
return [
|
152
|
-
4,
|
153
|
-
fse.lstat(dest).catch(function() {
|
154
|
-
return null;
|
155
|
-
})
|
156
|
-
];
|
157
|
-
case 1:
|
158
|
-
dstStat = _state.sent();
|
159
|
-
exists = dstStat === null || dstStat === void 0 ? void 0 : dstStat.isSymbolicLink();
|
160
|
-
if (exists) {
|
161
|
-
return [
|
162
|
-
2
|
163
|
-
];
|
164
|
-
}
|
165
|
-
return [
|
166
|
-
4,
|
167
|
-
fse.mkdir(path.dirname(dest), {
|
168
|
-
recursive: true
|
169
|
-
})
|
170
|
-
];
|
171
|
-
case 2:
|
172
|
-
_state.sent();
|
173
|
-
return [
|
174
|
-
4,
|
175
|
-
fse.symlink(path.relative(path.dirname(dest), src), dest, isWindows ? "junction" : "dir").catch(function(error) {
|
176
|
-
console.error("Cannot link", from, "to", to, error);
|
177
|
-
})
|
178
|
-
];
|
179
|
-
case 3:
|
180
|
-
_state.sent();
|
181
|
-
return [
|
182
|
-
2
|
183
|
-
];
|
184
|
-
}
|
185
|
-
});
|
186
|
-
});
|
187
|
-
return function linkPackage2(from, to, projectRootDir) {
|
188
|
-
return _ref.apply(this, arguments);
|
189
|
-
};
|
190
|
-
}();
|
191
|
-
var readDirRecursive = function() {
|
192
|
-
var _ref = _async_to_generator(function(dir) {
|
193
|
-
var options, filter, files, filesAndDirs;
|
194
|
-
var _arguments = arguments;
|
195
|
-
return _ts_generator(this, function(_state) {
|
196
|
-
switch (_state.label) {
|
197
|
-
case 0:
|
198
|
-
options = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {};
|
199
|
-
filter = options.filter;
|
200
|
-
return [
|
201
|
-
4,
|
202
|
-
fse.readdir(dir, {
|
203
|
-
withFileTypes: true
|
204
|
-
})
|
205
|
-
];
|
206
|
-
case 1:
|
207
|
-
files = _state.sent();
|
208
|
-
return [
|
209
|
-
4,
|
210
|
-
Promise.all(files.map(function() {
|
211
|
-
var _ref2 = _async_to_generator(function(file) {
|
212
|
-
var resolvedPath;
|
213
|
-
return _ts_generator(this, function(_state2) {
|
214
|
-
resolvedPath = path.resolve(dir, file.name);
|
215
|
-
if (file.isDirectory()) {
|
216
|
-
return [
|
217
|
-
2,
|
218
|
-
readDirRecursive(resolvedPath, options)
|
219
|
-
];
|
220
|
-
} else {
|
221
|
-
return [
|
222
|
-
2,
|
223
|
-
filter && !filter(resolvedPath) ? [] : resolvedPath
|
224
|
-
];
|
225
|
-
}
|
226
|
-
return [
|
227
|
-
2
|
228
|
-
];
|
229
|
-
});
|
230
|
-
});
|
231
|
-
return function(file) {
|
232
|
-
return _ref2.apply(this, arguments);
|
233
|
-
};
|
234
|
-
}()))
|
235
|
-
];
|
236
|
-
case 2:
|
237
|
-
filesAndDirs = _state.sent();
|
238
|
-
return [
|
239
|
-
2,
|
240
|
-
filesAndDirs.flat()
|
241
|
-
];
|
242
|
-
}
|
243
|
-
});
|
244
|
-
});
|
245
|
-
return function readDirRecursive2(dir) {
|
246
|
-
return _ref.apply(this, arguments);
|
247
|
-
};
|
248
|
-
}();
|
249
|
-
var isFile = function() {
|
250
|
-
var _ref = _async_to_generator(function(file) {
|
251
|
-
var stat, error;
|
252
|
-
return _ts_generator(this, function(_state) {
|
253
|
-
switch (_state.label) {
|
254
|
-
case 0:
|
255
|
-
_state.trys.push([
|
256
|
-
0,
|
257
|
-
2,
|
258
|
-
,
|
259
|
-
3
|
260
|
-
]);
|
261
|
-
return [
|
262
|
-
4,
|
263
|
-
fse.stat(file)
|
264
|
-
];
|
265
|
-
case 1:
|
266
|
-
stat = _state.sent();
|
267
|
-
return [
|
268
|
-
2,
|
269
|
-
stat.isFile()
|
270
|
-
];
|
271
|
-
case 2:
|
272
|
-
error = _state.sent();
|
273
|
-
if (error.code === "ENOENT") {
|
274
|
-
return [
|
275
|
-
2,
|
276
|
-
false
|
277
|
-
];
|
278
|
-
}
|
279
|
-
throw error;
|
280
|
-
case 3:
|
281
|
-
return [
|
282
|
-
2
|
283
|
-
];
|
284
|
-
}
|
285
|
-
});
|
286
|
-
});
|
287
|
-
return function isFile2(file) {
|
288
|
-
return _ref.apply(this, arguments);
|
289
|
-
};
|
290
|
-
}();
|
291
|
-
var findEntryFiles = function() {
|
292
|
-
var _ref = _async_to_generator(function(rootDir, entryFilter) {
|
293
|
-
var files;
|
294
|
-
return _ts_generator(this, function(_state) {
|
295
|
-
switch (_state.label) {
|
296
|
-
case 0:
|
297
|
-
return [
|
298
|
-
4,
|
299
|
-
readDirRecursive(rootDir, {
|
300
|
-
filter: entryFilter
|
301
|
-
})
|
302
|
-
];
|
303
|
-
case 1:
|
304
|
-
files = _state.sent();
|
305
|
-
return [
|
306
|
-
2,
|
307
|
-
files.filter(function(file) {
|
308
|
-
return file.endsWith(".mjs") || file.endsWith(".cjs") || file.endsWith(".js");
|
309
|
-
})
|
310
|
-
];
|
311
|
-
}
|
312
|
-
});
|
313
|
-
});
|
314
|
-
return function findEntryFiles2(rootDir, entryFilter) {
|
315
|
-
return _ref.apply(this, arguments);
|
316
|
-
};
|
317
|
-
}();
|
318
|
-
var findPackageParents = function(pkg, version, tracedFiles) {
|
319
|
-
var versionFiles = pkg.versions[version].files.map(function(path2) {
|
320
|
-
return tracedFiles[path2];
|
321
|
-
});
|
322
|
-
var parentPkgs = _to_consumable_array(new Set(versionFiles.flatMap(function(file) {
|
323
|
-
return (
|
324
|
-
// Because it supports copyWholePackage configuration, not all files exist.
|
325
|
-
file === null || file === void 0 ? void 0 : file.parents.map(function(parentPath) {
|
326
|
-
var parentFile = tracedFiles[parentPath];
|
327
|
-
if (!parentFile || parentFile.pkgName === pkg.name) {
|
328
|
-
return null;
|
329
|
-
}
|
330
|
-
return "".concat(parentFile.pkgName, "@").concat(parentFile.pkgVersion);
|
331
|
-
}).filter(Boolean)
|
332
|
-
);
|
333
|
-
})));
|
334
|
-
return parentPkgs.filter(function(parentPkg) {
|
335
|
-
return parentPkg;
|
336
|
-
});
|
337
|
-
};
|
338
|
-
var traceFiles = function() {
|
339
|
-
var _ref = _async_to_generator(function(param) {
|
340
|
-
var entryFiles, serverRootDir, _param_base, base, traceOptions;
|
341
|
-
return _ts_generator(this, function(_state) {
|
342
|
-
switch (_state.label) {
|
343
|
-
case 0:
|
344
|
-
entryFiles = param.entryFiles, serverRootDir = param.serverRootDir, _param_base = param.base, base = _param_base === void 0 ? "/" : _param_base, traceOptions = param.traceOptions;
|
345
|
-
return [
|
346
|
-
4,
|
347
|
-
nodeFileTrace(entryFiles, _object_spread({
|
348
|
-
base,
|
349
|
-
processCwd: serverRootDir,
|
350
|
-
resolve: function() {
|
351
|
-
var _ref2 = _async_to_generator(function(id, parent, job, isCjs) {
|
352
|
-
return _ts_generator(this, function(_state2) {
|
353
|
-
if (id.startsWith("@modern-js/prod-server")) {
|
354
|
-
return [
|
355
|
-
2,
|
356
|
-
require.resolve(id, {
|
357
|
-
paths: [
|
358
|
-
require.resolve("@modern-js/app-tools")
|
359
|
-
]
|
360
|
-
})
|
361
|
-
];
|
362
|
-
} else {
|
363
|
-
return [
|
364
|
-
2,
|
365
|
-
resolve(id, parent, job, isCjs)
|
366
|
-
];
|
367
|
-
}
|
368
|
-
return [
|
369
|
-
2
|
370
|
-
];
|
371
|
-
});
|
372
|
-
});
|
373
|
-
return function(id, parent, job, isCjs) {
|
374
|
-
return _ref2.apply(this, arguments);
|
375
|
-
};
|
376
|
-
}()
|
377
|
-
}, traceOptions))
|
378
|
-
];
|
379
|
-
case 1:
|
380
|
-
return [
|
381
|
-
2,
|
382
|
-
_state.sent()
|
383
|
-
];
|
384
|
-
}
|
385
|
-
});
|
386
|
-
});
|
387
|
-
return function traceFiles2(_) {
|
388
|
-
return _ref.apply(this, arguments);
|
389
|
-
};
|
390
|
-
}();
|
391
|
-
var resolveTracedPath = function() {
|
392
|
-
var _ref = _async_to_generator(function(base, p) {
|
393
|
-
return _ts_generator(this, function(_state) {
|
394
|
-
return [
|
395
|
-
2,
|
396
|
-
fse.realpath(path.resolve(base, p))
|
397
|
-
];
|
398
|
-
});
|
399
|
-
});
|
400
|
-
return function resolveTracedPath2(base, p) {
|
401
|
-
return _ref.apply(this, arguments);
|
402
|
-
};
|
403
|
-
}();
|
404
|
-
var isSubPath = function(parentPath, childPath) {
|
405
|
-
if (!parentPath || !childPath) {
|
406
|
-
return false;
|
407
|
-
}
|
408
|
-
var relative = path.relative(parentPath, childPath);
|
409
|
-
return relative && !relative.startsWith("..");
|
410
|
-
};
|
411
|
-
export {
|
412
|
-
findEntryFiles,
|
413
|
-
findPackageParents,
|
414
|
-
isFile,
|
415
|
-
isSubPath,
|
416
|
-
linkPackage,
|
417
|
-
readDirRecursive,
|
418
|
-
resolveTracedPath,
|
419
|
-
traceFiles,
|
420
|
-
writePackage
|
421
|
-
};
|
@@ -1,202 +0,0 @@
|
|
1
|
-
import path from "node:path";
|
2
|
-
import { fs as fse, pkgUp, semver } from "@modern-js/utils";
|
3
|
-
import { parseNodeModulePath } from "mlly";
|
4
|
-
import { readPackageJSON } from "pkg-types";
|
5
|
-
import { traceFiles as defaultTraceFiles, findEntryFiles, findPackageParents, isFile, isSubPath, linkPackage, readDirRecursive, resolveTracedPath, writePackage } from "./utils";
|
6
|
-
import { nodeFileTrace } from "@vercel/nft";
|
7
|
-
const handleDependencies = async ({ appDir, serverRootDir, includeEntries, traceFiles = defaultTraceFiles, entryFilter, modifyPackageJson, copyWholePackage, traceOptions }) => {
|
8
|
-
const base = "/";
|
9
|
-
const entryFiles = await findEntryFiles(serverRootDir, entryFilter);
|
10
|
-
const fileTrace = await traceFiles({
|
11
|
-
entryFiles: entryFiles.concat(includeEntries),
|
12
|
-
serverRootDir,
|
13
|
-
base,
|
14
|
-
traceOptions
|
15
|
-
});
|
16
|
-
const currentProjectModules = path.join(appDir, "node_modules");
|
17
|
-
const dependencySearchRoot = path.resolve(appDir, "../../../../../../");
|
18
|
-
const tracedFiles = Object.fromEntries(await Promise.all([
|
19
|
-
...fileTrace.reasons.entries()
|
20
|
-
].map(async ([_path, reasons]) => {
|
21
|
-
if (reasons.ignored) {
|
22
|
-
return;
|
23
|
-
}
|
24
|
-
const filePath = await resolveTracedPath(base, _path);
|
25
|
-
if (isSubPath(serverRootDir, filePath) || isSubPath(appDir, filePath) && !isSubPath(currentProjectModules, filePath)) {
|
26
|
-
return;
|
27
|
-
}
|
28
|
-
if (!await isFile(filePath)) {
|
29
|
-
return;
|
30
|
-
}
|
31
|
-
let baseDir;
|
32
|
-
let pkgName;
|
33
|
-
let subpath;
|
34
|
-
let pkgPath;
|
35
|
-
if (filePath.includes("node_modules")) {
|
36
|
-
const parsed = parseNodeModulePath(filePath);
|
37
|
-
baseDir = parsed.dir;
|
38
|
-
pkgName = parsed.name;
|
39
|
-
subpath = parsed.subpath;
|
40
|
-
pkgPath = path.join(baseDir, pkgName);
|
41
|
-
} else {
|
42
|
-
const MODERN_UTILS_PATH = "packages/toolkit/utils";
|
43
|
-
const MODERN_UTILS_PATH_REGEX = new RegExp(`(.*${MODERN_UTILS_PATH})`);
|
44
|
-
const match = filePath.match(MODERN_UTILS_PATH_REGEX);
|
45
|
-
const packageJsonPath = match ? path.join(match[0], "package.json") : await pkgUp({
|
46
|
-
cwd: path.dirname(filePath)
|
47
|
-
});
|
48
|
-
if (packageJsonPath && isSubPath(dependencySearchRoot, packageJsonPath)) {
|
49
|
-
const packageJson = await fse.readJSON(packageJsonPath);
|
50
|
-
pkgPath = baseDir = path.dirname(packageJsonPath);
|
51
|
-
subpath = path.relative(baseDir, filePath);
|
52
|
-
pkgName = packageJson.name;
|
53
|
-
}
|
54
|
-
}
|
55
|
-
if (!baseDir) {
|
56
|
-
return;
|
57
|
-
}
|
58
|
-
const parents = await Promise.all([
|
59
|
-
...reasons.parents
|
60
|
-
].map((p) => resolveTracedPath(base, p)));
|
61
|
-
const tracedFile = {
|
62
|
-
path: filePath,
|
63
|
-
parents,
|
64
|
-
isDirectDep: parents.some((parent) => {
|
65
|
-
return isSubPath(appDir, parent) && !isSubPath(currentProjectModules, parent);
|
66
|
-
}),
|
67
|
-
subpath,
|
68
|
-
pkgName,
|
69
|
-
pkgPath
|
70
|
-
};
|
71
|
-
return [
|
72
|
-
filePath,
|
73
|
-
tracedFile
|
74
|
-
];
|
75
|
-
})).then((r) => r.filter(Boolean)));
|
76
|
-
const tracedPackages = {};
|
77
|
-
for (const tracedFile of Object.values(tracedFiles)) {
|
78
|
-
const { pkgName } = tracedFile;
|
79
|
-
let tracedPackage = tracedPackages[pkgName];
|
80
|
-
let pkgJSON = await readPackageJSON(tracedFile.pkgPath, {
|
81
|
-
cache: true
|
82
|
-
}).catch(() => {
|
83
|
-
});
|
84
|
-
if (!pkgJSON) {
|
85
|
-
pkgJSON = {
|
86
|
-
name: pkgName,
|
87
|
-
version: "0.0.0"
|
88
|
-
};
|
89
|
-
}
|
90
|
-
if (!tracedPackage) {
|
91
|
-
tracedPackage = {
|
92
|
-
name: pkgName,
|
93
|
-
versions: {}
|
94
|
-
};
|
95
|
-
tracedPackages[pkgName] = tracedPackage;
|
96
|
-
}
|
97
|
-
let tracedPackageVersion = tracedPackage.versions[pkgJSON.version];
|
98
|
-
if (!tracedPackageVersion) {
|
99
|
-
tracedPackageVersion = {
|
100
|
-
path: tracedFile.pkgPath,
|
101
|
-
files: [],
|
102
|
-
isDirectDep: false,
|
103
|
-
pkgJSON
|
104
|
-
};
|
105
|
-
if (tracedFile.isDirectDep) {
|
106
|
-
tracedPackageVersion.isDirectDep = tracedFile.isDirectDep;
|
107
|
-
}
|
108
|
-
tracedPackage.versions[pkgJSON.version] = tracedPackageVersion;
|
109
|
-
}
|
110
|
-
tracedFile.pkgName = pkgName;
|
111
|
-
tracedFile.pkgVersion = pkgJSON.version;
|
112
|
-
const shouldCopyWholePackage = copyWholePackage === null || copyWholePackage === void 0 ? void 0 : copyWholePackage(pkgName);
|
113
|
-
if (tracedFile.path.startsWith(tracedFile.pkgPath) && // Merged package files are based on the version, not on paths, to handle some boundary cases
|
114
|
-
tracedPackageVersion.pkgJSON.version === tracedFile.pkgVersion) {
|
115
|
-
if (shouldCopyWholePackage) {
|
116
|
-
const allFiles = await readDirRecursive(tracedFile.pkgPath);
|
117
|
-
tracedPackageVersion.files.push(...allFiles);
|
118
|
-
} else {
|
119
|
-
tracedPackageVersion.files.push(tracedFile.path);
|
120
|
-
}
|
121
|
-
}
|
122
|
-
}
|
123
|
-
const multiVersionPkgs = {};
|
124
|
-
const singleVersionPackages = [];
|
125
|
-
for (const tracedPackage of Object.values(tracedPackages)) {
|
126
|
-
const versions = Object.keys(tracedPackage.versions);
|
127
|
-
if (versions.length === 1) {
|
128
|
-
singleVersionPackages.push(tracedPackage.name);
|
129
|
-
continue;
|
130
|
-
}
|
131
|
-
multiVersionPkgs[tracedPackage.name] = {};
|
132
|
-
for (const version of versions) {
|
133
|
-
multiVersionPkgs[tracedPackage.name][version] = findPackageParents(tracedPackage, version, tracedFiles);
|
134
|
-
}
|
135
|
-
}
|
136
|
-
await Promise.all(singleVersionPackages.map((pkgName) => {
|
137
|
-
const pkg = tracedPackages[pkgName];
|
138
|
-
const version = Object.keys(pkg.versions)[0];
|
139
|
-
return writePackage({
|
140
|
-
pkg,
|
141
|
-
version,
|
142
|
-
projectDir: serverRootDir
|
143
|
-
});
|
144
|
-
}));
|
145
|
-
const projectPkgJson = await readPackageJSON(serverRootDir).catch(() => ({}));
|
146
|
-
for (const [pkgName, pkgVersions] of Object.entries(multiVersionPkgs)) {
|
147
|
-
const versionEntires = Object.entries(pkgVersions).sort(([v1, p1], [v2, p2]) => {
|
148
|
-
var _tracedPackages_pkgName_versions_v1, _tracedPackages_pkgName_versions, _tracedPackages_pkgName, _tracedPackages_pkgName_versions_v2, _tracedPackages_pkgName_versions1, _tracedPackages_pkgName1;
|
149
|
-
const shouldHoist1 = (_tracedPackages_pkgName = tracedPackages[pkgName]) === null || _tracedPackages_pkgName === void 0 ? void 0 : (_tracedPackages_pkgName_versions = _tracedPackages_pkgName.versions) === null || _tracedPackages_pkgName_versions === void 0 ? void 0 : (_tracedPackages_pkgName_versions_v1 = _tracedPackages_pkgName_versions[v1]) === null || _tracedPackages_pkgName_versions_v1 === void 0 ? void 0 : _tracedPackages_pkgName_versions_v1.isDirectDep;
|
150
|
-
const shouldHoist2 = (_tracedPackages_pkgName1 = tracedPackages[pkgName]) === null || _tracedPackages_pkgName1 === void 0 ? void 0 : (_tracedPackages_pkgName_versions1 = _tracedPackages_pkgName1.versions) === null || _tracedPackages_pkgName_versions1 === void 0 ? void 0 : (_tracedPackages_pkgName_versions_v2 = _tracedPackages_pkgName_versions1[v2]) === null || _tracedPackages_pkgName_versions_v2 === void 0 ? void 0 : _tracedPackages_pkgName_versions_v2.isDirectDep;
|
151
|
-
if (shouldHoist1 && !shouldHoist2) {
|
152
|
-
return -1;
|
153
|
-
}
|
154
|
-
if (!shouldHoist1 && shouldHoist2) {
|
155
|
-
return 1;
|
156
|
-
}
|
157
|
-
if (p1.length === 0) {
|
158
|
-
return -1;
|
159
|
-
}
|
160
|
-
if (p2.length === 0) {
|
161
|
-
return 1;
|
162
|
-
}
|
163
|
-
return semver.lt(v1, v2, {
|
164
|
-
loose: true
|
165
|
-
}) ? 1 : -1;
|
166
|
-
});
|
167
|
-
for (const [version, parentPkgs] of versionEntires) {
|
168
|
-
const pkg = tracedPackages[pkgName];
|
169
|
-
const pkgDestPath = `.modernjs/${pkgName}@${version}/node_modules/${pkgName}`;
|
170
|
-
await writePackage({
|
171
|
-
pkg,
|
172
|
-
version,
|
173
|
-
projectDir: serverRootDir,
|
174
|
-
_pkgPath: pkgDestPath
|
175
|
-
});
|
176
|
-
await linkPackage(pkgDestPath, `${pkgName}`, serverRootDir);
|
177
|
-
for (const parentPkg of parentPkgs) {
|
178
|
-
const parentPkgName = parentPkg.replace(/@[^@]+$/, "");
|
179
|
-
await (multiVersionPkgs[parentPkgName] ? linkPackage(pkgDestPath, `.modernjs/${parentPkg}/node_modules/${pkgName}`, serverRootDir) : linkPackage(pkgDestPath, `${parentPkgName}/node_modules/${pkgName}`, serverRootDir));
|
180
|
-
}
|
181
|
-
}
|
182
|
-
}
|
183
|
-
const outputPkgPath = path.join(serverRootDir, "package.json");
|
184
|
-
const newPkgJson = {
|
185
|
-
name: `${projectPkgJson.name || "modernjs-project"}-prod`,
|
186
|
-
version: projectPkgJson.version || "0.0.0",
|
187
|
-
private: true,
|
188
|
-
type: projectPkgJson.type || "commonjs",
|
189
|
-
dependencies: Object.fromEntries([
|
190
|
-
...Object.values(tracedPackages).map((pkg) => [
|
191
|
-
pkg.name,
|
192
|
-
Object.keys(pkg.versions)[0]
|
193
|
-
])
|
194
|
-
].sort(([a], [b]) => a.localeCompare(b)))
|
195
|
-
};
|
196
|
-
const finalPkgJson = (modifyPackageJson === null || modifyPackageJson === void 0 ? void 0 : modifyPackageJson(newPkgJson)) || newPkgJson;
|
197
|
-
await fse.writeJSON(outputPkgPath, finalPkgJson);
|
198
|
-
};
|
199
|
-
export {
|
200
|
-
handleDependencies,
|
201
|
-
nodeFileTrace
|
202
|
-
};
|