@vercel/microfrontends 0.13.0 → 0.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/README.md +3 -3
  2. package/dist/bin/cli.cjs +85 -60
  3. package/dist/config/client.d.ts +1 -1
  4. package/dist/config.cjs.map +1 -1
  5. package/dist/config.d.ts +1 -1
  6. package/dist/config.js.map +1 -1
  7. package/dist/{index-83133f2d.d.ts → index-bf67a461.d.ts} +3 -10
  8. package/dist/next/client.cjs +1 -1
  9. package/dist/next/client.cjs.map +1 -1
  10. package/dist/next/client.js +1 -1
  11. package/dist/next/client.js.map +1 -1
  12. package/dist/next/endpoints.cjs.map +1 -1
  13. package/dist/next/endpoints.d.ts +1 -1
  14. package/dist/next/endpoints.js.map +1 -1
  15. package/dist/next/middleware.cjs +0 -29
  16. package/dist/next/middleware.cjs.map +1 -1
  17. package/dist/next/middleware.js +0 -29
  18. package/dist/next/middleware.js.map +1 -1
  19. package/dist/{types-a995174e.d.ts → types-a29d224a.d.ts} +1 -7
  20. package/dist/{types-15b7f215.d.ts → types-cfe3308b.d.ts} +1 -1
  21. package/dist/types-fc30696d.d.ts +11 -0
  22. package/dist/utils/mfe-port.cjs +70 -56
  23. package/dist/utils/mfe-port.cjs.map +1 -1
  24. package/dist/utils/mfe-port.js +67 -53
  25. package/dist/utils/mfe-port.js.map +1 -1
  26. package/dist/v2/config.cjs +0 -14
  27. package/dist/v2/config.cjs.map +1 -1
  28. package/dist/v2/config.d.ts +4 -3
  29. package/dist/v2/config.js +0 -14
  30. package/dist/v2/config.js.map +1 -1
  31. package/dist/v2/microfrontends/server.cjs +68 -54
  32. package/dist/v2/microfrontends/server.cjs.map +1 -1
  33. package/dist/v2/microfrontends/server.d.ts +6 -5
  34. package/dist/v2/microfrontends/server.js +65 -51
  35. package/dist/v2/microfrontends/server.js.map +1 -1
  36. package/dist/v2/microfrontends.cjs +0 -14
  37. package/dist/v2/microfrontends.cjs.map +1 -1
  38. package/dist/v2/microfrontends.d.ts +4 -3
  39. package/dist/v2/microfrontends.js +0 -14
  40. package/dist/v2/microfrontends.js.map +1 -1
  41. package/dist/v2/next/client.cjs +1 -1
  42. package/dist/v2/next/client.cjs.map +1 -1
  43. package/dist/v2/next/client.js +1 -1
  44. package/dist/v2/next/client.js.map +1 -1
  45. package/dist/v2/next/config.cjs +106 -60
  46. package/dist/v2/next/config.cjs.map +1 -1
  47. package/dist/v2/next/config.js +103 -57
  48. package/dist/v2/next/config.js.map +1 -1
  49. package/dist/v2/next/endpoints.cjs.map +1 -1
  50. package/dist/v2/next/endpoints.d.ts +13 -2
  51. package/dist/v2/next/endpoints.js.map +1 -1
  52. package/dist/v2/next/middleware.cjs +10 -54
  53. package/dist/v2/next/middleware.cjs.map +1 -1
  54. package/dist/v2/next/middleware.d.ts +7 -2
  55. package/dist/v2/next/middleware.js +10 -54
  56. package/dist/v2/next/middleware.js.map +1 -1
  57. package/dist/v2/next/testing.cjs +992 -0
  58. package/dist/v2/next/testing.cjs.map +1 -0
  59. package/dist/v2/next/testing.d.ts +55 -0
  60. package/dist/v2/next/testing.js +961 -0
  61. package/dist/v2/next/testing.js.map +1 -0
  62. package/dist/v2/overrides.d.ts +3 -3
  63. package/dist/v2/routing.cjs +19 -0
  64. package/dist/v2/routing.cjs.map +1 -0
  65. package/dist/v2/routing.d.ts +26 -0
  66. package/dist/v2/routing.js +1 -0
  67. package/dist/v2/routing.js.map +1 -0
  68. package/dist/v2/schema.cjs.map +1 -1
  69. package/dist/v2/schema.d.ts +1 -1
  70. package/dist/validation.cjs +0 -4
  71. package/dist/validation.cjs.map +1 -1
  72. package/dist/validation.d.ts +0 -6
  73. package/dist/validation.js +0 -4
  74. package/dist/validation.js.map +1 -1
  75. package/package.json +20 -5
  76. package/schema/schema-v2.json +0 -4
