@vercel/microfrontends 1.0.1-canary.5 → 1.1.1-canary.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 (59) hide show
  1. package/dist/bin/cli.cjs +128 -53
  2. package/dist/config.cjs +80 -16
  3. package/dist/config.cjs.map +1 -1
  4. package/dist/config.d.ts +4 -4
  5. package/dist/config.js +80 -16
  6. package/dist/config.js.map +1 -1
  7. package/dist/experimental/sveltekit.cjs +116 -49
  8. package/dist/experimental/sveltekit.cjs.map +1 -1
  9. package/dist/experimental/sveltekit.js +116 -49
  10. package/dist/experimental/sveltekit.js.map +1 -1
  11. package/dist/experimental/vite.cjs +116 -49
  12. package/dist/experimental/vite.cjs.map +1 -1
  13. package/dist/experimental/vite.js +116 -49
  14. package/dist/experimental/vite.js.map +1 -1
  15. package/dist/{index-2b59c627.d.ts → index-7e69650e.d.ts} +11 -5
  16. package/dist/microfrontends/server.cjs +116 -49
  17. package/dist/microfrontends/server.cjs.map +1 -1
  18. package/dist/microfrontends/server.d.ts +4 -4
  19. package/dist/microfrontends/server.js +116 -49
  20. package/dist/microfrontends/server.js.map +1 -1
  21. package/dist/microfrontends.cjs +80 -16
  22. package/dist/microfrontends.cjs.map +1 -1
  23. package/dist/microfrontends.d.ts +4 -4
  24. package/dist/microfrontends.js +80 -16
  25. package/dist/microfrontends.js.map +1 -1
  26. package/dist/next/config.cjs +133 -56
  27. package/dist/next/config.cjs.map +1 -1
  28. package/dist/next/config.js +133 -56
  29. package/dist/next/config.js.map +1 -1
  30. package/dist/next/endpoints.d.ts +2 -2
  31. package/dist/next/middleware.cjs +90 -16
  32. package/dist/next/middleware.cjs.map +1 -1
  33. package/dist/next/middleware.js +90 -16
  34. package/dist/next/middleware.js.map +1 -1
  35. package/dist/next/testing.cjs +84 -21
  36. package/dist/next/testing.cjs.map +1 -1
  37. package/dist/next/testing.d.ts +4 -4
  38. package/dist/next/testing.js +84 -21
  39. package/dist/next/testing.js.map +1 -1
  40. package/dist/overrides.d.ts +3 -3
  41. package/dist/schema.cjs +23 -0
  42. package/dist/schema.cjs.map +1 -1
  43. package/dist/schema.d.ts +7 -1
  44. package/dist/schema.js +13 -0
  45. package/dist/schema.js.map +1 -1
  46. package/dist/{index-2f78c0ca.d.ts → types-6ee19ccc.d.ts} +40 -9
  47. package/dist/{types-b6d38aea.d.ts → types-73527280.d.ts} +1 -1
  48. package/dist/{types-4ef2bddb.d.ts → types-74e3336c.d.ts} +1 -1
  49. package/dist/utils/mfe-port.cjs +116 -49
  50. package/dist/utils/mfe-port.cjs.map +1 -1
  51. package/dist/utils/mfe-port.js +116 -49
  52. package/dist/utils/mfe-port.js.map +1 -1
  53. package/dist/validation.cjs +36 -33
  54. package/dist/validation.cjs.map +1 -1
  55. package/dist/validation.d.ts +1 -1
  56. package/dist/validation.js +36 -33
  57. package/dist/validation.js.map +1 -1
  58. package/package.json +1 -1
  59. package/schema/schema.json +28 -7
@@ -153,9 +153,7 @@ var schema_default = {
153
153
  description: "Mapping of application names to the routes that they host. Only needs to be defined in the application that owns the primary microfrontend domain"
154
154
  }
155
155
  },
156
- required: [
157
- "applications"
158
- ],
156
+ required: ["applications"],
159
157
  additionalProperties: false
160
158
  },
161
159
  Options: {
@@ -208,7 +206,7 @@ var schema_default = {
208
206
  $ref: "#/definitions/Application"
209
207
  },
210
208
  propertyNames: {
211
- description: "The unique identifier for a Microfrontend Application. Must match the `name` field of the application's `package.json`."
209
+ description: "The unique identifier for a Microfrontend Application.\n\nMust match the Vercel project name.\n\nNote: If this name does not also match the name used to run the application, (e.g. the `name` from the `package.json`), then the `packageName` field should be set."
212
210
  }
213
211
  },
214
212
  Application: {
@@ -230,7 +228,12 @@ var schema_default = {
230
228
  },
231
229
  projectId: {
232
230
  type: "string",
233
- description: "Vercel project ID"
231
+ description: "Vercel project ID, only required if the application name / id is different to the Vercel project name.",
232
+ deprecated: "Instead, the application id should match the Vercel project name."
233
+ },
234
+ packageName: {
235
+ type: "string",
236
+ description: "The name used to run the application, e.g. the `name` field in the `package.json`.\n\nThis is used by the local proxy to map the application config to the locally running app.\n\nThis is only necessary when the application name does not match the `name` used in `package.json`."
234
237
  },
235
238
  production: {
236
239
  $ref: "#/definitions/HostConfig",
@@ -250,9 +253,7 @@ var schema_default = {
250
253
  description: "Vercel project ID"
251
254
  }
252
255
  },
253
- required: [
254
- "projectId"
255
- ],
256
+ required: ["projectId"],
256
257
  additionalProperties: false
257
258
  },
