@bleedingdev/modern-js-backend-federation-contracts 0.0.0 → 3.9.0-ultramodern.6

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 (38) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cjs/backend-federation-contract/build-artifact.js +185 -0
  3. package/dist/cjs/backend-federation-contract/constants.js +92 -0
  4. package/dist/cjs/backend-federation-contract/delivery-unit.js +130 -0
  5. package/dist/cjs/backend-federation-contract/index.js +137 -0
  6. package/dist/cjs/backend-federation-contract/metadata.js +133 -0
  7. package/dist/cjs/backend-federation-contract/types.js +18 -0
  8. package/dist/cjs/backend-federation-contract/validation-core.js +85 -0
  9. package/dist/esm/backend-federation-contract/build-artifact.mjs +135 -0
  10. package/dist/esm/backend-federation-contract/constants.mjs +18 -0
  11. package/dist/esm/backend-federation-contract/delivery-unit.mjs +74 -0
  12. package/dist/esm/backend-federation-contract/index.mjs +5 -0
  13. package/dist/esm/backend-federation-contract/metadata.mjs +80 -0
  14. package/dist/esm/backend-federation-contract/types.mjs +0 -0
  15. package/dist/esm/backend-federation-contract/validation-core.mjs +29 -0
  16. package/dist/esm-node/backend-federation-contract/build-artifact.mjs +136 -0
  17. package/dist/esm-node/backend-federation-contract/constants.mjs +19 -0
  18. package/dist/esm-node/backend-federation-contract/delivery-unit.mjs +75 -0
  19. package/dist/esm-node/backend-federation-contract/index.mjs +6 -0
  20. package/dist/esm-node/backend-federation-contract/metadata.mjs +81 -0
  21. package/dist/esm-node/backend-federation-contract/types.mjs +1 -0
  22. package/dist/esm-node/backend-federation-contract/validation-core.mjs +30 -0
  23. package/dist/types/backend-federation-contract/build-artifact.d.ts +9 -0
  24. package/dist/types/backend-federation-contract/constants.d.ts +14 -0
  25. package/dist/types/backend-federation-contract/delivery-unit.d.ts +9 -0
  26. package/dist/types/backend-federation-contract/index.d.ts +7 -0
  27. package/dist/types/backend-federation-contract/metadata.d.ts +7 -0
  28. package/dist/types/backend-federation-contract/types.d.ts +60 -0
  29. package/dist/types/backend-federation-contract/validation-core.d.ts +8 -0
  30. package/package.json +38 -5
  31. package/src/backend-federation-contract/build-artifact.ts +224 -0
  32. package/src/backend-federation-contract/constants.ts +33 -0
  33. package/src/backend-federation-contract/delivery-unit.ts +170 -0
  34. package/src/backend-federation-contract/index.ts +56 -0
  35. package/src/backend-federation-contract/metadata.ts +225 -0
  36. package/src/backend-federation-contract/types.ts +73 -0
  37. package/src/backend-federation-contract/validation-core.ts +67 -0
  38. package/README.md +0 -3
