@bleedingdev/modern-js-utils 3.5.0-ultramodern.4 → 3.5.0-ultramodern.40
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.
- package/dist/cjs/universal/backend-federation-contract/build-artifact.js +144 -0
- package/dist/cjs/universal/backend-federation-contract/constants.js +92 -0
- package/dist/cjs/universal/backend-federation-contract/delivery-unit.js +130 -0
- package/dist/cjs/universal/backend-federation-contract/index.js +134 -0
- package/dist/cjs/universal/backend-federation-contract/metadata.js +133 -0
- package/dist/cjs/universal/backend-federation-contract/types.js +18 -0
- package/dist/cjs/universal/backend-federation-contract/validation-core.js +85 -0
- package/dist/cjs/universal/index.js +41 -6
- package/dist/esm/universal/backend-federation-contract/build-artifact.mjs +97 -0
- package/dist/esm/universal/backend-federation-contract/constants.mjs +18 -0
- package/dist/esm/universal/backend-federation-contract/delivery-unit.mjs +74 -0
- package/dist/esm/universal/backend-federation-contract/index.mjs +5 -0
- package/dist/esm/universal/backend-federation-contract/metadata.mjs +80 -0
- package/dist/esm/universal/backend-federation-contract/types.mjs +0 -0
- package/dist/esm/universal/backend-federation-contract/validation-core.mjs +29 -0
- package/dist/esm/universal/index.mjs +1 -0
- package/dist/esm-node/universal/backend-federation-contract/build-artifact.mjs +98 -0
- package/dist/esm-node/universal/backend-federation-contract/constants.mjs +19 -0
- package/dist/esm-node/universal/backend-federation-contract/delivery-unit.mjs +75 -0
- package/dist/esm-node/universal/backend-federation-contract/index.mjs +6 -0
- package/dist/esm-node/universal/backend-federation-contract/metadata.mjs +81 -0
- package/dist/esm-node/universal/backend-federation-contract/types.mjs +1 -0
- package/dist/esm-node/universal/backend-federation-contract/validation-core.mjs +30 -0
- package/dist/esm-node/universal/index.mjs +1 -0
- package/dist/types/import.d.ts +1 -1
- package/dist/types/universal/backend-federation-contract/build-artifact.d.ts +5 -0
- package/dist/types/universal/backend-federation-contract/constants.d.ts +14 -0
- package/dist/types/universal/backend-federation-contract/delivery-unit.d.ts +9 -0
- package/dist/types/universal/backend-federation-contract/index.d.ts +7 -0
- package/dist/types/universal/backend-federation-contract/metadata.d.ts +7 -0
- package/dist/types/universal/backend-federation-contract/types.d.ts +60 -0
- package/dist/types/universal/backend-federation-contract/validation-core.d.ts +8 -0
- package/dist/types/universal/index.d.ts +1 -0
- package/package.json +6 -6
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
export { createUltramodernBuildArtifact, isUltramodernBuildArtifact, stampUltramodernBuildArtifactSourceRevision, validateUltramodernBuildArtifact } from "./build-artifact.mjs";
|
|
3
|
+
export { BACKEND_FEDERATION_CONTRACT_VERSION, BACKEND_FEDERATION_EFFECT_EXPOSE, BACKEND_FEDERATION_MANIFEST_FILE, BACKEND_FEDERATION_NODE_ADAPTER_VERSION, BACKEND_FEDERATION_REMOTE_ENTRY_FILE, DELIVERY_UNIT_DEPLOY_PROFILE, DELIVERY_UNIT_IDENTITY_FIELDS, DELIVERY_UNIT_KIND, DELIVERY_UNIT_SCHEMA_VERSION, ULTRAMODERN_BUILD_ARTIFACT_FILE, ULTRAMODERN_BUILD_ARTIFACT_PATH, ULTRAMODERN_BUILD_MODULE_FILE, ULTRAMODERN_BUILD_MODULE_PATH } from "./constants.mjs";
|
|
4
|
+
export { deliveryUnitContractBlock, deliveryUnitIdentityFieldValue, toDeliveryUnitIdentity, validateDeliveryUnitContractBlock, validateDeliveryUnitIdentity, validateDeliveryUnitRecord } from "./delivery-unit.mjs";
|
|
5
|
+
export { backendFederationExposeNames, backendFederationMetadata, backendFederationVersionBoundary, toBackendFederationExposeNames, validateBackendFederationManifest, validateBackendFederationMetadata } from "./metadata.mjs";
|
|
6
|
+
export { formatBackendFederationValidationErrors, nonEmptyString } from "./validation-core.mjs";
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
import { BACKEND_FEDERATION_CONTRACT_VERSION, BACKEND_FEDERATION_EFFECT_EXPOSE, BACKEND_FEDERATION_NODE_ADAPTER_VERSION, DELIVERY_UNIT_IDENTITY_FIELDS, DELIVERY_UNIT_SCHEMA_VERSION } from "./constants.mjs";
|
|
3
|
+
import { deliveryUnitIdentityFieldValue, validateDeliveryUnitBoundaryIdentity, validateDeliveryUnitContractBlock } from "./delivery-unit.mjs";
|
|
4
|
+
import { addError, isRecord, nonEmptyString, recordField, validateVersionField, validationResult } from "./validation-core.mjs";
|
|
5
|
+
const toBackendFederationExposeNames = (value)=>{
|
|
6
|
+
const names = [];
|
|
7
|
+
if (Array.isArray(value)) for (const expose of value){
|
|
8
|
+
const name = nonEmptyString(expose) ?? (isRecord(expose) ? nonEmptyString(expose.name) : void 0);
|
|
9
|
+
if (name) names.push(name);
|
|
10
|
+
}
|
|
11
|
+
else if (isRecord(value)) names.push(...Object.keys(value).filter((name)=>name.length > 0));
|
|
12
|
+
return Array.from(new Set(names));
|
|
13
|
+
};
|
|
14
|
+
const backendFederationExposeNames = (value)=>{
|
|
15
|
+
if (!isRecord(value)) return [];
|
|
16
|
+
const exposes = toBackendFederationExposeNames(value.exposes);
|
|
17
|
+
const expose = nonEmptyString(value.expose);
|
|
18
|
+
return Array.from(new Set([
|
|
19
|
+
...exposes,
|
|
20
|
+
...expose ? [
|
|
21
|
+
expose
|
|
22
|
+
] : []
|
|
23
|
+
]));
|
|
24
|
+
};
|
|
25
|
+
const backendFederationMetadata = (value)=>isRecord(value) ? recordField(value, 'backendFederation') : void 0;
|
|
26
|
+
const backendFederationVersionBoundary = (value)=>recordField(backendFederationMetadata(value), 'versionBoundary');
|
|
27
|
+
const validateBackendFederationMetadata = (value, options = {})=>{
|
|
28
|
+
const path = options.path ?? 'backendFederation';
|
|
29
|
+
const errors = [];
|
|
30
|
+
if (!isRecord(value)) {
|
|
31
|
+
addError(errors, path, 'must be an object.');
|
|
32
|
+
return validationResult(errors);
|
|
33
|
+
}
|
|
34
|
+
if (options.requireEffectRuntime && 'effect' !== value.runtimeFramework) addError(errors, `${path}.runtimeFramework`, 'must be "effect".');
|
|
35
|
+
if (options.requireEffectRuntime && true !== value.strictEffectApproach) addError(errors, `${path}.strictEffectApproach`, 'must be true.');
|
|
36
|
+
validateVersionField(errors, value, 'contractVersion', options.expectedContractVersion ?? BACKEND_FEDERATION_CONTRACT_VERSION, path, options.requireVersionFields ?? false);
|
|
37
|
+
validateVersionField(errors, value, 'nodeAdapterVersion', options.expectedNodeAdapterVersion ?? BACKEND_FEDERATION_NODE_ADAPTER_VERSION, path, options.requireVersionFields ?? false);
|
|
38
|
+
if (options.requireEffectExpose && !backendFederationExposeNames(value).includes(BACKEND_FEDERATION_EFFECT_EXPOSE)) addError(errors, `${path}.expose`, `must include "${BACKEND_FEDERATION_EFFECT_EXPOSE}".`);
|
|
39
|
+
if (options.validateDeliveryUnit ?? true) {
|
|
40
|
+
const deliveryUnit = recordField(value, 'deliveryUnit');
|
|
41
|
+
if (deliveryUnit) errors.push(...validateDeliveryUnitContractBlock(deliveryUnit, {
|
|
42
|
+
path: `${path}.deliveryUnit`
|
|
43
|
+
}).errors);
|
|
44
|
+
const versionBoundary = recordField(value, 'versionBoundary');
|
|
45
|
+
const versionBoundaryDeliveryUnit = recordField(versionBoundary, 'deliveryUnit');
|
|
46
|
+
if (versionBoundaryDeliveryUnit) errors.push(...validateDeliveryUnitBoundaryIdentity(versionBoundaryDeliveryUnit, `${path}.versionBoundary.deliveryUnit`));
|
|
47
|
+
if (deliveryUnit && versionBoundaryDeliveryUnit) for (const field of DELIVERY_UNIT_IDENTITY_FIELDS){
|
|
48
|
+
const deliveryUnitValue = deliveryUnitIdentityFieldValue(deliveryUnit, field);
|
|
49
|
+
const versionBoundaryDeliveryUnitValue = deliveryUnitIdentityFieldValue(versionBoundaryDeliveryUnit, field);
|
|
50
|
+
if (deliveryUnitValue && versionBoundaryDeliveryUnitValue && deliveryUnitValue !== versionBoundaryDeliveryUnitValue) addError(errors, `${path}.versionBoundary.deliveryUnit.${field}`, `must match ${path}.deliveryUnit.${field}.`);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return validationResult(errors);
|
|
54
|
+
};
|
|
55
|
+
const validateBackendFederationManifest = (value, options = {})=>{
|
|
56
|
+
const path = options.path ?? 'manifest';
|
|
57
|
+
const errors = [];
|
|
58
|
+
if (!isRecord(value)) {
|
|
59
|
+
addError(errors, path, 'must be an object.');
|
|
60
|
+
return validationResult(errors);
|
|
61
|
+
}
|
|
62
|
+
if (void 0 !== value.schemaVersion && value.schemaVersion !== DELIVERY_UNIT_SCHEMA_VERSION) addError(errors, `${path}.schemaVersion`, `must be ${DELIVERY_UNIT_SCHEMA_VERSION}.`);
|
|
63
|
+
const metadata = backendFederationMetadata(value);
|
|
64
|
+
if (metadata) errors.push(...validateBackendFederationMetadata(metadata, {
|
|
65
|
+
...options,
|
|
66
|
+
path: `${path}.backendFederation`,
|
|
67
|
+
requireEffectExpose: false
|
|
68
|
+
}).errors);
|
|
69
|
+
else if (options.requireBackendFederation ?? true) addError(errors, `${path}.backendFederation`, 'must be an object.');
|
|
70
|
+
if (options.requireEffectExpose) {
|
|
71
|
+
const topLevelExposeNames = toBackendFederationExposeNames(value.exposes);
|
|
72
|
+
const metadataExposeNames = backendFederationExposeNames(metadata);
|
|
73
|
+
const exposeNames = new Set([
|
|
74
|
+
...topLevelExposeNames,
|
|
75
|
+
...metadataExposeNames
|
|
76
|
+
]);
|
|
77
|
+
if (!exposeNames.has(BACKEND_FEDERATION_EFFECT_EXPOSE)) addError(errors, `${path}.exposes`, `must include "${BACKEND_FEDERATION_EFFECT_EXPOSE}".`);
|
|
78
|
+
}
|
|
79
|
+
return validationResult(errors);
|
|
80
|
+
};
|
|
81
|
+
export { backendFederationExposeNames, backendFederationMetadata, backendFederationVersionBoundary, toBackendFederationExposeNames, validateBackendFederationManifest, validateBackendFederationMetadata };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import "node:module";
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import "node:module";
|
|
2
|
+
const isRecord = (value)=>'object' == typeof value && null !== value && !Array.isArray(value);
|
|
3
|
+
const nonEmptyString = (value)=>'string' == typeof value && value.trim().length > 0 ? value : void 0;
|
|
4
|
+
const validationResult = (errors)=>({
|
|
5
|
+
ok: 0 === errors.length,
|
|
6
|
+
errors
|
|
7
|
+
});
|
|
8
|
+
const addError = (errors, path, message)=>{
|
|
9
|
+
errors.push({
|
|
10
|
+
path,
|
|
11
|
+
message
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
const recordField = (value, field)=>{
|
|
15
|
+
const fieldValue = value?.[field];
|
|
16
|
+
return isRecord(fieldValue) ? fieldValue : void 0;
|
|
17
|
+
};
|
|
18
|
+
const formatBackendFederationValidationErrors = (errors)=>errors.map((error)=>`${error.path}: ${error.message}`).join('; ');
|
|
19
|
+
const validateVersionField = (errors, record, field, expected, path, required)=>{
|
|
20
|
+
const compatibility = recordField(record, 'compatibility');
|
|
21
|
+
const executionSurfaces = recordField(record, 'executionSurfaces');
|
|
22
|
+
const nodeSurface = recordField(executionSurfaces, 'node');
|
|
23
|
+
const actual = nonEmptyString(record[field]) ?? nonEmptyString(compatibility?.[field]) ?? ('nodeAdapterVersion' === field ? nonEmptyString(nodeSurface?.adapterVersion) : void 0);
|
|
24
|
+
if (!actual) {
|
|
25
|
+
if (required) addError(errors, `${path}.${field}`, 'must be a non-empty string.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
if (false !== expected && actual !== expected) addError(errors, `${path}.${field}`, `must be "${expected}".`);
|
|
29
|
+
};
|
|
30
|
+
export { addError, formatBackendFederationValidationErrors, isRecord, nonEmptyString, recordField, validateVersionField, validationResult };
|
package/dist/types/import.d.ts
CHANGED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { BackendFederationContractValidationResult, DeliveryUnitRecord, UltramodernBuildArtifact } from './types';
|
|
2
|
+
export declare const createUltramodernBuildArtifact: (record: DeliveryUnitRecord) => UltramodernBuildArtifact;
|
|
3
|
+
export declare const validateUltramodernBuildArtifact: (value: unknown, path?: string) => BackendFederationContractValidationResult;
|
|
4
|
+
export declare const isUltramodernBuildArtifact: (value: unknown) => value is UltramodernBuildArtifact;
|
|
5
|
+
export declare const stampUltramodernBuildArtifactSourceRevision: (artifact: UltramodernBuildArtifact, sourceRevision: string) => UltramodernBuildArtifact;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const BACKEND_FEDERATION_EFFECT_EXPOSE = "./effect-api";
|
|
2
|
+
export declare const BACKEND_FEDERATION_MANIFEST_FILE = "backend-mf-manifest.json";
|
|
3
|
+
export declare const BACKEND_FEDERATION_REMOTE_ENTRY_FILE = "backendRemoteEntry.mjs";
|
|
4
|
+
export declare const BACKEND_FEDERATION_CONTRACT_VERSION = "microvertical-server-effect-v1";
|
|
5
|
+
export declare const BACKEND_FEDERATION_NODE_ADAPTER_VERSION = "backend-mf-effect-v1";
|
|
6
|
+
export declare const DELIVERY_UNIT_SCHEMA_VERSION = 1;
|
|
7
|
+
export declare const DELIVERY_UNIT_KIND = "microvertical-delivery-unit";
|
|
8
|
+
export declare const DELIVERY_UNIT_DEPLOY_PROFILE = "cloudflare-ssr-mf-effect-v1";
|
|
9
|
+
export declare const DELIVERY_UNIT_IDENTITY_FIELDS: readonly ['unitId', 'buildMarker', 'sourceRevision'];
|
|
10
|
+
export type DeliveryUnitIdentityField = (typeof DELIVERY_UNIT_IDENTITY_FIELDS)[number];
|
|
11
|
+
export declare const ULTRAMODERN_BUILD_ARTIFACT_FILE = "ultramodern-build.json";
|
|
12
|
+
export declare const ULTRAMODERN_BUILD_ARTIFACT_PATH = "shared/ultramodern-build.json";
|
|
13
|
+
export declare const ULTRAMODERN_BUILD_MODULE_FILE = "ultramodern-build.ts";
|
|
14
|
+
export declare const ULTRAMODERN_BUILD_MODULE_PATH = "shared/ultramodern-build.ts";
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { DeliveryUnitIdentityField } from './constants';
|
|
2
|
+
import type { BackendFederationContractValidationError, BackendFederationContractValidationResult, DeliveryUnitContractBlock, DeliveryUnitIdentity, DeliveryUnitRecord, ValidateDeliveryUnitIdentityOptions } from './types';
|
|
3
|
+
export declare const deliveryUnitIdentityFieldValue: (value: unknown, field: DeliveryUnitIdentityField, options?: Pick<ValidateDeliveryUnitIdentityOptions, 'allowBuildAlias'>) => string | undefined;
|
|
4
|
+
export declare const validateDeliveryUnitIdentity: (value: unknown, options?: ValidateDeliveryUnitIdentityOptions) => BackendFederationContractValidationResult;
|
|
5
|
+
export declare const validateDeliveryUnitContractBlock: (value: unknown, options?: ValidateDeliveryUnitIdentityOptions) => BackendFederationContractValidationResult;
|
|
6
|
+
export declare const validateDeliveryUnitRecord: (value: unknown, options?: ValidateDeliveryUnitIdentityOptions) => BackendFederationContractValidationResult;
|
|
7
|
+
export declare const validateDeliveryUnitBoundaryIdentity: (value: unknown, path: string) => BackendFederationContractValidationError[];
|
|
8
|
+
export declare const deliveryUnitContractBlock: (record: DeliveryUnitRecord) => DeliveryUnitContractBlock;
|
|
9
|
+
export declare const toDeliveryUnitIdentity: (value: unknown) => DeliveryUnitIdentity | undefined;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createUltramodernBuildArtifact, isUltramodernBuildArtifact, stampUltramodernBuildArtifactSourceRevision, validateUltramodernBuildArtifact, } from './build-artifact';
|
|
2
|
+
export type { DeliveryUnitIdentityField } from './constants';
|
|
3
|
+
export { BACKEND_FEDERATION_CONTRACT_VERSION, BACKEND_FEDERATION_EFFECT_EXPOSE, BACKEND_FEDERATION_MANIFEST_FILE, BACKEND_FEDERATION_NODE_ADAPTER_VERSION, BACKEND_FEDERATION_REMOTE_ENTRY_FILE, DELIVERY_UNIT_DEPLOY_PROFILE, DELIVERY_UNIT_IDENTITY_FIELDS, DELIVERY_UNIT_KIND, DELIVERY_UNIT_SCHEMA_VERSION, ULTRAMODERN_BUILD_ARTIFACT_FILE, ULTRAMODERN_BUILD_ARTIFACT_PATH, ULTRAMODERN_BUILD_MODULE_FILE, ULTRAMODERN_BUILD_MODULE_PATH, } from './constants';
|
|
4
|
+
export { deliveryUnitContractBlock, deliveryUnitIdentityFieldValue, toDeliveryUnitIdentity, validateDeliveryUnitContractBlock, validateDeliveryUnitIdentity, validateDeliveryUnitRecord, } from './delivery-unit';
|
|
5
|
+
export { backendFederationExposeNames, backendFederationMetadata, backendFederationVersionBoundary, toBackendFederationExposeNames, validateBackendFederationManifest, validateBackendFederationMetadata, } from './metadata';
|
|
6
|
+
export type { BackendFederationContractValidationError, BackendFederationContractValidationResult, DeliveryUnitContractBlock, DeliveryUnitIdentity, DeliveryUnitRecord, UltramodernBuildArtifact, UltramodernBuildDeliveryUnit, UltramodernBuildSurface, ValidateBackendFederationManifestOptions, ValidateBackendFederationMetadataOptions, ValidateDeliveryUnitIdentityOptions, } from './types';
|
|
7
|
+
export { formatBackendFederationValidationErrors, nonEmptyString, } from './validation-core';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { BackendFederationContractValidationResult, ValidateBackendFederationManifestOptions, ValidateBackendFederationMetadataOptions } from './types';
|
|
2
|
+
export declare const toBackendFederationExposeNames: (value: unknown) => string[];
|
|
3
|
+
export declare const backendFederationExposeNames: (value: unknown) => string[];
|
|
4
|
+
export declare const backendFederationMetadata: (value: unknown) => Record<string, unknown> | undefined;
|
|
5
|
+
export declare const backendFederationVersionBoundary: (value: unknown) => Record<string, unknown> | undefined;
|
|
6
|
+
export declare const validateBackendFederationMetadata: (value: unknown, options?: ValidateBackendFederationMetadataOptions) => BackendFederationContractValidationResult;
|
|
7
|
+
export declare const validateBackendFederationManifest: (value: unknown, options?: ValidateBackendFederationManifestOptions) => BackendFederationContractValidationResult;
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import type { DELIVERY_UNIT_DEPLOY_PROFILE, DELIVERY_UNIT_KIND, DELIVERY_UNIT_SCHEMA_VERSION } from './constants';
|
|
2
|
+
export type DeliveryUnitIdentity = {
|
|
3
|
+
unitId: string;
|
|
4
|
+
buildMarker: string;
|
|
5
|
+
sourceRevision: string;
|
|
6
|
+
};
|
|
7
|
+
export type DeliveryUnitRecord = DeliveryUnitIdentity & {
|
|
8
|
+
schemaVersion: typeof DELIVERY_UNIT_SCHEMA_VERSION;
|
|
9
|
+
kind: typeof DELIVERY_UNIT_KIND;
|
|
10
|
+
appId: string;
|
|
11
|
+
packageName: string;
|
|
12
|
+
version: string;
|
|
13
|
+
deployProfile: typeof DELIVERY_UNIT_DEPLOY_PROFILE;
|
|
14
|
+
};
|
|
15
|
+
export type DeliveryUnitContractBlock = Omit<DeliveryUnitRecord, 'appId' | 'deployProfile'>;
|
|
16
|
+
export type UltramodernBuildDeliveryUnit = DeliveryUnitRecord & {
|
|
17
|
+
build: string;
|
|
18
|
+
};
|
|
19
|
+
export type UltramodernBuildSurface = (UltramodernBuildDeliveryUnit & {
|
|
20
|
+
surface: 'ui';
|
|
21
|
+
}) | (UltramodernBuildDeliveryUnit & {
|
|
22
|
+
surface: 'api';
|
|
23
|
+
});
|
|
24
|
+
export type UltramodernBuildArtifact = {
|
|
25
|
+
schemaVersion: typeof DELIVERY_UNIT_SCHEMA_VERSION;
|
|
26
|
+
kind: 'ultramodern-build-artifact';
|
|
27
|
+
deliveryUnit: UltramodernBuildDeliveryUnit;
|
|
28
|
+
surfaces: {
|
|
29
|
+
ui: UltramodernBuildDeliveryUnit & {
|
|
30
|
+
surface: 'ui';
|
|
31
|
+
};
|
|
32
|
+
api: UltramodernBuildDeliveryUnit & {
|
|
33
|
+
surface: 'api';
|
|
34
|
+
};
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
export type BackendFederationContractValidationError = {
|
|
38
|
+
path: string;
|
|
39
|
+
message: string;
|
|
40
|
+
};
|
|
41
|
+
export type BackendFederationContractValidationResult = {
|
|
42
|
+
ok: boolean;
|
|
43
|
+
errors: BackendFederationContractValidationError[];
|
|
44
|
+
};
|
|
45
|
+
export type ValidateDeliveryUnitIdentityOptions = {
|
|
46
|
+
path?: string;
|
|
47
|
+
allowBuildAlias?: boolean;
|
|
48
|
+
};
|
|
49
|
+
export type ValidateBackendFederationMetadataOptions = {
|
|
50
|
+
path?: string;
|
|
51
|
+
expectedContractVersion?: string | false;
|
|
52
|
+
expectedNodeAdapterVersion?: string | false;
|
|
53
|
+
validateDeliveryUnit?: boolean;
|
|
54
|
+
requireEffectExpose?: boolean;
|
|
55
|
+
requireEffectRuntime?: boolean;
|
|
56
|
+
requireVersionFields?: boolean;
|
|
57
|
+
};
|
|
58
|
+
export type ValidateBackendFederationManifestOptions = ValidateBackendFederationMetadataOptions & {
|
|
59
|
+
requireBackendFederation?: boolean;
|
|
60
|
+
};
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { BackendFederationContractValidationError, BackendFederationContractValidationResult } from './types';
|
|
2
|
+
export declare const isRecord: (value: unknown) => value is Record<string, unknown>;
|
|
3
|
+
export declare const nonEmptyString: (value: unknown) => string | undefined;
|
|
4
|
+
export declare const validationResult: (errors: BackendFederationContractValidationError[]) => BackendFederationContractValidationResult;
|
|
5
|
+
export declare const addError: (errors: BackendFederationContractValidationError[], path: string, message: string) => void;
|
|
6
|
+
export declare const recordField: (value: Record<string, unknown> | undefined, field: string) => Record<string, unknown> | undefined;
|
|
7
|
+
export declare const formatBackendFederationValidationErrors: (errors: BackendFederationContractValidationError[]) => string;
|
|
8
|
+
export declare const validateVersionField: (errors: BackendFederationContractValidationError[], record: Record<string, unknown>, field: 'contractVersion' | 'nodeAdapterVersion', expected: string | false, path: string, required: boolean) => void;
|
package/package.json
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
"modern",
|
|
18
18
|
"modern.js"
|
|
19
19
|
],
|
|
20
|
-
"version": "3.5.0-ultramodern.
|
|
20
|
+
"version": "3.5.0-ultramodern.40",
|
|
21
21
|
"types": "./dist/types/index.d.ts",
|
|
22
22
|
"main": "./dist/cjs/index.js",
|
|
23
23
|
"module": "./dist/esm/index.mjs",
|
|
@@ -181,18 +181,18 @@
|
|
|
181
181
|
},
|
|
182
182
|
"dependencies": {
|
|
183
183
|
"@swc/helpers": "^0.5.23",
|
|
184
|
-
"caniuse-lite": "^1.0.
|
|
184
|
+
"caniuse-lite": "^1.0.30001803",
|
|
185
185
|
"import-meta-resolve": "^4.2.0",
|
|
186
186
|
"lodash": "^4.18.1",
|
|
187
187
|
"lodash-es": "^4.18.1",
|
|
188
188
|
"rslog": "^2.1.3"
|
|
189
189
|
},
|
|
190
190
|
"devDependencies": {
|
|
191
|
-
"@rslib/core": "0.23.
|
|
192
|
-
"@types/node": "^26.
|
|
193
|
-
"@typescript/native-preview": "7.0.0-dev.
|
|
191
|
+
"@rslib/core": "0.23.2",
|
|
192
|
+
"@types/node": "^26.1.1",
|
|
193
|
+
"@typescript/native-preview": "7.0.0-dev.20260707.2",
|
|
194
194
|
"happy-dom": "^20.10.6",
|
|
195
|
-
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.
|
|
195
|
+
"@modern-js/types": "npm:@bleedingdev/modern-js-types@3.5.0-ultramodern.40",
|
|
196
196
|
"@scripts/rstest-config": "2.66.0"
|
|
197
197
|
},
|
|
198
198
|
"peerDependencies": {
|