258
259
  HostConfig: {
@@ -260,10 +261,7 @@ var schema_default = {
260
261
  properties: {
261
262
  protocol: {
262
263
  type: "string",
263
- enum: [
264
- "http",
265
- "https"
266
- ],
264
+ enum: ["http", "https"],
267
265
  description: "The protocol to be used for the connection.\n- `http`: Hypertext Transfer Protocol (HTTP).\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\n\n*"
268
266
  },
269
267
  host: {
@@ -275,21 +273,30 @@ var schema_default = {
275
273
  description: "The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS."
276
274
  }
277
275
  },
278
- required: [
279
- "host"
280
- ],
276
+ required: ["host"],
281
277
  additionalProperties: false
282
278
  },
283
279
  Development: {
284
280
  type: "object",
285
281
  properties: {
286
282
  local: {
287
- $ref: "#/definitions/LocalHostConfig",
288
- deprecated: "This is being replaced by the `localPort` field below."
283
+ anyOf: [
284
+ {
285
+ type: "number"
286
+ },
287
+ {
288
+ type: "string"
289
+ },
290
+ {
291
+ $ref: "#/definitions/LocalHostConfig"
292
+ }
293
+ ],
294
+ description: "A local port number or host string that this application runs on when it is running locally. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTP. If omitted, the port defaults to a unique, but stable (based on the application name) number.\n\nExamples of valid values:\n- 8080\n- my.localhost.me\n- my.localhost.me:8080\n- https://my.localhost.me\n- https://my.localhost.me:8080\n\nPassing a LocalHostConfig is deprecated and will go away soon, please pass a number or string."
289
295
  },
290
296
  localPort: {
291
297
  type: "number",
292
- description: "The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS."
298
+ description: "The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS. If omitted, the port defaults to a unique, but stable (based on the application name) number.",
299
+ deprecated: "Please set the port with the 'local' field instead."
293
300
  },
294
301
  fallback: {
295
302
  anyOf: [
@@ -300,7 +307,7 @@ var schema_default = {
300
307
  type: "string"
301
308
  }
302
309
  ],
303
- description: "Fallback for local development, could be a host config that points to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\n\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS."
310
+ description: "Fallback for local development, could point to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\n\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS.\n\nPassing a HostConfig is deprecated and will go away soon, please pass a string."
304
311
  },
305
312
  task: {
306
313
  type: "string",
@@ -319,10 +326,7 @@ var schema_default = {
319
326
  },
320
327
  protocol: {
321
328
  type: "string",
322
- enum: [
323
- "http",
324
- "https"
325
- ],
329
+ enum: ["http", "https"],
326
330
  description: "The protocol to be used for the connection.\n- `http`: Hypertext Transfer Protocol (HTTP).\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\n\n*"
327
331
  },
328
332
  port: {
@@ -340,7 +344,12 @@ var schema_default = {
340
344
  },
341
345
  projectId: {
342
346
  type: "string",
343
- description: "Vercel project ID"
347
+ description: "Vercel project ID, only required if the application name / id is different to the Vercel project name.",
348
+ deprecated: "Instead, the application id should match the Vercel project name."
349
+ },
350
+ packageName: {
351
+ type: "string",
352
+ description: "The name used to run the application, e.g. the `name` field in the `package.json`.\n\nThis is used by the local proxy to map the application config to the locally running app.\n\nThis is only necessary when the application name does not match the `name` used in `package.json`."
344
353
  },
345
354
  production: {
346
355
  $ref: "#/definitions/HostConfig",
@@ -354,9 +363,7 @@ var schema_default = {
354
363
  description: "Groups of path expressions that are routed to this application."
355
364
  }
356
365
  },
357
- required: [
358
- "routing"
359
- ],
366
+ required: ["routing"],
360
367
  additionalProperties: false
361
368
  },
362
369
  Routing: {
@@ -383,9 +390,7 @@ var schema_default = {
383
390
  }
384
391
  }
385
392
  },
386
- required: [
387
- "paths"
388
- ],
393
+ required: ["paths"],
389
394
  additionalProperties: false
390
395
  },
391
396
  ChildConfig: {
@@ -406,9 +411,7 @@ var schema_default = {
406
411
  description: "Applications that only serve a subset of the microfrontend routes only need to reference the name of the primary application that owns the full microfrontends configuration."
407
412
  }
408
413
  },
409
- required: [
410
- "partOf"
411
- ],
414
+ required: ["partOf"],
412
415
  additionalProperties: false
413
416
  }
414
417
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/schema/validation.ts","../src/config/microfrontends/server/validation.ts","../src/config/errors.ts","../schema/schema.json","../src/config/schema/utils/load.ts"],"sourcesContent":["export { validateSchema } from '../config/microfrontends/server/validation';\n","import { parse } from 'jsonc-parser';\nimport { Ajv, type ErrorObject } from 'ajv';\nimport type { Config } from '../../schema/types';\nimport { MicrofrontendError } from '../../errors';\nimport { SCHEMA } from '../../schema/utils/load';\n\n// NOTE(mknichel): AJV returns very imprecise validation errors that include\n// multiple conflicting statements. We should improve this in the future.\nfunction filterAjvErrors(\n errors: ErrorObject[] | null | undefined,\n): ErrorObject[] {\n if (!errors) {\n return [];\n }\n return errors.filter((error) => {\n return (\n error.keyword === 'additionalProperties' || error.keyword === 'required'\n );\n });\n}\n\nexport function validateSchema(configString: string): Config {\n const parsedConfig = parse(configString) as Config;\n const ajv = new Ajv();\n const validate = ajv.compile(SCHEMA);\n const isValid = validate(parsedConfig);\n if (!isValid) {\n throw new MicrofrontendError(\n `Invalid microfrontends config:\\n - ${ajv.errorsText(filterAjvErrors(validate.errors), { separator: '\\n - ' })}\\n\\nSee https://openapi.vercel.sh/microfrontends.json for the schema.`,\n { type: 'config', subtype: 'does_not_match_schema' },\n );\n }\n return parsedConfig;\n}\n","export type MicrofrontendErrorType =\n | 'config'\n | 'packageJson'\n | 'vercelJson'\n | 'application'\n | 'unknown';\n\nexport type MicrofrontendErrorSubtype =\n | 'not_found'\n | 'inference_failed'\n | 'not_found_in_env'\n | 'invalid_asset_prefix'\n | 'invalid_main_path'\n | 'does_not_match_schema'\n | 'unable_to_read_file'\n | 'unsupported_validation_env'\n | 'unsupported_version'\n | 'invalid_path'\n | 'invalid_permissions'\n | 'invalid_syntax'\n | 'missing_microfrontend_config_path'\n | 'unsupported_operation';\n\n// A mapping of error types to their subtypes.\ninterface TypeToSubtype {\n application:\n | 'invalid_asset_prefix'\n | 'invalid_path'\n | 'multiple_package_managers'\n | 'not_found';\n config:\n | 'conflicting_paths'\n | 'depcrecated_field'\n | 'does_not_match_schema'\n | 'invalid_main_path'\n | 'invalid_preview_deployment_suffix'\n | 'multiple_default_applications'\n | 'no_default_application'\n | 'not_found_in_env'\n | 'not_found'\n | 'inference_failed'\n | 'unable_to_read_file'\n | 'invalid_syntax'\n | 'invalid_permissions'\n | 'unsupported_operation'\n | 'unsupported_validation_env'\n | 'unsupported_version';\n packageJson:\n | 'missing_field_name'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n vercelJson:\n | 'missing_field_microfrontend_config_path'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n unknown: never;\n}\n\nexport type MicrofrontendErrorSource =\n | '@vercel/microfrontends'\n | '@vercel/microfrontends/next'\n | 'fs'\n | 'ajv';\n\nexport interface MicrofrontendErrorOptions<T extends MicrofrontendErrorType> {\n cause?: unknown;\n source?: MicrofrontendErrorSource;\n type?: T;\n subtype?: TypeToSubtype[T];\n}\n\ninterface HandleOptions {\n fileName?: string;\n}\n\nexport class MicrofrontendError<\n T extends MicrofrontendErrorType = 'unknown',\n> extends Error {\n public source: MicrofrontendErrorSource;\n public type: T;\n public subtype?: TypeToSubtype[T];\n\n constructor(message: string, opts?: MicrofrontendErrorOptions<T>) {\n super(message, { cause: opts?.cause });\n this.name = 'MicrofrontendsError';\n this.source = opts?.source ?? '@vercel/microfrontends';\n this.type = opts?.type ?? ('unknown' as T);\n this.subtype = opts?.subtype;\n Error.captureStackTrace(this, MicrofrontendError);\n }\n\n isKnown(): boolean {\n return this.type !== 'unknown';\n }\n\n isUnknown(): boolean {\n return !this.isKnown();\n }\n\n /**\n * Converts an error to a MicrofrontendsError.\n * @param original - The original error to convert.\n * @returns The converted MicrofrontendsError.\n */\n static convert(\n original: Error,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (opts?.fileName) {\n const err = MicrofrontendError.convertFSError(original, opts.fileName);\n if (err) {\n return err;\n }\n }\n\n if (\n original.message.includes(\n 'Code generation from strings disallowed for this context',\n )\n ) {\n return new MicrofrontendError(original.message, {\n type: 'config',\n subtype: 'unsupported_validation_env',\n source: 'ajv',\n });\n }\n\n // unknown catch-all\n return new MicrofrontendError(original.message);\n }\n\n static convertFSError(\n original: Error,\n fileName: string,\n ): MicrofrontendError<MicrofrontendErrorType> | null {\n if (original instanceof Error && 'code' in original) {\n if (original.code === 'ENOENT') {\n return new MicrofrontendError(`Could not find \"${fileName}\"`, {\n type: 'config',\n subtype: 'unable_to_read_file',\n source: 'fs',\n });\n }\n if (original.code === 'EACCES') {\n return new MicrofrontendError(\n `Permission denied while accessing \"${fileName}\"`,\n {\n type: 'config',\n subtype: 'invalid_permissions',\n source: 'fs',\n },\n );\n }\n }\n\n if (original instanceof SyntaxError) {\n return new MicrofrontendError(\n `Failed to parse \"${fileName}\": Invalid JSON format.`,\n {\n type: 'config',\n subtype: 'invalid_syntax',\n source: 'fs',\n },\n );\n }\n\n return null;\n }\n\n /**\n * Handles an unknown error and returns a MicrofrontendsError instance.\n * @param err - The error to handle.\n * @returns A MicrofrontendsError instance.\n */\n static handle(\n err: unknown,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (err instanceof MicrofrontendError) {\n return err as MicrofrontendError<MicrofrontendErrorType>;\n }\n\n // handle Error instances\n if (err instanceof Error) {\n return MicrofrontendError.convert(err, opts);\n }\n\n // handle object errors\n if (typeof err === 'object' && err !== null) {\n if ('message' in err && typeof err.message === 'string') {\n return MicrofrontendError.convert(new Error(err.message), opts);\n }\n }\n\n return new MicrofrontendError('An unknown error occurred');\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$ref\": \"#/definitions/Config\",\n \"definitions\": {\n \"Config\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/MainConfig\"\n },\n {\n \"$ref\": \"#/definitions/ChildConfig\"\n }\n ]\n },\n \"MainConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"applications\": {\n \"$ref\": \"#/definitions/ApplicationRouting\",\n \"description\": \"Mapping of application names to the routes that they host. Only needs to be defined in the application that owns the primary microfrontend domain\"\n }\n },\n \"required\": [\n \"applications\"\n ],\n \"additionalProperties\": false\n },\n \"Options\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/VercelOptions\",\n \"description\": \"Microfrontends wide options for Vercel.\",\n \"deprecated\": \"This is being replaced by the `disableOverrides` field below.\"\n },\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n },\n \"localProxy\": {\n \"$ref\": \"#/definitions/LocalProxyOptions\",\n \"description\": \"Options for local proxy.\",\n \"deprecated\": \"This is being replaced by the `localProxyPort` field below.\"\n },\n \"localProxyPort\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"VercelOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalProxyOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"ApplicationRouting\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/Application\"\n },\n \"propertyNames\": {\n \"description\": \"The unique identifier for a Microfrontend Application. Must match the `name` field of the application's `package.json`.\"\n }\n },\n \"Application\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/DefaultApplication\"\n },\n {\n \"$ref\": \"#/definitions/ChildApplication\"\n }\n ]\n },\n \"DefaultApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n }\n },\n \"additionalProperties\": false\n },\n \"Vercel\": {\n \"type\": \"object\",\n \"properties\": {\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n }\n },\n \"required\": [\n \"projectId\"\n ],\n \"additionalProperties\": false\n },\n \"HostConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\n \"http\",\n \"https\"\n ],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n },\n \"required\": [\n \"host\"\n ],\n \"additionalProperties\": false\n },\n \"Development\": {\n \"type\": \"object\",\n \"properties\": {\n \"local\": {\n \"$ref\": \"#/definitions/LocalHostConfig\",\n \"deprecated\": \"This is being replaced by the `localPort` field below.\"\n },\n \"localPort\": {\n \"type\": \"number\",\n \"description\": \"The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS.\"\n },\n \"fallback\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/HostConfig\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Fallback for local development, could be a host config that points to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\\n\\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS.\"\n },\n \"task\": {\n \"type\": \"string\",\n \"description\": \"Optional task to run when starting the development server. Should reference a script in the package.json of the application.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalHostConfig\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\n \"http\",\n \"https\"\n ],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n }\n },\n \"ChildApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n },\n \"routing\": {\n \"$ref\": \"#/definitions/Routing\",\n \"description\": \"Groups of path expressions that are routed to this application.\"\n }\n },\n \"required\": [\n \"routing\"\n ],\n \"additionalProperties\": false\n },\n \"Routing\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/PathGroup\"\n }\n },\n \"PathGroup\": {\n \"type\": \"object\",\n \"properties\": {\n \"group\": {\n \"type\": \"string\",\n \"description\": \"Optional group name for the paths\"\n },\n \"flag\": {\n \"type\": \"string\",\n \"description\": \"flag name that can be used to enable/disable all paths in the group\"\n },\n \"paths\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"paths\"\n ],\n \"additionalProperties\": false\n },\n \"ChildConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"partOf\": {\n \"type\": \"string\",\n \"description\": \"Applications that only serve a subset of the microfrontend routes only need to reference the name of the primary application that owns the full microfrontends configuration.\"\n }\n },\n \"required\": [\n \"partOf\"\n ],\n \"additionalProperties\": false\n }\n }\n}","import type { JSONSchema7 } from 'json-schema';\nimport jsonSchema from '../../../../schema/schema.json';\n\nexport const SCHEMA = jsonSchema as JSONSchema7;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/schema/validation.ts","../src/config/microfrontends/server/validation.ts","../src/config/errors.ts","../schema/schema.json","../src/config/schema/utils/load.ts"],"sourcesContent":["export { validateSchema } from '../config/microfrontends/server/validation';\n","import { parse } from 'jsonc-parser';\nimport { Ajv, type ErrorObject } from 'ajv';\nimport type { Config } from '../../schema/types';\nimport { MicrofrontendError } from '../../errors';\nimport { SCHEMA } from '../../schema/utils/load';\n\n// NOTE(mknichel): AJV returns very imprecise validation errors that include\n// multiple conflicting statements. We should improve this in the future.\nfunction filterAjvErrors(\n errors: ErrorObject[] | null | undefined,\n): ErrorObject[] {\n if (!errors) {\n return [];\n }\n return errors.filter((error) => {\n return (\n error.keyword === 'additionalProperties' || error.keyword === 'required'\n );\n });\n}\n\nexport function validateSchema(configString: string): Config {\n const parsedConfig = parse(configString) as Config;\n const ajv = new Ajv();\n const validate = ajv.compile(SCHEMA);\n const isValid = validate(parsedConfig);\n if (!isValid) {\n throw new MicrofrontendError(\n `Invalid microfrontends config:\\n - ${ajv.errorsText(filterAjvErrors(validate.errors), { separator: '\\n - ' })}\\n\\nSee https://openapi.vercel.sh/microfrontends.json for the schema.`,\n { type: 'config', subtype: 'does_not_match_schema' },\n );\n }\n return parsedConfig;\n}\n","export type MicrofrontendErrorType =\n | 'config'\n | 'packageJson'\n | 'vercelJson'\n | 'application'\n | 'unknown';\n\nexport type MicrofrontendErrorSubtype =\n | 'not_found'\n | 'inference_failed'\n | 'not_found_in_env'\n | 'invalid_asset_prefix'\n | 'invalid_main_path'\n | 'does_not_match_schema'\n | 'unable_to_read_file'\n | 'unsupported_validation_env'\n | 'unsupported_version'\n | 'invalid_path'\n | 'invalid_permissions'\n | 'invalid_syntax'\n | 'missing_microfrontend_config_path'\n | 'unsupported_operation';\n\n// A mapping of error types to their subtypes.\ninterface TypeToSubtype {\n application:\n | 'invalid_asset_prefix'\n | 'invalid_path'\n | 'multiple_package_managers'\n | 'not_found';\n config:\n | 'conflicting_paths'\n | 'depcrecated_field'\n | 'does_not_match_schema'\n | 'invalid_main_path'\n | 'invalid_preview_deployment_suffix'\n | 'multiple_default_applications'\n | 'no_default_application'\n | 'not_found_in_env'\n | 'not_found'\n | 'inference_failed'\n | 'unable_to_read_file'\n | 'invalid_syntax'\n | 'invalid_permissions'\n | 'unsupported_operation'\n | 'unsupported_validation_env'\n | 'unsupported_version';\n packageJson:\n | 'missing_field_name'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n vercelJson:\n | 'missing_field_microfrontend_config_path'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n unknown: never;\n}\n\nexport type MicrofrontendErrorSource =\n | '@vercel/microfrontends'\n | '@vercel/microfrontends/next'\n | 'fs'\n | 'ajv';\n\nexport interface MicrofrontendErrorOptions<T extends MicrofrontendErrorType> {\n cause?: unknown;\n source?: MicrofrontendErrorSource;\n type?: T;\n subtype?: TypeToSubtype[T];\n}\n\ninterface HandleOptions {\n fileName?: string;\n}\n\nexport class MicrofrontendError<\n T extends MicrofrontendErrorType = 'unknown',\n> extends Error {\n public source: MicrofrontendErrorSource;\n public type: T;\n public subtype?: TypeToSubtype[T];\n\n constructor(message: string, opts?: MicrofrontendErrorOptions<T>) {\n super(message, { cause: opts?.cause });\n this.name = 'MicrofrontendsError';\n this.source = opts?.source ?? '@vercel/microfrontends';\n this.type = opts?.type ?? ('unknown' as T);\n this.subtype = opts?.subtype;\n Error.captureStackTrace(this, MicrofrontendError);\n }\n\n isKnown(): boolean {\n return this.type !== 'unknown';\n }\n\n isUnknown(): boolean {\n return !this.isKnown();\n }\n\n /**\n * Converts an error to a MicrofrontendsError.\n * @param original - The original error to convert.\n * @returns The converted MicrofrontendsError.\n */\n static convert(\n original: Error,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (opts?.fileName) {\n const err = MicrofrontendError.convertFSError(original, opts.fileName);\n if (err) {\n return err;\n }\n }\n\n if (\n original.message.includes(\n 'Code generation from strings disallowed for this context',\n )\n ) {\n return new MicrofrontendError(original.message, {\n type: 'config',\n subtype: 'unsupported_validation_env',\n source: 'ajv',\n });\n }\n\n // unknown catch-all\n return new MicrofrontendError(original.message);\n }\n\n static convertFSError(\n original: Error,\n fileName: string,\n ): MicrofrontendError<MicrofrontendErrorType> | null {\n if (original instanceof Error && 'code' in original) {\n if (original.code === 'ENOENT') {\n return new MicrofrontendError(`Could not find \"${fileName}\"`, {\n type: 'config',\n subtype: 'unable_to_read_file',\n source: 'fs',\n });\n }\n if (original.code === 'EACCES') {\n return new MicrofrontendError(\n `Permission denied while accessing \"${fileName}\"`,\n {\n type: 'config',\n subtype: 'invalid_permissions',\n source: 'fs',\n },\n );\n }\n }\n\n if (original instanceof SyntaxError) {\n return new MicrofrontendError(\n `Failed to parse \"${fileName}\": Invalid JSON format.`,\n {\n type: 'config',\n subtype: 'invalid_syntax',\n source: 'fs',\n },\n );\n }\n\n return null;\n }\n\n /**\n * Handles an unknown error and returns a MicrofrontendsError instance.\n * @param err - The error to handle.\n * @returns A MicrofrontendsError instance.\n */\n static handle(\n err: unknown,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (err instanceof MicrofrontendError) {\n return err as MicrofrontendError<MicrofrontendErrorType>;\n }\n\n // handle Error instances\n if (err instanceof Error) {\n return MicrofrontendError.convert(err, opts);\n }\n\n // handle object errors\n if (typeof err === 'object' && err !== null) {\n if ('message' in err && typeof err.message === 'string') {\n return MicrofrontendError.convert(new Error(err.message), opts);\n }\n }\n\n return new MicrofrontendError('An unknown error occurred');\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$ref\": \"#/definitions/Config\",\n \"definitions\": {\n \"Config\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/MainConfig\"\n },\n {\n \"$ref\": \"#/definitions/ChildConfig\"\n }\n ]\n },\n \"MainConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"applications\": {\n \"$ref\": \"#/definitions/ApplicationRouting\",\n \"description\": \"Mapping of application names to the routes that they host. Only needs to be defined in the application that owns the primary microfrontend domain\"\n }\n },\n \"required\": [\"applications\"],\n \"additionalProperties\": false\n },\n \"Options\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/VercelOptions\",\n \"description\": \"Microfrontends wide options for Vercel.\",\n \"deprecated\": \"This is being replaced by the `disableOverrides` field below.\"\n },\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n },\n \"localProxy\": {\n \"$ref\": \"#/definitions/LocalProxyOptions\",\n \"description\": \"Options for local proxy.\",\n \"deprecated\": \"This is being replaced by the `localProxyPort` field below.\"\n },\n \"localProxyPort\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"VercelOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalProxyOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"ApplicationRouting\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/Application\"\n },\n \"propertyNames\": {\n \"description\": \"The unique identifier for a Microfrontend Application.\\n\\nMust match the Vercel project name.\\n\\nNote: If this name does not also match the name used to run the application, (e.g. the `name` from the `package.json`), then the `packageName` field should be set.\"\n }\n },\n \"Application\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/DefaultApplication\"\n },\n {\n \"$ref\": \"#/definitions/ChildApplication\"\n }\n ]\n },\n \"DefaultApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID, only required if the application name / id is different to the Vercel project name.\",\n \"deprecated\": \"Instead, the application id should match the Vercel project name.\"\n },\n \"packageName\": {\n \"type\": \"string\",\n \"description\": \"The name used to run the application, e.g. the `name` field in the `package.json`.\\n\\nThis is used by the local proxy to map the application config to the locally running app.\\n\\nThis is only necessary when the application name does not match the `name` used in `package.json`.\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n }\n },\n \"additionalProperties\": false\n },\n \"Vercel\": {\n \"type\": \"object\",\n \"properties\": {\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n }\n },\n \"required\": [\"projectId\"],\n \"additionalProperties\": false\n },\n \"HostConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\"http\", \"https\"],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n },\n \"required\": [\"host\"],\n \"additionalProperties\": false\n },\n \"Development\": {\n \"type\": \"object\",\n \"properties\": {\n \"local\": {\n \"anyOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n },\n {\n \"$ref\": \"#/definitions/LocalHostConfig\"\n }\n ],\n \"description\": \"A local port number or host string that this application runs on when it is running locally. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTP. If omitted, the port defaults to a unique, but stable (based on the application name) number.\\n\\nExamples of valid values:\\n- 8080\\n- my.localhost.me\\n- my.localhost.me:8080\\n- https://my.localhost.me\\n- https://my.localhost.me:8080\\n\\nPassing a LocalHostConfig is deprecated and will go away soon, please pass a number or string.\"\n },\n \"localPort\": {\n \"type\": \"number\",\n \"description\": \"The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS. If omitted, the port defaults to a unique, but stable (based on the application name) number.\",\n \"deprecated\": \"Please set the port with the 'local' field instead.\"\n },\n \"fallback\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/HostConfig\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Fallback for local development, could point to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\\n\\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS.\\n\\nPassing a HostConfig is deprecated and will go away soon, please pass a string.\"\n },\n \"task\": {\n \"type\": \"string\",\n \"description\": \"Optional task to run when starting the development server. Should reference a script in the package.json of the application.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalHostConfig\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\"http\", \"https\"],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n }\n },\n \"ChildApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID, only required if the application name / id is different to the Vercel project name.\",\n \"deprecated\": \"Instead, the application id should match the Vercel project name.\"\n },\n \"packageName\": {\n \"type\": \"string\",\n \"description\": \"The name used to run the application, e.g. the `name` field in the `package.json`.\\n\\nThis is used by the local proxy to map the application config to the locally running app.\\n\\nThis is only necessary when the application name does not match the `name` used in `package.json`.\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n },\n \"routing\": {\n \"$ref\": \"#/definitions/Routing\",\n \"description\": \"Groups of path expressions that are routed to this application.\"\n }\n },\n \"required\": [\"routing\"],\n \"additionalProperties\": false\n },\n \"Routing\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/PathGroup\"\n }\n },\n \"PathGroup\": {\n \"type\": \"object\",\n \"properties\": {\n \"group\": {\n \"type\": \"string\",\n \"description\": \"Optional group name for the paths\"\n },\n \"flag\": {\n \"type\": \"string\",\n \"description\": \"flag name that can be used to enable/disable all paths in the group\"\n },\n \"paths\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"paths\"],\n \"additionalProperties\": false\n },\n \"ChildConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"partOf\": {\n \"type\": \"string\",\n \"description\": \"Applications that only serve a subset of the microfrontend routes only need to reference the name of the primary application that owns the full microfrontends configuration.\"\n }\n },\n \"required\": [\"partOf\"],\n \"additionalProperties\": false\n }\n }\n}\n","import type { JSONSchema7 } from 'json-schema';\nimport jsonSchema from '../../../../schema/schema.json';\n\nexport const SCHEMA = jsonSchema as JSONSchema7;\n"],"mappings":"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","names":[]}
@@ -1,4 +1,4 @@
1
- import { C as Config } from './index-2f78c0ca.js';
1
+ import { C as Config } from './types-6ee19ccc.js';
2
2
 
3
3
  declare function validateSchema(configString: string): Config;
4
4
 
@@ -127,9 +127,7 @@ var schema_default = {
127
127
  description: "Mapping of application names to the routes that they host. Only needs to be defined in the application that owns the primary microfrontend domain"
128
128
  }
129
129
  },
130
- required: [
131
- "applications"
132
- ],
130
+ required: ["applications"],
133
131
  additionalProperties: false
134
132
  },
