@bleedingdev/modern-js-backend-federation-contracts 3.9.0-ultramodern.8 → 3.9.3-ultramodern.1

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 (33) hide show
  1. package/dist/cjs/backend-federation-contract/build-artifact.js +140 -62
  2. package/dist/cjs/backend-federation-contract/constants.js +5 -1
  3. package/dist/cjs/backend-federation-contract/index.js +36 -0
  4. package/dist/cjs/backend-federation-contract/renderer-profile.js +164 -0
  5. package/dist/cjs/backend-federation-contract/renderer-router-bindings.js +179 -0
  6. package/dist/cjs/backend-federation-contract/runtime-build-artifact.js +57 -0
  7. package/dist/esm/backend-federation-contract/build-artifact.mjs +140 -65
  8. package/dist/esm/backend-federation-contract/constants.mjs +3 -2
  9. package/dist/esm/backend-federation-contract/index.mjs +5 -2
  10. package/dist/esm/backend-federation-contract/renderer-profile.mjs +111 -0
  11. package/dist/esm/backend-federation-contract/renderer-router-bindings.mjs +138 -0
  12. package/dist/esm/backend-federation-contract/runtime-build-artifact.mjs +19 -0
  13. package/dist/esm-node/backend-federation-contract/build-artifact.mjs +140 -65
  14. package/dist/esm-node/backend-federation-contract/constants.mjs +3 -2
  15. package/dist/esm-node/backend-federation-contract/index.mjs +5 -2
  16. package/dist/esm-node/backend-federation-contract/renderer-profile.mjs +112 -0
  17. package/dist/esm-node/backend-federation-contract/renderer-router-bindings.mjs +139 -0
  18. package/dist/esm-node/backend-federation-contract/runtime-build-artifact.mjs +20 -0
  19. package/dist/types/backend-federation-contract/build-artifact.d.ts +3 -2
  20. package/dist/types/backend-federation-contract/constants.d.ts +2 -1
  21. package/dist/types/backend-federation-contract/index.d.ts +7 -3
  22. package/dist/types/backend-federation-contract/renderer-profile.d.ts +31 -0
  23. package/dist/types/backend-federation-contract/renderer-router-bindings.d.ts +27 -0
  24. package/dist/types/backend-federation-contract/runtime-build-artifact.d.ts +7 -0
  25. package/dist/types/backend-federation-contract/types.d.ts +21 -11
  26. package/package.json +11 -9
  27. package/src/backend-federation-contract/build-artifact.ts +248 -58
  28. package/src/backend-federation-contract/constants.ts +5 -1
  29. package/src/backend-federation-contract/index.ts +28 -0
  30. package/src/backend-federation-contract/renderer-profile.ts +238 -0
  31. package/src/backend-federation-contract/renderer-router-bindings.ts +336 -0
  32. package/src/backend-federation-contract/runtime-build-artifact.ts +48 -0
  33. package/src/backend-federation-contract/types.ts +27 -5
@@ -28,6 +28,7 @@ var __webpack_require__ = {};
28
28
  var __webpack_exports__ = {};
29
29
  __webpack_require__.r(__webpack_exports__);
