{"version":3,"file":"majorModes-DQ8PKowc.cjs","names":["path","DOOM_DIR","os","readDoomConfigSources"],"sources":["../src/services/majorModes/index.ts"],"sourcesContent":["import os from 'node:os';\nimport path from 'node:path';\n\nimport type { ConfigDiagnostic } from '../../types/config';\nimport { DOOM_DIR, type DoomConfigProvenance, readDoomConfigSources } from '../layeredConfig';\n\nexport type LayerPackageConfig = Record<string, unknown>;\n\n/** One package selected by a layer, plus configuration owned by that package. */\nexport interface LayerPackage {\n  name: string;\n  optional?: boolean;\n  config?: LayerPackageConfig;\n}\n\n/** One configured package found while walking selected layers in order. */\nexport interface ResolvedPackageConfiguration {\n  layer: string;\n  specifier: string;\n  config: LayerPackageConfig;\n  baseDirectory: string;\n  filePath?: string;\n}\n\nexport interface LayerDefinition {\n  /**\n   * DoomPi built-in names, or Pi-compatible local extension paths.\n   * Bare names resolve from DoomPi's own extension entries. Paths beginning\n   * with `./` or `../`, plus absolute paths, resolve against the config that\n   * declares the layer and may name a script file or extension directory.\n   */\n  extensions?: string[];\n  /**\n   * npm specifiers, or local package paths retained for compatibility.\n   * Relative paths resolve against the repository root for `.doom/modes.yaml`\n   * and against the global `.doom` directory for\n   * `~/.pi/.doom/modes.yaml`.\n   */\n  packages?: Array<string | LayerPackage>;\n  hookGroups?: string[];\n}\n\n/** A layer plus the root its relative extension and package paths resolve against. */\nexport interface ResolvedLayerDefinition extends LayerDefinition {\n  baseDirectory: string;\n  /** Absolute path of the modes file that declared this layer. */\n  filePath?: string;\n}\n\nexport interface MajorModeDefinition {\n  /** Human-readable purpose used by pickers and agent-facing catalogs. */\n  description: string;\n  /** Ordered layer names activated by this mode. */\n  layers: string[];\n}\n\nexport interface MajorModesConfig {\n  /** Unconditional package bundle loaded before packages from selected named layers. */\n  default?: ResolvedLayerDefinition;\n  layers: Record<string, ResolvedLayerDefinition>;\n  /** The mode selected when neither a flag nor the environment names one. */\n  defaultMajorMode: string;\n  /** Source that last declared the default, absent for the built-in fallback. */\n  defaultMajorModeSource?: DoomConfigProvenance;\n  /** Named major modes, including their purpose and ordered layers. */\n  majorMode: Record<string, MajorModeDefinition>;\n  /** Declaring source for each surviving named mode. */\n  majorModeSources?: Record<string, DoomConfigProvenance>;\n}\n\nexport interface LayerResolvers {\n  ownEntry: (name: string) => string;\n  packageEntry: (name: string) => string;\n  optionalPackageEntry: (name: string) => string | undefined;\n  /** Resolves every standard package.json pi.extensions entry for a package root. */\n  packageEntries?: (name: string) => string[];\n  /** Optional counterpart to packageEntries. */\n  optionalPackageEntries?: (name: string) => string[] | undefined;\n  /** Resolves one path-style layer entry against the config that declared it. */\n  localEntry: (specifier: string, baseDirectory: string) => string | undefined;\n  /** Resolves every Pi extension entry contributed by a local file or directory. */\n  localEntries?: (specifier: string, baseDirectory: string) => string[] | undefined;\n}\n\ninterface ModesDocument {\n  default?: unknown;\n  layers?: unknown;\n  defaultMajorMode?: unknown;\n  majorMode?: unknown;\n}\n\nconst MODES_FILE = 'modes.yaml';\nconst FALLBACK_MAJOR_MODE = 'copilot';\nconst MAJOR_MODES_RELATIVE_PATH = path.join(DOOM_DIR, MODES_FILE);\nconst RELATIVE_PREFIXES = ['./', '../'] as const;\nconst DEFAULT_KEYS = ['packages'] as const;\n\n/**\n * Whether a layer value names a path rather than a built-in or installed package.\n *\n * The same rule Node applies to import specifiers, so a bare name is always a\n * logical name and a path always looks like one.\n */\nexport function isLocalPackageSpecifier(specifier: string): boolean {\n  return path.isAbsolute(specifier) || RELATIVE_PREFIXES.some((prefix) => specifier.startsWith(prefix));\n}\nconst LAYER_PACKAGE_KEYS = ['name', 'optional', 'config'] as const;\nconst MAJOR_MODE_KEYS = ['description', 'layers'] as const;\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n  return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\n/**\n * Where a lenient load collects unknown keys instead of throwing.\n *\n * Same shape as the sink in configPolicy, for the same reason: `assertKnownKeys`\n * is the only reader and the whole load is synchronous.\n */\nlet unknownKeySink: ConfigDiagnostic[] | undefined;\n\nfunction assertKnownKeys(value: Record<string, unknown>, keys: readonly string[], location: string): void {\n  const unsupported = Object.keys(value).filter((key) => !keys.includes(key));\n  if (unsupported.length === 0) return;\n  if (unknownKeySink !== undefined) {\n    for (const key of unsupported) {\n      unknownKeySink.push({\n        filePath: MAJOR_MODES_RELATIVE_PATH,\n        path: key,\n        message: `${location} has unsupported field`,\n      });\n    }\n    return;\n  }\n  throw new Error(`${location} has unsupported field(s): ${unsupported.join(', ')}`);\n}\n\nfunction parseLayerPackage(layerName: string, value: unknown, index: number): string | LayerPackage {\n  const location = `Layer \"${layerName}\" package[${index}] in ${MAJOR_MODES_RELATIVE_PATH}`;\n  if (typeof value === 'string') {\n    if (!value.trim()) throw new Error(`${location} must be a non-empty string or mapping`);\n    return value.trim();\n  }\n  if (!isRecord(value)) throw new Error(`${location} must be a non-empty string or mapping`);\n  assertKnownKeys(value, LAYER_PACKAGE_KEYS, location);\n  if (typeof value.name !== 'string' || !value.name.trim()) {\n    throw new Error(`${location}.name must be a non-empty string`);\n  }\n  if (value.optional !== undefined && typeof value.optional !== 'boolean') {\n    throw new Error(`${location}.optional must be a boolean`);\n  }\n  if (value.config !== undefined && !isRecord(value.config)) {\n    throw new Error(`${location}.config must be a mapping`);\n  }\n  return {\n    name: value.name.trim(),\n    ...(value.optional === true ? { optional: true } : {}),\n    ...(value.config ? { config: { ...value.config } } : {}),\n  };\n}\n\nfunction parseLayerExtensions(layerName: string, value: unknown): string[] | undefined {\n  if (value === undefined) return undefined;\n  const location = `Layer \"${layerName}\" extensions in ${MAJOR_MODES_RELATIVE_PATH}`;\n  if (!Array.isArray(value)) throw new Error(`${location} must be an array`);\n  return value.map((entry, index) => {\n    if (typeof entry !== 'string' || !entry.trim()) {\n      throw new Error(`${location}[${index}] must be a non-empty string`);\n    }\n    return entry.trim();\n  });\n}\n\nfunction parseLayerPackages(layerName: string, value: unknown): Array<string | LayerPackage> | undefined {\n  if (value === undefined) return undefined;\n  if (!Array.isArray(value)) {\n    throw new Error(`Layer \"${layerName}\" packages in ${MAJOR_MODES_RELATIVE_PATH} must be an array`);\n  }\n  return value.map((entry, index) => parseLayerPackage(layerName, entry, index));\n}\n\nfunction parseDefaultMajorMode(value: unknown): string {\n  if (typeof value !== 'string' || !value.trim()) {\n    throw new Error(`defaultMajorMode in ${MAJOR_MODES_RELATIVE_PATH} must be a non-empty string`);\n  }\n  return value.trim();\n}\n\nfunction parseMajorModeLayers(modeName: string, value: unknown): string[] {\n  const location = `Major mode \"${modeName}\" layers in ${MAJOR_MODES_RELATIVE_PATH}`;\n  if (!Array.isArray(value)) throw new Error(`${location} must be an array`);\n  return value.map((layerName, index) => {\n    if (typeof layerName !== 'string' || !layerName.trim()) {\n      throw new Error(`${location}[${index}] must be a non-empty string`);\n    }\n    return layerName.trim();\n  });\n}\n\nfunction legacyMajorModeDescription(layers: readonly string[]): string {\n  return layers.length > 0 ? `Uses layers: ${layers.join(', ')}.` : 'Uses Doom Pi core extensions only.';\n}\n\nfunction parseMajorMode(name: string, value: unknown): MajorModeDefinition {\n  if (Array.isArray(value)) {\n    const layers = parseMajorModeLayers(name, value);\n    return { description: legacyMajorModeDescription(layers), layers };\n  }\n\n  const location = `Major mode \"${name}\" in ${MAJOR_MODES_RELATIVE_PATH}`;\n  if (!isRecord(value)) throw new Error(`${location} must be a mapping with description and layers`);\n  assertKnownKeys(value, MAJOR_MODE_KEYS, location);\n  if (typeof value.description !== 'string' || !value.description.trim()) {\n    throw new Error(`${location}.description must be a non-empty string`);\n  }\n  return {\n    description: value.description.trim(),\n    layers: parseMajorModeLayers(name, value.layers),\n  };\n}\n\nfunction parseMajorModes(value: unknown): Record<string, MajorModeDefinition | null> {\n  if (value === undefined) return {};\n  if (!isRecord(value)) throw new Error(`majorMode in ${MAJOR_MODES_RELATIVE_PATH} must be a mapping`);\n  return Object.fromEntries(\n    Object.entries(value).map(([name, definition]) => [\n      name,\n      definition === null ? null : parseMajorMode(name, definition),\n    ]),\n  );\n}\n\nfunction parseLayer(name: string, definition: unknown): LayerDefinition {\n  if (!isRecord(definition)) throw new Error(`Layer \"${name}\" in ${MAJOR_MODES_RELATIVE_PATH} must be a mapping`);\n  if ('targets' in definition) {\n    throw new Error(\n      `Layer \"${name}\" in ${MAJOR_MODES_RELATIVE_PATH} uses removed field \"targets\"; select availability through major modes`,\n    );\n  }\n  if ('config' in definition) {\n    throw new Error(\n      `Layer \"${name}\" in ${MAJOR_MODES_RELATIVE_PATH} uses unsupported field \"config\"; move it under the package entry that owns it`,\n    );\n  }\n  const extensions = parseLayerExtensions(name, definition.extensions);\n  const packages = parseLayerPackages(name, definition.packages);\n  return {\n    ...definition,\n    ...(extensions === undefined ? {} : { extensions }),\n    ...(packages === undefined ? {} : { packages }),\n  } as LayerDefinition;\n}\n\nfunction parseLayers(value: unknown): Record<string, LayerDefinition | null> {\n  if (value === undefined) return {};\n  if (!isRecord(value)) throw new Error(`layers in ${MAJOR_MODES_RELATIVE_PATH} must be a mapping`);\n  return Object.fromEntries(\n    Object.entries(value).map(([name, definition]) => [\n      name,\n      definition === null ? null : parseLayer(name, definition),\n    ]),\n  );\n}\n\nfunction parseDefault(value: unknown): LayerDefinition {\n  const location = `default in ${MAJOR_MODES_RELATIVE_PATH}`;\n  if (!isRecord(value)) throw new Error(`${location} must be a mapping with packages`);\n  assertKnownKeys(value, DEFAULT_KEYS, location);\n  if (!Object.hasOwn(value, 'packages')) {\n    throw new Error(`Layer \"default\" packages in ${MAJOR_MODES_RELATIVE_PATH} must be an array`);\n  }\n  const packages = parseLayerPackages('default', value.packages);\n  return { packages };\n}\n\n/**\n * Reads layers and major modes from the global and repository configs.\n *\n * The repository is read last, so it replaces a global layer or major mode of\n * the same name. Layers keep the root they were declared under so that a\n * global layer naming `./extensions/x` still points beside the global config\n * once it is loaded from inside some other repository.\n */\nexport function loadMajorModesConfig(repoRoot: string, homeDirectory: string = os.homedir()): MajorModesConfig {\n  const sources = readDoomConfigSources<ModesDocument>(MODES_FILE, repoRoot, homeDirectory);\n  let defaultDefinition: ResolvedLayerDefinition | undefined;\n  const layers: Record<string, ResolvedLayerDefinition> = {};\n  const majorMode: Record<string, MajorModeDefinition> = {};\n  const majorModeSources: Record<string, DoomConfigProvenance> = {};\n  let defaultMajorMode = FALLBACK_MAJOR_MODE;\n  let defaultMajorModeSource: DoomConfigProvenance | undefined;\n  let hasConfiguredDefault = false;\n  for (const source of sources) {\n    if (Object.hasOwn(source.document, 'default')) {\n      defaultDefinition = {\n        ...parseDefault(source.document.default),\n        baseDirectory: source.baseDirectory,\n        filePath: source.filePath,\n      };\n    }\n    for (const [name, definition] of Object.entries(parseLayers(source.document.layers))) {\n      if (definition === null) {\n        delete layers[name];\n        continue;\n      }\n      layers[name] = {\n        ...definition,\n        baseDirectory: source.baseDirectory,\n        filePath: source.filePath,\n      };\n    }\n    if (Object.hasOwn(source.document, 'defaultMajorMode')) {\n      defaultMajorMode = parseDefaultMajorMode(source.document.defaultMajorMode);\n      defaultMajorModeSource = { filePath: source.filePath, baseDirectory: source.baseDirectory };\n      hasConfiguredDefault = true;\n    }\n    for (const [name, definition] of Object.entries(parseMajorModes(source.document.majorMode))) {\n      if (definition === null) {\n        delete majorMode[name];\n        delete majorModeSources[name];\n        continue;\n      }\n      majorMode[name] = definition;\n      majorModeSources[name] = { filePath: source.filePath, baseDirectory: source.baseDirectory };\n    }\n  }\n\n  for (const [modeName, definition] of Object.entries(majorMode)) {\n    for (const name of definition.layers) {\n      if (!layers[name]) {\n        throw new Error(`Unknown layer \"${name}\" in majorMode.${modeName} of ${MAJOR_MODES_RELATIVE_PATH}`);\n      }\n    }\n  }\n  if (hasConfiguredDefault && !Object.hasOwn(majorMode, defaultMajorMode)) {\n    throw new Error(`Unknown default major mode \"${defaultMajorMode}\" in ${MAJOR_MODES_RELATIVE_PATH}`);\n  }\n  return {\n    ...(defaultDefinition ? { default: defaultDefinition } : {}),\n    layers,\n    defaultMajorMode,\n    ...(defaultMajorModeSource ? { defaultMajorModeSource } : {}),\n    majorMode,\n    majorModeSources,\n  };\n}\n\n/** Finds configuration owned by one package while preserving layer and package order. */\nexport function resolvePackageConfigurations(\n  config: MajorModesConfig,\n  names: string[],\n  packageName: string,\n): ResolvedPackageConfiguration[] {\n  const normalizedPackageName = packageName.trim();\n  if (!normalizedPackageName) throw new Error('Package name must be a non-empty string');\n  const configurations: ResolvedPackageConfiguration[] = [];\n  const definitions: Array<{ name: string; definition: ResolvedLayerDefinition }> = [];\n  if (config.default) definitions.push({ name: 'default', definition: config.default });\n  for (const name of names) {\n    const definition = config.layers[name];\n    if (!definition) throw new Error(`Unknown layer: ${name}`);\n    definitions.push({ name, definition });\n  }\n  for (const { name, definition } of definitions) {\n    for (const entry of definition.packages ?? []) {\n      if (typeof entry === 'string' || entry.config === undefined) continue;\n      if (entry.name !== normalizedPackageName && !entry.name.startsWith(`${normalizedPackageName}/`)) continue;\n      configurations.push({\n        layer: name,\n        specifier: entry.name,\n        config: { ...entry.config },\n        baseDirectory: definition.baseDirectory,\n        ...(definition.filePath ? { filePath: definition.filePath } : {}),\n      });\n    }\n  }\n  return configurations;\n}\n\n/** Resolves one named major mode into its configured layer components. */\nexport function resolveLayers(config: MajorModesConfig, majorMode: string): string[] {\n  if (!Object.hasOwn(config.majorMode, majorMode)) {\n    throw new Error(\n      `Unknown major mode: ${majorMode}. Known major modes: ${Object.keys(config.majorMode).sort().join(', ')}`,\n    );\n  }\n  return [...config.majorMode[majorMode]!.layers];\n}\n\nfunction resolveLocalEntries(\n  resolvers: LayerResolvers,\n  specifier: string,\n  baseDirectory: string,\n): string[] | undefined {\n  const resolved = resolvers.localEntries?.(specifier, baseDirectory);\n  if (resolved !== undefined) return resolved;\n  const single = resolvers.localEntry(specifier, baseDirectory);\n  return single ? [single] : undefined;\n}\n\n/** Resolves one layer's extension and package entries to absolute paths. */\nexport function layerEntries(config: MajorModesConfig, name: string, resolvers: LayerResolvers): string[] {\n  const layer = config.layers[name];\n  if (!layer) throw new Error(`Unknown layer: ${name}`);\n  const entries: string[] = [];\n  for (const entry of layer.extensions ?? []) {\n    if (!isLocalPackageSpecifier(entry)) {\n      entries.push(resolvers.ownEntry(entry));\n      continue;\n    }\n    const resolved = resolveLocalEntries(resolvers, entry, layer.baseDirectory);\n    if (!resolved?.length) {\n      throw new Error(\n        `Layer \"${name}\" extension \"${entry}\" does not resolve under ${layer.baseDirectory}. ` +\n          'Point it at a Pi extension file or directory.',\n      );\n    }\n    entries.push(...resolved);\n  }\n  for (const entry of layer.packages ?? []) {\n    const specifier = typeof entry === 'string' ? entry : entry.name;\n    const optional = typeof entry === 'string' ? false : entry.optional === true;\n    if (isLocalPackageSpecifier(specifier)) {\n      const resolved = resolveLocalEntries(resolvers, specifier, layer.baseDirectory);\n      if (resolved?.length) entries.push(...resolved);\n      else if (!optional) {\n        throw new Error(\n          `Layer \"${name}\" package \"${specifier}\" does not resolve under ${layer.baseDirectory}. ` +\n            'Point it at an extension file, or a directory whose package.json declares pi.extensions.',\n        );\n      }\n      continue;\n    }\n    if (optional) {\n      let resolved = resolvers.optionalPackageEntries?.(specifier);\n      if (resolved === undefined) {\n        const single = resolvers.optionalPackageEntry(specifier);\n        resolved = single ? [single] : undefined;\n      }\n      if (resolved) entries.push(...resolved);\n      continue;\n    }\n    const resolved = resolvers.packageEntries?.(specifier) ?? [resolvers.packageEntry(specifier)];\n    if (resolved.length === 0) {\n      throw new Error(`Layer \"${name}\" package \"${specifier}\" declares no Pi extensions.`);\n    }\n    entries.push(...resolved);\n  }\n  return entries;\n}\n\n/** Hook group ids contributed by the selected layers, deduped. */\nexport function layerHookGroups(config: MajorModesConfig, names: string[]): string[] {\n  const groups = new Set<string>();\n  for (const name of names) {\n    for (const group of config.layers[name]?.hookGroups ?? []) groups.add(group);\n  }\n  return [...groups];\n}\n\n/**\n * Suppress layers that exist to contribute hook groups when hooks are disabled.\n *\n * Lives beside layerHookGroups because it is the inverse question about the same\n * field, and because every caller that resolves layers has to ask it.\n */\nexport function filterHookDisabledLayers(\n  config: MajorModesConfig,\n  layers: readonly string[],\n  hooks: boolean,\n): string[] {\n  if (hooks) return [...layers];\n  return layers.filter((layer) => (config.layers[layer]?.hookGroups?.length ?? 0) === 0);\n}\n\n/**\n * Reads layers and major modes, tolerating unknown keys.\n *\n * `doompi sync` uses this so a modes.yaml written against a different set of\n * layer packages cannot break a build. Every other caller keeps the strict\n * `loadMajorModesConfig`, and `doompi doctor` still reports what was tolerated.\n */\nexport function loadMajorModesConfigLenient(\n  repoRoot: string,\n  homeDirectory: string = os.homedir(),\n): { config: MajorModesConfig; diagnostics: ConfigDiagnostic[] } {\n  const diagnostics: ConfigDiagnostic[] = [];\n  const previous = unknownKeySink;\n  unknownKeySink = diagnostics;\n  try {\n    return { config: loadMajorModesConfig(repoRoot, homeDirectory), diagnostics };\n  } finally {\n    unknownKeySink = previous;\n  }\n}\n"],"mappings":"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"}