{"version":3,"file":"index.base.mjs","sources":["../src/types.ts","../src/validate.ts","../src/config.ts"],"sourcesContent":["import {\n  array,\n  string,\n  object,\n  assign,\n  optional,\n  record,\n  boolean,\n  integer,\n  min,\n  unknown\n} from \"superstruct\";\n\n/**\n * Plugin config type.\n *\n * @public\n */\nexport interface PluginConfig {\n  name: string;\n  config?: unknown;\n}\n\nexport const pluginConfigSchema = object({\n  name: string(),\n  config: optional(unknown())\n});\n\n/**\n * Environment config type.\n *\n * @public\n */\nexport interface EnvironmentConfig {\n  require?: string[];\n  components?: string[];\n  loaders?: string[];\n  plugins?: PluginConfig[];\n  import?: string[];\n}\n\nexport const environmentConfigSchema = object({\n  require: optional(array(string())),\n  components: optional(array(string())),\n  loaders: optional(array(string())),\n  plugins: optional(array(pluginConfigSchema)),\n  import: optional(array(string()))\n});\n\n/**\n * Global config type.\n *\n * @public\n */\nexport interface Config extends EnvironmentConfig {\n  environments?: Record<string, EnvironmentConfig>;\n  paths?: {\n    environment?: {\n      global?: string;\n      component?: string;\n    };\n  };\n  extensions?: string[];\n  baseEnvironment?: string;\n  bail?: boolean;\n  concurrency?: number;\n}\n\nexport const configSchema = assign(\n  environmentConfigSchema,\n  object({\n    environments: optional(record(string(), environmentConfigSchema)),\n    paths: optional(\n      object({\n        environment: optional(\n          object({\n            global: optional(string()),\n            component: optional(string())\n          })\n        )\n      })\n    ),\n    extensions: optional(array(string())),\n    baseEnvironment: optional(string()),\n    bail: optional(boolean()),\n    concurrency: optional(min(integer(), 1))\n  })\n);\n","import { validate as sValidate, Failure } from \"superstruct\";\nimport { Config, configSchema } from \"./types\";\n\nfunction formatErrors(failures: readonly Failure[]): string {\n  return [\n    'Config file \"kosko.toml\" is invalid.',\n    ...failures.map((f) => `- \"${f.path.join(\".\")}\": ${f.message}`)\n  ].join(\"\\n\");\n}\n\n/**\n * @public\n */\nexport class ValidationError extends Error {\n  /**\n   * An array of {@link https://docs.superstructjs.org/api-reference/errors | superstruct error objects}.\n   */\n  public readonly errors: readonly Failure[];\n\n  constructor(errors: readonly Failure[]) {\n    super(formatErrors(errors));\n\n    this.errors = errors;\n  }\n}\n\nValidationError.prototype.name = \"ValidationError\";\n\n/**\n * Validates data against the configuration schema.\n *\n * @throws {@link ValidationError}\n * Thrown if validation failed.\n *\n * @public\n */\nexport function validate(data: unknown): Config {\n  const result = sValidate(data, configSchema);\n\n  if (result[0]) {\n    throw new ValidationError(result[0].failures());\n  }\n\n  return result[1];\n}\n","import toml from \"@iarna/toml\";\nimport { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { Config, EnvironmentConfig } from \"./types\";\nimport { validate } from \"./validate\";\nimport logger, { LogLevel } from \"@kosko/log\";\nimport { getErrorCode, toArray } from \"@kosko/common-utils\";\nimport { cwd } from \"node:process\";\n\n/**\n * Parses and validates a config file from the specified path.\n *\n * @param path - Path of the config file.\n * @public\n */\nexport async function loadConfig(path: string): Promise<Config> {\n  const content = await readFile(path, \"utf8\");\n  const data = await toml.parse.async(content);\n\n  logger.log(LogLevel.Debug, `Found config at \"${path}\"`);\n  return validate(data);\n}\n\n/**\n * Searches config files in the given directory. Returns an empty object when\n * config files does not exist in the directory.\n *\n * @param path - Path to the working directory. Default to current working directory (CWD).\n * @public\n */\nexport async function searchConfig(path: string = cwd()): Promise<Config> {\n  const configPath = join(path, \"kosko.toml\");\n\n  try {\n    return await loadConfig(configPath);\n  } catch (err) {\n    if (getErrorCode(err) === \"ENOENT\") return {};\n\n    logger.log(LogLevel.Debug, \"Config load failed\", { error: err });\n    throw err;\n  }\n}\n\nfunction flatten<T>(...arrays: (T[] | undefined)[]): T[] {\n  return arrays.flatMap((x) => x ?? []);\n}\n\n/**\n * Returns environment configs merged with global configs.\n *\n * @param config - Config object.\n * @param envs - Environment name.\n * @public\n */\nexport function getConfig(\n  config: Config,\n  envs: string | string[]\n): Required<EnvironmentConfig> {\n  const { environments = {} } = config;\n  const envConfigs = toArray(envs)\n    .map((env) => environments[env])\n    .filter(Boolean);\n\n  return {\n    require: flatten(config.require, ...envConfigs.map((e) => e.require)),\n    components: flatten(\n      config.components,\n      ...envConfigs.map((e) => e.components)\n    ),\n    loaders: flatten(config.loaders, ...envConfigs.map((e) => e.loaders)),\n    plugins: flatten(config.plugins, ...envConfigs.map((e) => e.plugins)),\n    import: flatten(config.import, ...envConfigs.map((e) => e.import))\n  };\n}\n"],"names":["pluginConfigSchema","object","name","string","config","optional","unknown","environmentConfigSchema","require","array","components","loaders","plugins","import","configSchema","assign","environments","record","paths","environment","global","component","extensions","baseEnvironment","bail","boolean","concurrency","min","integer","ValidationError","Error","constructor","errors","failures","map","f","path","join","message","prototype","validate","data","result","sValidate","loadConfig","content","readFile","toml","parse","async","logger","log","LogLevel","Debug","searchConfig","cwd","configPath","err","getErrorCode","error","flatten","arrays","flatMap","x","getConfig","envs","envConfigs","toArray","env","filter","Boolean","e"],"mappings":";;;;;;;;AAuBO,MAAMA,qBAAqBC,MAAO,CAAA;IACvCC,IAAMC,EAAAA,MAAAA,EAAAA;AACNC,IAAAA,MAAAA,EAAQC,QAASC,CAAAA,OAAAA,EAAAA,CAAAA;AACnB,CAAG,CAAA,CAAA;AAeI,MAAMC,0BAA0BN,MAAO,CAAA;AAC5CO,IAAAA,OAAAA,EAASH,SAASI,KAAMN,CAAAA,MAAAA,EAAAA,CAAAA,CAAAA;AACxBO,IAAAA,UAAAA,EAAYL,SAASI,KAAMN,CAAAA,MAAAA,EAAAA,CAAAA,CAAAA;AAC3BQ,IAAAA,OAAAA,EAASN,SAASI,KAAMN,CAAAA,MAAAA,EAAAA,CAAAA,CAAAA;AACxBS,IAAAA,OAAAA,EAASP,SAASI,KAAMT,CAAAA,kBAAAA,CAAAA,CAAAA;AACxBa,IAAAA,MAAAA,EAAQR,SAASI,KAAMN,CAAAA,MAAAA,EAAAA,CAAAA,CAAAA;AACzB,CAAG,CAAA,CAAA;AAqBI,MAAMW,YAAAA,GAAeC,MAC1BR,CAAAA,uBAAAA,EACAN,MAAO,CAAA;IACLe,YAAcX,EAAAA,QAAAA,CAASY,OAAOd,MAAUI,EAAAA,EAAAA,uBAAAA,CAAAA,CAAAA;AACxCW,IAAAA,KAAAA,EAAOb,SACLJ,MAAO,CAAA;AACLkB,QAAAA,WAAAA,EAAad,SACXJ,MAAO,CAAA;AACLmB,YAAAA,MAAAA,EAAQf,QAASF,CAAAA,MAAAA,EAAAA,CAAAA;AACjBkB,YAAAA,SAAAA,EAAWhB,QAASF,CAAAA,MAAAA,EAAAA,CAAAA;AACtB,SAAA,CAAA,CAAA;AAEJ,KAAA,CAAA,CAAA;AAEFmB,IAAAA,UAAAA,EAAYjB,SAASI,KAAMN,CAAAA,MAAAA,EAAAA,CAAAA,CAAAA;AAC3BoB,IAAAA,eAAAA,EAAiBlB,QAASF,CAAAA,MAAAA,EAAAA,CAAAA;AAC1BqB,IAAAA,IAAAA,EAAMnB,QAASoB,CAAAA,OAAAA,EAAAA,CAAAA;IACfC,WAAarB,EAAAA,QAAAA,CAASsB,IAAIC,OAAW,EAAA,EAAA,CAAA,CAAA,CAAA;AACvC,CACA,CAAA,CAAA;;AC1EK,MAAMC,eAAwBC,SAAAA,KAAAA,CAAAA;AAMnCC,IAAAA,WAAAA,CAAYC,MAA0B,CAAE;AACtC,QAAA,KAAK,CAhBA;AACL,YAAA,sCAAA;AACGC,YAAAA,GAcgBD,OAdPE,GAAG,CAAC,CAACC,CAAM,GAAA,CAAC,GAAG,EAAEA,CAAAA,CAAEC,IAAI,CAACC,IAAI,CAAC,GAAK,CAAA,CAAA,GAAG,EAAEF,CAAEG,CAAAA,OAAO,CAAC,CAAC,CAAA;AAC/D,SAAA,CAACD,IAAI,CAAC,IAAA,CAAA,CAAA,EAeL,IAAI,CAACL,MAAM,GAAGA,MAAAA,CAAAA;AAChB,KAAA;AACF,CAAA;AAEAH,eAAgBU,CAAAA,SAAS,CAACrC,IAAI,GAAG,iBAAA,CAAA;AAU1B,SAASsC,SAASC,IAAa,EAAA;IACpC,IAAMC,MAAAA,GAASC,WAAUF,IAAM3B,EAAAA,YAAAA,CAAAA,CAAAA;IAE/B,IAAI4B,MAAM,CAAC,CAAA,CAAE,EACX,MAAM,IAAIb,eAAAA,CAAgBa,MAAM,CAAC,CAAE,CAAA,CAACT,QAAQ,EAAA,CAAA,CAAA;IAG9C,OAAOS,MAAM,CAAC,CAAE,CAAA,CAAA;AAClB;;AC7BO,eAAeE,WAAWR,IAAY,EAAA;IAC3C,IAAMS,OAAAA,GAAU,MAAMC,QAAAA,CAASV,IAAM,EAAA,MAAA,CAAA,EAC/BK,IAAO,GAAA,MAAMM,IAAKC,CAAAA,KAAK,CAACC,KAAK,CAACJ,OAAAA,CAAAA,CAAAA;AAGpC,IAAA,OADAK,MAAOC,CAAAA,GAAG,CAACC,QAAAA,CAASC,KAAK,EAAE,CAAC,iBAAiB,EAAEjB,IAAAA,CAAK,CAAC,CAAC,GAC/CI,QAASC,CAAAA,IAAAA,CAAAA,CAAAA;AAClB,CAAA;AASO,eAAea,YAAalB,CAAAA,IAAAA,GAAemB,GAAK,EAAA,EAAA;IACrD,IAAMC,UAAAA,GAAanB,KAAKD,IAAM,EAAA,YAAA,CAAA,CAAA;IAE9B,IAAI;AACF,QAAA,OAAO,MAAMQ,UAAWY,CAAAA,UAAAA,CAAAA,CAAAA;AAC1B,KAAA,CAAE,OAAOC,GAAK,EAAA;AACZ,QAAA,IAAIC,QAAsB,KAAtBA,YAAaD,CAAAA,GAAAA,CAAAA,EAAmB,OAAO,EAAC,CAAA;AAG5C,QAAA,MADAP,OAAOC,GAAG,CAACC,QAASC,CAAAA,KAAK,EAAE,oBAAsB,EAAA;YAAEM,KAAOF,EAAAA,GAAAA;SACpDA,CAAAA,EAAAA,GAAAA,CAAAA;AACR,KAAA;AACF,CAAA;AAEA,SAASG,OAAAA,CAAW,GAAGC,MAA2B,EAAA;AAChD,IAAA,OAAOA,OAAOC,OAAO,CAAC,CAACC,CAAAA,GAAMA,KAAK,EAAE,CAAA,CAAA;AACtC,CAAA;AASO,SAASC,SAAAA,CACd5D,MAAc,EACd6D,IAAuB,EAAA;AAEvB,IAAA,IAAM,EAAEjD,YAAe,GAAA,EAAE,EAAE,GAAGZ,QACxB8D,UAAaC,GAAAA,OAAAA,CAAQF,MACxB/B,GAAG,CAAC,CAACkC,GAAQpD,GAAAA,YAAY,CAACoD,GAAI,CAAA,CAAA,CAC9BC,MAAM,CAACC,OAAAA,CAAAA,CAAAA;IAEV,OAAO;QACL9D,OAASoD,EAAAA,OAAAA,CAAQxD,MAAOI,CAAAA,OAAO,EAAK0D,GAAAA,UAAAA,CAAWhC,GAAG,CAAC,CAACqC,CAAMA,GAAAA,CAAAA,CAAE/D,OAAO,CAAA,CAAA;QACnEE,UAAYkD,EAAAA,OAAAA,CACVxD,MAAOM,CAAAA,UAAU,EACdwD,GAAAA,UAAAA,CAAWhC,GAAG,CAAC,CAACqC,CAAMA,GAAAA,CAAAA,CAAE7D,UAAU,CAAA,CAAA;QAEvCC,OAASiD,EAAAA,OAAAA,CAAQxD,MAAOO,CAAAA,OAAO,EAAKuD,GAAAA,UAAAA,CAAWhC,GAAG,CAAC,CAACqC,CAAMA,GAAAA,CAAAA,CAAE5D,OAAO,CAAA,CAAA;QACnEC,OAASgD,EAAAA,OAAAA,CAAQxD,MAAOQ,CAAAA,OAAO,EAAKsD,GAAAA,UAAAA,CAAWhC,GAAG,CAAC,CAACqC,CAAMA,GAAAA,CAAAA,CAAE3D,OAAO,CAAA,CAAA;QACnEC,MAAQ+C,EAAAA,OAAAA,CAAQxD,MAAOS,CAAAA,MAAM,EAAKqD,GAAAA,UAAAA,CAAWhC,GAAG,CAAC,CAACqC,CAAMA,GAAAA,CAAAA,CAAE1D,MAAM,CAAA,CAAA;AAClE,KAAA,CAAA;AACF;;;;"}