@modern-js/app-tools 2.53.1-alpha.2 → 2.53.1-alpha.4

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.
@@ -36,10 +36,10 @@ var import_utils = require("@modern-js/utils");
36
36
  var import_pkg_types = require("pkg-types");
37
37
  var import_mlly = require("mlly");
38
38
  var import_utils2 = require("./utils");
39
- const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFilter, modifyPackageJson) => {
39
+ const handleDependencies = async ({ appDir, serverRootDir, includeEntries, traceFiles = import_utils2.traceFiles, entryFilter, modifyPackageJson, copyWholePackage }) => {
40
40
  const base = "/";
41
41
  const entryFiles = await (0, import_utils2.findEntryFiles)(serverRootDir, entryFilter);
42
- const fileTrace = await (0, import_utils2.traceFiles)(entryFiles.concat(includeEntries), serverRootDir, base);
42
+ const fileTrace = await traceFiles(entryFiles.concat(includeEntries), serverRootDir, base);
43
43
  const currentProjectModules = import_node_path.default.join(appDir, "node_modules");
44
44
  const tracedFiles = Object.fromEntries(await Promise.all([
45
45
  ...fileTrace.reasons.entries()
@@ -133,9 +133,17 @@ const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFi
133
133
  }
134
134
  tracedPackage.versions[pkgJSON.version] = tracedPackageVersion;
135
135
  }
136
- tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath && tracedPackageVersion.files.push(tracedFile.path);
137
136
  tracedFile.pkgName = pkgName;
138
137
  tracedFile.pkgVersion = pkgJSON.version;
138
+ const shouldCopyWholePackage = copyWholePackage === null || copyWholePackage === void 0 ? void 0 : copyWholePackage(pkgName);
139
+ if (tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath) {
140
+ if (shouldCopyWholePackage) {
141
+ const allFiles = await (0, import_utils2.readDirRecursive)(tracedFile.pkgPath);
142
+ tracedPackageVersion.files.push(...allFiles);
143
+ } else {
144
+ tracedPackageVersion.files.push(tracedFile.path);
145
+ }
146
+ }
139
147
  }
140
148
  const multiVersionPkgs = {};
141
149
  const singleVersionPackages = [];
@@ -153,7 +161,11 @@ const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFi
153
161
  await Promise.all(singleVersionPackages.map((pkgName) => {
154
162
  const pkg = tracedPackages[pkgName];
155
163
  const version = Object.keys(pkg.versions)[0];
156
- return (0, import_utils2.writePackage)(pkg, version, serverRootDir);
164
+ return (0, import_utils2.writePackage)({
165
+ pkg,
166
+ version,
167
+ projectDir: serverRootDir
168
+ });
157
169
  }));
158
170
  const projectPkgJson = await (0, import_pkg_types.readPackageJSON)(serverRootDir).catch(() => ({}));
159
171
  for (const [pkgName, pkgVersions] of Object.entries(multiVersionPkgs)) {
@@ -180,7 +192,12 @@ const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFi
180
192
  for (const [version, parentPkgs] of versionEntires) {
181
193
  const pkg = tracedPackages[pkgName];
182
194
  const pkgDestPath = `.modernjs/${pkgName}@${version}/node_modules/${pkgName}`;
183
- await (0, import_utils2.writePackage)(pkg, version, serverRootDir, pkgDestPath);
195
+ await (0, import_utils2.writePackage)({
196
+ pkg,
197
+ version,
198
+ projectDir: serverRootDir,
199
+ _pkgPath: pkgDestPath
200
+ });
184
201
  await (0, import_utils2.linkPackage)(pkgDestPath, `${pkgName}`, serverRootDir);
185
202
  for (const parentPkg of parentPkgs) {
186
203
  const parentPkgName = parentPkg.replace(/@[^@]+$/, "");
@@ -50,7 +50,8 @@ function applyPublicCondition(pkg) {
50
50
  pkg.exports = pkg === null || pkg === void 0 ? void 0 : (_pkg_publishConfig1 = pkg.publishConfig) === null || _pkg_publishConfig1 === void 0 ? void 0 : _pkg_publishConfig1.exports;
51
51
  }
52
52
  }
53
- const writePackage = async (pkg, version, projectDir, _pkgPath) => {
53
+ const writePackage = async (options) => {
54
+ const { pkg, version, projectDir, _pkgPath } = options;
54
55
  const pkgPath = _pkgPath || pkg.name;
55
56
  for (const src of pkg.versions[version].files) {
56
57
  if (src.includes("node_modules")) {
@@ -124,31 +125,24 @@ const findEntryFiles = async (rootDir, entryFilter) => {
124
125
  const findPackageParents = (pkg, version, tracedFiles) => {
125
126
  const versionFiles = pkg.versions[version].files.map((path2) => tracedFiles[path2]);
126
127
  const parentPkgs = [
127
- ...new Set(versionFiles.flatMap((file) => file.parents.map((parentPath) => {
128
- const parentFile = tracedFiles[parentPath];
129
- if (!parentFile || parentFile.pkgName === pkg.name) {
130
- return null;
131
- }
132
- return `${parentFile.pkgName}@${parentFile.pkgVersion}`;
133
- }).filter(Boolean)))
128
+ ...new Set(versionFiles.flatMap((file) => (
129
+ // 因为支持 copyWholePackage 配置,并不是所有的文件都会被复制的
130
+ file === null || file === void 0 ? void 0 : file.parents.map((parentPath) => {
131
+ const parentFile = tracedFiles[parentPath];
132
+ if (!parentFile || parentFile.pkgName === pkg.name) {
133
+ return null;
134
+ }
135
+ return `${parentFile.pkgName}@${parentFile.pkgVersion}`;
136
+ }).filter(Boolean)
137
+ )))
134
138
  ];
135
- return parentPkgs;
139
+ return parentPkgs.filter((parentPkg) => parentPkg);
136
140
  };
137
141
  const traceFiles = async (entryFiles, serverRootDir, base = "/") => {
138
142
  return await (0, import_nft.nodeFileTrace)(entryFiles, {
139
143
  base,
140
144
  processCwd: serverRootDir,
141
- resolve: async (id, parent, job, isCjs) => {
142
- if (id.startsWith("@modern-js/prod-server")) {
143
- return require.resolve(id, {
144
- paths: [
145
- require.resolve("@modern-js/app-tools")
146
- ]
147
- });
148
- } else {
149
- return (0, import_nft.resolve)(id, parent, job, isCjs);
150
- }
151
- }
145
+ cache: /* @__PURE__ */ Object.create(null)
152
146
  });
153
147
  };
154
148
  const resolveTracedPath = async (base, p) => import_utils.fs.realpath(import_path.default.resolve(base, p));
@@ -124,9 +124,13 @@ const createNetlifyPreset = (appContext, modernConfig, needModernServer) => {
124
124
  if (!needModernServer) {
125
125
  return;
126
126
  }
127
- await (0, import_dependencies.handleDependencies)(appDirectory, funcsDirectory, [
128
- require.resolve("@modern-js/prod-server")
129
- ]);
127
+ await (0, import_dependencies.handleDependencies)({
128
+ appDir: appDirectory,
129
+ serverRootDir: funcsDirectory,
130
+ includeEntries: [
131
+ require.resolve("@modern-js/prod-server")
132
+ ]
133
+ });
130
134
  }
131
135
  };
132
136
  };
@@ -78,9 +78,14 @@ const createNodePreset = (appContext, config) => {
78
78
  const filter = (filePath) => {
79
79
  return !filePath.startsWith(staticDirectory);
80
80
  };
81
- await (0, import_dependencies.handleDependencies)(appDirectory, outputDirectory, [
82
- require.resolve("@modern-js/prod-server")
83
- ], filter);
81
+ await (0, import_dependencies.handleDependencies)({
82
+ appDir: appDirectory,
83
+ serverRootDir: outputDirectory,
84
+ includeEntries: [
85
+ require.resolve("@modern-js/prod-server")
86
+ ],
87
+ entryFilter: filter
88
+ });
84
89
  }
85
90
  };
86
91
  };
@@ -136,9 +136,13 @@ const createVercelPreset = (appContext, modernConfig, needModernServer) => {
136
136
  if (!needModernServer) {
137
137
  return;
138
138
  }
139
- await (0, import_dependencies.handleDependencies)(appDirectory, funcsDirectory, [
140
- require.resolve("@modern-js/prod-server")
141
- ]);
139
+ await (0, import_dependencies.handleDependencies)({
140
+ appDir: appDirectory,
141
+ serverRootDir: funcsDirectory,
142
+ includeEntries: [
143
+ require.resolve("@modern-js/prod-server")
144
+ ]
145
+ });
142
146
  }
143
147
  };
144
148
  };
@@ -7,13 +7,14 @@ import path from "node:path";
7
7
  import { fs as fse, pkgUp, semver } from "@modern-js/utils";
8
8
  import { readPackageJSON } from "pkg-types";
9
9
  import { parseNodeModulePath } from "mlly";
10
- import { linkPackage, writePackage, isFile, findEntryFiles, traceFiles, findPackageParents, resolveTracedPath } from "./utils";
10
+ import { linkPackage, writePackage, isFile, findEntryFiles, traceFiles as defaultTraceFiles, findPackageParents, resolveTracedPath, readDirRecursive } from "./utils";
11
11
  var handleDependencies = function() {
12
- var _ref = _async_to_generator(function(appDir, serverRootDir, includeEntries, entryFilter, modifyPackageJson) {
13
- var base, entryFiles, fileTrace, currentProjectModules, tracedFiles, _, tracedPackages, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, tracedFile, pkgName, tracedPackage, pkgJSON, tracedPackageVersion, err, multiVersionPkgs, singleVersionPackages, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, tracedPackage1, versions, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, version, projectPkgJson, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _loop, _iterator3, _step3, err, outputPkgPath, newPkgJson, finalPkgJson;
12
+ var _ref = _async_to_generator(function(param) {
13
+ var appDir, serverRootDir, includeEntries, _param_traceFiles, traceFiles, entryFilter, modifyPackageJson, copyWholePackage, base, entryFiles, fileTrace, currentProjectModules, tracedFiles, _, tracedPackages, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, tracedFile, pkgName, tracedPackage, pkgJSON, tracedPackageVersion, shouldCopyWholePackage, _tracedPackageVersion_files, allFiles, err, multiVersionPkgs, singleVersionPackages, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, tracedPackage1, versions, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, version, projectPkgJson, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _loop, _iterator3, _step3, err, outputPkgPath, newPkgJson, finalPkgJson;
14
14
  return _ts_generator(this, function(_state) {
15
15
  switch (_state.label) {
16
16
  case 0:
17
+ appDir = param.appDir, serverRootDir = param.serverRootDir, includeEntries = param.includeEntries, _param_traceFiles = param.traceFiles, traceFiles = _param_traceFiles === void 0 ? defaultTraceFiles : _param_traceFiles, entryFilter = param.entryFilter, modifyPackageJson = param.modifyPackageJson, copyWholePackage = param.copyWholePackage;
17
18
  base = "/";
18
19
  return [
19
20
  4,
@@ -32,12 +33,12 @@ var handleDependencies = function() {
32
33
  return [
33
34
  4,
34
35
  Promise.all(_to_consumable_array(fileTrace.reasons.entries()).map(function() {
35
- var _ref2 = _async_to_generator(function(param) {
36
+ var _ref2 = _async_to_generator(function(param2) {
36
37
  var _param, _path, reasons, filePath, baseDir, pkgName2, subpath, pkgPath, parsed, MODERN_UTILS_PATH, MODERN_UTILS_PATH_REGEX, match, packageJsonPath, _tmp, packageJson, parents, tracedFile2;
37
38
  return _ts_generator(this, function(_state2) {
38
39
  switch (_state2.label) {
39
40
  case 0:
40
- _param = _sliced_to_array(param, 2), _path = _param[0], reasons = _param[1];
41
+ _param = _sliced_to_array(param2, 2), _path = _param[0], reasons = _param[1];
41
42
  if (reasons.ignored) {
42
43
  return [
43
44
  2
@@ -170,9 +171,9 @@ var handleDependencies = function() {
170
171
  case 4:
171
172
  _state.trys.push([
172
173
  4,
173
- 9,
174
- 10,
175
- 11
174
+ 11,
175
+ 12,
176
+ 13
176
177
  ]);
177
178
  _iterator = Object.values(tracedFiles)[Symbol.iterator]();
178
179
  _state.label = 5;
@@ -180,7 +181,7 @@ var handleDependencies = function() {
180
181
  if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done))
181
182
  return [
182
183
  3,
183
- 8
184
+ 10
184
185
  ];
185
186
  tracedFile = _step.value;
186
187
  pkgName = tracedFile.pkgName;
@@ -220,30 +221,53 @@ var handleDependencies = function() {
220
221
  }
221
222
  tracedPackage.versions[pkgJSON.version] = tracedPackageVersion;
222
223
  }
223
- tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath && tracedPackageVersion.files.push(tracedFile.path);
224
224
  tracedFile.pkgName = pkgName;
225
225
  tracedFile.pkgVersion = pkgJSON.version;
226
- _state.label = 7;
226
+ shouldCopyWholePackage = copyWholePackage === null || copyWholePackage === void 0 ? void 0 : copyWholePackage(pkgName);
227
+ if (!(tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath))
228
+ return [
229
+ 3,
230
+ 9
231
+ ];
232
+ if (!shouldCopyWholePackage)
233
+ return [
234
+ 3,
235
+ 8
236
+ ];
237
+ return [
238
+ 4,
239
+ readDirRecursive(tracedFile.pkgPath)
240
+ ];
227
241
  case 7:
242
+ allFiles = _state.sent();
243
+ (_tracedPackageVersion_files = tracedPackageVersion.files).push.apply(_tracedPackageVersion_files, _to_consumable_array(allFiles));
244
+ return [
245
+ 3,
246
+ 9
247
+ ];
248
+ case 8:
249
+ tracedPackageVersion.files.push(tracedFile.path);
250
+ _state.label = 9;
251
+ case 9:
228
252
  _iteratorNormalCompletion = true;
229
253
  return [
230
254
  3,
231
255
  5
232
256
  ];
233
- case 8:
257
+ case 10:
234
258
  return [
235
259
  3,
236
- 11
260
+ 13
237
261
  ];
238
- case 9:
262
+ case 11:
239
263
  err = _state.sent();
240
264
  _didIteratorError = true;
241
265
  _iteratorError = err;
242
266
  return [
243
267
  3,
244
- 11
268
+ 13
245
269
  ];
246
- case 10:
270
+ case 12:
247
271
  try {
248
272
  if (!_iteratorNormalCompletion && _iterator.return != null) {
249
273
  _iterator.return();
@@ -256,7 +280,7 @@ var handleDependencies = function() {
256
280
  return [
257
281
  7
258
282
  ];
259
- case 11:
283
+ case 13:
260
284
  multiVersionPkgs = {};
261
285
  singleVersionPackages = [];
262
286
  _iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = void 0;
@@ -309,10 +333,14 @@ var handleDependencies = function() {
309
333
  Promise.all(singleVersionPackages.map(function(pkgName2) {
310
334
  var pkg = tracedPackages[pkgName2];
311
335
  var version2 = Object.keys(pkg.versions)[0];
312
- return writePackage(pkg, version2, serverRootDir);
336
+ return writePackage({
337
+ pkg,
338
+ version: version2,
339
+ projectDir: serverRootDir
340
+ });
313
341
  }))
314
342
  ];
315
- case 12:
343
+ case 14:
316
344
  _state.sent();
317
345
  return [
318
346
  4,
@@ -320,16 +348,16 @@ var handleDependencies = function() {
320
348
  return {};
321
349
  })
322
350
  ];
323
- case 13:
351
+ case 15:
324
352
  projectPkgJson = _state.sent();
325
353
  _iteratorNormalCompletion3 = true, _didIteratorError3 = false, _iteratorError3 = void 0;
326
- _state.label = 14;
327
- case 14:
354
+ _state.label = 16;
355
+ case 16:
328
356
  _state.trys.push([
329
- 14,
330
- 19,
331
- 20,
332
- 21
357
+ 16,
358
+ 21,
359
+ 22,
360
+ 23
333
361
  ]);
334
362
  _loop = function() {
335
363
  var _step_value, pkgName2, pkgVersions, versionEntires, _iteratorNormalCompletion4, _didIteratorError4, _iteratorError4, _iterator4, _step4, _step_value1, version2, parentPkgs, pkg, pkgDestPath, _iteratorNormalCompletion12, _didIteratorError12, _iteratorError12, _iterator12, _step12, parentPkg, parentPkgName, err2, err2;
@@ -337,8 +365,8 @@ var handleDependencies = function() {
337
365
  switch (_state2.label) {
338
366
  case 0:
339
367
  _step_value = _sliced_to_array(_step3.value, 2), pkgName2 = _step_value[0], pkgVersions = _step_value[1];
340
- versionEntires = Object.entries(pkgVersions).sort(function(param, param1) {
341
- var _param = _sliced_to_array(param, 2), v1 = _param[0], p1 = _param[1], _param1 = _sliced_to_array(param1, 2), v2 = _param1[0], p2 = _param1[1];
368
+ versionEntires = Object.entries(pkgVersions).sort(function(param2, param1) {
369
+ var _param = _sliced_to_array(param2, 2), v1 = _param[0], p1 = _param[1], _param1 = _sliced_to_array(param1, 2), v2 = _param1[0], p2 = _param1[1];
342
370
  var _tracedPackages_pkgName_versions_v1, _tracedPackages_pkgName_versions, _tracedPackages_pkgName, _tracedPackages_pkgName_versions_v2, _tracedPackages_pkgName_versions1, _tracedPackages_pkgName1;
343
371
  var shouldHoist1 = (_tracedPackages_pkgName = tracedPackages[pkgName2]) === 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;
344
372
  var shouldHoist2 = (_tracedPackages_pkgName1 = tracedPackages[pkgName2]) === 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;
@@ -380,7 +408,12 @@ var handleDependencies = function() {
380
408
  pkgDestPath = ".modernjs/".concat(pkgName2, "@").concat(version2, "/node_modules/").concat(pkgName2);
381
409
  return [
382
410
  4,
383
- writePackage(pkg, version2, serverRootDir, pkgDestPath)
411
+ writePackage({
412
+ pkg,
413
+ version: version2,
414
+ projectDir: serverRootDir,
415
+ _pkgPath: pkgDestPath
416
+ })
384
417
  ];
385
418
  case 3:
386
419
  _state2.sent();
@@ -488,40 +521,40 @@ var handleDependencies = function() {
488
521
  });
489
522
  };
490
523
  _iterator3 = Object.entries(multiVersionPkgs)[Symbol.iterator]();
491
- _state.label = 15;
492
- case 15:
524
+ _state.label = 17;
525
+ case 17:
493
526
  if (!!(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done))
494
527
  return [
495
528
  3,
496
- 18
529
+ 20
497
530
  ];
498
531
  return [
499
532
  5,
500
533
  _ts_values(_loop())
501
534
  ];
502
- case 16:
535
+ case 18:
503
536
  _state.sent();
504
- _state.label = 17;
505
- case 17:
537
+ _state.label = 19;
538
+ case 19:
506
539
  _iteratorNormalCompletion3 = true;
507
540
  return [
508
541
  3,
509
- 15
542
+ 17
510
543
  ];
511
- case 18:
544
+ case 20:
512
545
  return [
513
546
  3,
514
- 21
547
+ 23
515
548
  ];
516
- case 19:
549
+ case 21:
517
550
  err = _state.sent();
518
551
  _didIteratorError3 = true;
519
552
  _iteratorError3 = err;
520
553
  return [
521
554
  3,
522
- 21
555
+ 23
523
556
  ];
524
- case 20:
557
+ case 22:
525
558
  try {
526
559
  if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
527
560
  _iterator3.return();
@@ -534,7 +567,7 @@ var handleDependencies = function() {
534
567
  return [
535
568
  7
536
569
  ];
537
- case 21:
570
+ case 23:
538
571
  outputPkgPath = path.join(serverRootDir, "package.json");
539
572
  newPkgJson = {
540
573
  name: "".concat(projectPkgJson.name || "modernjs-project", "-prod"),
@@ -545,8 +578,8 @@ var handleDependencies = function() {
545
578
  pkg.name,
546
579
  Object.keys(pkg.versions)[0]
547
580
  ];
548
- })).sort(function(param, param1) {
549
- var _param = _sliced_to_array(param, 1), a = _param[0], _param1 = _sliced_to_array(param1, 1), b = _param1[0];
581
+ })).sort(function(param2, param1) {
582
+ var _param = _sliced_to_array(param2, 1), a = _param[0], _param1 = _sliced_to_array(param1, 1), b = _param1[0];
550
583
  return a.localeCompare(b);
551
584
  }))
552
585
  };
@@ -555,7 +588,7 @@ var handleDependencies = function() {
555
588
  4,
556
589
  fse.writeJSON(outputPkgPath, finalPkgJson)
557
590
  ];
558
- case 22:
591
+ case 24:
559
592
  _state.sent();
560
593
  return [
561
594
  2
@@ -563,7 +596,7 @@ var handleDependencies = function() {
563
596
  }
564
597
  });
565
598
  });
566
- return function handleDependencies2(appDir, serverRootDir, includeEntries, entryFilter, modifyPackageJson) {
599
+ return function handleDependencies2(_) {
567
600
  return _ref.apply(this, arguments);
568
601
  };
569
602
  }();
@@ -5,7 +5,7 @@ import path from "path";
5
5
  import os from "node:os";
6
6
  import { fs as fse } from "@modern-js/utils";
7
7
  import { parseNodeModulePath } from "mlly";
8
- import { nodeFileTrace, resolve } from "@vercel/nft";
8
+ import { nodeFileTrace } from "@vercel/nft";
9
9
  function applyPublicCondition(pkg) {
10
10
  var _pkg_publishConfig;
11
11
  if (pkg === null || pkg === void 0 ? void 0 : (_pkg_publishConfig = pkg.publishConfig) === null || _pkg_publishConfig === void 0 ? void 0 : _pkg_publishConfig.exports) {
@@ -14,11 +14,12 @@ function applyPublicCondition(pkg) {
14
14
  }
15
15
  }
16
16
  var writePackage = function() {
17
- var _ref = _async_to_generator(function(pkg, version, projectDir, _pkgPath) {
18
- var pkgPath, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, src, subpath, dest, dirname, subpath1, dest1, dirname1, err, pkgJSON, packageJsonPath;
17
+ var _ref = _async_to_generator(function(options) {
18
+ var pkg, version, projectDir, _pkgPath, pkgPath, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, src, subpath, dest, dirname, subpath1, dest1, dirname1, err, pkgJSON, packageJsonPath;
19
19
  return _ts_generator(this, function(_state) {
20
20
  switch (_state.label) {
21
21
  case 0:
22
+ pkg = options.pkg, version = options.version, projectDir = options.projectDir, _pkgPath = options._pkgPath;
22
23
  pkgPath = _pkgPath || pkg.name;
23
24
  _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
24
25
  _state.label = 1;
@@ -133,7 +134,7 @@ var writePackage = function() {
133
134
  }
134
135
  });
135
136
  });
136
- return function writePackage2(pkg, version, projectDir, _pkgPath) {
137
+ return function writePackage2(options) {
137
138
  return _ref.apply(this, arguments);
138
139
  };
139
140
  }();
@@ -318,15 +319,20 @@ var findPackageParents = function(pkg, version, tracedFiles) {
318
319
  return tracedFiles[path2];
319
320
  });
320
321
  var parentPkgs = _to_consumable_array(new Set(versionFiles.flatMap(function(file) {
321
- return file.parents.map(function(parentPath) {
322
- var parentFile = tracedFiles[parentPath];
323
- if (!parentFile || parentFile.pkgName === pkg.name) {
324
- return null;
325
- }
326
- return "".concat(parentFile.pkgName, "@").concat(parentFile.pkgVersion);
327
- }).filter(Boolean);
322
+ return (
323
+ // 因为支持 copyWholePackage 配置,并不是所有的文件都会被复制的
324
+ file === null || file === void 0 ? void 0 : file.parents.map(function(parentPath) {
325
+ var parentFile = tracedFiles[parentPath];
326
+ if (!parentFile || parentFile.pkgName === pkg.name) {
327
+ return null;
328
+ }
329
+ return "".concat(parentFile.pkgName, "@").concat(parentFile.pkgVersion);
330
+ }).filter(Boolean)
331
+ );
328
332
  })));
329
- return parentPkgs;
333
+ return parentPkgs.filter(function(parentPkg) {
334
+ return parentPkg;
335
+ });
330
336
  };
331
337
  var traceFiles = function() {
332
338
  var _ref = _async_to_generator(function(entryFiles, serverRootDir) {
@@ -341,33 +347,7 @@ var traceFiles = function() {
341
347
  nodeFileTrace(entryFiles, {
342
348
  base,
343
349
  processCwd: serverRootDir,
344
- resolve: function() {
345
- var _ref2 = _async_to_generator(function(id, parent, job, isCjs) {
346
- return _ts_generator(this, function(_state2) {
347
- if (id.startsWith("@modern-js/prod-server")) {
348
- return [
349
- 2,
350
- require.resolve(id, {
351
- paths: [
352
- require.resolve("@modern-js/app-tools")
353
- ]
354
- })
355
- ];
356
- } else {
357
- return [
358
- 2,
359
- resolve(id, parent, job, isCjs)
360
- ];
361
- }
362
- return [
363
- 2
364
- ];
365
- });
366
- });
367
- return function(id, parent, job, isCjs) {
368
- return _ref2.apply(this, arguments);
369
- };
370
- }()
350
+ cache: /* @__PURE__ */ Object.create(null)
371
351
  })
372
352
  ];
373
353
  case 1:
@@ -271,9 +271,13 @@ var createNetlifyPreset = function(appContext, modernConfig, needModernServer) {
271
271
  }
272
272
  return [
273
273
  4,
274
- handleDependencies(appDirectory, funcsDirectory, [
275
- require.resolve("@modern-js/prod-server")
276
- ])
274
+ handleDependencies({
275
+ appDir: appDirectory,
276
+ serverRootDir: funcsDirectory,
277
+ includeEntries: [
278
+ require.resolve("@modern-js/prod-server")
279
+ ]
280
+ })
277
281
  ];
278
282
  case 3:
279
283
  _state.sent();
@@ -104,9 +104,14 @@ var createNodePreset = function(appContext, config) {
104
104
  };
105
105
  return [
106
106
  4,
107
- handleDependencies(appDirectory, outputDirectory, [
108
- require.resolve("@modern-js/prod-server")
109
- ], filter)
107
+ handleDependencies({
108
+ appDir: appDirectory,
109
+ serverRootDir: outputDirectory,
110
+ includeEntries: [
111
+ require.resolve("@modern-js/prod-server")
112
+ ],
113
+ entryFilter: filter
114
+ })
110
115
  ];
111
116
  case 1:
112
117
  _state.sent();
@@ -205,9 +205,13 @@ var createVercelPreset = function(appContext, modernConfig, needModernServer) {
205
205
  }
206
206
  return [
207
207
  4,
208
- handleDependencies(appDirectory, funcsDirectory, [
209
- require.resolve("@modern-js/prod-server")
210
- ])
208
+ handleDependencies({
209
+ appDir: appDirectory,
210
+ serverRootDir: funcsDirectory,
211
+ includeEntries: [
212
+ require.resolve("@modern-js/prod-server")
213
+ ]
214
+ })
211
215
  ];
212
216
  case 1:
213
217
  _state.sent();
@@ -2,8 +2,8 @@ import path from "node:path";
2
2
  import { fs as fse, pkgUp, semver } from "@modern-js/utils";
3
3
  import { readPackageJSON } from "pkg-types";
4
4
  import { parseNodeModulePath } from "mlly";
5
- import { linkPackage, writePackage, isFile, findEntryFiles, traceFiles, findPackageParents, resolveTracedPath } from "./utils";
6
- const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFilter, modifyPackageJson) => {
5
+ import { linkPackage, writePackage, isFile, findEntryFiles, traceFiles as defaultTraceFiles, findPackageParents, resolveTracedPath, readDirRecursive } from "./utils";
6
+ const handleDependencies = async ({ appDir, serverRootDir, includeEntries, traceFiles = defaultTraceFiles, entryFilter, modifyPackageJson, copyWholePackage }) => {
7
7
  const base = "/";
8
8
  const entryFiles = await findEntryFiles(serverRootDir, entryFilter);
9
9
  const fileTrace = await traceFiles(entryFiles.concat(includeEntries), serverRootDir, base);
@@ -100,9 +100,17 @@ const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFi
100
100
  }
101
101
  tracedPackage.versions[pkgJSON.version] = tracedPackageVersion;
102
102
  }
103
- tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath && tracedPackageVersion.files.push(tracedFile.path);
104
103
  tracedFile.pkgName = pkgName;
105
104
  tracedFile.pkgVersion = pkgJSON.version;
105
+ const shouldCopyWholePackage = copyWholePackage === null || copyWholePackage === void 0 ? void 0 : copyWholePackage(pkgName);
106
+ if (tracedFile.path.startsWith(tracedFile.pkgPath) && tracedPackageVersion.path === tracedFile.pkgPath) {
107
+ if (shouldCopyWholePackage) {
108
+ const allFiles = await readDirRecursive(tracedFile.pkgPath);
109
+ tracedPackageVersion.files.push(...allFiles);
110
+ } else {
111
+ tracedPackageVersion.files.push(tracedFile.path);
112
+ }
113
+ }
106
114
  }
107
115
  const multiVersionPkgs = {};
108
116
  const singleVersionPackages = [];
@@ -120,7 +128,11 @@ const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFi
120
128
  await Promise.all(singleVersionPackages.map((pkgName) => {
121
129
  const pkg = tracedPackages[pkgName];
122
130
  const version = Object.keys(pkg.versions)[0];
123
- return writePackage(pkg, version, serverRootDir);
131
+ return writePackage({
132
+ pkg,
133
+ version,
134
+ projectDir: serverRootDir
135
+ });
124
136
  }));
125
137
  const projectPkgJson = await readPackageJSON(serverRootDir).catch(() => ({}));
126
138
  for (const [pkgName, pkgVersions] of Object.entries(multiVersionPkgs)) {
@@ -147,7 +159,12 @@ const handleDependencies = async (appDir, serverRootDir, includeEntries, entryFi
147
159
  for (const [version, parentPkgs] of versionEntires) {
148
160
  const pkg = tracedPackages[pkgName];
149
161
  const pkgDestPath = `.modernjs/${pkgName}@${version}/node_modules/${pkgName}`;
150
- await writePackage(pkg, version, serverRootDir, pkgDestPath);
162
+ await writePackage({
163
+ pkg,
164
+ version,
165
+ projectDir: serverRootDir,
166
+ _pkgPath: pkgDestPath
167
+ });
151
168
  await linkPackage(pkgDestPath, `${pkgName}`, serverRootDir);
152
169
  for (const parentPkg of parentPkgs) {
153
170
  const parentPkgName = parentPkg.replace(/@[^@]+$/, "");
@@ -2,7 +2,7 @@ import path from "path";
2
2
  import os from "node:os";
3
3
  import { fs as fse } from "@modern-js/utils";
4
4
  import { parseNodeModulePath } from "mlly";
5
- import { nodeFileTrace, resolve } from "@vercel/nft";
5
+ import { nodeFileTrace } from "@vercel/nft";
6
6
  function applyPublicCondition(pkg) {
7
7
  var _pkg_publishConfig;
8
8
  if (pkg === null || pkg === void 0 ? void 0 : (_pkg_publishConfig = pkg.publishConfig) === null || _pkg_publishConfig === void 0 ? void 0 : _pkg_publishConfig.exports) {
@@ -10,7 +10,8 @@ function applyPublicCondition(pkg) {
10
10
  pkg.exports = pkg === null || pkg === void 0 ? void 0 : (_pkg_publishConfig1 = pkg.publishConfig) === null || _pkg_publishConfig1 === void 0 ? void 0 : _pkg_publishConfig1.exports;
11
11
  }
12
12
  }
13
- const writePackage = async (pkg, version, projectDir, _pkgPath) => {
13
+ const writePackage = async (options) => {
14
+ const { pkg, version, projectDir, _pkgPath } = options;
14
15
  const pkgPath = _pkgPath || pkg.name;
15
16
  for (const src of pkg.versions[version].files) {
16
17
  if (src.includes("node_modules")) {
@@ -84,31 +85,24 @@ const findEntryFiles = async (rootDir, entryFilter) => {
84
85
  const findPackageParents = (pkg, version, tracedFiles) => {
85
86
  const versionFiles = pkg.versions[version].files.map((path2) => tracedFiles[path2]);
86
87
  const parentPkgs = [
87
- ...new Set(versionFiles.flatMap((file) => file.parents.map((parentPath) => {
88
- const parentFile = tracedFiles[parentPath];
89
- if (!parentFile || parentFile.pkgName === pkg.name) {
90
- return null;
91
- }
92
- return `${parentFile.pkgName}@${parentFile.pkgVersion}`;
93
- }).filter(Boolean)))
88
+ ...new Set(versionFiles.flatMap((file) => (
89
+ // 因为支持 copyWholePackage 配置,并不是所有的文件都会被复制的
90
+ file === null || file === void 0 ? void 0 : file.parents.map((parentPath) => {
91
+ const parentFile = tracedFiles[parentPath];
92
+ if (!parentFile || parentFile.pkgName === pkg.name) {
93
+ return null;
94
+ }
95
+ return `${parentFile.pkgName}@${parentFile.pkgVersion}`;
96
+ }).filter(Boolean)
97
+ )))
94
98
  ];
95
- return parentPkgs;
99
+ return parentPkgs.filter((parentPkg) => parentPkg);
96
100
  };
97
101
  const traceFiles = async (entryFiles, serverRootDir, base = "/") => {
98
102
  return await nodeFileTrace(entryFiles, {
99
103
  base,
100
104
  processCwd: serverRootDir,
101
- resolve: async (id, parent, job, isCjs) => {
102
- if (id.startsWith("@modern-js/prod-server")) {
103
- return require.resolve(id, {
104
- paths: [
105
- require.resolve("@modern-js/app-tools")
106
- ]
107
- });
108
- } else {
109
- return resolve(id, parent, job, isCjs);
110
- }
111
- }
105
+ cache: /* @__PURE__ */ Object.create(null)
112
106
  });
113
107
  };
114
108
  const resolveTracedPath = async (base, p) => fse.realpath(path.resolve(base, p));
@@ -91,9 +91,13 @@ const createNetlifyPreset = (appContext, modernConfig, needModernServer) => {
91
91
  if (!needModernServer) {
92
92
  return;
93
93
  }
94
- await handleDependencies(appDirectory, funcsDirectory, [
95
- require.resolve("@modern-js/prod-server")
96
- ]);
94
+ await handleDependencies({
95
+ appDir: appDirectory,
96
+ serverRootDir: funcsDirectory,
97
+ includeEntries: [
98
+ require.resolve("@modern-js/prod-server")
99
+ ]
100
+ });
97
101
  }
98
102
  };
99
103
  };
@@ -45,9 +45,14 @@ const createNodePreset = (appContext, config) => {
45
45
  const filter = (filePath) => {
46
46
  return !filePath.startsWith(staticDirectory);
47
47
  };
48
- await handleDependencies(appDirectory, outputDirectory, [
49
- require.resolve("@modern-js/prod-server")
50
- ], filter);
48
+ await handleDependencies({
49
+ appDir: appDirectory,
50
+ serverRootDir: outputDirectory,
51
+ includeEntries: [
52
+ require.resolve("@modern-js/prod-server")
53
+ ],
54
+ entryFilter: filter
55
+ });
51
56
  }
52
57
  };
53
58
  };
@@ -103,9 +103,13 @@ const createVercelPreset = (appContext, modernConfig, needModernServer) => {
103
103
  if (!needModernServer) {
104
104
  return;
105
105
  }
106
- await handleDependencies(appDirectory, funcsDirectory, [
107
- require.resolve("@modern-js/prod-server")
108
- ]);
106
+ await handleDependencies({
107
+ appDir: appDirectory,
108
+ serverRootDir: funcsDirectory,
109
+ includeEntries: [
110
+ require.resolve("@modern-js/prod-server")
111
+ ]
112
+ });
109
113
  }
110
114
  };
111
115
  };
@@ -1,2 +1,11 @@
1
1
  import type { PackageJson } from 'pkg-types';
2
- export declare const handleDependencies: (appDir: string, serverRootDir: string, includeEntries: string[], entryFilter?: ((filePath: string) => boolean) | undefined, modifyPackageJson?: ((pkgJson: PackageJson) => PackageJson) | undefined) => Promise<void>;
2
+ import { traceFiles as defaultTraceFiles } from './utils';
3
+ export declare const handleDependencies: ({ appDir, serverRootDir, includeEntries, traceFiles, entryFilter, modifyPackageJson, copyWholePackage, }: {
4
+ appDir: string;
5
+ serverRootDir: string;
6
+ includeEntries: string[];
7
+ traceFiles?: ((entryFiles: string[], serverRootDir: string, base?: string) => Promise<import("@vercel/nft").NodeFileTraceResult>) | undefined;
8
+ entryFilter?: ((filePath: string) => boolean) | undefined;
9
+ modifyPackageJson?: ((pkgJson: PackageJson) => PackageJson) | undefined;
10
+ copyWholePackage?: ((pkgName: string) => boolean) | undefined;
11
+ }) => Promise<void>;
@@ -17,7 +17,13 @@ export type TracedFile = {
17
17
  pkgName: string;
18
18
  pkgVersion?: string;
19
19
  };
20
- export declare const writePackage: (pkg: TracedPackage, version: string, projectDir: string, _pkgPath?: string) => Promise<void>;
20
+ interface WritePackageOptions {
21
+ pkg: TracedPackage;
22
+ version: string;
23
+ projectDir: string;
24
+ _pkgPath?: string;
25
+ }
26
+ export declare const writePackage: (options: WritePackageOptions) => Promise<void>;
21
27
  export declare const linkPackage: (from: string, to: string, projectRootDir: string) => Promise<void>;
22
28
  interface ReadDirOptions {
23
29
  filter?: (filePath: string) => boolean;
package/package.json CHANGED
@@ -15,7 +15,7 @@
15
15
  "modern",
16
16
  "modern.js"
17
17
  ],
18
- "version": "2.53.1-alpha.2",
18
+ "version": "2.53.1-alpha.4",
19
19
  "jsnext:source": "./src/index.ts",
20
20
  "types": "./dist/types/index.d.ts",
21
21
  "main": "./dist/cjs/index.js",
@@ -63,6 +63,9 @@
63
63
  ],
64
64
  "server": [
65
65
  "./dist/types/exports/server.d.ts"
66
+ ],
67
+ "deploy": [
68
+ "./dist/types/plugins/deploy/exports.d.ts"
66
69
  ]
67
70
  }
68
71
  },
@@ -86,19 +89,19 @@
86
89
  "pkg-types": "^1.1.0",
87
90
  "std-env": "^3.7.0",
88
91
  "@modern-js/plugin-data-loader": "2.53.0",
92
+ "@modern-js/core": "2.53.0",
89
93
  "@modern-js/node-bundle-require": "2.53.0",
90
- "@modern-js/plugin": "2.53.0",
91
94
  "@modern-js/prod-server": "2.53.0",
92
- "@modern-js/server": "2.53.0",
95
+ "@modern-js/plugin-i18n": "2.53.0",
96
+ "@modern-js/plugin": "2.53.0",
93
97
  "@modern-js/server-core": "2.53.0",
94
- "@modern-js/core": "2.53.0",
95
- "@modern-js/server-utils": "2.53.0",
96
- "@modern-js/uni-builder": "2.53.0",
97
98
  "@modern-js/types": "2.53.0",
99
+ "@modern-js/rsbuild-plugin-esbuild": "2.53.0",
98
100
  "@modern-js/utils": "2.53.0",
99
- "@modern-js/plugin-i18n": "2.53.0",
100
- "@modern-js/plugin-lint": "2.53.0",
101
- "@modern-js/rsbuild-plugin-esbuild": "2.53.0"
101
+ "@modern-js/server": "2.53.0",
102
+ "@modern-js/server-utils": "2.53.0",
103
+ "@modern-js/uni-builder": "2.53.0",
104
+ "@modern-js/plugin-lint": "2.53.0"
102
105
  },
103
106
  "devDependencies": {
104
107
  "@rsbuild/plugin-swc": "0.7.3",