30
30
  __webpack_require__.d(__webpack_exports__, {
31
+ assertUltramodernBuildArtifact: ()=>assertUltramodernBuildArtifact,
31
32
  createUltramodernBuildArtifact: ()=>createUltramodernBuildArtifact,
32
33
  isUltramodernBuildArtifact: ()=>isUltramodernBuildArtifact,
33
34
  stampUltramodernBuildArtifactIdentity: ()=>stampUltramodernBuildArtifactIdentity,
@@ -36,8 +37,42 @@ __webpack_require__.d(__webpack_exports__, {
36
37
  });
37
38
  const external_constants_js_namespaceObject = require("./constants.js");
38
39
  const external_delivery_unit_js_namespaceObject = require("./delivery-unit.js");
40
+ const external_renderer_profile_js_namespaceObject = require("./renderer-profile.js");
41
+ const external_renderer_router_bindings_js_namespaceObject = require("./renderer-router-bindings.js");
39
42
  const external_validation_core_js_namespaceObject = require("./validation-core.js");
40
- const createUltramodernBuildArtifact = (record)=>{
43
+ const immutableRendererProfile = (profile)=>Object.freeze({
44
+ ...profile,
45
+ compiler: Object.freeze({
46
+ ...profile.compiler
47
+ }),
48
+ hydration: Object.freeze({
49
+ ...profile.hydration
50
+ }),
51
+ router: Object.freeze({
52
+ ...profile.router
53
+ })
54
+ });
55
+ const validateUiRouterBindings = (ui, primaryEntryName, path)=>{
56
+ const errors = [];
57
+ if (!Object.hasOwn(ui, 'routerBindings')) {
58
+ (0, external_validation_core_js_namespaceObject.addError)(errors, path, 'is required on the UI surface.');
59
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
60
+ }
61
+ const bindings = ui.routerBindings;
62
+ errors.push(...(0, external_renderer_router_bindings_js_namespaceObject.validateRendererRouterBindings)(bindings, (0, external_validation_core_js_namespaceObject.isRecord)(bindings) ? Object.keys(bindings) : [], path).errors);
63
+ if ('string' == typeof primaryEntryName && (!(0, external_validation_core_js_namespaceObject.isRecord)(bindings) || !Object.hasOwn(bindings, primaryEntryName))) (0, external_validation_core_js_namespaceObject.addError)(errors, path, 'must include the primary renderer entry.');
64
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
65
+ };
66
+ const createUltramodernBuildArtifact = (record, options = {})=>{
67
+ if (Object.hasOwn(options, 'ui')) {
68
+ if (!options.ui) throw new Error('artifact.ui must contain an explicit identity and profile.');
69
+ const errors = [
70
+ ...(0, external_renderer_profile_js_namespaceObject.validateRendererIdentity)(options.ui.identity, 'artifact.ui.identity').errors,
71
+ ...(0, external_renderer_profile_js_namespaceObject.validateRendererProfile)(options.ui.profile, 'artifact.ui.profile').errors,
72
+ ...validateUiRouterBindings(options.ui, (0, external_validation_core_js_namespaceObject.isRecord)(options.ui.identity) ? options.ui.identity.entryName : void 0, 'artifact.ui.routerBindings').errors
73
+ ];
74
+ if (errors.length) throw new Error((0, external_validation_core_js_namespaceObject.formatBackendFederationValidationErrors)(errors));
75
+ }
41
76
  const deliveryUnit = {
42
77
  appId: record.appId,
43
78
  build: record.buildMarker,
@@ -50,41 +85,30 @@ const createUltramodernBuildArtifact = (record)=>{
50
85
  unitId: record.unitId,
51
86
  version: record.version
52
87
  };
53
- const api = {
54
- appId: deliveryUnit.appId,
55
- build: deliveryUnit.build,
56
- buildMarker: deliveryUnit.buildMarker,
57
- deployProfile: deliveryUnit.deployProfile,
58
- kind: deliveryUnit.kind,
59
- packageName: deliveryUnit.packageName,
60
- schemaVersion: deliveryUnit.schemaVersion,
61
- sourceRevision: deliveryUnit.sourceRevision,
62
- surface: 'api',
63
- unitId: deliveryUnit.unitId,
64
- version: deliveryUnit.version
65
- };
66
- const ui = {
67
- appId: deliveryUnit.appId,
68
- build: deliveryUnit.build,
69
- buildMarker: deliveryUnit.buildMarker,
70
- deployProfile: deliveryUnit.deployProfile,
71
- kind: deliveryUnit.kind,
72
- packageName: deliveryUnit.packageName,
73
- schemaVersion: deliveryUnit.schemaVersion,
74
- sourceRevision: deliveryUnit.sourceRevision,
75
- surface: 'ui',
76
- unitId: deliveryUnit.unitId,
77
- version: deliveryUnit.version
78
- };
79
- return {
88
+ const artifact = {
80
89
  deliveryUnit,
81
90
  kind: 'ultramodern-build-artifact',
82
- schemaVersion: external_constants_js_namespaceObject.DELIVERY_UNIT_SCHEMA_VERSION,
91
+ schemaVersion: external_constants_js_namespaceObject.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION,
83
92
  surfaces: {
84
- api,
85
- ui
93
+ api: {
94
+ ...deliveryUnit,
95
+ surface: 'api'
96
+ },
97
+ ...options.ui ? {
98
+ ui: {
99
+ ...deliveryUnit,
100
+ surface: 'ui',
101
+ rendererIdentity: Object.freeze({
102
+ ...options.ui.identity
103
+ }),
104
+ rendererProfile: immutableRendererProfile(options.ui.profile),
105
+ routerBindings: (0, external_renderer_router_bindings_js_namespaceObject.immutableRendererRouterBindings)(options.ui.routerBindings)
106
+ }
107
+ } : {}
86
108
  }
87
109
  };
110
+ assertUltramodernBuildArtifact(artifact);
111
+ return artifact;
88
112
  };
89
113
  const validateUltramodernBuildArtifact = (value, path = 'artifact')=>{
90
114
  const errors = [];
@@ -92,14 +116,24 @@ const validateUltramodernBuildArtifact = (value, path = 'artifact')=>{
92
116
  (0, external_validation_core_js_namespaceObject.addError)(errors, path, 'must be an object.');
93
117
  return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
94
118
  }
95
- if (value.schemaVersion !== external_constants_js_namespaceObject.DELIVERY_UNIT_SCHEMA_VERSION) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.schemaVersion`, `must be ${external_constants_js_namespaceObject.DELIVERY_UNIT_SCHEMA_VERSION}.`);
119
+ for (const field of Object.keys(value))if (![
120
+ 'schemaVersion',
121
+ 'kind',
122
+ 'deliveryUnit',
123
+ 'surfaces'
124
+ ].includes(field)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.${field}`, 'is not a supported field.');
125
+ if (value.schemaVersion !== external_constants_js_namespaceObject.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.schemaVersion`, `must be ${external_constants_js_namespaceObject.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION}.`);
96
126
  if ('ultramodern-build-artifact' !== value.kind) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.kind`, 'must be "ultramodern-build-artifact".');
97
127
  const deliveryUnit = value.deliveryUnit;
98
128
  errors.push(...(0, external_delivery_unit_js_namespaceObject.validateDeliveryUnitRecord)(deliveryUnit, {
99
- path: `${path}.deliveryUnit`,
100
- allowBuildAlias: true
129
+ path: `${path}.deliveryUnit`
101
130
  }).errors);
102
131
  if ((0, external_validation_core_js_namespaceObject.isRecord)(deliveryUnit)) {
132
+ for (const field of [
133
+ 'rendererIdentity',
134
+ 'rendererProfile',
135
+ 'routerBindings'
136
+ ])if (Object.hasOwn(deliveryUnit, field)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.deliveryUnit.${field}`, 'is only allowed on the UI surface.');
103
137
  const build = (0, external_validation_core_js_namespaceObject.nonEmptyString)(deliveryUnit.build);
104
138
  const buildMarker = (0, external_validation_core_js_namespaceObject.nonEmptyString)(deliveryUnit.buildMarker);
105
139
  if (build) {
@@ -111,15 +145,16 @@ const validateUltramodernBuildArtifact = (value, path = 'artifact')=>{
111
145
  (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.surfaces`, 'must be an object.');
112
146
  return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
113
147
  }
148
+ for (const surface of Object.keys(surfaces))if ('api' !== surface && 'ui' !== surface) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.surfaces.${surface}`, 'is not a supported surface.');
114
149
  for (const surface of [
115
150
  'ui',
116
151
  'api'
117
152
  ]){
153
+ if ('ui' === surface && !Object.hasOwn(surfaces, 'ui')) continue;
118
154
  const marker = surfaces[surface];
119
155
  const markerPath = `${path}.surfaces.${surface}`;
120
156
  errors.push(...(0, external_delivery_unit_js_namespaceObject.validateDeliveryUnitRecord)(marker, {
121
- path: markerPath,
122
- allowBuildAlias: true
157
+ path: markerPath
123
158
  }).errors);
124
159
  if (!(0, external_validation_core_js_namespaceObject.isRecord)(marker)) continue;
125
160
  const markerBuild = (0, external_validation_core_js_namespaceObject.nonEmptyString)(marker.build);
@@ -128,52 +163,95 @@ const validateUltramodernBuildArtifact = (value, path = 'artifact')=>{
128
163
  if (markerBuildMarker && markerBuild !== markerBuildMarker) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.build`, 'must match buildMarker.');
129
164
  } else (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.build`, 'must be non-empty string.');
130
165
  if (marker.surface !== surface) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.surface`, `must be "${surface}".`);
166
+ if ('api' === surface) {
167
+ for (const field of [
168
+ 'rendererIdentity',
169
+ 'rendererProfile',
170
+ 'routerBindings'
171
+ ])if (Object.hasOwn(marker, field)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.${field}`, 'is forbidden on the API surface.');
172
+ } else {
173
+ errors.push(...(0, external_renderer_profile_js_namespaceObject.validateRendererIdentity)(marker.rendererIdentity, `${markerPath}.rendererIdentity`).errors, ...(0, external_renderer_profile_js_namespaceObject.validateRendererProfile)(marker.rendererProfile, `${markerPath}.rendererProfile`).errors);
174
+ const rendererIdentity = (0, external_validation_core_js_namespaceObject.recordField)(marker, 'rendererIdentity');
175
+ const rendererProfile = (0, external_validation_core_js_namespaceObject.recordField)(marker, 'rendererProfile');
176
+ errors.push(...validateUiRouterBindings(marker, rendererIdentity?.entryName, `${markerPath}.routerBindings`).errors);
177
+ if (rendererIdentity) {
178
+ if (rendererIdentity.appId !== marker.appId) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.rendererIdentity.appId`, 'must match the UI delivery-unit appId.');
179
+ if (rendererIdentity.buildId !== marker.buildMarker) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.rendererIdentity.buildId`, 'must match the UI delivery-unit buildMarker.');
180
+ }
181
+ if (rendererIdentity && rendererProfile) {
182
+ for (const field of [
183
+ 'renderer',
184
+ 'protocolVersion'
185
+ ])if (rendererIdentity[field] !== rendererProfile[field]) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.rendererProfile.${field}`, 'must match the renderer identity.');
186
+ }
187
+ }
131
188
  for (const field of external_constants_js_namespaceObject.DELIVERY_UNIT_IDENTITY_FIELDS){
132
- const deliveryUnitValue = (0, external_delivery_unit_js_namespaceObject.deliveryUnitIdentityFieldValue)(deliveryUnit, field, {
133
- allowBuildAlias: true
134
- });
135
- const markerValue = (0, external_delivery_unit_js_namespaceObject.deliveryUnitIdentityFieldValue)(marker, field, {
136
- allowBuildAlias: true
137
- });
189
+ const deliveryUnitValue = (0, external_delivery_unit_js_namespaceObject.deliveryUnitIdentityFieldValue)(deliveryUnit, field);
190
+ const markerValue = (0, external_delivery_unit_js_namespaceObject.deliveryUnitIdentityFieldValue)(marker, field);
138
191
  if (void 0 !== deliveryUnitValue && void 0 !== markerValue && deliveryUnitValue !== markerValue) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.${field}`, `must match ${path}.deliveryUnit.${field}.`);
139
192
  }
193
+ if ((0, external_validation_core_js_namespaceObject.isRecord)(deliveryUnit)) {
194
+ for (const field of [
195
+ 'appId',
196
+ 'packageName',
197
+ 'version',
198
+ 'deployProfile',
199
+ 'schemaVersion',
200
+ 'kind'
201
+ ])if (marker[field] !== deliveryUnit[field]) (0, external_validation_core_js_namespaceObject.addError)(errors, `${markerPath}.${field}`, `must match ${path}.deliveryUnit.${field}.`);
202
+ }
140
203
  }
141
204
  return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
142
205
  };
143
206
  const isUltramodernBuildArtifact = (value)=>validateUltramodernBuildArtifact(value).ok;
144
- const stampUltramodernBuildArtifactIdentity = (artifact, identity)=>({
207
+ function assertUltramodernBuildArtifact(value, path = 'artifact') {
208
+ const result = validateUltramodernBuildArtifact(value, path);
209
+ if (!result.ok) throw new Error((0, external_validation_core_js_namespaceObject.formatBackendFederationValidationErrors)(result.errors));
210
+ }
211
+ const stampUltramodernBuildArtifactIdentity = (artifact, identity)=>{
212
+ assertUltramodernBuildArtifact(artifact);
213
+ const stamped = {
214
+ build: identity.buildMarker,
215
+ buildMarker: identity.buildMarker,
216
+ sourceRevision: identity.sourceRevision
217
+ };
218
+ const stamp = (value)=>({
219
+ ...value,
220
+ ...stamped
221
+ });
222
+ const result = {
145
223
  ...artifact,
146
- deliveryUnit: {
147
- ...artifact.deliveryUnit,
148
- build: identity.buildMarker,
149
- buildMarker: identity.buildMarker,
150
- sourceRevision: identity.sourceRevision
151
- },
224
+ deliveryUnit: stamp(artifact.deliveryUnit),
152
225
  surfaces: {
153
- ui: {
154
- ...artifact.surfaces.ui,
155
- build: identity.buildMarker,
156
- buildMarker: identity.buildMarker,
157
- sourceRevision: identity.sourceRevision
158
- },
159
- api: {
160
- ...artifact.surfaces.api,
161
- build: identity.buildMarker,
162
- buildMarker: identity.buildMarker,
163
- sourceRevision: identity.sourceRevision
164
- }
226
+ api: stamp(artifact.surfaces.api),
227
+ ...artifact.surfaces.ui ? {
228
+ ui: {
229
+ ...stamp(artifact.surfaces.ui),
230
+ rendererIdentity: Object.freeze({
231
+ ...artifact.surfaces.ui.rendererIdentity,
232
+ buildId: identity.buildMarker
233
+ }),
234
+ rendererProfile: immutableRendererProfile(artifact.surfaces.ui.rendererProfile),
235
+ routerBindings: (0, external_renderer_router_bindings_js_namespaceObject.immutableRendererRouterBindings)(artifact.surfaces.ui.routerBindings)
236
+ }
237
+ } : {}
165
238
  }
166
- });
239
+ };
240
+ assertUltramodernBuildArtifact(result);
241
+ return result;
242
+ };
167
243
  const stampUltramodernBuildArtifactSourceRevision = (artifact, sourceRevision)=>stampUltramodernBuildArtifactIdentity(artifact, {
168
244
  buildMarker: artifact.deliveryUnit.buildMarker,
169
245
  sourceRevision
170
246
  });
247
+ exports.assertUltramodernBuildArtifact = __webpack_exports__.assertUltramodernBuildArtifact;
171
248
  exports.createUltramodernBuildArtifact = __webpack_exports__.createUltramodernBuildArtifact;
172
249
  exports.isUltramodernBuildArtifact = __webpack_exports__.isUltramodernBuildArtifact;
173
250
  exports.stampUltramodernBuildArtifactIdentity = __webpack_exports__.stampUltramodernBuildArtifactIdentity;
174
251
  exports.stampUltramodernBuildArtifactSourceRevision = __webpack_exports__.stampUltramodernBuildArtifactSourceRevision;
175
252
  exports.validateUltramodernBuildArtifact = __webpack_exports__.validateUltramodernBuildArtifact;
176
253
  for(var __rspack_i in __webpack_exports__)if (-1 === [
254
+ "assertUltramodernBuildArtifact",
177
255
  "createUltramodernBuildArtifact",
178
256
  "isUltramodernBuildArtifact",
179
257
  "stampUltramodernBuildArtifactIdentity",
@@ -31,7 +31,7 @@ const BACKEND_FEDERATION_EFFECT_EXPOSE = './effect-api';
31
31
  const BACKEND_FEDERATION_MANIFEST_FILE = 'backend-mf-manifest.json';
32
32
  const BACKEND_FEDERATION_REMOTE_ENTRY_FILE = 'backendRemoteEntry.cjs';
33
33
  const BACKEND_FEDERATION_CONTRACT_VERSION = 'microvertical-server-effect-v1';
34
- const BACKEND_FEDERATION_NODE_ADAPTER_VERSION = 'backend-mf-effect-v1';
34
+ const BACKEND_FEDERATION_NODE_ADAPTER_VERSION = 'backend-mf-effect-v2';
35
35
  const DELIVERY_UNIT_SCHEMA_VERSION = 1;
36
36
  const DELIVERY_UNIT_KIND = 'microvertical-delivery-unit';
37
37
  const DELIVERY_UNIT_DEPLOY_PROFILE = 'cloudflare-ssr-mf-effect-v1';
@@ -41,6 +41,7 @@ const DELIVERY_UNIT_IDENTITY_FIELDS = [
41
41
  'sourceRevision'
42
42
  ];
43
43
  const ULTRAMODERN_BUILD_ARTIFACT_FILE = 'ultramodern-build.json';
44
+ const ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION = 2;
44
45
  const ULTRAMODERN_BUILD_ARTIFACT_PATH = `shared/${ULTRAMODERN_BUILD_ARTIFACT_FILE}`;
45
46
  const ULTRAMODERN_BUILD_MODULE_FILE = 'ultramodern-build.ts';
46
47
  const ULTRAMODERN_BUILD_MODULE_PATH = `shared/${ULTRAMODERN_BUILD_MODULE_FILE}`;
@@ -56,6 +57,7 @@ __webpack_require__.d(__webpack_exports__, {}, {
56
57
  DELIVERY_UNIT_SCHEMA_VERSION: DELIVERY_UNIT_SCHEMA_VERSION,
57
58
  ULTRAMODERN_BUILD_ARTIFACT_FILE: ULTRAMODERN_BUILD_ARTIFACT_FILE,
58
59
  ULTRAMODERN_BUILD_ARTIFACT_PATH: ULTRAMODERN_BUILD_ARTIFACT_PATH,
60
+ ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION: ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION,
59
61
  ULTRAMODERN_BUILD_MODULE_FILE: ULTRAMODERN_BUILD_MODULE_FILE,
60
62
  ULTRAMODERN_BUILD_MODULE_PATH: ULTRAMODERN_BUILD_MODULE_PATH
61
63
  });
@@ -70,6 +72,7 @@ exports.DELIVERY_UNIT_KIND = __webpack_exports__.DELIVERY_UNIT_KIND;
70
72
  exports.DELIVERY_UNIT_SCHEMA_VERSION = __webpack_exports__.DELIVERY_UNIT_SCHEMA_VERSION;
71
73
  exports.ULTRAMODERN_BUILD_ARTIFACT_FILE = __webpack_exports__.ULTRAMODERN_BUILD_ARTIFACT_FILE;
72
74
  exports.ULTRAMODERN_BUILD_ARTIFACT_PATH = __webpack_exports__.ULTRAMODERN_BUILD_ARTIFACT_PATH;
75
+ exports.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION = __webpack_exports__.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION;
73
76
  exports.ULTRAMODERN_BUILD_MODULE_FILE = __webpack_exports__.ULTRAMODERN_BUILD_MODULE_FILE;
74
77
  exports.ULTRAMODERN_BUILD_MODULE_PATH = __webpack_exports__.ULTRAMODERN_BUILD_MODULE_PATH;
75
78
  for(var __rspack_i in __webpack_exports__)if (-1 === [
@@ -84,6 +87,7 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
84
87
  "DELIVERY_UNIT_SCHEMA_VERSION",
85
88
  "ULTRAMODERN_BUILD_ARTIFACT_FILE",
86
89
  "ULTRAMODERN_BUILD_ARTIFACT_PATH",
90
+ "ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION",
87
91
  "ULTRAMODERN_BUILD_MODULE_FILE",
88
92
  "ULTRAMODERN_BUILD_MODULE_PATH"
89
93
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
@@ -37,10 +37,14 @@ __webpack_require__.d(__webpack_exports__, {
37
37
  DELIVERY_UNIT_IDENTITY_FIELDS: ()=>external_constants_js_namespaceObject.DELIVERY_UNIT_IDENTITY_FIELDS,
38
38
  DELIVERY_UNIT_KIND: ()=>external_constants_js_namespaceObject.DELIVERY_UNIT_KIND,
39
39
  DELIVERY_UNIT_SCHEMA_VERSION: ()=>external_constants_js_namespaceObject.DELIVERY_UNIT_SCHEMA_VERSION,
40
+ RENDERER_PROTOCOL_VERSION: ()=>external_renderer_profile_js_namespaceObject.RENDERER_PROTOCOL_VERSION,
40
41
  ULTRAMODERN_BUILD_ARTIFACT_FILE: ()=>external_constants_js_namespaceObject.ULTRAMODERN_BUILD_ARTIFACT_FILE,
41
42
  ULTRAMODERN_BUILD_ARTIFACT_PATH: ()=>external_constants_js_namespaceObject.ULTRAMODERN_BUILD_ARTIFACT_PATH,
43
+ ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION: ()=>external_constants_js_namespaceObject.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION,
42
44
  ULTRAMODERN_BUILD_MODULE_FILE: ()=>external_constants_js_namespaceObject.ULTRAMODERN_BUILD_MODULE_FILE,
43
45
  ULTRAMODERN_BUILD_MODULE_PATH: ()=>external_constants_js_namespaceObject.ULTRAMODERN_BUILD_MODULE_PATH,
46
+ assertRendererProfileCompatibility: ()=>external_renderer_profile_js_namespaceObject.assertRendererProfileCompatibility,
47
+ assertUltramodernBuildArtifact: ()=>external_build_artifact_js_namespaceObject.assertUltramodernBuildArtifact,
44
48
  backendFederationExposeNames: ()=>external_metadata_js_namespaceObject.backendFederationExposeNames,
45
49
  backendFederationMetadata: ()=>external_metadata_js_namespaceObject.backendFederationMetadata,
46
50
  backendFederationVersionBoundary: ()=>external_metadata_js_namespaceObject.backendFederationVersionBoundary,
@@ -48,8 +52,10 @@ __webpack_require__.d(__webpack_exports__, {
48
52
  deliveryUnitContractBlock: ()=>external_delivery_unit_js_namespaceObject.deliveryUnitContractBlock,
49
53
  deliveryUnitIdentityFieldValue: ()=>external_delivery_unit_js_namespaceObject.deliveryUnitIdentityFieldValue,
50
54
  formatBackendFederationValidationErrors: ()=>external_validation_core_js_namespaceObject.formatBackendFederationValidationErrors,
55
+ immutableRendererRouterBindings: ()=>external_renderer_router_bindings_js_namespaceObject.immutableRendererRouterBindings,
51
56
  isUltramodernBuildArtifact: ()=>external_build_artifact_js_namespaceObject.isUltramodernBuildArtifact,
52
57
  nonEmptyString: ()=>external_validation_core_js_namespaceObject.nonEmptyString,
58
+ resolveUltramodernBuildArtifact: ()=>external_runtime_build_artifact_js_namespaceObject.resolveUltramodernBuildArtifact,
53
59
  stampUltramodernBuildArtifactIdentity: ()=>external_build_artifact_js_namespaceObject.stampUltramodernBuildArtifactIdentity,
54
60
  stampUltramodernBuildArtifactSourceRevision: ()=>external_build_artifact_js_namespaceObject.stampUltramodernBuildArtifactSourceRevision,
55
61
  toBackendFederationExposeNames: ()=>external_metadata_js_namespaceObject.toBackendFederationExposeNames,
@@ -59,12 +65,20 @@ __webpack_require__.d(__webpack_exports__, {
59
65
  validateDeliveryUnitContractBlock: ()=>external_delivery_unit_js_namespaceObject.validateDeliveryUnitContractBlock,
60
66
  validateDeliveryUnitIdentity: ()=>external_delivery_unit_js_namespaceObject.validateDeliveryUnitIdentity,
61
67
  validateDeliveryUnitRecord: ()=>external_delivery_unit_js_namespaceObject.validateDeliveryUnitRecord,
68
+ validateRendererIdentity: ()=>external_renderer_profile_js_namespaceObject.validateRendererIdentity,
69
+ validateRendererProfile: ()=>external_renderer_profile_js_namespaceObject.validateRendererProfile,
70
+ validateRendererProfileCompatibility: ()=>external_renderer_profile_js_namespaceObject.validateRendererProfileCompatibility,
71
+ validateRendererRouterBindings: ()=>external_renderer_router_bindings_js_namespaceObject.validateRendererRouterBindings,
72
+ validateRendererRouterPackageIdentity: ()=>external_renderer_profile_js_namespaceObject.validateRendererRouterPackageIdentity,
62
73
  validateUltramodernBuildArtifact: ()=>external_build_artifact_js_namespaceObject.validateUltramodernBuildArtifact
63
74
  });
64
75
  const external_build_artifact_js_namespaceObject = require("./build-artifact.js");
65
76
  const external_constants_js_namespaceObject = require("./constants.js");
66
77
  const external_delivery_unit_js_namespaceObject = require("./delivery-unit.js");
67
78
  const external_metadata_js_namespaceObject = require("./metadata.js");
79
+ const external_renderer_profile_js_namespaceObject = require("./renderer-profile.js");
80
+ const external_renderer_router_bindings_js_namespaceObject = require("./renderer-router-bindings.js");
81
+ const external_runtime_build_artifact_js_namespaceObject = require("./runtime-build-artifact.js");
68
82
  const external_validation_core_js_namespaceObject = require("./validation-core.js");
69
83
  exports.BACKEND_FEDERATION_CONTRACT_VERSION = __webpack_exports__.BACKEND_FEDERATION_CONTRACT_VERSION;
70
84
  exports.BACKEND_FEDERATION_EFFECT_EXPOSE = __webpack_exports__.BACKEND_FEDERATION_EFFECT_EXPOSE;
@@ -75,10 +89,14 @@ exports.DELIVERY_UNIT_DEPLOY_PROFILE = __webpack_exports__.DELIVERY_UNIT_DEPLOY_
75
89
  exports.DELIVERY_UNIT_IDENTITY_FIELDS = __webpack_exports__.DELIVERY_UNIT_IDENTITY_FIELDS;
76
90
  exports.DELIVERY_UNIT_KIND = __webpack_exports__.DELIVERY_UNIT_KIND;
77
91
  exports.DELIVERY_UNIT_SCHEMA_VERSION = __webpack_exports__.DELIVERY_UNIT_SCHEMA_VERSION;
92
+ exports.RENDERER_PROTOCOL_VERSION = __webpack_exports__.RENDERER_PROTOCOL_VERSION;
78
93
  exports.ULTRAMODERN_BUILD_ARTIFACT_FILE = __webpack_exports__.ULTRAMODERN_BUILD_ARTIFACT_FILE;
79
94
  exports.ULTRAMODERN_BUILD_ARTIFACT_PATH = __webpack_exports__.ULTRAMODERN_BUILD_ARTIFACT_PATH;
95
+ exports.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION = __webpack_exports__.ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION;
80
96
  exports.ULTRAMODERN_BUILD_MODULE_FILE = __webpack_exports__.ULTRAMODERN_BUILD_MODULE_FILE;
81
97
  exports.ULTRAMODERN_BUILD_MODULE_PATH = __webpack_exports__.ULTRAMODERN_BUILD_MODULE_PATH;
98
+ exports.assertRendererProfileCompatibility = __webpack_exports__.assertRendererProfileCompatibility;
99
+ exports.assertUltramodernBuildArtifact = __webpack_exports__.assertUltramodernBuildArtifact;
82
100
  exports.backendFederationExposeNames = __webpack_exports__.backendFederationExposeNames;
83
101
  exports.backendFederationMetadata = __webpack_exports__.backendFederationMetadata;
84
102
  exports.backendFederationVersionBoundary = __webpack_exports__.backendFederationVersionBoundary;
@@ -86,8 +104,10 @@ exports.createUltramodernBuildArtifact = __webpack_exports__.createUltramodernBu
86
104
  exports.deliveryUnitContractBlock = __webpack_exports__.deliveryUnitContractBlock;
87
105
  exports.deliveryUnitIdentityFieldValue = __webpack_exports__.deliveryUnitIdentityFieldValue;
88
106
  exports.formatBackendFederationValidationErrors = __webpack_exports__.formatBackendFederationValidationErrors;
107
+ exports.immutableRendererRouterBindings = __webpack_exports__.immutableRendererRouterBindings;
89
108
  exports.isUltramodernBuildArtifact = __webpack_exports__.isUltramodernBuildArtifact;
90
109
  exports.nonEmptyString = __webpack_exports__.nonEmptyString;
110
+ exports.resolveUltramodernBuildArtifact = __webpack_exports__.resolveUltramodernBuildArtifact;
91
111
  exports.stampUltramodernBuildArtifactIdentity = __webpack_exports__.stampUltramodernBuildArtifactIdentity;
92
112
  exports.stampUltramodernBuildArtifactSourceRevision = __webpack_exports__.stampUltramodernBuildArtifactSourceRevision;
93
113
  exports.toBackendFederationExposeNames = __webpack_exports__.toBackendFederationExposeNames;
@@ -97,6 +117,11 @@ exports.validateBackendFederationMetadata = __webpack_exports__.validateBackendF
97
117
  exports.validateDeliveryUnitContractBlock = __webpack_exports__.validateDeliveryUnitContractBlock;
98
118
  exports.validateDeliveryUnitIdentity = __webpack_exports__.validateDeliveryUnitIdentity;
99
119
  exports.validateDeliveryUnitRecord = __webpack_exports__.validateDeliveryUnitRecord;
120
+ exports.validateRendererIdentity = __webpack_exports__.validateRendererIdentity;
121
+ exports.validateRendererProfile = __webpack_exports__.validateRendererProfile;
122
+ exports.validateRendererProfileCompatibility = __webpack_exports__.validateRendererProfileCompatibility;
123
+ exports.validateRendererRouterBindings = __webpack_exports__.validateRendererRouterBindings;
124
+ exports.validateRendererRouterPackageIdentity = __webpack_exports__.validateRendererRouterPackageIdentity;
100
125
  exports.validateUltramodernBuildArtifact = __webpack_exports__.validateUltramodernBuildArtifact;
101
126
  for(var __rspack_i in __webpack_exports__)if (-1 === [
102
127
  "BACKEND_FEDERATION_CONTRACT_VERSION",
@@ -108,10 +133,14 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
108
133
  "DELIVERY_UNIT_IDENTITY_FIELDS",
109
134
  "DELIVERY_UNIT_KIND",
110
135
  "DELIVERY_UNIT_SCHEMA_VERSION",
136
+ "RENDERER_PROTOCOL_VERSION",
111
137
  "ULTRAMODERN_BUILD_ARTIFACT_FILE",
112
138
  "ULTRAMODERN_BUILD_ARTIFACT_PATH",
139
+ "ULTRAMODERN_BUILD_ARTIFACT_SCHEMA_VERSION",
113
140
  "ULTRAMODERN_BUILD_MODULE_FILE",
114
141
  "ULTRAMODERN_BUILD_MODULE_PATH",
142
+ "assertRendererProfileCompatibility",
143
+ "assertUltramodernBuildArtifact",
115
144
  "backendFederationExposeNames",
116
145
  "backendFederationMetadata",
117
146
  "backendFederationVersionBoundary",
@@ -119,8 +148,10 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
119
148
  "deliveryUnitContractBlock",
120
149
  "deliveryUnitIdentityFieldValue",
121
150
  "formatBackendFederationValidationErrors",
151
+ "immutableRendererRouterBindings",
122
152
  "isUltramodernBuildArtifact",
123
153
  "nonEmptyString",
154
+ "resolveUltramodernBuildArtifact",
124
155
  "stampUltramodernBuildArtifactIdentity",
125
156
  "stampUltramodernBuildArtifactSourceRevision",
126
157
  "toBackendFederationExposeNames",
@@ -130,6 +161,11 @@ for(var __rspack_i in __webpack_exports__)if (-1 === [
130
161
  "validateDeliveryUnitContractBlock",
131
162
  "validateDeliveryUnitIdentity",
132
163
  "validateDeliveryUnitRecord",
164
+ "validateRendererIdentity",
165
+ "validateRendererProfile",
166
+ "validateRendererProfileCompatibility",
167
+ "validateRendererRouterBindings",
168
+ "validateRendererRouterPackageIdentity",
133
169
  "validateUltramodernBuildArtifact"
134
170
  ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
135
171
  Object.defineProperty(exports, '__esModule', {
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ var __webpack_require__ = {};
3
+ (()=>{
4
+ __webpack_require__.d = (exports1, getters, values)=>{
5
+ var define = (defs, kind)=>{
6
+ for(var key in defs)if (__webpack_require__.o(defs, key) && !__webpack_require__.o(exports1, key)) Object.defineProperty(exports1, key, {
7
+ enumerable: true,
8
+ [kind]: defs[key]
9
+ });
10
+ };
11
+ define(getters, "get");
12
+ define(values, "value");
13
+ };
14
+ })();
15
+ (()=>{
16
+ __webpack_require__.o = (obj, prop)=>Object.prototype.hasOwnProperty.call(obj, prop);
17
+ })();
18
+ (()=>{
19
+ __webpack_require__.r = (exports1)=>{
20
+ if ("u" > typeof Symbol && Symbol.toStringTag) Object.defineProperty(exports1, Symbol.toStringTag, {
21
+ value: 'Module'
22
+ });
23
+ Object.defineProperty(exports1, '__esModule', {
24
+ value: true
25
+ });
26
+ };
27
+ })();
28
+ var __webpack_exports__ = {};
29
+ __webpack_require__.r(__webpack_exports__);
30
+ __webpack_require__.d(__webpack_exports__, {
31
+ RENDERER_PROTOCOL_VERSION: ()=>RENDERER_PROTOCOL_VERSION,
32
+ assertRendererProfileCompatibility: ()=>assertRendererProfileCompatibility,
33
+ validateRendererIdentity: ()=>validateRendererIdentity,
34
+ validateRendererProfile: ()=>validateRendererProfile,
35
+ validateRendererProfileCompatibility: ()=>validateRendererProfileCompatibility,
36
+ validateRendererRouterPackageIdentity: ()=>validateRendererRouterPackageIdentity
37
+ });
38
+ const external_validation_core_js_namespaceObject = require("./validation-core.js");
39
+ const RENDERER_PROTOCOL_VERSION = 1;
40
+ const exactFields = (value, fields, path, errors)=>{
41
+ for (const field of Object.keys(value))if (!fields.includes(field)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.${field}`, 'is not a supported field.');
42
+ };
43
+ const canonicalString = (value)=>'string' == typeof value && value.length > 0 && value.trim() === value;
44
+ const exactPackageVersion = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*)(?:\.(?:0|[1-9]\d*|\d*[A-Za-z-][0-9A-Za-z-]*))*))?(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$/;
45
+ const validateRenderer = (value, path, errors)=>{
46
+ if (!canonicalString(value.renderer) || !/^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(value.renderer)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.renderer`, 'must be a lowercase renderer token separated by single hyphens.');
47
+ if (value.protocolVersion !== RENDERER_PROTOCOL_VERSION) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.protocolVersion`, `must be ${RENDERER_PROTOCOL_VERSION}.`);
48
+ };
49
+ const validateRendererIdentity = (value, path = 'rendererIdentity')=>{
50
+ const errors = [];
51
+ if (!(0, external_validation_core_js_namespaceObject.isRecord)(value)) {
52
+ (0, external_validation_core_js_namespaceObject.addError)(errors, path, 'must be an object.');
53
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
54
+ }
55
+ exactFields(value, [
56
+ 'renderer',
57
+ 'appId',
58
+ 'entryName',
59
+ 'protocolVersion',
60
+ 'buildId'
61
+ ], path, errors);
62
+ validateRenderer(value, path, errors);
63
+ for (const field of [
64
+ 'appId',
65
+ 'entryName',
66
+ 'buildId'
67
+ ])if (!canonicalString(value[field])) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.${field}`, 'must be a non-empty trimmed string.');
68
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
69
+ };
70
+ const validatePackageIdentity = (value, path, errors, router = false, hydration = false)=>{
71
+ if (!(0, external_validation_core_js_namespaceObject.isRecord)(value)) return void (0, external_validation_core_js_namespaceObject.addError)(errors, path, 'must be an object.');
72
+ exactFields(value, router ? [
73
+ 'name',
74
+ 'version',
75
+ 'coreName',
76
+ 'coreVersion'
77
+ ] : [
78
+ 'name',
79
+ 'version'
80
+ ], path, errors);
81
+ if (!canonicalString(value.name)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.name`, 'must be a non-empty trimmed string.');
82
+ if (router && !canonicalString(value.coreName)) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.coreName`, 'must be a non-empty trimmed string.');
83
+ for (const field of router ? [
84
+ 'version',
85
+ 'coreVersion'
86
+ ] : [
87
+ 'version'
88
+ ])if (!canonicalString(value[field]) || !(exactPackageVersion.test(value[field]) || hydration && /^[1-9]\d*$/.test(value[field]))) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.${field}`, 'must be an exact version.');
89
+ };
90
+ const validateRendererRouterPackageIdentity = (value, path = 'routerPackage')=>{
91
+ const errors = [];
92
+ validatePackageIdentity(value, path, errors, true);
93
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
94
+ };
95
+ const validateRendererProfile = (value, path = 'rendererProfile')=>{
96
+ const errors = [];
97
+ if (!(0, external_validation_core_js_namespaceObject.isRecord)(value)) {
98
+ (0, external_validation_core_js_namespaceObject.addError)(errors, path, 'must be an object.');
99
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
100
+ }
101
+ exactFields(value, [
102
+ 'renderer',
103
+ 'protocolVersion',
104
+ 'compiler',
105
+ 'hydration',
106
+ 'router'
107
+ ], path, errors);
108
+ validateRenderer(value, path, errors);
109
+ validatePackageIdentity(value.compiler, `${path}.compiler`, errors);
110
+ validatePackageIdentity(value.hydration, `${path}.hydration`, errors, false, true);
111
+ validatePackageIdentity(value.router, `${path}.router`, errors, true);
112
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
113
+ };
114
+ const validateRendererProfileCompatibility = (expected, actual, path = 'rendererProfile')=>{
115
+ const errors = [
116
+ ...validateRendererProfile(expected, `${path}.expected`).errors,
117
+ ...validateRendererProfile(actual, `${path}.actual`).errors
118
+ ];
119
+ if (errors.length || !(0, external_validation_core_js_namespaceObject.isRecord)(expected) || !(0, external_validation_core_js_namespaceObject.isRecord)(actual)) return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
120
+ if (expected.renderer !== actual.renderer) {
121
+ (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.renderer`, 'cross-renderer components are unsupported.');
122
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
123
+ }
124
+ if (expected.protocolVersion !== actual.protocolVersion) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.protocolVersion`, 'must match the consuming renderer protocol.');
125
+ for (const field of [
126
+ 'compiler',
127
+ 'hydration',
128
+ 'router'
129
+ ]){
130
+ const expectedPackage = expected[field];
131
+ const actualPackage = actual[field];
132
+ for (const identityField of 'router' === field ? [
133
+ 'name',
134
+ 'version',
135
+ 'coreName',
136
+ 'coreVersion'
137
+ ] : [
138
+ 'name',
139
+ 'version'
140
+ ])if (expectedPackage[identityField] !== actualPackage[identityField]) (0, external_validation_core_js_namespaceObject.addError)(errors, `${path}.${field}.${identityField}`, 'must match the consuming renderer profile.');
141
+ }
142
+ return (0, external_validation_core_js_namespaceObject.validationResult)(errors);
143
+ };
144
+ const assertRendererProfileCompatibility = (expected, actual)=>{
145
+ const result = validateRendererProfileCompatibility(expected, actual);
146
+ if (!result.ok) throw new Error((0, external_validation_core_js_namespaceObject.formatBackendFederationValidationErrors)(result.errors));
147
+ };
148
+ exports.RENDERER_PROTOCOL_VERSION = __webpack_exports__.RENDERER_PROTOCOL_VERSION;
149
+ exports.assertRendererProfileCompatibility = __webpack_exports__.assertRendererProfileCompatibility;
150
+ exports.validateRendererIdentity = __webpack_exports__.validateRendererIdentity;
151
+ exports.validateRendererProfile = __webpack_exports__.validateRendererProfile;
152
+ exports.validateRendererProfileCompatibility = __webpack_exports__.validateRendererProfileCompatibility;
153
+ exports.validateRendererRouterPackageIdentity = __webpack_exports__.validateRendererRouterPackageIdentity;
154
+ for(var __rspack_i in __webpack_exports__)if (-1 === [
155
+ "RENDERER_PROTOCOL_VERSION",
156
+ "assertRendererProfileCompatibility",
157
+ "validateRendererIdentity",
158
+ "validateRendererProfile",
159
+ "validateRendererProfileCompatibility",
160
+ "validateRendererRouterPackageIdentity"
161
+ ].indexOf(__rspack_i)) exports[__rspack_i] = __webpack_exports__[__rspack_i];
162
+ Object.defineProperty(exports, '__esModule', {
163
+ value: true
164
+ });