{"version":3,"file":"edsis-angular-platform-mfe.mjs","sources":["../../../library/angular/platform/mfe/application-profile-name.ts","../../../library/angular/platform/mfe/application-profile.ts","../../../library/angular/platform/mfe/mfe-contract.ts","../../../library/angular/platform/mfe/edsis-angular-platform-mfe.ts"],"sourcesContent":["export const APPLICATION_PROFILE_NAMES = ['mfe-standalone'] as const;\nexport const DEFAULT_APPLICATION_PROFILE_NAME = 'mfe-standalone' as const;\n\nexport type ApplicationProfileName = (typeof APPLICATION_PROFILE_NAMES)[number];\n","import { InjectionToken, makeEnvironmentProviders, type EnvironmentProviders } from '@angular/core';\nimport {\n  provideAppPreferences,\n  provideRuntimeThemeDevice,\n  type AppPreferencesDefaults,\n} from '@edsis/angular/block/themes';\nimport { provideEdsisAuth, type EdsisAuthConfig } from '@edsis/angular/module/auth';\nimport { provideEdsisRuntime, type EdsisRuntimeConfig } from '@edsis/angular/services/runtime';\nimport { provideUiTheme, type ThemeOptions } from '@edsis/theme/styles';\n\nimport {\n  DEFAULT_APPLICATION_PROFILE_NAME,\n  type ApplicationProfileName,\n} from './application-profile-name';\n\nexport {\n  APPLICATION_PROFILE_NAMES,\n  DEFAULT_APPLICATION_PROFILE_NAME,\n  type ApplicationProfileName,\n} from './application-profile-name';\n\n/** Centrally managed visual and structural defaults for a standalone MFE. */\nexport interface ApplicationProfile {\n  readonly name: ApplicationProfileName;\n  readonly defaults: AppPreferencesDefaults;\n}\n\nexport const MFE_STANDALONE_APPLICATION_PROFILE: ApplicationProfile = deepFreezeProfile({\n  name: 'mfe-standalone',\n  defaults: {\n    theme: {\n      mode: 'light',\n      space: 'compact',\n      radius: 'medium',\n      appearance: 'desktop',\n      color: 'default',\n      brand: 'default',\n    },\n    layout: {\n      surface: 'base',\n      type: 'horizontal',\n      width: 'full',\n    },\n    navigation: {\n      orientation: 'horizontal',\n      type: 'flyout',\n      position: 'top',\n      collapsed: false,\n      dockbarMode: 'default',\n    },\n  },\n});\n\nexport const APPLICATION_PROFILES = Object.freeze({\n  'mfe-standalone': MFE_STANDALONE_APPLICATION_PROFILE,\n}) satisfies Readonly<Record<ApplicationProfileName, ApplicationProfile>>;\n\nexport const MFE_APPLICATION_PROFILE = new InjectionToken<ApplicationProfile>(\n  'MFE_APPLICATION_PROFILE',\n);\n\nexport interface StandaloneMfeConfig {\n  readonly auth: EdsisAuthConfig;\n  readonly runtime?: EdsisRuntimeConfig;\n  /** Exact registry field; MFEs cannot invent per-app global profiles. */\n  readonly standaloneProfile: ApplicationProfileName;\n}\n\nexport function applicationProfile(\n  name: ApplicationProfileName = DEFAULT_APPLICATION_PROFILE_NAME,\n): ApplicationProfile {\n  const profiles: Readonly<Record<string, ApplicationProfile | undefined>> = APPLICATION_PROFILES;\n  const profile = profiles[name];\n\n  if (!profile) {\n    throw new Error(`Unknown EDSIS application profile \"${String(name)}\".`);\n  }\n\n  return profile;\n}\n\n/**\n * Composes the global providers used only by a standalone MFE application.\n * Federated feature routes must inherit these singletons from their host and\n * therefore must never call this provider.\n */\nexport function provideStandaloneMfe(config: StandaloneMfeConfig): EnvironmentProviders {\n  const profile = applicationProfile(config.standaloneProfile);\n\n  return makeEnvironmentProviders([\n    { provide: MFE_APPLICATION_PROFILE, useValue: profile },\n    provideEdsisRuntime(config.runtime),\n    provideUiTheme(themeOptionsForProfile(profile)),\n    provideAppPreferences({ defaults: profile.defaults }),\n    provideRuntimeThemeDevice({ appearanceFallback: false }),\n    provideEdsisAuth(config.auth),\n  ]);\n}\n\nfunction themeOptionsForProfile(profile: ApplicationProfile): ThemeOptions {\n  return {\n    mode: profile.defaults.theme.mode,\n    space: profile.defaults.theme.space,\n    radius: profile.defaults.theme.radius,\n    appearance: profile.defaults.theme.appearance,\n    color: profile.defaults.theme.color,\n    brand: profile.defaults.theme.brand,\n  };\n}\n\nfunction deepFreezeProfile(profile: ApplicationProfile): ApplicationProfile {\n  Object.freeze(profile.defaults.theme);\n  Object.freeze(profile.defaults.layout);\n  Object.freeze(profile.defaults.navigation);\n  Object.freeze(profile.defaults);\n  return Object.freeze(profile);\n}\n","import type { Routes } from '@angular/router';\nimport type { NavigationItem } from '@edsis/navigation';\n\nexport const MFE_CONTRACT_VERSION = 1 as const;\nexport const MFE_ENTRY_EXPOSURE = './Mfe' as const;\n\nexport const MFE_EXPOSURE_KINDS = ['contract', 'routes', 'page', 'component'] as const;\nexport const MFE_CAPABILITY_MODES = ['required', 'optional', 'provided'] as const;\n\nexport const MFE_PLATFORM_CAPABILITIES = {\n  auth: 'edsis.auth',\n  loading: 'edsis.loading',\n  navigation: 'edsis.navigation',\n  runtime: 'edsis.runtime',\n  theme: 'edsis.theme',\n} as const;\n\nexport type MfeContractVersion = typeof MFE_CONTRACT_VERSION;\nexport type MfeExposureKind = (typeof MFE_EXPOSURE_KINDS)[number];\nexport type MfeCapabilityMode = (typeof MFE_CAPABILITY_MODES)[number];\nexport type MfeId = string;\nexport type MfeExposureKey = `./${string}`;\nexport type MfeCapabilityId = string;\n\n/** A host capability consumed or supplied by the MFE contract. */\nexport interface MfeCapabilityDescriptor {\n  readonly id: MfeCapabilityId;\n  /** Capability compatibility is versioned by a positive major number. */\n  readonly version: number;\n  readonly mode: MfeCapabilityMode;\n  readonly description?: string;\n}\n\n/** Metadata for every module exposed in the remote federation configuration. */\nexport interface MfeExposureDescriptor {\n  readonly key: MfeExposureKey;\n  readonly kind: MfeExposureKind;\n  /** Contract major in which this exposure became public. */\n  readonly since: MfeContractVersion;\n  /** Export to read from the loaded module. Omit for its default export. */\n  readonly exportName?: string;\n  /** Capability IDs associated with this exposure when it is rendered directly. */\n  readonly capabilities?: readonly MfeCapabilityId[];\n  readonly description?: string;\n}\n\n/**\n * Public, shell-free contract exposed from `./Mfe` by every EDSIS remote.\n *\n * The host owns global shell, theme, authentication, navigation state, runtime,\n * and loading services. The remote contributes only feature routes,\n * navigation metadata, capabilities, and optional direct exposures.\n */\nexport interface MfeContractV1 {\n  readonly contractVersion: MfeContractVersion;\n  readonly id: MfeId;\n  readonly displayName: string;\n  readonly featureRoutes: Routes;\n  readonly navigation: readonly NavigationItem[];\n  readonly capabilities: readonly MfeCapabilityDescriptor[];\n  readonly exposures: readonly MfeExposureDescriptor[];\n}\n\nexport type MfeContract = MfeContractV1;\n\nexport type MfeContractIssueCode =\n  | 'duplicate_capability'\n  | 'duplicate_exposure'\n  | 'invalid_capability'\n  | 'invalid_contract'\n  | 'invalid_exposure'\n  | 'invalid_id'\n  | 'invalid_navigation'\n  | 'invalid_routes'\n  | 'missing_entry_exposure'\n  | 'unknown_capability'\n  | 'unsupported_version';\n\nexport interface MfeContractIssue {\n  readonly code: MfeContractIssueCode;\n  readonly path: string;\n  readonly message: string;\n}\n\n/** Host-side registry expectations applied after the remote shape is trusted. */\nexport interface MfeContractExpectation {\n  readonly id: string;\n  readonly supportedContractVersions: readonly number[];\n}\n\nexport type MfeContractValidationResult =\n  | {\n      readonly valid: true;\n      readonly contract: MfeContract;\n      readonly issues: readonly [];\n    }\n  | {\n      readonly valid: false;\n      readonly issues: readonly MfeContractIssue[];\n    };\n\nexport class MfeContractValidationError extends Error {\n  readonly issues: readonly MfeContractIssue[];\n\n  constructor(issuesOrMessage: readonly MfeContractIssue[] | string) {\n    const issues = typeof issuesOrMessage === 'string' ? [] : issuesOrMessage;\n    super(\n      typeof issuesOrMessage === 'string'\n        ? issuesOrMessage\n        : `Invalid EDSIS MFE contract: ${issues\n            .map((issue) => `${issue.path} ${issue.message}`)\n            .join('; ')}`,\n    );\n    this.name = 'MfeContractValidationError';\n    this.issues = issues;\n  }\n}\n\n/** Keeps literal inference while rejecting an invalid contract during remote evaluation. */\nexport function defineMfe<const Contract extends MfeContractV1>(contract: Contract): Contract {\n  assertMfeContract(contract);\n  return contract;\n}\n\nexport function isMfeContract(value: unknown): value is MfeContract {\n  return validateMfeContract(value).valid;\n}\n\nexport function assertMfeContract(value: unknown): asserts value is MfeContract {\n  const result = validateMfeContract(value);\n\n  if (!result.valid) {\n    throw new MfeContractValidationError(result.issues);\n  }\n}\n\n/**\n * Reads the exact named `mfe` export from an untrusted federation namespace.\n * Shape validation runs before registry identity and supported-major checks.\n */\nexport function readMfeContract(\n  remoteModule: unknown,\n  expectation: MfeContractExpectation,\n): MfeContractV1 {\n  if (!isRecord(remoteModule) || !('mfe' in remoteModule)) {\n    throw new MfeContractValidationError(\n      'The remote module does not export a named \"mfe\" contract.',\n    );\n  }\n\n  const result = validateMfeContract(remoteModule['mfe']);\n\n  if (!result.valid) {\n    throw new MfeContractValidationError(result.issues);\n  }\n\n  const contract = result.contract;\n  if (contract.id !== expectation.id) {\n    throw new MfeContractValidationError(\n      `Expected MFE id \"${expectation.id}\" but received \"${contract.id}\".`,\n    );\n  }\n\n  if (!expectation.supportedContractVersions.includes(contract.contractVersion)) {\n    throw new MfeContractValidationError(\n      `MFE \"${expectation.id}\" uses unsupported contract version \"${contract.contractVersion}\".`,\n    );\n  }\n\n  return contract;\n}\n\n/** Validates an untrusted remote value before the host reads routes or exposures from it. */\nexport function validateMfeContract(value: unknown): MfeContractValidationResult {\n  if (!isRecord(value)) {\n    return invalid([issue('invalid_contract', '$', 'must be a non-null object')]);\n  }\n\n  const issues: MfeContractIssue[] = [];\n  validateContractIdentity(value, issues);\n  validateRouteAndNavigationContributions(value, issues);\n  const capabilityIds = validateCapabilities(value['capabilities'], issues);\n  validateExposures(value['exposures'], capabilityIds, issues);\n\n  if (issues.length > 0) {\n    return invalid(issues);\n  }\n\n  return {\n    valid: true,\n    contract: value as unknown as MfeContract,\n    issues: [],\n  };\n}\n\nfunction validateContractIdentity(\n  candidate: Record<string, unknown>,\n  issues: MfeContractIssue[],\n): void {\n  if (candidate['contractVersion'] !== MFE_CONTRACT_VERSION) {\n    issues.push(\n      issue(\n        'unsupported_version',\n        '$.contractVersion',\n        `must equal the supported major ${MFE_CONTRACT_VERSION}`,\n      ),\n    );\n  }\n\n  const id = candidate['id'];\n  if (typeof id !== 'string' || !MFE_ID_PATTERN.test(id)) {\n    issues.push(\n      issue(\n        'invalid_id',\n        '$.id',\n        'must be a lower-kebab identifier such as \"developer\" or \"sales-activity\"',\n      ),\n    );\n  }\n\n  if (!isNonEmptyString(candidate['displayName'])) {\n    issues.push(issue('invalid_contract', '$.displayName', 'must be a non-empty string'));\n  }\n}\n\nfunction validateRouteAndNavigationContributions(\n  candidate: Record<string, unknown>,\n  issues: MfeContractIssue[],\n): void {\n  const routes = candidate['featureRoutes'];\n  if (!Array.isArray(routes) || routes.length === 0) {\n    issues.push(issue('invalid_routes', '$.featureRoutes', 'must be a non-empty route array'));\n  } else {\n    routes.forEach((route, index) => {\n      if (!isRecord(route)) {\n        issues.push(\n          issue('invalid_routes', `$.featureRoutes[${index}]`, 'must be an Angular route object'),\n        );\n      }\n    });\n  }\n\n  const navigation = candidate['navigation'];\n  if (!Array.isArray(navigation)) {\n    issues.push(issue('invalid_navigation', '$.navigation', 'must be an array'));\n  } else {\n    navigation.forEach((item, index) => {\n      if (!isRecord(item)) {\n        issues.push(\n          issue('invalid_navigation', `$.navigation[${index}]`, 'must be a navigation item object'),\n        );\n      }\n    });\n  }\n}\n\nfunction validateCapabilities(value: unknown, issues: MfeContractIssue[]): ReadonlySet<string> {\n  if (!Array.isArray(value)) {\n    issues.push(issue('invalid_capability', '$.capabilities', 'must be an array'));\n    return new Set<string>();\n  }\n\n  const capabilityIds = new Set<string>();\n\n  value.forEach((capability, index) => {\n    const path = `$.capabilities[${index}]`;\n    if (!isRecord(capability)) {\n      issues.push(issue('invalid_capability', path, 'must be a capability descriptor object'));\n      return;\n    }\n\n    const id = capability['id'];\n    if (typeof id !== 'string' || !MFE_CAPABILITY_ID_PATTERN.test(id)) {\n      issues.push(\n        issue(\n          'invalid_capability',\n          `${path}.id`,\n          'must be a lowercase dotted, colon, or kebab capability identifier',\n        ),\n      );\n    } else if (capabilityIds.has(id)) {\n      issues.push(issue('duplicate_capability', `${path}.id`, `duplicates capability \"${id}\"`));\n    } else {\n      capabilityIds.add(id);\n    }\n\n    const version = capability['version'];\n    if (!Number.isInteger(version) || (version as number) < 1) {\n      issues.push(\n        issue('invalid_capability', `${path}.version`, 'must be a positive integer major'),\n      );\n    }\n\n    if (!includes(MFE_CAPABILITY_MODES, capability['mode'])) {\n      issues.push(\n        issue(\n          'invalid_capability',\n          `${path}.mode`,\n          `must be one of ${MFE_CAPABILITY_MODES.join(', ')}`,\n        ),\n      );\n    }\n\n    validateOptionalString(capability, 'description', path, 'invalid_capability', issues);\n  });\n\n  return capabilityIds;\n}\n\nfunction validateExposures(\n  value: unknown,\n  capabilityIds: ReadonlySet<string>,\n  issues: MfeContractIssue[],\n): void {\n  if (!Array.isArray(value)) {\n    issues.push(issue('invalid_exposure', '$.exposures', 'must be an array'));\n    return;\n  }\n\n  const exposureKeys = new Set<string>();\n  let entryExposureCount = 0;\n\n  value.forEach((exposure, index) => {\n    const path = `$.exposures[${index}]`;\n    if (!isRecord(exposure)) {\n      issues.push(issue('invalid_exposure', path, 'must be an exposure descriptor object'));\n      return;\n    }\n\n    const key = exposure['key'];\n    if (typeof key !== 'string' || !MFE_EXPOSURE_KEY_PATTERN.test(key)) {\n      issues.push(\n        issue(\n          'invalid_exposure',\n          `${path}.key`,\n          'must start with \"./\" and contain no empty or unsafe path segments',\n        ),\n      );\n    } else if (exposureKeys.has(key)) {\n      issues.push(issue('duplicate_exposure', `${path}.key`, `duplicates exposure \"${key}\"`));\n    } else {\n      exposureKeys.add(key);\n    }\n\n    if (!includes(MFE_EXPOSURE_KINDS, exposure['kind'])) {\n      issues.push(\n        issue(\n          'invalid_exposure',\n          `${path}.kind`,\n          `must be one of ${MFE_EXPOSURE_KINDS.join(', ')}`,\n        ),\n      );\n    }\n\n    if (key === MFE_ENTRY_EXPOSURE) {\n      entryExposureCount += 1;\n      if (exposure['kind'] !== 'contract') {\n        issues.push(\n          issue('invalid_exposure', `${path}.kind`, `must be \"contract\" for ${MFE_ENTRY_EXPOSURE}`),\n        );\n      }\n    } else if (exposure['kind'] === 'contract') {\n      issues.push(\n        issue(\n          'invalid_exposure',\n          `${path}.kind`,\n          `the contract kind is reserved for ${MFE_ENTRY_EXPOSURE}`,\n        ),\n      );\n    }\n\n    if (exposure['since'] !== MFE_CONTRACT_VERSION) {\n      issues.push(\n        issue(\n          'invalid_exposure',\n          `${path}.since`,\n          `must equal contract major ${MFE_CONTRACT_VERSION}`,\n        ),\n      );\n    }\n\n    validateOptionalString(exposure, 'exportName', path, 'invalid_exposure', issues);\n    validateOptionalString(exposure, 'description', path, 'invalid_exposure', issues);\n    validateExposureCapabilities(exposure['capabilities'], path, capabilityIds, issues);\n  });\n\n  if (entryExposureCount === 0) {\n    issues.push(\n      issue(\n        'missing_entry_exposure',\n        '$.exposures',\n        `must declare the ${MFE_ENTRY_EXPOSURE} contract exposure`,\n      ),\n    );\n  }\n}\n\nfunction validateExposureCapabilities(\n  value: unknown,\n  path: string,\n  capabilityIds: ReadonlySet<string>,\n  issues: MfeContractIssue[],\n): void {\n  if (value === undefined) {\n    return;\n  }\n  if (!Array.isArray(value)) {\n    issues.push(issue('invalid_exposure', `${path}.capabilities`, 'must be an array'));\n    return;\n  }\n\n  const referencedIds = new Set<string>();\n  value.forEach((capabilityId, index) => {\n    const capabilityPath = `${path}.capabilities[${index}]`;\n    if (typeof capabilityId !== 'string' || !MFE_CAPABILITY_ID_PATTERN.test(capabilityId)) {\n      issues.push(\n        issue('invalid_exposure', capabilityPath, 'must be a valid capability identifier'),\n      );\n      return;\n    }\n    if (referencedIds.has(capabilityId)) {\n      issues.push(\n        issue('invalid_exposure', capabilityPath, `duplicates capability \"${capabilityId}\"`),\n      );\n      return;\n    }\n    referencedIds.add(capabilityId);\n\n    if (!capabilityIds.has(capabilityId)) {\n      issues.push(\n        issue(\n          'unknown_capability',\n          capabilityPath,\n          `references undeclared capability \"${capabilityId}\"`,\n        ),\n      );\n    }\n  });\n}\n\nfunction validateOptionalString(\n  candidate: Record<string, unknown>,\n  key: string,\n  path: string,\n  code: MfeContractIssueCode,\n  issues: MfeContractIssue[],\n): void {\n  const value = candidate[key];\n  if (value !== undefined && !isNonEmptyString(value)) {\n    issues.push(issue(code, `${path}.${key}`, 'must be a non-empty string when provided'));\n  }\n}\n\nfunction issue(code: MfeContractIssueCode, path: string, message: string): MfeContractIssue {\n  return { code, path, message };\n}\n\nfunction invalid(issues: readonly MfeContractIssue[]): MfeContractValidationResult {\n  return { valid: false, issues };\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isNonEmptyString(value: unknown): value is string {\n  return typeof value === 'string' && value.trim().length > 0;\n}\n\nfunction includes<const Values extends readonly string[]>(values: Values, value: unknown): boolean {\n  return typeof value === 'string' && (values as readonly string[]).includes(value);\n}\n\nconst MFE_ID_PATTERN = /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u;\nconst MFE_EXPOSURE_KEY_PATTERN =\n  /^\\.\\/[A-Za-z0-9][A-Za-z0-9._-]*(?:\\/[A-Za-z0-9][A-Za-z0-9._-]*)*$/u;\nconst MFE_CAPABILITY_ID_PATTERN = /^[a-z][a-z0-9]*(?:[.:-][a-z0-9]+(?:-[a-z0-9]+)*)*$/u;\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}