{"version":3,"sources":["../../src/hsm/index.ts","../../src/hsm/HsmSchemaLoader.ts","../../src/core/errors.ts","../../src/hsm/HsmSchemaValidator.ts","../../src/hsm/HsmRouteMapper.ts","../../src/hsm/HsmMeshPlanner.ts"],"sourcesContent":["export { HsmSchemaLoader } from './HsmSchemaLoader.js'\nexport { HsmSchemaValidator } from './HsmSchemaValidator.js'\nexport { HsmRouteMapper } from './HsmRouteMapper.js'\nexport { HsmMeshPlanner } from './HsmMeshPlanner.js'\nexport type {\n  MeshHsmBridgeConfig,\n  MeshHsmMappedRoute,\n  MeshHsmRouteMode,\n  MeshHsmSchemaLike,\n  MeshHsmServiceBinding,\n  MeshHsmServiceMapping,\n  NormalizedMeshHsmBridgeConfig\n} from '../core/types.js'\n","import fs from 'node:fs'\nimport path from 'node:path'\nimport { createJiti } from 'jiti'\nimport { MeshConfigError } from '../core/errors.js'\nimport type { MeshConfig, MeshHsmSchemaLike } from '../core/types.js'\nimport { HsmSchemaValidator } from './HsmSchemaValidator.js'\n\nexport class HsmSchemaLoader {\n  private readonly validator: HsmSchemaValidator = new HsmSchemaValidator()\n\n  public async hydrateConfig(config: MeshConfig, configPath: string): Promise<MeshConfig> {\n    const hsm = config.hsm\n    if (!hsm?.schemaPath || hsm.schema) return config\n    const schema = await this.loadSchema(path.resolve(path.dirname(configPath), hsm.schemaPath))\n    return {\n      ...config,\n      hsm: {\n        ...hsm,\n        schema\n      }\n    }\n  }\n\n  public async loadSchema(schemaPath: string): Promise<MeshHsmSchemaLike> {\n    if (!fs.existsSync(schemaPath)) throw new MeshConfigError(`HSM schema file not found: ${schemaPath}`)\n    let loaded: unknown\n    if (schemaPath.endsWith('.json')) {\n      loaded = JSON.parse(await fs.promises.readFile(schemaPath, 'utf8'))\n    } else {\n      const jiti = createJiti(schemaPath, { interopDefault: true })\n      const mod = await jiti.import(schemaPath)\n      loaded = (mod as { default?: unknown }).default ?? mod\n    }\n    this.validator.assertValid(loaded)\n    return loaded\n  }\n}\n","export class MeshError extends Error {\n  public constructor(message: string) {\n    super(message)\n    this.name = new.target.name\n  }\n}\n\nexport class MeshConfigError extends MeshError {}\nexport class MeshStateError extends MeshError {}\nexport class MeshProcessError extends MeshError {}\nexport class MeshIdResolutionError extends MeshError {}\n","import { MeshConfigError } from '../core/errors.js'\nimport type { MeshHsmSchemaLike } from '../core/types.js'\n\nexport class HsmSchemaValidator {\n  public assertValid(schema: unknown): asserts schema is MeshHsmSchemaLike {\n    if (!schema || typeof schema !== 'object' || Array.isArray(schema)) {\n      throw new MeshConfigError('hsm.schema must be an object compatible with a compiled @panomapp/hsm schema.')\n    }\n    const candidate = schema as MeshHsmSchemaLike\n    if (candidate.kind !== undefined && candidate.kind !== 'panom-hsm.schema') {\n      throw new MeshConfigError(`Unsupported hsm.schema kind: ${String(candidate.kind)}.`)\n    }\n    if (!candidate.index || typeof candidate.index !== 'object') {\n      throw new MeshConfigError('hsm.schema.index is required.')\n    }\n    if (!Array.isArray(candidate.index.states)) {\n      throw new MeshConfigError('hsm.schema.index.states must be an array.')\n    }\n    if (candidate.index.routes !== undefined && !Array.isArray(candidate.index.routes)) {\n      throw new MeshConfigError('hsm.schema.index.routes must be an array when provided.')\n    }\n    for (const [index, state] of candidate.index.states.entries()) {\n      if (!state || typeof state !== 'object' || typeof state.id !== 'string' || state.id.length === 0) {\n        throw new MeshConfigError(`hsm.schema.index.states[${index}].id must be a non-empty string.`)\n      }\n    }\n    for (const [index, route] of (candidate.index.routes ?? []).entries()) {\n      if (!route || typeof route !== 'object' || typeof route.stateId !== 'string' || route.stateId.length === 0) {\n        throw new MeshConfigError(`hsm.schema.index.routes[${index}].stateId must be a non-empty string.`)\n      }\n      const pattern = route.canonicalPattern ?? route.pattern\n      if (pattern !== undefined && (typeof pattern !== 'string' || !pattern.startsWith('/'))) {\n        throw new MeshConfigError(`hsm.schema.index.routes[${index}] pattern must start with /.`)\n      }\n    }\n  }\n}\n","import { MeshConfigError } from '../core/errors.js'\nimport type {\n  MeshHsmMappedRoute,\n  MeshHsmRouteMode,\n  MeshHsmSchemaLike,\n  MeshHsmSchemaStateIndexEntry,\n  MeshHsmServiceBinding,\n  MeshHsmServiceMapping,\n  MeshServiceConfig\n} from '../core/types.js'\nimport { HsmSchemaValidator } from './HsmSchemaValidator.js'\n\nexport interface HsmRouteMapperOptions {\n  readonly schema: MeshHsmSchemaLike\n  readonly routeMode: MeshHsmRouteMode\n  readonly strict: boolean\n  readonly mappings: readonly MeshHsmServiceMapping[]\n  readonly services: Record<string, MeshServiceConfig>\n}\n\nexport class HsmRouteMapper {\n  private readonly validator: HsmSchemaValidator = new HsmSchemaValidator()\n\n  public map(options: HsmRouteMapperOptions): readonly MeshHsmMappedRoute[] {\n    this.validator.assertValid(options.schema)\n    const routes: MeshHsmMappedRoute[] = []\n    const stateById = new Map<string, MeshHsmSchemaStateIndexEntry>()\n    for (const state of options.schema.index?.states ?? []) stateById.set(state.id, state)\n\n    const mappings = this.collectMappings(options.services, options.mappings)\n    for (const mapping of mappings) {\n      if (!options.services[mapping.service]) {\n        if (options.strict) throw new MeshConfigError(`HSM mapping references unknown mesh service: ${mapping.service}`)\n        continue\n      }\n      const selectedStates = this.selectStates(stateById, mapping)\n      if (selectedStates.length === 0 && options.strict) {\n        throw new MeshConfigError(`HSM mapping for service \"${mapping.service}\" matched no states.`)\n      }\n      const selectedIds = new Set(selectedStates.map(state => state.id))\n      if (this.includeCanonical(mapping, options.routeMode)) {\n        for (const route of options.schema.index?.routes ?? []) {\n          if (!selectedIds.has(route.stateId)) continue\n          if (route.kind === 'virtual') continue\n          if (route.isAlias && route.redirectToCanonical) continue\n          const pattern = route.canonicalPattern ?? route.pattern\n          if (!pattern) continue\n          routes.push(this.toMappedRoute(mapping, 'hsm:canonical', route.stateId, pattern))\n        }\n      }\n      if (this.includeBackend(mapping, options.routeMode)) {\n        for (const state of selectedStates) {\n          for (const route of state.backend?.routes ?? []) {\n            routes.push(this.toMappedRoute(mapping, 'hsm:backend', state.id, route, state.backend?.methods))\n          }\n        }\n      }\n    }\n\n    return this.dedupe(routes)\n  }\n\n  public summarize(routes: readonly MeshHsmMappedRoute[]): string {\n    if (routes.length === 0) return 'No HSM routes mapped.\\n'\n    const rows = routes.map(route => ({\n      service: route.service,\n      route: route.route,\n      source: route.source,\n      state: route.stateId,\n      methods: route.methods?.join(',') ?? '-'\n    }))\n    const headers = ['SERVICE', 'ROUTE', 'SOURCE', 'STATE', 'METHODS']\n    const keys = ['service', 'route', 'source', 'state', 'methods'] as const\n    const widths = keys.map((key, index) => Math.max(headers[index]!.length, ...rows.map(row => row[key].length)))\n    const fmt = (values: readonly string[]) => values.map((value, index) => value.padEnd(widths[index]!)).join('  ')\n    return `${fmt(headers)}\\n${fmt(widths.map(w => '-'.repeat(w)))}\\n${rows.map(row => fmt(keys.map(key => row[key]))).join('\\n')}\\n`\n  }\n\n  private collectMappings(services: Record<string, MeshServiceConfig>, topLevel: readonly MeshHsmServiceMapping[]): readonly MeshHsmServiceMapping[] {\n    const mappings: MeshHsmServiceMapping[] = [...topLevel]\n    for (const [service, config] of Object.entries(services)) {\n      if (!config.hsm) continue\n      mappings.push({ service, ...config.hsm })\n    }\n    return mappings\n  }\n\n  private selectStates(stateById: Map<string, MeshHsmSchemaStateIndexEntry>, mapping: MeshHsmServiceMapping): readonly MeshHsmSchemaStateIndexEntry[] {\n    const states = Array.from(stateById.values())\n    const selectors = mapping.states ?? []\n    const tags = new Set(mapping.tags ?? [])\n    if (selectors.length === 0 && tags.size === 0) return []\n    return states.filter(state => {\n      const byState = selectors.some(selector => this.matchesStateSelector(state.id, selector))\n      const byTag = (state.tags ?? []).some(tag => tags.has(tag))\n      return byState || byTag\n    })\n  }\n\n  private matchesStateSelector(stateId: string, selector: string): boolean {\n    if (selector === stateId) return true\n    if (selector.endsWith('.*')) return stateId.startsWith(selector.slice(0, -2) + '.')\n    return false\n  }\n\n  private includeCanonical(mapping: MeshHsmServiceBinding, mode: MeshHsmRouteMode): boolean {\n    if (mapping.includeCanonicalRoutes !== undefined) return mapping.includeCanonicalRoutes\n    return mode === 'canonical' || mode === 'both'\n  }\n\n  private includeBackend(mapping: MeshHsmServiceBinding, mode: MeshHsmRouteMode): boolean {\n    if (mapping.includeBackendRoutes !== undefined) return mapping.includeBackendRoutes\n    return mode === 'backend' || mode === 'both'\n  }\n\n  private toMappedRoute(\n    mapping: MeshHsmServiceMapping,\n    source: MeshHsmMappedRoute['source'],\n    stateId: string,\n    pattern: string,\n    methods?: readonly string[]\n  ): MeshHsmMappedRoute {\n    const transformed = this.applyRouteTransforms(pattern, mapping)\n    const effectiveMethods = mapping.methods ?? methods\n    const mapped: MeshHsmMappedRoute = {\n      service: mapping.service,\n      route: this.toRoutablePattern(transformed),\n      source,\n      stateId,\n      originalPattern: pattern\n    }\n    return effectiveMethods === undefined ? mapped : { ...mapped, methods: effectiveMethods }\n  }\n\n  private applyRouteTransforms(route: string, mapping: MeshHsmServiceMapping): string {\n    let output = this.normalizePattern(route)\n    if (mapping.stripPrefix) {\n      const prefix = this.normalizePattern(mapping.stripPrefix)\n      if (output === prefix) output = '/'\n      else if (output.startsWith(`${prefix}/`)) output = output.slice(prefix.length) || '/'\n    }\n    if (mapping.routePrefix) {\n      const prefix = this.normalizePattern(mapping.routePrefix)\n      if (prefix !== '/') output = output === '/' ? prefix : `${prefix}${output}`\n    }\n    return this.normalizePattern(output)\n  }\n\n  private toRoutablePattern(pattern: string): string {\n    const normalized = this.normalizePattern(pattern)\n    if (normalized === '/') return '/'\n    return normalized\n  }\n\n  private normalizePattern(route: string): string {\n    const trimmed = route.trim()\n    if (!trimmed || !trimmed.startsWith('/')) throw new MeshConfigError(`HSM route pattern must start with /: ${route}`)\n    if (trimmed === '/') return '/'\n    return `/${trimmed.replace(/^\\/+|\\/+$/g, '')}`\n  }\n\n  private dedupe(routes: readonly MeshHsmMappedRoute[]): readonly MeshHsmMappedRoute[] {\n    const seen = new Set<string>()\n    const output: MeshHsmMappedRoute[] = []\n    for (const route of routes) {\n      const key = `${route.service}:${route.route}:${route.source}:${route.stateId}:${route.methods?.join(',') ?? '*'}`\n      if (seen.has(key)) continue\n      seen.add(key)\n      output.push(route)\n    }\n    output.sort((a, b) => a.service.localeCompare(b.service) || b.route.length - a.route.length || a.route.localeCompare(b.route))\n    return output\n  }\n}\n","import type { NormalizedMeshConfig, MeshHsmPlanOptions } from '../core/types.js'\nimport { HsmRouteMapper } from './HsmRouteMapper.js'\n\nexport class HsmMeshPlanner {\n  public constructor(private readonly config: NormalizedMeshConfig) {}\n\n  public plan(options: MeshHsmPlanOptions = {}): string {\n    const routes = this.config.hsm.routes\n    if (options.json) return `${JSON.stringify(routes, null, 2)}\\n`\n    return new HsmRouteMapper().summarize(routes)\n  }\n}\n"],"mappings":"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","names":["path","fs"]}