@@ -33,8 +33,8 @@ __export(server_exports, {
33
33
  MicrofrontendsServer: () => MicrofrontendsServer
34
34
  });
35
35
  module.exports = __toCommonJS(server_exports);
36
- var import_node_fs6 = __toESM(require("fs"), 1);
37
- var import_node_path7 = require("path");
36
+ var import_node_fs7 = __toESM(require("fs"), 1);
37
+ var import_node_path8 = require("path");
38
38
 
39
39
  // src/config-v2/overrides/constants.ts
40
40
  var OVERRIDES_COOKIE_PREFIX = "vercel-micro-frontends-override";
@@ -381,19 +381,6 @@ var validateConfigDefaultApplication = (applicationConfigsById) => {
381
381
  );
382
382
  }
383
383
  };
384
- var validateConfigOptions = (options) => {
385
- var _a;
386
- if ((_a = options == null ? void 0 : options.vercel) == null ? void 0 : _a.previewDeploymentSuffix) {
387
- if (!/^[a-zA-Z]{2,}\.[a-zA-Z]{2,}$/.test(
388
- options.vercel.previewDeploymentSuffix
389
- )) {
390
- throw new MicrofrontendError(
391
- `Invalid preview deployment suffix: ${options.vercel.previewDeploymentSuffix}. Should have be formatted like "vercel.app".`,
392
- { type: "config", subtype: "invalid_preview_deployment_suffix" }
393
- );
394
- }
395
- }
396
- };
397
384
 
398
385
  // src/config-v2/microfrontends-config/isomorphic/utils/generate-asset-prefix.ts
399
386
  var PREFIX = "vc-ap";
@@ -612,7 +599,6 @@ var MicrofrontendConfigIsomorphic = class {
612
599
  validateConfigPaths(c.applications);
613
600
  validateConfigDefaultApplication(c.applications);
614
601
  }
615
- validateConfigOptions(c.options);
616
602
  return c;
617
603
  }