135
133
  Options: {
@@ -182,7 +180,7 @@ var schema_default = {
182
180
  $ref: "#/definitions/Application"
183
181
  },
184
182
  propertyNames: {
185
- description: "The unique identifier for a Microfrontend Application. Must match the `name` field of the application's `package.json`."
183
+ description: "The unique identifier for a Microfrontend Application.\n\nMust match the Vercel project name.\n\nNote: If this name does not also match the name used to run the application, (e.g. the `name` from the `package.json`), then the `packageName` field should be set."
186
184
  }
187
185
  },
188
186
  Application: {
@@ -204,7 +202,12 @@ var schema_default = {
204
202
  },
205
203
  projectId: {
206
204
  type: "string",
207
- description: "Vercel project ID"
205
+ description: "Vercel project ID, only required if the application name / id is different to the Vercel project name.",
206
+ deprecated: "Instead, the application id should match the Vercel project name."
207
+ },
208
+ packageName: {
209
+ type: "string",
210
+ description: "The name used to run the application, e.g. the `name` field in the `package.json`.\n\nThis is used by the local proxy to map the application config to the locally running app.\n\nThis is only necessary when the application name does not match the `name` used in `package.json`."
208
211
  },
209
212
  production: {
210
213
  $ref: "#/definitions/HostConfig",
@@ -224,9 +227,7 @@ var schema_default = {
224
227
  description: "Vercel project ID"
225
228
  }
226
229
  },
227
- required: [
228
- "projectId"
229
- ],
230
+ required: ["projectId"],
230
231
  additionalProperties: false
231
232
  },
