{
  "version": 3,
  "sources": ["../../src/engine.ts", "../../src/adapter-factory.ts", "../../src/config.ts", "../../src/logger.ts", "../../src/package-resolver.ts", "../../src/index.ts"],
  "sourcesContent": ["import { loadDefinitionPackages } from 'fhir-definition';\r\nimport { createRuntime, extractSearchValues, extractAllSearchValues, extractReferences } from 'fhir-runtime';\r\nimport { FhirDefinitionBridge, FhirRuntimeProvider, FhirSystem, parseSearchRequest, executeSearch } from 'fhir-persistence';\r\n\r\nimport { createAdapter } from './adapter-factory.js';\r\nimport { loadFhirConfig } from './config.js';\r\nimport { createConsoleLogger } from './logger.js';\r\nimport { resolvePackages } from './package-resolver.js';\r\nimport type { EngineContext, FhirEngine, FhirEngineConfig, FhirEnginePlugin, FhirEngineStatus } from './types.js';\r\n\r\n/**\r\n * Resolve the SQL dialect from the database config type.\r\n */\r\nfunction resolveDialect(type: FhirEngineConfig['database']['type']): 'sqlite' | 'postgres' {\r\n  switch (type) {\r\n    case 'sqlite':\r\n    case 'sqlite-wasm':\r\n      return 'sqlite';\r\n    case 'postgres':\r\n      return 'postgres';\r\n  }\r\n}\r\n\r\n/**\r\n * Validate the engine configuration, throwing on missing required fields.\r\n */\r\nfunction validateConfig(config: FhirEngineConfig): void {\r\n  if (!config.database) {\r\n    throw new Error('fhir-engine: config.database is required');\r\n  }\r\n  if (!config.database.type) {\r\n    throw new Error('fhir-engine: config.database.type is required (sqlite | sqlite-wasm | postgres)');\r\n  }\r\n  if (!config.packages) {\r\n    throw new Error('fhir-engine: config.packages is required');\r\n  }\r\n  if (!config.packages.path) {\r\n    throw new Error('fhir-engine: config.packages.path is required');\r\n  }\r\n}\r\n\r\n/**\r\n * Run a lifecycle hook on all plugins in order.\r\n * Wraps errors with the plugin name for clear diagnostics.\r\n */\r\nasync function runPluginHook(\r\n  plugins: FhirEnginePlugin[],\r\n  hook: 'init' | 'start' | 'ready',\r\n  ctx: EngineContext,\r\n): Promise<void> {\r\n  for (const plugin of plugins) {\r\n    const fn = plugin[hook];\r\n    if (fn) {\r\n      try {\r\n        await fn.call(plugin, ctx);\r\n      } catch (err) {\r\n        throw new Error(\r\n          `fhir-engine: plugin \"${plugin.name}\" failed during ${hook}: ${err instanceof Error ? err.message : String(err)}`,\r\n          { cause: err },\r\n        );\r\n      }\r\n    }\r\n  }\r\n}\r\n\r\n/**\r\n * Create and bootstrap a fully initialized FHIR engine.\r\n *\r\n * This is the single entry point for all FHIR applications.\r\n * It assembles fhir-definition, fhir-runtime, and fhir-persistence\r\n * into a running system from a single configuration object.\r\n *\r\n * @example\r\n * ```ts\r\n * const engine = await createFhirEngine({\r\n *   database: { type: 'sqlite', path: ':memory:' },\r\n *   packages: { path: './fhir-packages' },\r\n * });\r\n *\r\n * const patient = await engine.persistence.createResource('Patient', {\r\n *   resourceType: 'Patient',\r\n *   name: [{ family: 'Smith', given: ['John'] }],\r\n * });\r\n *\r\n * await engine.stop();\r\n * ```\r\n */\r\nexport async function createFhirEngine(config?: FhirEngineConfig): Promise<FhirEngine> {\r\n  // \u2500\u2500 0. Resolve config \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  if (!config) {\r\n    config = await loadFhirConfig();\r\n  }\r\n  validateConfig(config);\r\n\r\n  const logger = config.logger ?? createConsoleLogger();\r\n  const plugins = config.plugins ?? [];\r\n  logger.info('Initializing fhir-engine...');\r\n\r\n  // \u2500\u2500 1a. Resolve packages (download/link if config.igs is set) \u2500\r\n  if (config.igs && config.igs.length > 0) {\r\n    logger.info(`Resolving ${config.igs.length} IG package(s)...`);\r\n    const resolveResult = await resolvePackages(config, { logger });\r\n    for (const pkg of resolveResult.packages) {\r\n      logger.info(`Resolved ${pkg.name}@${pkg.version} (${pkg.source})`);\r\n    }\r\n    if (!resolveResult.success) {\r\n      for (const err of resolveResult.errors) {\r\n        logger.warn(`Failed to resolve package ${err.name}: ${err.error}`);\r\n      }\r\n    }\r\n  }\r\n\r\n  // \u2500\u2500 1b. Load FHIR definitions \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  logger.info(`Loading FHIR packages from: ${config.packages.path}`);\r\n  const { registry, result } = loadDefinitionPackages(config.packages.path);\r\n  logger.info(\r\n    `Loaded ${result.packages.length} package(s): ${result.packages.map((p) => `${p.name}@${p.version}`).join(', ')}`,\r\n  );\r\n\r\n  // \u2500\u2500 2. Create fhir-runtime \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  logger.info('Creating fhir-runtime instance...');\r\n  const runtime = await createRuntime({ definitions: registry, preloadCore: false });\r\n\r\n  // \u2500\u2500 3. Build provider bridges \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const definitionBridge = new FhirDefinitionBridge(registry);\r\n  const runtimeProvider = new FhirRuntimeProvider({\r\n    extractSearchValues,\r\n    extractAllSearchValues,\r\n    extractReferences,\r\n  });\r\n\r\n  // \u2500\u2500 4. Create storage adapter \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const adapter = await createAdapter(config.database, logger);\r\n\r\n  // \u2500\u2500 5. Build EngineContext \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const ctx: { -readonly [K in keyof EngineContext]: EngineContext[K] } = {\r\n    config,\r\n    definitions: registry,\r\n    runtime,\r\n    adapter,\r\n    persistence: undefined,\r\n    logger,\r\n  };\r\n\r\n  // \u2500\u2500 6. INIT phase \u2014 plugins run before persistence \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  if (plugins.length > 0) {\r\n    logger.info(`Running init for ${plugins.length} plugin(s): ${plugins.map((p) => p.name).join(', ')}`);\r\n    await runPluginHook(plugins, 'init', ctx);\r\n  }\r\n\r\n  // \u2500\u2500 7. Initialize FhirSystem \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  const dialect = resolveDialect(config.database.type);\r\n  const system = new FhirSystem(adapter, {\r\n    dialect,\r\n    runtimeProvider,\r\n    packageName: config.packageName ?? 'fhir-engine.default',\r\n    packageVersion: config.packageVersion ?? '1.0.0',\r\n  });\r\n\r\n  logger.info('Initializing persistence system (schema + migration)...');\r\n  const { persistence, sdRegistry, spRegistry, igResult, resourceTypes } =\r\n    await system.initialize(definitionBridge);\r\n\r\n  // Fail fast if IG migration had errors (tables not created)\r\n  if (igResult.error) {\r\n    throw new Error(\r\n      `fhir-engine: schema migration failed: ${igResult.error}`,\r\n    );\r\n  }\r\n\r\n  logger.info(`Persistence ready \u2014 IG action: ${igResult.action}, ${resourceTypes.length} resource type(s)`);\r\n\r\n  // ctx.persistence now available\r\n  ctx.persistence = persistence;\r\n\r\n  // \u2500\u2500 8. START phase \u2014 plugins can access persistence \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  if (plugins.length > 0) {\r\n    logger.info(`Running start for ${plugins.length} plugin(s)...`);\r\n    await runPluginHook(plugins, 'start', ctx);\r\n  }\r\n\r\n  // \u2500\u2500 9. READY phase \u2014 system fully operational \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  if (plugins.length > 0) {\r\n    logger.info(`Running ready for ${plugins.length} plugin(s)...`);\r\n    await runPluginHook(plugins, 'ready', ctx);\r\n  }\r\n\r\n  // \u2500\u2500 10. Return FhirEngine \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\r\n  let stopped = false;\r\n  const startedAt = new Date();\r\n  const loadedPackages = result.packages.map((p) => `${p.name}@${p.version}`);\r\n  const fhirVersions = [...new Set(\r\n    result.packages\r\n      .map((p) => {\r\n        if (p.name.includes('.r4.')) return '4.0';\r\n        if (p.name.includes('.r4b.')) return '4.3';\r\n        if (p.name.includes('.r5.')) return '5.0';\r\n        return undefined;\r\n      })\r\n      .filter(Boolean),\r\n  )] as string[];\r\n\r\n  const engine: FhirEngine = {\r\n    definitions: registry,\r\n    runtime,\r\n    adapter,\r\n    persistence,\r\n    sdRegistry,\r\n    spRegistry,\r\n    igResult,\r\n    resourceTypes,\r\n    logger,\r\n    context: ctx as EngineContext,\r\n\r\n    async search(resourceType, queryParams, options) {\r\n      const request = parseSearchRequest(resourceType, queryParams, spRegistry);\r\n      return executeSearch(adapter, request, spRegistry, options);\r\n    },\r\n\r\n    status(): FhirEngineStatus {\r\n      return {\r\n        fhirVersions,\r\n        loadedPackages,\r\n        resourceTypes,\r\n        databaseType: config.database.type,\r\n        igAction: igResult.action,\r\n        startedAt,\r\n        plugins: plugins.map((p) => p.name),\r\n      };\r\n    },\r\n\r\n    async stop() {\r\n      if (stopped) return;\r\n      stopped = true;\r\n      logger.info('Stopping fhir-engine...');\r\n\r\n      // Stop plugins in reverse registration order\r\n      for (let i = plugins.length - 1; i >= 0; i--) {\r\n        const plugin = plugins[i];\r\n        if (plugin.stop) {\r\n          try {\r\n            await plugin.stop.call(plugin, ctx as EngineContext);\r\n          } catch (err) {\r\n            logger.error(\r\n              `Plugin \"${plugin.name}\" failed during stop: ${err instanceof Error ? err.message : String(err)}`,\r\n            );\r\n          }\r\n        }\r\n      }\r\n\r\n      await adapter.close();\r\n      logger.info('fhir-engine stopped.');\r\n    },\r\n  };\r\n\r\n  logger.info('fhir-engine ready.');\r\n  return engine;\r\n}\r\n", "import { BetterSqlite3Adapter, PostgresAdapter } from 'fhir-persistence';\r\nimport type { StorageAdapter } from 'fhir-persistence';\r\nimport type { DatabaseConfig, Logger } from './types.js';\r\n\r\n/**\r\n * Create a StorageAdapter from the database configuration.\r\n *\r\n * Supported adapters:\r\n * - `sqlite`      \u2192 BetterSqlite3Adapter (native, Node.js / Electron)\r\n * - `sqlite-wasm` \u2192 removed in fhir-persistence v0.3.0; use `sqlite` instead\r\n * - `postgres`    \u2192 PostgresAdapter (pg connection pool)\r\n */\r\nexport async function createAdapter(config: DatabaseConfig, logger: Logger): Promise<StorageAdapter> {\r\n  switch (config.type) {\r\n    case 'sqlite': {\r\n      logger.info(`Creating BetterSqlite3Adapter (path: ${config.path})`);\r\n      return new BetterSqlite3Adapter({\r\n        path: config.path,\r\n        wal: config.wal ?? true,\r\n        busyTimeout: config.busyTimeout ?? 5000,\r\n      });\r\n    }\r\n\r\n    case 'sqlite-wasm': {\r\n      throw new Error(\r\n        'fhir-engine: sqlite-wasm adapter was removed in fhir-persistence v0.3.0. ' +\r\n        'Use database.type = \"sqlite\" (BetterSqlite3Adapter) instead.',\r\n      );\r\n    }\r\n\r\n    case 'postgres': {\r\n      logger.info(`Creating PostgresAdapter (url: ${config.url.replace(/\\/\\/.*@/, '//*****@')})`);\r\n      // Dynamic import pg to avoid hard dependency when using SQLite only\r\n      let Pool: any;\r\n      try {\r\n        const pg = await import('pg');\r\n        Pool = pg.default?.Pool ?? pg.Pool;\r\n      } catch {\r\n        throw new Error(\r\n          'fhir-engine: PostgreSQL requires the \"pg\" package. Install it with: npm install pg',\r\n        );\r\n      }\r\n      const pool = new Pool({\r\n        connectionString: config.url,\r\n        max: config.max ?? 10,\r\n        idleTimeoutMillis: config.idleTimeoutMillis ?? 30000,\r\n        connectionTimeoutMillis: config.connectionTimeoutMillis ?? 0,\r\n      });\r\n      return new PostgresAdapter(pool);\r\n    }\r\n\r\n    default: {\r\n      const _exhaustive: never = config;\r\n      throw new Error(`fhir-engine: unknown database type: ${(_exhaustive as DatabaseConfig).type}`);\r\n    }\r\n  }\r\n}\r\n", "import { existsSync, readFileSync } from 'node:fs';\nimport { resolve, extname } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { FhirEngineConfig, DatabaseConfig } from './types.js';\n\n// ---------------------------------------------------------------------------\n// defineConfig \u2014 typed identity helper for fhir.config.ts / .js\n// ---------------------------------------------------------------------------\n\n/**\n * Type-safe config helper for `fhir.config.ts` / `fhir.config.js`.\n *\n * @example\n * ```ts\n * // fhir.config.ts\n * import { defineConfig } from 'fhir-engine';\n *\n * export default defineConfig({\n *   database: { type: 'sqlite', path: './fhir.db' },\n *   packages: { path: './fhir-packages' },\n * });\n * ```\n */\nexport function defineConfig(config: FhirEngineConfig): FhirEngineConfig {\n  return config;\n}\n\n// ---------------------------------------------------------------------------\n// Config file discovery order\n// ---------------------------------------------------------------------------\n\nconst CONFIG_FILENAMES = [\n  'fhir.config.ts',\n  'fhir.config.js',\n  'fhir.config.mjs',\n  'fhir.config.json',\n] as const;\n\n// ---------------------------------------------------------------------------\n// loadFhirConfig \u2014 auto-discover and load config\n// ---------------------------------------------------------------------------\n\n/**\n * Load engine configuration from a file.\n *\n * If `configPath` is provided, loads that exact file.\n * Otherwise, searches the current working directory for config files\n * in this order: `fhir.config.ts` \u2192 `fhir.config.js` \u2192 `fhir.config.mjs` \u2192 `fhir.config.json`.\n *\n * Environment variable overrides are applied on top of the loaded config.\n *\n * @param configPath - Explicit path to a config file (optional).\n * @returns The resolved `FhirEngineConfig`.\n */\nexport async function loadFhirConfig(configPath?: string): Promise<FhirEngineConfig> {\n  let resolvedPath: string;\n\n  if (configPath) {\n    resolvedPath = resolve(configPath);\n    if (!existsSync(resolvedPath)) {\n      throw new Error(`fhir-engine: config file not found: ${resolvedPath}`);\n    }\n  } else {\n    const cwd = process.cwd();\n    const found = CONFIG_FILENAMES\n      .map((name) => resolve(cwd, name))\n      .find((p) => existsSync(p));\n    if (!found) {\n      throw new Error(\n        `fhir-engine: no config file found in ${cwd}. ` +\n        `Expected one of: ${CONFIG_FILENAMES.join(', ')}`,\n      );\n    }\n    resolvedPath = found;\n  }\n\n  const config = await loadConfigFile(resolvedPath);\n  return applyEnvOverrides(config);\n}\n\n// ---------------------------------------------------------------------------\n// File loaders\n// ---------------------------------------------------------------------------\n\nasync function loadConfigFile(filePath: string): Promise<FhirEngineConfig> {\n  const ext = extname(filePath);\n\n  if (ext === '.json') {\n    return loadJsonConfig(filePath);\n  }\n\n  if (ext === '.ts' || ext === '.js' || ext === '.mjs') {\n    return loadModuleConfig(filePath);\n  }\n\n  throw new Error(`fhir-engine: unsupported config file extension: ${ext}`);\n}\n\nfunction loadJsonConfig(filePath: string): FhirEngineConfig {\n  try {\n    const raw = readFileSync(filePath, 'utf-8');\n    return JSON.parse(raw) as FhirEngineConfig;\n  } catch (err) {\n    throw new Error(\n      `fhir-engine: failed to parse config file ${filePath}: ${err instanceof Error ? err.message : String(err)}`,\n      { cause: err },\n    );\n  }\n}\n\nasync function loadModuleConfig(filePath: string): Promise<FhirEngineConfig> {\n  try {\n    const fileUrl = pathToFileURL(filePath).href;\n    const mod = await import(fileUrl);\n    const config = mod.default ?? mod;\n\n    if (!config || typeof config !== 'object') {\n      throw new Error('config file must export a FhirEngineConfig object as default export');\n    }\n\n    return config as FhirEngineConfig;\n  } catch (err) {\n    if (err instanceof Error && err.message.includes('must export')) {\n      throw err;\n    }\n    throw new Error(\n      `fhir-engine: failed to load config file ${filePath}: ${err instanceof Error ? err.message : String(err)}`,\n      { cause: err },\n    );\n  }\n}\n\n// ---------------------------------------------------------------------------\n// Environment variable overrides\n// ---------------------------------------------------------------------------\n\nconst VALID_DB_TYPES = ['sqlite', 'sqlite-wasm', 'postgres'] as const;\n\n/**\n * Apply environment variable overrides on top of a loaded config.\n *\n * | Env Variable        | Overrides                        |\n * |---------------------|----------------------------------|\n * | FHIR_DATABASE_TYPE  | config.database.type             |\n * | FHIR_DATABASE_URL   | config.database.path / .url      |\n * | FHIR_PACKAGES_PATH  | config.packages.path             |\n * | FHIR_LOG_LEVEL      | (stored for logger filtering)    |\n */\nexport function applyEnvOverrides(config: FhirEngineConfig): FhirEngineConfig {\n  const result = structuredClone(config);\n\n  const dbType = process.env.FHIR_DATABASE_TYPE;\n  const dbUrl = process.env.FHIR_DATABASE_URL;\n  const pkgPath = process.env.FHIR_PACKAGES_PATH;\n\n  if (dbType) {\n    if (!VALID_DB_TYPES.includes(dbType as typeof VALID_DB_TYPES[number])) {\n      throw new Error(\n        `fhir-engine: FHIR_DATABASE_TYPE must be one of: ${VALID_DB_TYPES.join(', ')}. Got: \"${dbType}\"`,\n      );\n    }\n    // Rebuild database config with overridden type\n    const validType = dbType as DatabaseConfig['type'];\n    if (validType === 'postgres') {\n      result.database = { type: 'postgres', url: (result.database as { url?: string }).url ?? '' };\n    } else if (validType === 'sqlite-wasm') {\n      result.database = { type: 'sqlite-wasm', path: (result.database as { path?: string }).path ?? '' };\n    } else {\n      result.database = { type: 'sqlite', path: (result.database as { path?: string }).path ?? '' };\n    }\n  }\n\n  if (dbUrl) {\n    const type = result.database?.type;\n    if (type === 'postgres') {\n      result.database = { ...result.database, type: 'postgres', url: dbUrl };\n    } else if (type === 'sqlite-wasm') {\n      result.database = { ...result.database, type: 'sqlite-wasm', path: dbUrl };\n    } else {\n      result.database = { ...result.database, type: 'sqlite', path: dbUrl };\n    }\n  }\n\n  if (pkgPath) {\n    result.packages = { ...result.packages, path: pkgPath };\n  }\n\n  return result;\n}\n", "import type { Logger } from './types.js';\n\n/**\n * Default console-based logger.\n */\nexport function createConsoleLogger(): Logger {\n  return {\n    debug: (message: string, ...args: unknown[]) => console.debug(`[fhir-engine] ${message}`, ...args),\n    info: (message: string, ...args: unknown[]) => console.info(`[fhir-engine] ${message}`, ...args),\n    warn: (message: string, ...args: unknown[]) => console.warn(`[fhir-engine] ${message}`, ...args),\n    error: (message: string, ...args: unknown[]) => console.error(`[fhir-engine] ${message}`, ...args),\n  };\n}\n", "import { resolve, join } from 'node:path';\nimport { existsSync, mkdirSync, symlinkSync, readFileSync, lstatSync, copyFileSync } from 'node:fs';\nimport { PackageCache, PackageRegistryClient } from 'fhir-definition';\n\nimport type { FhirEngineConfig, ResolvePackagesOptions, ResolvedPackage, ResolvePackagesResult, Logger } from './types.js';\n\n/**\n * Ensure the given directory exists (recursive mkdir).\n */\nfunction ensureDirSync(dir: string): void {\n  if (!existsSync(dir)) {\n    mkdirSync(dir, { recursive: true });\n  }\n}\n\n/**\n * Check if a directory contains a FHIR package manifest.\n * Checks both root/package.json and package/package.json\n * (cached packages store content in a 'package' subdirectory).\n */\nfunction hasManifest(dir: string): boolean {\n  return existsSync(join(dir, 'package.json')) || existsSync(join(dir, 'package', 'package.json'));\n}\n\n/**\n * Read the version from a package.json file.\n * Checks both root and package/ subdirectory.\n * Returns the version string or 'local' if not found.\n */\nfunction readLocalVersion(pkgDir: string): string {\n  for (const candidate of [join(pkgDir, 'package.json'), join(pkgDir, 'package', 'package.json')]) {\n    try {\n      const raw = readFileSync(candidate, 'utf-8');\n      const manifest = JSON.parse(raw);\n      return manifest.version ?? 'local';\n    } catch {\n      // try next candidate\n    }\n  }\n  return 'local';\n}\n\n/**\n * Resolve FHIR packages into a project's packages directory.\n *\n * Resolution order for each package:\n * 1. Already exists in packagesPath \u2192 use as-is (source: 'local')\n * 2. Found in system cache (~/.fhir/packages) \u2192 create symlink/junction (source: 'cache')\n * 3. Download from FHIR Package Registry \u2192 cache \u2192 create symlink (source: 'download')\n *\n * @param config  Engine configuration (uses config.igs and config.packages.path)\n * @param options Override packages list, target path, download policy, or logger\n * @returns       Result with resolved packages and any errors\n *\n * @example\n * ```ts\n * const result = await resolvePackages(config);\n * if (!result.success) {\n *   console.warn('Some packages failed:', result.errors);\n * }\n * ```\n */\nexport async function resolvePackages(\n  config: FhirEngineConfig,\n  options?: ResolvePackagesOptions,\n): Promise<ResolvePackagesResult> {\n  const packagesPath = resolve(options?.packagesPath ?? config.packages.path);\n  const igs = options?.packages ?? config.igs ?? [];\n  const allowDownload = options?.allowDownload ?? config.packageResolve?.allowDownload ?? true;\n  const logger: Logger | undefined = options?.logger ?? config.logger;\n\n  const cache = new PackageCache();\n  const client = new PackageRegistryClient();\n  const results: ResolvedPackage[] = [];\n  const errors: Array<{ name: string; error: string }> = [];\n\n  ensureDirSync(packagesPath);\n\n  for (const ig of igs) {\n    try {\n      // 1. Already exists locally?\n      const localPath = join(packagesPath, ig.name);\n      if (hasManifest(localPath)) {\n        const localVersion = readLocalVersion(localPath);\n        logger?.debug(`Package ${ig.name} already exists locally at ${localPath}`);\n        results.push({ name: ig.name, version: localVersion, path: localPath, source: 'local' });\n        continue;\n      }\n\n      // 2. Resolve version\n      let version = ig.version ?? 'latest';\n      if (version === 'latest') {\n        if (!allowDownload) {\n          errors.push({\n            name: ig.name,\n            error: `Cannot resolve \"latest\" version for ${ig.name} without network access`,\n          });\n          continue;\n        }\n        logger?.info(`Resolving latest version for ${ig.name}...`);\n        version = await client.getLatestVersion(ig.name);\n        logger?.info(`Latest version for ${ig.name}: ${version}`);\n      }\n\n      // 3. Check system cache\n      const cachePath = cache.getPath(ig.name, version);\n      if (cachePath) {\n        // Cache hit \u2014 create symlink\n        logger?.info(`Found ${ig.name}@${version} in system cache, linking...`);\n        ensureCacheRootManifest(cachePath);\n        createLink(cachePath, localPath);\n        results.push({ name: ig.name, version, path: localPath, source: 'cache' });\n        continue;\n      }\n\n      // 4. Download\n      if (!allowDownload) {\n        errors.push({\n          name: ig.name,\n          error: `Package ${ig.name}@${version} not found in cache, and downloads are disabled`,\n        });\n        continue;\n      }\n\n      logger?.info(`Downloading ${ig.name}@${version} from registry...`);\n      const tarball = await client.download(ig.name, version);\n      cache.put(ig.name, version, tarball);\n      logger?.info(`Downloaded and cached ${ig.name}@${version}`);\n\n      // Create symlink from cache to project packages dir\n      const newCachePath = cache.getPath(ig.name, version);\n      if (!newCachePath) {\n        errors.push({ name: ig.name, error: `Failed to locate cached package after download` });\n        continue;\n      }\n      ensureCacheRootManifest(newCachePath);\n      createLink(newCachePath, localPath);\n      results.push({ name: ig.name, version, path: localPath, source: 'download' });\n    } catch (err) {\n      errors.push({\n        name: ig.name,\n        error: err instanceof Error ? err.message : String(err),\n      });\n    }\n  }\n\n  return {\n    success: errors.length === 0,\n    packages: results,\n    errors,\n  };\n}\n\n/**\n * Ensure the cache root directory has a package.json manifest.\n * Some tools (e.g. Firely Terminal) only place package.json inside the\n * package/ subdirectory. Without a root manifest, PackageScanner discovers\n * the package at the wrong depth, causing PackageLoader to construct a\n * double-nested \"package/package\" path that doesn't exist (\u2192 0 resources).\n */\nfunction ensureCacheRootManifest(cachePath: string): void {\n  const rootManifest = join(cachePath, 'package.json');\n  const nestedManifest = join(cachePath, 'package', 'package.json');\n  if (!existsSync(rootManifest) && existsSync(nestedManifest)) {\n    copyFileSync(nestedManifest, rootManifest);\n  }\n}\n\n/**\n * Create a directory junction (Windows) or symlink (Unix) from target to linkPath.\n * Idempotent \u2014 if link already exists, does nothing.\n */\nfunction createLink(target: string, linkPath: string): void {\n  if (existsSync(linkPath)) {\n    // Already exists (either real dir or symlink) \u2014 skip\n    try {\n      const stat = lstatSync(linkPath);\n      if (stat.isSymbolicLink() || stat.isDirectory()) {\n        return;\n      }\n    } catch {\n      // If stat fails, try to create anyway\n    }\n  }\n  // Use 'junction' on Windows (no admin needed), 'dir' on Unix\n  const linkType = process.platform === 'win32' ? 'junction' : 'dir';\n  symlinkSync(target, linkPath, linkType);\n}\n", "// fhir-engine \u2014 public API\n\nexport { createFhirEngine } from './engine.js';\nexport { defineConfig, loadFhirConfig } from './config.js';\nexport { createConsoleLogger } from './logger.js';\nexport { createAdapter } from './adapter-factory.js';\nexport { resolvePackages } from './package-resolver.js';\n\nexport type {\n  FhirEngine,\n  FhirEngineConfig,\n  FhirEnginePlugin,\n  FhirEngineStatus,\n  EngineContext,\n  DatabaseConfig,\n  SqliteDatabaseConfig,\n  SqliteWasmDatabaseConfig,\n  PostgresDatabaseConfig,\n  PackagesConfig,\n  Logger,\n  ResolvePackagesOptions,\n  ResolvedPackage,\n  ResolvePackagesResult,\n} from './types.js';\n\n// Re-export key upstream types for convenience\nexport type { DefinitionRegistry, DefinitionProvider } from 'fhir-definition';\nexport type { FhirRuntimeInstance } from 'fhir-runtime';\nexport type { FhirPersistence, StorageAdapter } from 'fhir-persistence';\n\n// ---------------------------------------------------------------------------\n// Search utilities (from fhir-persistence)\n// ---------------------------------------------------------------------------\n\nexport { parseSearchRequest, executeSearch } from 'fhir-persistence';\nexport type { SearchRequest, SearchResult, SearchOptions } from 'fhir-persistence';\n\n// ---------------------------------------------------------------------------\n// Reindex utilities (from fhir-persistence v0.6.0)\n// ---------------------------------------------------------------------------\n\nexport { reindexResourceTypeV2, reindexAllV2 } from 'fhir-persistence';\n\n// ---------------------------------------------------------------------------\n// FHIRPath evaluation (from fhir-runtime)\n// ---------------------------------------------------------------------------\n\nexport { evalFhirPath, evalFhirPathBoolean, evalFhirPathString, evalFhirPathTyped } from 'fhir-runtime';\n\n// ---------------------------------------------------------------------------\n// Batch validation (from fhir-runtime v0.9.0)\n// ---------------------------------------------------------------------------\n\nexport type { BatchValidationOptions, BatchValidationResult } from 'fhir-runtime';\n\n// ---------------------------------------------------------------------------\n// Profile Slicing utilities (from fhir-runtime v0.10.0)\n// ---------------------------------------------------------------------------\n\nexport { buildSlicingDefinition, makeExtensionSlicing, hasSliceName, extractSliceName, getSliceSiblings, validateSlicingCompatibility } from 'fhir-runtime';\nexport type { SlicingDefinition, SlicingDiscriminatorDef, SlicingRules } from 'fhir-runtime';\n\n// ---------------------------------------------------------------------------\n// Choice Type utilities (from fhir-runtime v0.10.0)\n// ---------------------------------------------------------------------------\n\nexport { isChoiceTypePath, matchesChoiceType, extractChoiceTypeName } from 'fhir-runtime';\nexport type { ChoiceTypeField, ChoiceValue } from 'fhir-runtime';\n\n// ---------------------------------------------------------------------------\n// BackboneElement utilities (from fhir-runtime v0.10.0)\n// ---------------------------------------------------------------------------\n\nexport { isBackboneElementType } from 'fhir-runtime';\n\n// ---------------------------------------------------------------------------\n// IG Extraction utilities (from fhir-runtime v0.11.0)\n// ---------------------------------------------------------------------------\n\nexport { extractSDDependencies, extractElementIndexRows, flattenConceptHierarchy } from 'fhir-runtime';\nexport type { ElementIndexRow, ConceptRow } from 'fhir-runtime';\n\n// ---------------------------------------------------------------------------\n// Conformance module (from fhir-persistence v0.7.0)\n// ---------------------------------------------------------------------------\n\nexport { IGResourceMapRepo, SDIndexRepo, ElementIndexRepo, ExpansionCacheRepo, ConceptHierarchyRepo, SearchParamIndexRepo, IGImportOrchestrator } from 'fhir-persistence';\nexport type { IGResourceMapEntry, IGIndex, SDIndexEntry, ElementIndexEntry, CachedExpansion, ConceptHierarchyEntry, IGImportResult } from 'fhir-persistence';\n\n// ---------------------------------------------------------------------------\n// Error types (from fhir-persistence)\n// ---------------------------------------------------------------------------\n\nexport { RepositoryError, ResourceNotFoundError, ResourceVersionConflictError, ResourceGoneError } from 'fhir-persistence';\n\n// ---------------------------------------------------------------------------\n// Search Bundle utilities (from fhir-persistence)\n// ---------------------------------------------------------------------------\n\nexport { buildSearchBundle, buildPaginationContext, buildNextLink, buildSelfLink, hasNextPage, splitSearchValues, hashToken } from 'fhir-persistence';\nexport { DEFAULT_SEARCH_COUNT, MAX_SEARCH_COUNT } from 'fhir-persistence';\nexport type { SearchBundle, SearchBundleEntry, BuildSearchBundleOptions, PaginationContext } from 'fhir-persistence';\n"],
  "mappings": "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",
  "names": ["resolve", "existsSync", "readFileSync", "parseSearchRequest", "executeSearch"]
}