@@ -0,0 +1,73 @@
1
+ import type {
2
+ DELIVERY_UNIT_DEPLOY_PROFILE,
3
+ DELIVERY_UNIT_KIND,
4
+ DELIVERY_UNIT_SCHEMA_VERSION,
5
+ } from './constants';
6
+
7
+ export type DeliveryUnitIdentity = {
8
+ unitId: string;
9
+ buildMarker: string;
10
+ sourceRevision: string;
11
+ };
12
+
13
+ export type DeliveryUnitRecord = DeliveryUnitIdentity & {
14
+ schemaVersion: typeof DELIVERY_UNIT_SCHEMA_VERSION;
15
+ kind: typeof DELIVERY_UNIT_KIND;
16
+ appId: string;
17
+ packageName: string;
18
+ version: string;
19
+ deployProfile: typeof DELIVERY_UNIT_DEPLOY_PROFILE;
20
+ };
21
+
22
+ export type DeliveryUnitContractBlock = Omit<
23
+ DeliveryUnitRecord,
24
+ 'appId' | 'deployProfile'
25
+ >;
26
+
27
+ export type UltramodernBuildDeliveryUnit = DeliveryUnitRecord & {
28
+ build: string;
29
+ };
30
+
31
+ export type UltramodernBuildSurface =
32
+ | (UltramodernBuildDeliveryUnit & { surface: 'ui' })
33
+ | (UltramodernBuildDeliveryUnit & { surface: 'api' });
34
+
35
+ export type UltramodernBuildArtifact = {
36
+ schemaVersion: typeof DELIVERY_UNIT_SCHEMA_VERSION;
37
+ kind: 'ultramodern-build-artifact';
38
+ deliveryUnit: UltramodernBuildDeliveryUnit;
39
+ surfaces: {
40
+ ui: UltramodernBuildDeliveryUnit & { surface: 'ui' };
41
+ api: UltramodernBuildDeliveryUnit & { surface: 'api' };
42
+ };
43
+ };
44
+
45
+ export type BackendFederationContractValidationError = {
46
+ path: string;
47
+ message: string;
48
+ };
49
+
50
+ export type BackendFederationContractValidationResult = {
51
+ ok: boolean;
52
+ errors: BackendFederationContractValidationError[];
53
+ };
54
+
55
+ export type ValidateDeliveryUnitIdentityOptions = {
56
+ path?: string;
57
+ allowBuildAlias?: boolean;
58
+ };
59
+
60
+ export type ValidateBackendFederationMetadataOptions = {
61
+ path?: string;
62
+ expectedContractVersion?: string | false;
63
+ expectedNodeAdapterVersion?: string | false;
64
+ validateDeliveryUnit?: boolean;
65
+ requireEffectExpose?: boolean;
66
+ requireEffectRuntime?: boolean;
67
+ requireVersionFields?: boolean;
68
+ };
69
+
70
+ export type ValidateBackendFederationManifestOptions =
71
+ ValidateBackendFederationMetadataOptions & {
72
+ requireBackendFederation?: boolean;
73
+ };
@@ -0,0 +1,67 @@
1
+ import type {
2
+ BackendFederationContractValidationError,
3
+ BackendFederationContractValidationResult,
4
+ } from './types';
5
+
6
+ export const isRecord = (value: unknown): value is Record<string, unknown> =>
7
+ typeof value === 'object' && value !== null && !Array.isArray(value);
8
+
9
+ export const nonEmptyString = (value: unknown): string | undefined =>
10
+ typeof value === 'string' && value.trim().length > 0 ? value : undefined;
11
+
12
+ export const validationResult = (
13
+ errors: BackendFederationContractValidationError[],
14
+ ): BackendFederationContractValidationResult => ({
15
+ ok: errors.length === 0,
16
+ errors,
17
+ });
18
+
19
+ export const addError = (
20
+ errors: BackendFederationContractValidationError[],
21
+ path: string,
22
+ message: string,
23
+ ) => {
24
+ errors.push({ path, message });
25
+ };
26
+
27
+ export const recordField = (
28
+ value: Record<string, unknown> | undefined,
29
+ field: string,
30
+ ) => {
31
+ const fieldValue = value?.[field];
32
+ return isRecord(fieldValue) ? fieldValue : undefined;
33
+ };
34
+
35
+ export const formatBackendFederationValidationErrors = (
36
+ errors: BackendFederationContractValidationError[],
37
+ ): string => errors.map(error => `${error.path}: ${error.message}`).join('; ');
38
+
39
+ export const validateVersionField = (
40
+ errors: BackendFederationContractValidationError[],
41
+ record: Record<string, unknown>,
42
+ field: 'contractVersion' | 'nodeAdapterVersion',
43
+ expected: string | false,
44
+ path: string,
45
+ required: boolean,
46
+ ) => {
47
+ const compatibility = recordField(record, 'compatibility');
48
+ const executionSurfaces = recordField(record, 'executionSurfaces');
49
+ const nodeSurface = recordField(executionSurfaces, 'node');
50
+ const actual =
51
+ nonEmptyString(record[field]) ??
52
+ nonEmptyString(compatibility?.[field]) ??
53
+ (field === 'nodeAdapterVersion'
54
+ ? nonEmptyString(nodeSurface?.adapterVersion)
55
+ : undefined);
56
+
57
+ if (!actual) {
58
+ if (required) {
59
+ addError(errors, `${path}.${field}`, 'must be a non-empty string.');
60
+ }
61
+ return;
62
+ }
63
+
64
+ if (expected !== false && actual !== expected) {
65
+ addError(errors, `${path}.${field}`, `must be "${expected}".`);
66
+ }
67
+ };
package/README.md DELETED
@@ -1,3 +0,0 @@
1
- # @bleedingdev/modern-js-backend-federation-contracts
2
-
3
- This 0.0.0 version only registers the package name so npm trusted publishing can be configured. It contains no runtime implementation. Use the subsequent UltraModern.js release, published from the repository workflow with provenance.