232
233
  HostConfig: {
@@ -234,10 +235,7 @@ var schema_default = {
234
235
  properties: {
235
236
  protocol: {
236
237
  type: "string",
237
- enum: [
238
- "http",
239
- "https"
240
- ],
238
+ enum: ["http", "https"],
241
239
  description: "The protocol to be used for the connection.\n- `http`: Hypertext Transfer Protocol (HTTP).\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\n\n*"
242
240
  },
243
241
  host: {
@@ -249,21 +247,30 @@ var schema_default = {
249
247
  description: "The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS."
250
248
  }
251
249
  },
252
- required: [
253
- "host"
254
- ],
250
+ required: ["host"],
255
251
  additionalProperties: false
256
252
  },
257
253
  Development: {
258
254
  type: "object",
259
255
  properties: {
260
256
  local: {
261
- $ref: "#/definitions/LocalHostConfig",
262
- deprecated: "This is being replaced by the `localPort` field below."
257
+ anyOf: [
258
+ {
259
+ type: "number"
260
+ },
261
+ {
262
+ type: "string"
263
+ },
264
+ {
265
+ $ref: "#/definitions/LocalHostConfig"
266
+ }
267
+ ],
268
+ description: "A local port number or host string that this application runs on when it is running locally. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTP. If omitted, the port defaults to a unique, but stable (based on the application name) number.\n\nExamples of valid values:\n- 8080\n- my.localhost.me\n- my.localhost.me:8080\n- https://my.localhost.me\n- https://my.localhost.me:8080\n\nPassing a LocalHostConfig is deprecated and will go away soon, please pass a number or string."
263
269
  },
264
270
  localPort: {
265
271
  type: "number",
266
- description: "The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS."
272
+ description: "The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS. If omitted, the port defaults to a unique, but stable (based on the application name) number.",
273
+ deprecated: "Please set the port with the 'local' field instead."
267
274
  },
268
275
  fallback: {
269
276
  anyOf: [
@@ -274,7 +281,7 @@ var schema_default = {
274
281
  type: "string"
275
282
  }
276
283
  ],
277
- description: "Fallback for local development, could be a host config that points to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\n\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS."
284
+ description: "Fallback for local development, could point to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\n\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS.\n\nPassing a HostConfig is deprecated and will go away soon, please pass a string."
278
285
  },
279
286
  task: {
280
287
  type: "string",
@@ -293,10 +300,7 @@ var schema_default = {
293
300
  },
294
301
  protocol: {
295
302
  type: "string",
296
- enum: [
297
- "http",
298
- "https"
299
- ],
303
+ enum: ["http", "https"],
300
304
  description: "The protocol to be used for the connection.\n- `http`: Hypertext Transfer Protocol (HTTP).\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\n\n*"
301
305
  },
302
306
  port: {
@@ -314,7 +318,12 @@ var schema_default = {
314
318
  },
315
319
  projectId: {
316
320
  type: "string",
317
- description: "Vercel project ID"
321
+ description: "Vercel project ID, only required if the application name / id is different to the Vercel project name.",
322
+ deprecated: "Instead, the application id should match the Vercel project name."
323
+ },
324
+ packageName: {
325
+ type: "string",
326
+ description: "The name used to run the application, e.g. the `name` field in the `package.json`.\n\nThis is used by the local proxy to map the application config to the locally running app.\n\nThis is only necessary when the application name does not match the `name` used in `package.json`."
318
327
  },
319
328
  production: {
320
329
  $ref: "#/definitions/HostConfig",
@@ -328,9 +337,7 @@ var schema_default = {
328
337
  description: "Groups of path expressions that are routed to this application."
329
338
  }
330
339
  },
331
- required: [
332
- "routing"
333
- ],
340
+ required: ["routing"],
334
341
  additionalProperties: false
335
342
  },
336
343
  Routing: {
@@ -357,9 +364,7 @@ var schema_default = {
357
364
  }
358
365
  }
359
366
  },
360
- required: [
361
- "paths"
362
- ],
367
+ required: ["paths"],
363
368
  additionalProperties: false
364
369
  },
365
370
  ChildConfig: {
@@ -380,9 +385,7 @@ var schema_default = {
380
385
  description: "Applications that only serve a subset of the microfrontend routes only need to reference the name of the primary application that owns the full microfrontends configuration."
381
386
  }
382
387
  },
383
- required: [
384
- "partOf"
385
- ],
388
+ required: ["partOf"],
386
389
  additionalProperties: false
387
390
  }
388
391
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/config/microfrontends/server/validation.ts","../src/config/errors.ts","../schema/schema.json","../src/config/schema/utils/load.ts"],"sourcesContent":["import { parse } from 'jsonc-parser';\nimport { Ajv, type ErrorObject } from 'ajv';\nimport type { Config } from '../../schema/types';\nimport { MicrofrontendError } from '../../errors';\nimport { SCHEMA } from '../../schema/utils/load';\n\n// NOTE(mknichel): AJV returns very imprecise validation errors that include\n// multiple conflicting statements. We should improve this in the future.\nfunction filterAjvErrors(\n errors: ErrorObject[] | null | undefined,\n): ErrorObject[] {\n if (!errors) {\n return [];\n }\n return errors.filter((error) => {\n return (\n error.keyword === 'additionalProperties' || error.keyword === 'required'\n );\n });\n}\n\nexport function validateSchema(configString: string): Config {\n const parsedConfig = parse(configString) as Config;\n const ajv = new Ajv();\n const validate = ajv.compile(SCHEMA);\n const isValid = validate(parsedConfig);\n if (!isValid) {\n throw new MicrofrontendError(\n `Invalid microfrontends config:\\n - ${ajv.errorsText(filterAjvErrors(validate.errors), { separator: '\\n - ' })}\\n\\nSee https://openapi.vercel.sh/microfrontends.json for the schema.`,\n { type: 'config', subtype: 'does_not_match_schema' },\n );\n }\n return parsedConfig;\n}\n","export type MicrofrontendErrorType =\n | 'config'\n | 'packageJson'\n | 'vercelJson'\n | 'application'\n | 'unknown';\n\nexport type MicrofrontendErrorSubtype =\n | 'not_found'\n | 'inference_failed'\n | 'not_found_in_env'\n | 'invalid_asset_prefix'\n | 'invalid_main_path'\n | 'does_not_match_schema'\n | 'unable_to_read_file'\n | 'unsupported_validation_env'\n | 'unsupported_version'\n | 'invalid_path'\n | 'invalid_permissions'\n | 'invalid_syntax'\n | 'missing_microfrontend_config_path'\n | 'unsupported_operation';\n\n// A mapping of error types to their subtypes.\ninterface TypeToSubtype {\n application:\n | 'invalid_asset_prefix'\n | 'invalid_path'\n | 'multiple_package_managers'\n | 'not_found';\n config:\n | 'conflicting_paths'\n | 'depcrecated_field'\n | 'does_not_match_schema'\n | 'invalid_main_path'\n | 'invalid_preview_deployment_suffix'\n | 'multiple_default_applications'\n | 'no_default_application'\n | 'not_found_in_env'\n | 'not_found'\n | 'inference_failed'\n | 'unable_to_read_file'\n | 'invalid_syntax'\n | 'invalid_permissions'\n | 'unsupported_operation'\n | 'unsupported_validation_env'\n | 'unsupported_version';\n packageJson:\n | 'missing_field_name'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n vercelJson:\n | 'missing_field_microfrontend_config_path'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n unknown: never;\n}\n\nexport type MicrofrontendErrorSource =\n | '@vercel/microfrontends'\n | '@vercel/microfrontends/next'\n | 'fs'\n | 'ajv';\n\nexport interface MicrofrontendErrorOptions<T extends MicrofrontendErrorType> {\n cause?: unknown;\n source?: MicrofrontendErrorSource;\n type?: T;\n subtype?: TypeToSubtype[T];\n}\n\ninterface HandleOptions {\n fileName?: string;\n}\n\nexport class MicrofrontendError<\n T extends MicrofrontendErrorType = 'unknown',\n> extends Error {\n public source: MicrofrontendErrorSource;\n public type: T;\n public subtype?: TypeToSubtype[T];\n\n constructor(message: string, opts?: MicrofrontendErrorOptions<T>) {\n super(message, { cause: opts?.cause });\n this.name = 'MicrofrontendsError';\n this.source = opts?.source ?? '@vercel/microfrontends';\n this.type = opts?.type ?? ('unknown' as T);\n this.subtype = opts?.subtype;\n Error.captureStackTrace(this, MicrofrontendError);\n }\n\n isKnown(): boolean {\n return this.type !== 'unknown';\n }\n\n isUnknown(): boolean {\n return !this.isKnown();\n }\n\n /**\n * Converts an error to a MicrofrontendsError.\n * @param original - The original error to convert.\n * @returns The converted MicrofrontendsError.\n */\n static convert(\n original: Error,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (opts?.fileName) {\n const err = MicrofrontendError.convertFSError(original, opts.fileName);\n if (err) {\n return err;\n }\n }\n\n if (\n original.message.includes(\n 'Code generation from strings disallowed for this context',\n )\n ) {\n return new MicrofrontendError(original.message, {\n type: 'config',\n subtype: 'unsupported_validation_env',\n source: 'ajv',\n });\n }\n\n // unknown catch-all\n return new MicrofrontendError(original.message);\n }\n\n static convertFSError(\n original: Error,\n fileName: string,\n ): MicrofrontendError<MicrofrontendErrorType> | null {\n if (original instanceof Error && 'code' in original) {\n if (original.code === 'ENOENT') {\n return new MicrofrontendError(`Could not find \"${fileName}\"`, {\n type: 'config',\n subtype: 'unable_to_read_file',\n source: 'fs',\n });\n }\n if (original.code === 'EACCES') {\n return new MicrofrontendError(\n `Permission denied while accessing \"${fileName}\"`,\n {\n type: 'config',\n subtype: 'invalid_permissions',\n source: 'fs',\n },\n );\n }\n }\n\n if (original instanceof SyntaxError) {\n return new MicrofrontendError(\n `Failed to parse \"${fileName}\": Invalid JSON format.`,\n {\n type: 'config',\n subtype: 'invalid_syntax',\n source: 'fs',\n },\n );\n }\n\n return null;\n }\n\n /**\n * Handles an unknown error and returns a MicrofrontendsError instance.\n * @param err - The error to handle.\n * @returns A MicrofrontendsError instance.\n */\n static handle(\n err: unknown,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (err instanceof MicrofrontendError) {\n return err as MicrofrontendError<MicrofrontendErrorType>;\n }\n\n // handle Error instances\n if (err instanceof Error) {\n return MicrofrontendError.convert(err, opts);\n }\n\n // handle object errors\n if (typeof err === 'object' && err !== null) {\n if ('message' in err && typeof err.message === 'string') {\n return MicrofrontendError.convert(new Error(err.message), opts);\n }\n }\n\n return new MicrofrontendError('An unknown error occurred');\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$ref\": \"#/definitions/Config\",\n \"definitions\": {\n \"Config\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/MainConfig\"\n },\n {\n \"$ref\": \"#/definitions/ChildConfig\"\n }\n ]\n },\n \"MainConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"applications\": {\n \"$ref\": \"#/definitions/ApplicationRouting\",\n \"description\": \"Mapping of application names to the routes that they host. Only needs to be defined in the application that owns the primary microfrontend domain\"\n }\n },\n \"required\": [\n \"applications\"\n ],\n \"additionalProperties\": false\n },\n \"Options\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/VercelOptions\",\n \"description\": \"Microfrontends wide options for Vercel.\",\n \"deprecated\": \"This is being replaced by the `disableOverrides` field below.\"\n },\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n },\n \"localProxy\": {\n \"$ref\": \"#/definitions/LocalProxyOptions\",\n \"description\": \"Options for local proxy.\",\n \"deprecated\": \"This is being replaced by the `localProxyPort` field below.\"\n },\n \"localProxyPort\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"VercelOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalProxyOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"ApplicationRouting\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/Application\"\n },\n \"propertyNames\": {\n \"description\": \"The unique identifier for a Microfrontend Application. Must match the `name` field of the application's `package.json`.\"\n }\n },\n \"Application\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/DefaultApplication\"\n },\n {\n \"$ref\": \"#/definitions/ChildApplication\"\n }\n ]\n },\n \"DefaultApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n }\n },\n \"additionalProperties\": false\n },\n \"Vercel\": {\n \"type\": \"object\",\n \"properties\": {\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n }\n },\n \"required\": [\n \"projectId\"\n ],\n \"additionalProperties\": false\n },\n \"HostConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\n \"http\",\n \"https\"\n ],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n },\n \"required\": [\n \"host\"\n ],\n \"additionalProperties\": false\n },\n \"Development\": {\n \"type\": \"object\",\n \"properties\": {\n \"local\": {\n \"$ref\": \"#/definitions/LocalHostConfig\",\n \"deprecated\": \"This is being replaced by the `localPort` field below.\"\n },\n \"localPort\": {\n \"type\": \"number\",\n \"description\": \"The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS.\"\n },\n \"fallback\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/HostConfig\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Fallback for local development, could be a host config that points to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\\n\\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS.\"\n },\n \"task\": {\n \"type\": \"string\",\n \"description\": \"Optional task to run when starting the development server. Should reference a script in the package.json of the application.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalHostConfig\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\n \"http\",\n \"https\"\n ],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n }\n },\n \"ChildApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n },\n \"routing\": {\n \"$ref\": \"#/definitions/Routing\",\n \"description\": \"Groups of path expressions that are routed to this application.\"\n }\n },\n \"required\": [\n \"routing\"\n ],\n \"additionalProperties\": false\n },\n \"Routing\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/PathGroup\"\n }\n },\n \"PathGroup\": {\n \"type\": \"object\",\n \"properties\": {\n \"group\": {\n \"type\": \"string\",\n \"description\": \"Optional group name for the paths\"\n },\n \"flag\": {\n \"type\": \"string\",\n \"description\": \"flag name that can be used to enable/disable all paths in the group\"\n },\n \"paths\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\n \"paths\"\n ],\n \"additionalProperties\": false\n },\n \"ChildConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"partOf\": {\n \"type\": \"string\",\n \"description\": \"Applications that only serve a subset of the microfrontend routes only need to reference the name of the primary application that owns the full microfrontends configuration.\"\n }\n },\n \"required\": [\n \"partOf\"\n ],\n \"additionalProperties\": false\n }\n }\n}","import type { JSONSchema7 } from 'json-schema';\nimport jsonSchema from '../../../../schema/schema.json';\n\nexport const SCHEMA = jsonSchema as JSONSchema7;\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../src/config/microfrontends/server/validation.ts","../src/config/errors.ts","../schema/schema.json","../src/config/schema/utils/load.ts"],"sourcesContent":["import { parse } from 'jsonc-parser';\nimport { Ajv, type ErrorObject } from 'ajv';\nimport type { Config } from '../../schema/types';\nimport { MicrofrontendError } from '../../errors';\nimport { SCHEMA } from '../../schema/utils/load';\n\n// NOTE(mknichel): AJV returns very imprecise validation errors that include\n// multiple conflicting statements. We should improve this in the future.\nfunction filterAjvErrors(\n errors: ErrorObject[] | null | undefined,\n): ErrorObject[] {\n if (!errors) {\n return [];\n }\n return errors.filter((error) => {\n return (\n error.keyword === 'additionalProperties' || error.keyword === 'required'\n );\n });\n}\n\nexport function validateSchema(configString: string): Config {\n const parsedConfig = parse(configString) as Config;\n const ajv = new Ajv();\n const validate = ajv.compile(SCHEMA);\n const isValid = validate(parsedConfig);\n if (!isValid) {\n throw new MicrofrontendError(\n `Invalid microfrontends config:\\n - ${ajv.errorsText(filterAjvErrors(validate.errors), { separator: '\\n - ' })}\\n\\nSee https://openapi.vercel.sh/microfrontends.json for the schema.`,\n { type: 'config', subtype: 'does_not_match_schema' },\n );\n }\n return parsedConfig;\n}\n","export type MicrofrontendErrorType =\n | 'config'\n | 'packageJson'\n | 'vercelJson'\n | 'application'\n | 'unknown';\n\nexport type MicrofrontendErrorSubtype =\n | 'not_found'\n | 'inference_failed'\n | 'not_found_in_env'\n | 'invalid_asset_prefix'\n | 'invalid_main_path'\n | 'does_not_match_schema'\n | 'unable_to_read_file'\n | 'unsupported_validation_env'\n | 'unsupported_version'\n | 'invalid_path'\n | 'invalid_permissions'\n | 'invalid_syntax'\n | 'missing_microfrontend_config_path'\n | 'unsupported_operation';\n\n// A mapping of error types to their subtypes.\ninterface TypeToSubtype {\n application:\n | 'invalid_asset_prefix'\n | 'invalid_path'\n | 'multiple_package_managers'\n | 'not_found';\n config:\n | 'conflicting_paths'\n | 'depcrecated_field'\n | 'does_not_match_schema'\n | 'invalid_main_path'\n | 'invalid_preview_deployment_suffix'\n | 'multiple_default_applications'\n | 'no_default_application'\n | 'not_found_in_env'\n | 'not_found'\n | 'inference_failed'\n | 'unable_to_read_file'\n | 'invalid_syntax'\n | 'invalid_permissions'\n | 'unsupported_operation'\n | 'unsupported_validation_env'\n | 'unsupported_version';\n packageJson:\n | 'missing_field_name'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n vercelJson:\n | 'missing_field_microfrontend_config_path'\n | 'unable_to_read_file'\n | 'invalid_permissions'\n | 'invalid_syntax';\n unknown: never;\n}\n\nexport type MicrofrontendErrorSource =\n | '@vercel/microfrontends'\n | '@vercel/microfrontends/next'\n | 'fs'\n | 'ajv';\n\nexport interface MicrofrontendErrorOptions<T extends MicrofrontendErrorType> {\n cause?: unknown;\n source?: MicrofrontendErrorSource;\n type?: T;\n subtype?: TypeToSubtype[T];\n}\n\ninterface HandleOptions {\n fileName?: string;\n}\n\nexport class MicrofrontendError<\n T extends MicrofrontendErrorType = 'unknown',\n> extends Error {\n public source: MicrofrontendErrorSource;\n public type: T;\n public subtype?: TypeToSubtype[T];\n\n constructor(message: string, opts?: MicrofrontendErrorOptions<T>) {\n super(message, { cause: opts?.cause });\n this.name = 'MicrofrontendsError';\n this.source = opts?.source ?? '@vercel/microfrontends';\n this.type = opts?.type ?? ('unknown' as T);\n this.subtype = opts?.subtype;\n Error.captureStackTrace(this, MicrofrontendError);\n }\n\n isKnown(): boolean {\n return this.type !== 'unknown';\n }\n\n isUnknown(): boolean {\n return !this.isKnown();\n }\n\n /**\n * Converts an error to a MicrofrontendsError.\n * @param original - The original error to convert.\n * @returns The converted MicrofrontendsError.\n */\n static convert(\n original: Error,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (opts?.fileName) {\n const err = MicrofrontendError.convertFSError(original, opts.fileName);\n if (err) {\n return err;\n }\n }\n\n if (\n original.message.includes(\n 'Code generation from strings disallowed for this context',\n )\n ) {\n return new MicrofrontendError(original.message, {\n type: 'config',\n subtype: 'unsupported_validation_env',\n source: 'ajv',\n });\n }\n\n // unknown catch-all\n return new MicrofrontendError(original.message);\n }\n\n static convertFSError(\n original: Error,\n fileName: string,\n ): MicrofrontendError<MicrofrontendErrorType> | null {\n if (original instanceof Error && 'code' in original) {\n if (original.code === 'ENOENT') {\n return new MicrofrontendError(`Could not find \"${fileName}\"`, {\n type: 'config',\n subtype: 'unable_to_read_file',\n source: 'fs',\n });\n }\n if (original.code === 'EACCES') {\n return new MicrofrontendError(\n `Permission denied while accessing \"${fileName}\"`,\n {\n type: 'config',\n subtype: 'invalid_permissions',\n source: 'fs',\n },\n );\n }\n }\n\n if (original instanceof SyntaxError) {\n return new MicrofrontendError(\n `Failed to parse \"${fileName}\": Invalid JSON format.`,\n {\n type: 'config',\n subtype: 'invalid_syntax',\n source: 'fs',\n },\n );\n }\n\n return null;\n }\n\n /**\n * Handles an unknown error and returns a MicrofrontendsError instance.\n * @param err - The error to handle.\n * @returns A MicrofrontendsError instance.\n */\n static handle(\n err: unknown,\n opts?: HandleOptions,\n ): MicrofrontendError<MicrofrontendErrorType> {\n if (err instanceof MicrofrontendError) {\n return err as MicrofrontendError<MicrofrontendErrorType>;\n }\n\n // handle Error instances\n if (err instanceof Error) {\n return MicrofrontendError.convert(err, opts);\n }\n\n // handle object errors\n if (typeof err === 'object' && err !== null) {\n if ('message' in err && typeof err.message === 'string') {\n return MicrofrontendError.convert(new Error(err.message), opts);\n }\n }\n\n return new MicrofrontendError('An unknown error occurred');\n }\n}\n","{\n \"$schema\": \"http://json-schema.org/draft-07/schema#\",\n \"$ref\": \"#/definitions/Config\",\n \"definitions\": {\n \"Config\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/MainConfig\"\n },\n {\n \"$ref\": \"#/definitions/ChildConfig\"\n }\n ]\n },\n \"MainConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"applications\": {\n \"$ref\": \"#/definitions/ApplicationRouting\",\n \"description\": \"Mapping of application names to the routes that they host. Only needs to be defined in the application that owns the primary microfrontend domain\"\n }\n },\n \"required\": [\"applications\"],\n \"additionalProperties\": false\n },\n \"Options\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/VercelOptions\",\n \"description\": \"Microfrontends wide options for Vercel.\",\n \"deprecated\": \"This is being replaced by the `disableOverrides` field below.\"\n },\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n },\n \"localProxy\": {\n \"$ref\": \"#/definitions/LocalProxyOptions\",\n \"description\": \"Options for local proxy.\",\n \"deprecated\": \"This is being replaced by the `localProxyPort` field below.\"\n },\n \"localProxyPort\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"VercelOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"disableOverrides\": {\n \"type\": \"boolean\",\n \"description\": \"If you want to disable the overrides for the site. For example, if you are managing rewrites between applications externally, you may wish to disable the overrides on the toolbar as they will have no effect.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalProxyOptions\": {\n \"type\": \"object\",\n \"properties\": {\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number used by the local proxy server.\\n\\nThe default is `3024`.\"\n }\n },\n \"additionalProperties\": false\n },\n \"ApplicationRouting\": {\n \"type\": \"object\",\n \"additionalProperties\": {\n \"$ref\": \"#/definitions/Application\"\n },\n \"propertyNames\": {\n \"description\": \"The unique identifier for a Microfrontend Application.\\n\\nMust match the Vercel project name.\\n\\nNote: If this name does not also match the name used to run the application, (e.g. the `name` from the `package.json`), then the `packageName` field should be set.\"\n }\n },\n \"Application\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/DefaultApplication\"\n },\n {\n \"$ref\": \"#/definitions/ChildApplication\"\n }\n ]\n },\n \"DefaultApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID, only required if the application name / id is different to the Vercel project name.\",\n \"deprecated\": \"Instead, the application id should match the Vercel project name.\"\n },\n \"packageName\": {\n \"type\": \"string\",\n \"description\": \"The name used to run the application, e.g. the `name` field in the `package.json`.\\n\\nThis is used by the local proxy to map the application config to the locally running app.\\n\\nThis is only necessary when the application name does not match the `name` used in `package.json`.\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n }\n },\n \"additionalProperties\": false\n },\n \"Vercel\": {\n \"type\": \"object\",\n \"properties\": {\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID\"\n }\n },\n \"required\": [\"projectId\"],\n \"additionalProperties\": false\n },\n \"HostConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\"http\", \"https\"],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n },\n \"required\": [\"host\"],\n \"additionalProperties\": false\n },\n \"Development\": {\n \"type\": \"object\",\n \"properties\": {\n \"local\": {\n \"anyOf\": [\n {\n \"type\": \"number\"\n },\n {\n \"type\": \"string\"\n },\n {\n \"$ref\": \"#/definitions/LocalHostConfig\"\n }\n ],\n \"description\": \"A local port number or host string that this application runs on when it is running locally. If passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTP. If omitted, the port defaults to a unique, but stable (based on the application name) number.\\n\\nExamples of valid values:\\n- 8080\\n- my.localhost.me\\n- my.localhost.me:8080\\n- https://my.localhost.me\\n- https://my.localhost.me:8080\\n\\nPassing a LocalHostConfig is deprecated and will go away soon, please pass a number or string.\"\n },\n \"localPort\": {\n \"type\": \"number\",\n \"description\": \"The local port number that this application runs on when it is running locally. Common values include `80` for HTTP and `443` for HTTPS. If omitted, the port defaults to a unique, but stable (based on the application name) number.\",\n \"deprecated\": \"Please set the port with the 'local' field instead.\"\n },\n \"fallback\": {\n \"anyOf\": [\n {\n \"$ref\": \"#/definitions/HostConfig\"\n },\n {\n \"type\": \"string\"\n }\n ],\n \"description\": \"Fallback for local development, could point to any environment. If this is not provided, or the application is not running - requests to the application in local development will error.\\n\\nIf passing a string, include the protocol (optional), host (required) and port (optional). For example: `https://this.ismyhost:8080`. If omitted, the protocol defaults to HTTPS. If omitted, the port defaults to `80` for HTTP and `443` for HTTPS.\\n\\nPassing a HostConfig is deprecated and will go away soon, please pass a string.\"\n },\n \"task\": {\n \"type\": \"string\",\n \"description\": \"Optional task to run when starting the development server. Should reference a script in the package.json of the application.\"\n }\n },\n \"additionalProperties\": false\n },\n \"LocalHostConfig\": {\n \"type\": \"object\",\n \"additionalProperties\": false,\n \"properties\": {\n \"host\": {\n \"type\": \"string\",\n \"description\": \"The hostname or IP address of the server. This can be a domain name (e.g., `example.com`) or an IP address (e.g., `192.168.1.1`).\"\n },\n \"protocol\": {\n \"type\": \"string\",\n \"enum\": [\"http\", \"https\"],\n \"description\": \"The protocol to be used for the connection.\\n- `http`: Hypertext Transfer Protocol (HTTP).\\n- `https`: Secure Hypertext Transfer Protocol (HTTPS).\\n\\n*\"\n },\n \"port\": {\n \"type\": \"number\",\n \"description\": \"The port number to be used for the connection. Common values include `80` for HTTP and `443` for HTTPS.\"\n }\n }\n },\n \"ChildApplication\": {\n \"type\": \"object\",\n \"properties\": {\n \"vercel\": {\n \"$ref\": \"#/definitions/Vercel\",\n \"deprecated\": \"This is being replaced by the `projectId` field below.\"\n },\n \"projectId\": {\n \"type\": \"string\",\n \"description\": \"Vercel project ID, only required if the application name / id is different to the Vercel project name.\",\n \"deprecated\": \"Instead, the application id should match the Vercel project name.\"\n },\n \"packageName\": {\n \"type\": \"string\",\n \"description\": \"The name used to run the application, e.g. the `name` field in the `package.json`.\\n\\nThis is used by the local proxy to map the application config to the locally running app.\\n\\nThis is only necessary when the application name does not match the `name` used in `package.json`.\"\n },\n \"production\": {\n \"$ref\": \"#/definitions/HostConfig\",\n \"deprecated\": \"This is a duplicate of the `development.fallback` field and this will be removed soon.\"\n },\n \"development\": {\n \"$ref\": \"#/definitions/Development\"\n },\n \"routing\": {\n \"$ref\": \"#/definitions/Routing\",\n \"description\": \"Groups of path expressions that are routed to this application.\"\n }\n },\n \"required\": [\"routing\"],\n \"additionalProperties\": false\n },\n \"Routing\": {\n \"type\": \"array\",\n \"items\": {\n \"$ref\": \"#/definitions/PathGroup\"\n }\n },\n \"PathGroup\": {\n \"type\": \"object\",\n \"properties\": {\n \"group\": {\n \"type\": \"string\",\n \"description\": \"Optional group name for the paths\"\n },\n \"flag\": {\n \"type\": \"string\",\n \"description\": \"flag name that can be used to enable/disable all paths in the group\"\n },\n \"paths\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"string\"\n }\n }\n },\n \"required\": [\"paths\"],\n \"additionalProperties\": false\n },\n \"ChildConfig\": {\n \"type\": \"object\",\n \"properties\": {\n \"$schema\": {\n \"type\": \"string\"\n },\n \"version\": {\n \"type\": \"string\",\n \"const\": \"1\"\n },\n \"options\": {\n \"$ref\": \"#/definitions/Options\"\n },\n \"partOf\": {\n \"type\": \"string\",\n \"description\": \"Applications that only serve a subset of the microfrontend routes only need to reference the name of the primary application that owns the full microfrontends configuration.\"\n }\n },\n \"required\": [\"partOf\"],\n \"additionalProperties\": false\n }\n }\n}\n","import type { JSONSchema7 } from 'json-schema';\nimport jsonSchema from '../../../../schema/schema.json';\n\nexport const SCHEMA = jsonSchema as JSONSchema7;\n"],"mappings":";AAAA,SAAS,aAAa;AACtB,SAAS,WAA6B;;;AC4E/B,IAAM,qBAAN,cAEG,MAAM;AAAA,EAKd,YAAY,SAAiB,MAAqC;AAChE,UAAM,SAAS,EAAE,OAAO,MAAM,MAAM,CAAC;AACrC,SAAK,OAAO;AACZ,SAAK,SAAS,MAAM,UAAU;AAC9B,SAAK,OAAO,MAAM,QAAS;AAC3B,SAAK,UAAU,MAAM;AACrB,UAAM,kBAAkB,MAAM,kBAAkB;AAAA,EAClD;AAAA,EAEA,UAAmB;AACjB,WAAO,KAAK,SAAS;AAAA,EACvB;AAAA,EAEA,YAAqB;AACnB,WAAO,CAAC,KAAK,QAAQ;AAAA,EACvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,QACL,UACA,MAC4C;AAC5C,QAAI,MAAM,UAAU;AAClB,YAAM,MAAM,mBAAmB,eAAe,UAAU,KAAK,QAAQ;AACrE,UAAI,KAAK;AACP,eAAO;AAAA,MACT;AAAA,IACF;AAEA,QACE,SAAS,QAAQ;AAAA,MACf;AAAA,IACF,GACA;AACA,aAAO,IAAI,mBAAmB,SAAS,SAAS;AAAA,QAC9C,MAAM;AAAA,QACN,SAAS;AAAA,QACT,QAAQ;AAAA,MACV,CAAC;AAAA,IACH;AAGA,WAAO,IAAI,mBAAmB,SAAS,OAAO;AAAA,EAChD;AAAA,EAEA,OAAO,eACL,UACA,UACmD;AACnD,QAAI,oBAAoB,SAAS,UAAU,UAAU;AACnD,UAAI,SAAS,SAAS,UAAU;AAC9B,eAAO,IAAI,mBAAmB,mBAAmB,aAAa;AAAA,UAC5D,MAAM;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,QACV,CAAC;AAAA,MACH;AACA,UAAI,SAAS,SAAS,UAAU;AAC9B,eAAO,IAAI;AAAA,UACT,sCAAsC;AAAA,UACtC;AAAA,YACE,MAAM;AAAA,YACN,SAAS;AAAA,YACT,QAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,QAAI,oBAAoB,aAAa;AACnC,aAAO,IAAI;AAAA,QACT,oBAAoB;AAAA,QACpB;AAAA,UACE,MAAM;AAAA,UACN,SAAS;AAAA,UACT,QAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,OAAO,OACL,KACA,MAC4C;AAC5C,QAAI,eAAe,oBAAoB;AACrC,aAAO;AAAA,IACT;AAGA,QAAI,eAAe,OAAO;AACxB,aAAO,mBAAmB,QAAQ,KAAK,IAAI;AAAA,IAC7C;AAGA,QAAI,OAAO,QAAQ,YAAY,QAAQ,MAAM;AAC3C,UAAI,aAAa,OAAO,OAAO,IAAI,YAAY,UAAU;AACvD,eAAO,mBAAmB,QAAQ,IAAI,MAAM,IAAI,OAAO,GAAG,IAAI;AAAA,MAChE;AAAA,IACF;AAEA,WAAO,IAAI,mBAAmB,2BAA2B;AAAA,EAC3D;AACF;;;ACtMA;AAAA,EACE,SAAW;AAAA,EACX,MAAQ;AAAA,EACR,aAAe;AAAA,IACb,QAAU;AAAA,MACR,OAAS;AAAA,QACP;AAAA,UACE,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,SAAW;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA,SAAW;AAAA,UACT,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA,SAAW;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA,cAAgB;AAAA,UACd,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,UAAY,CAAC,cAAc;AAAA,MAC3B,sBAAwB;AAAA,IAC1B;AAAA,IACA,SAAW;AAAA,MACT,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,QAAU;AAAA,UACR,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,YAAc;AAAA,QAChB;AAAA,QACA,kBAAoB;AAAA,UAClB,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,YAAc;AAAA,UACZ,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,YAAc;AAAA,QAChB;AAAA,QACA,gBAAkB;AAAA,UAChB,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,sBAAwB;AAAA,IAC1B;AAAA,IACA,eAAiB;AAAA,MACf,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,kBAAoB;AAAA,UAClB,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,sBAAwB;AAAA,IAC1B;AAAA,IACA,mBAAqB;AAAA,MACnB,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,sBAAwB;AAAA,IAC1B;AAAA,IACA,oBAAsB;AAAA,MACpB,MAAQ;AAAA,MACR,sBAAwB;AAAA,QACtB,MAAQ;AAAA,MACV;AAAA,MACA,eAAiB;AAAA,QACf,aAAe;AAAA,MACjB;AAAA,IACF;AAAA,IACA,aAAe;AAAA,MACb,OAAS;AAAA,QACP;AAAA,UACE,MAAQ;AAAA,QACV;AAAA,QACA;AAAA,UACE,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAsB;AAAA,MACpB,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,QAAU;AAAA,UACR,MAAQ;AAAA,UACR,YAAc;AAAA,QAChB;AAAA,QACA,WAAa;AAAA,UACX,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,YAAc;AAAA,QAChB;AAAA,QACA,aAAe;AAAA,UACb,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,YAAc;AAAA,UACZ,MAAQ;AAAA,UACR,YAAc;AAAA,QAChB;AAAA,QACA,aAAe;AAAA,UACb,MAAQ;AAAA,QACV;AAAA,MACF;AAAA,MACA,sBAAwB;AAAA,IAC1B;AAAA,IACA,QAAU;AAAA,MACR,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,WAAa;AAAA,UACX,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,UAAY,CAAC,WAAW;AAAA,MACxB,sBAAwB;AAAA,IAC1B;AAAA,IACA,YAAc;AAAA,MACZ,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,UAAY;AAAA,UACV,MAAQ;AAAA,UACR,MAAQ,CAAC,QAAQ,OAAO;AAAA,UACxB,aAAe;AAAA,QACjB;AAAA,QACA,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,UAAY,CAAC,MAAM;AAAA,MACnB,sBAAwB;AAAA,IAC1B;AAAA,IACA,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,OAAS;AAAA,UACP,OAAS;AAAA,YACP;AAAA,cACE,MAAQ;AAAA,YACV;AAAA,YACA;AAAA,cACE,MAAQ;AAAA,YACV;AAAA,YACA;AAAA,cACE,MAAQ;AAAA,YACV;AAAA,UACF;AAAA,UACA,aAAe;AAAA,QACjB;AAAA,QACA,WAAa;AAAA,UACX,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,YAAc;AAAA,QAChB;AAAA,QACA,UAAY;AAAA,UACV,OAAS;AAAA,YACP;AAAA,cACE,MAAQ;AAAA,YACV;AAAA,YACA;AAAA,cACE,MAAQ;AAAA,YACV;AAAA,UACF;AAAA,UACA,aAAe;AAAA,QACjB;AAAA,QACA,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,sBAAwB;AAAA,IAC1B;AAAA,IACA,iBAAmB;AAAA,MACjB,MAAQ;AAAA,MACR,sBAAwB;AAAA,MACxB,YAAc;AAAA,QACZ,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,UAAY;AAAA,UACV,MAAQ;AAAA,UACR,MAAQ,CAAC,QAAQ,OAAO;AAAA,UACxB,aAAe;AAAA,QACjB;AAAA,QACA,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,IACF;AAAA,IACA,kBAAoB;AAAA,MAClB,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,QAAU;AAAA,UACR,MAAQ;AAAA,UACR,YAAc;AAAA,QAChB;AAAA,QACA,WAAa;AAAA,UACX,MAAQ;AAAA,UACR,aAAe;AAAA,UACf,YAAc;AAAA,QAChB;AAAA,QACA,aAAe;AAAA,UACb,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,YAAc;AAAA,UACZ,MAAQ;AAAA,UACR,YAAc;AAAA,QAChB;AAAA,QACA,aAAe;AAAA,UACb,MAAQ;AAAA,QACV;AAAA,QACA,SAAW;AAAA,UACT,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,UAAY,CAAC,SAAS;AAAA,MACtB,sBAAwB;AAAA,IAC1B;AAAA,IACA,SAAW;AAAA,MACT,MAAQ;AAAA,MACR,OAAS;AAAA,QACP,MAAQ;AAAA,MACV;AAAA,IACF;AAAA,IACA,WAAa;AAAA,MACX,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,MAAQ;AAAA,UACN,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,QACA,OAAS;AAAA,UACP,MAAQ;AAAA,UACR,OAAS;AAAA,YACP,MAAQ;AAAA,UACV;AAAA,QACF;AAAA,MACF;AAAA,MACA,UAAY,CAAC,OAAO;AAAA,MACpB,sBAAwB;AAAA,IAC1B;AAAA,IACA,aAAe;AAAA,MACb,MAAQ;AAAA,MACR,YAAc;AAAA,QACZ,SAAW;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA,SAAW;AAAA,UACT,MAAQ;AAAA,UACR,OAAS;AAAA,QACX;AAAA,QACA,SAAW;AAAA,UACT,MAAQ;AAAA,QACV;AAAA,QACA,QAAU;AAAA,UACR,MAAQ;AAAA,UACR,aAAe;AAAA,QACjB;AAAA,MACF;AAAA,MACA,UAAY,CAAC,QAAQ;AAAA,MACrB,sBAAwB;AAAA,IAC1B;AAAA,EACF;AACF;;;ACnSO,IAAM,SAAS;;;AHKtB,SAAS,gBACP,QACe;AACf,MAAI,CAAC,QAAQ;AACX,WAAO,CAAC;AAAA,EACV;AACA,SAAO,OAAO,OAAO,CAAC,UAAU;AAC9B,WACE,MAAM,YAAY,0BAA0B,MAAM,YAAY;AAAA,EAElE,CAAC;AACH;AAEO,SAAS,eAAe,cAA8B;AAC3D,QAAM,eAAe,MAAM,YAAY;AACvC,QAAM,MAAM,IAAI,IAAI;AACpB,QAAM,WAAW,IAAI,QAAQ,MAAM;AACnC,QAAM,UAAU,SAAS,YAAY;AACrC,MAAI,CAAC,SAAS;AACZ,UAAM,IAAI;AAAA,MACR;AAAA,KAAsC,IAAI,WAAW,gBAAgB,SAAS,MAAM,GAAG,EAAE,WAAW,QAAQ,CAAC;AAAA;AAAA;AAAA,MAC7G,EAAE,MAAM,UAAU,SAAS,wBAAwB;AAAA,IACrD;AAAA,EACF;AACA,SAAO;AACT;","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vercel/microfrontends",
3
- "version": "1.0.1-canary.5",
3
+ "version": "1.1.1-canary.0",
4
4
  "private": false,
5
5
  "description": "Defines configuration and utilities for microfrontends development",
6
6
  "keywords": [