618
604
  static fromEnv({
@@ -888,29 +874,39 @@ function findPackagePath(opts) {
888
874
  // src/config-v2/microfrontends/utils/find-default-package.ts
889
875
  var import_node_path3 = require("path");
890
876
  var import_node_fs3 = require("fs");
877
+ var import_jsonc_parser2 = require("jsonc-parser");
891
878
  var import_fast_glob2 = __toESM(require("fast-glob"), 1);
879
+
880
+ // src/config-v2/constants.ts
881
+ var CONFIGURATION_FILENAMES = [
882
+ "microfrontends.jsonc",
883
+ "microfrontends.json"
884
+ ];
885
+
886
+ // src/config-v2/microfrontends/utils/find-default-package.ts
892
887
  var configCache2 = {};
893
888
  function findDefaultMicrofrontendsPackages({
894
889
  repositoryRoot,
895
890
  applicationName
896
891
  }) {
897
892
  try {
898
- const microfrontendsJsonPaths = import_fast_glob2.default.globSync("**/microfrontends.json", {
899
- cwd: repositoryRoot,
900
- absolute: true,
901
- onlyFiles: true,
902
- followSymbolicLinks: false,
903
- ignore: ["**/node_modules/**", "**/.git/**"]
904
- });
893
+ const microfrontendsJsonPaths = import_fast_glob2.default.globSync(
894
+ `**/{${CONFIGURATION_FILENAMES.join(",")}}`,
895
+ {
896
+ cwd: repositoryRoot,
897
+ absolute: true,
898
+ onlyFiles: true,
899
+ followSymbolicLinks: false,
900
+ ignore: ["**/node_modules/**", "**/.git/**"]
901
+ }
902
+ );
905
903
  const matchingPaths = [];
906
904
  for (const microfrontendsJsonPath of microfrontendsJsonPaths) {
907
905
  const microfrontendsJsonContent = (0, import_node_fs3.readFileSync)(
908
906
  microfrontendsJsonPath,
909
907
  "utf-8"
910
908
  );
911
- const microfrontendsJson = JSON.parse(
912
- microfrontendsJsonContent
913
- );
909
+ const microfrontendsJson = (0, import_jsonc_parser2.parse)(microfrontendsJsonContent);
914
910
  if (isMainConfig(microfrontendsJson) && microfrontendsJson.applications[applicationName]) {
915
911
  matchingPaths.push(microfrontendsJsonPath);
916
912
  }
@@ -940,7 +936,7 @@ function findDefaultMicrofrontendsPackage(opts) {
940
936
  const result = findDefaultMicrofrontendsPackages(opts);
941
937
  if (!result) {
942
938
  throw new Error(
943
- `Error trying to resolve the main microfrontends.json configuration`
939
+ `Error trying to resolve the main microfrontends configuration`
944
940
  );
945
941
  }
946
942
  configCache2[cacheKey] = result;
@@ -992,8 +988,21 @@ function findPackageRoot(startDir) {
992
988
  );
993
989
  }
994
990
 
991
+ // src/config-v2/microfrontends/utils/find-config.ts
992
+ var import_node_fs6 = __toESM(require("fs"), 1);
993
+ var import_node_path6 = require("path");
994
+ function findConfig({ dir }) {
995
+ for (const filename of CONFIGURATION_FILENAMES) {
996
+ const maybeConfig = (0, import_node_path6.join)(dir, filename);
997
+ if (import_node_fs6.default.existsSync(maybeConfig)) {
998
+ return maybeConfig;
999
+ }
1000
+ }
1001
+ return null;
1002
+ }
1003
+
995
1004
  // src/config-v2/microfrontends/server/utils/get-output-file-path.ts
996
- var import_node_path6 = __toESM(require("path"), 1);
1005
+ var import_node_path7 = __toESM(require("path"), 1);
997
1006
 
998
1007
  // src/config-v2/microfrontends/server/constants.ts
999
1008
  var MFE_CONFIG_DEFAULT_FILE_PATH = "microfrontends";
@@ -1007,17 +1016,17 @@ function isVercel() {
1007
1016
  // src/config-v2/microfrontends/server/utils/get-output-file-path.ts
1008
1017
  function getOutputFilePath() {
1009
1018
  if (isVercel()) {
1010
- return import_node_path6.default.join(
1019
+ return import_node_path7.default.join(
1011
1020
  ".vercel",
1012
1021
  MFE_CONFIG_DEFAULT_FILE_PATH,
1013
1022
  MFE_CONFIG_DEFAULT_FILE_NAME
1014
1023
  );
1015
1024
  }
1016
- return import_node_path6.default.join(MFE_CONFIG_DEFAULT_FILE_PATH, MFE_CONFIG_DEFAULT_FILE_NAME);
1025
+ return import_node_path7.default.join(MFE_CONFIG_DEFAULT_FILE_PATH, MFE_CONFIG_DEFAULT_FILE_NAME);
1017
1026
  }
1018
1027
 
1019
1028
  // src/config-v2/microfrontends/server/validation.ts
1020
- var import_jsonc_parser2 = require("jsonc-parser");
1029
+ var import_jsonc_parser3 = require("jsonc-parser");
1021
1030
  var import_ajv = require("ajv");
1022
1031
 
1023
1032
  // src/config/errors.ts
@@ -1170,10 +1179,6 @@ var schema_v2_default = {
1170
1179
  VercelOptions: {
1171
1180
  type: "object",
1172
1181
  properties: {
1173
- previewDeploymentSuffix: {
1174
- type: "string",
1175
- description: "If your team uses a custom Preview Deployment Suffix, please specify it here. See https://vercel.com/docs/deployments/preview-deployment-suffix. The default is `vercel.app`."
1176
- },
1177
1182
  teamSlug: {
1178
1183
  type: "string",
1179
1184
  description: "Team slug for the Vercel team"
@@ -1367,7 +1372,7 @@ var SCHEMA = schema_v2_default;
1367
1372
 
1368
1373
  // src/config-v2/microfrontends/server/validation.ts
1369
1374
  function validateSchema(configString) {
1370
- const parsedConfig = (0, import_jsonc_parser2.parse)(configString);
1375
+ const parsedConfig = (0, import_jsonc_parser3.parse)(configString);
1371
1376
  const ajv = new import_ajv.Ajv();
1372
1377
  const validate = ajv.compile(SCHEMA);
1373
1378
  const isValid = validate(parsedConfig);
@@ -1389,8 +1394,8 @@ var MicrofrontendsServer = class extends Microfrontends {
1389
1394
  pretty: true
1390
1395
  }) {
1391
1396
  const outputPath = getOutputFilePath();
1392
- import_node_fs6.default.mkdirSync((0, import_node_path7.dirname)(outputPath), { recursive: true });
1393
- import_node_fs6.default.writeFileSync(
1397
+ import_node_fs7.default.mkdirSync((0, import_node_path8.dirname)(outputPath), { recursive: true });
1398
+ import_node_fs7.default.writeFileSync(
1394
1399
  outputPath,
1395
1400
  JSON.stringify(
1396
1401
  this.config.toSchemaJson(),
@@ -1453,8 +1458,8 @@ var MicrofrontendsServer = class extends Microfrontends {
1453
1458
  return config;
1454
1459
  }
1455
1460
  /**
1456
- * Looks up the configuration by inferring the package root and looking for a microfrontends.json file. If a file is not found,
1457
- * it will look for a package in the repository with a microfrontends.json file that contains the current application
1461
+ * Looks up the configuration by inferring the package root and looking for a microfrontends config file. If a file is not found,
1462
+ * it will look for a package in the repository with a microfrontends file that contains the current application
1458
1463
  * and use that configuration.
1459
1464
  *
1460
1465
  * This can return either a Child or Main configuration.
@@ -1476,16 +1481,16 @@ var MicrofrontendsServer = class extends Microfrontends {
1476
1481
  }
1477
1482
  try {
1478
1483
  const packageRoot = findPackageRoot(directory);
1479
- const packageJsonPath = (0, import_node_path7.join)(packageRoot, "package.json");
1484
+ const packageJsonPath = (0, import_node_path8.join)(packageRoot, "package.json");
1480
1485
  const packageJson = JSON.parse(
1481
- import_node_fs6.default.readFileSync(packageJsonPath, "utf-8")
1486
+ import_node_fs7.default.readFileSync(packageJsonPath, "utf-8")
1482
1487
  );
1483
1488
  if (!packageJson.name) {
1484
1489
  throw new Error(`No name found in package.json at ${packageJsonPath}`);
1485
1490
  }
1486
1491
  const configMeta = meta ?? { fromApp: packageJson.name };
1487
- const maybeConfig = (0, import_node_path7.join)(packageRoot, "microfrontends.json");
1488
- if (import_node_fs6.default.existsSync(maybeConfig)) {
1492
+ const maybeConfig = findConfig({ dir: packageRoot });
1493
+ if (maybeConfig) {
1489
1494
  return MicrofrontendsServer.fromFile({
1490
1495
  filePath: maybeConfig,
1491
1496
  cookies,
@@ -1500,12 +1505,15 @@ var MicrofrontendsServer = class extends Microfrontends {
1500
1505
  repositoryRoot,
1501
1506
  applicationName: packageJson.name
1502
1507
  });
1503
- return MicrofrontendsServer.fromFile({
1504
- filePath: (0, import_node_path7.join)(defaultPackage, "microfrontends.json"),
1505
- cookies,
1506
- meta: configMeta,
1507
- options
1508
- });
1508
+ const maybeConfigFromDefault = findConfig({ dir: defaultPackage });
1509
+ if (maybeConfigFromDefault) {
1510
+ return MicrofrontendsServer.fromFile({
1511
+ filePath: maybeConfigFromDefault,
1512
+ cookies,
1513
+ meta: configMeta,
1514
+ options
1515
+ });
1516
+ }
1509
1517
  }
1510
1518
  throw new Error("Unable to infer");
1511
1519
  } catch (e) {
@@ -1525,7 +1533,7 @@ var MicrofrontendsServer = class extends Microfrontends {
1525
1533
  options
1526
1534
  }) {
1527
1535
  try {
1528
- const configJson = import_node_fs6.default.readFileSync(filePath, "utf-8");
1536
+ const configJson = import_node_fs7.default.readFileSync(filePath, "utf-8");
1529
1537
  const config = MicrofrontendsServer.validate(configJson);
1530
1538
  if (!isMainConfig(config) && (options == null ? void 0 : options.resolveMainConfig)) {
1531
1539
  const repositoryRoot = findRepositoryRoot();
@@ -1541,9 +1549,15 @@ var MicrofrontendsServer = class extends Microfrontends {
1541
1549
  { type: "config", subtype: "not_found" }
1542
1550
  );
1543
1551
  }
1544
- const mainConfigPath = (0, import_node_path7.join)(packagePath, "microfrontends.json");
1552
+ const maybeConfig = findConfig({ dir: packagePath });
1553
+ if (!maybeConfig) {
1554
+ throw new MicrofrontendError(
1555
+ `Could not find microfrontends configuration in ${packagePath}`,
1556
+ { type: "config", subtype: "not_found" }
1557
+ );
1558
+ }
1545
1559
  return MicrofrontendsServer.fromMainConfigFile({
1546
- filePath: mainConfigPath,
1560
+ filePath: maybeConfig,
1547
1561
  overrides: cookies ? parseOverrides(cookies) : void 0
1548
1562
  });
1549
1563
  }
@@ -1567,7 +1581,7 @@ var MicrofrontendsServer = class extends Microfrontends {
1567
1581
  overrides
1568
1582
  }) {
1569
1583
  try {
1570
- const config = import_node_fs6.default.readFileSync(filePath, "utf-8");
1584
+ const config = import_node_fs7.default.readFileSync(filePath, "utf-8");
1571
1585
  const validatedConfig = MicrofrontendsServer.validate(config);
1572
1586
  if (!isMainConfig(validatedConfig)) {
1573
1587
  throw new MicrofrontendError(