{
  "version": 3,
  "sources": ["../../src/config/loader-es.ts"],
  "sourceRoot": "file://",
  "sourcesContent": ["/**\n * @file Config - esLoader\n * @module mkbuild/config/esLoader\n */\n\nimport type { Config } from '#src/interfaces'\nimport * as mlly from '@flex-development/mlly'\nimport * as pathe from '@flex-development/pathe'\nimport * as tscu from '@flex-development/tsconfig-utils'\nimport { cast, get, type EmptyString } from '@flex-development/tutils'\nimport * as esbuild from 'esbuild'\nimport { pathToFileURL, type URL } from 'node:url'\n\n/**\n * Loads an [ESM][1] (`*.js`, `*.mjs`) or TypeScript (`*.cts`, `*.mts`, `*.ts`)\n * build config file.\n *\n * [1]: https://nodejs.org/api/esm.html\n *\n * @see https://github.com/davidtheclark/cosmiconfig#loaders\n *\n * @async\n *\n * @param {string} path - Absolute path to config file\n * @param {string} content - Config file content\n * @return {Promise<Config>} Build configuration options\n */\nconst esLoader = async (path: string, content: string): Promise<Config> => {\n  /**\n   * File extension of {@linkcode path}.\n   *\n   * @const {EmptyString | pathe.Ext} ext\n   */\n  const ext: EmptyString | pathe.Ext = pathe.extname(path)\n\n  /**\n   * URL of module to resolve from.\n   *\n   * @const {URL} parent\n   */\n  const parent: URL = pathToFileURL(path)\n\n  // convert content to data url if content does not need to be transformed\n  if (!/^\\.(?:cts|mts|ts)$/.test(ext)) {\n    content = mlly.toDataURL(await mlly.resolveModules(content, { parent }))\n    return cast(get(await import(content), 'default'))\n  }\n\n  /**\n   * Absolute path to tsconfig file.\n   *\n   * @const {string} tsconfig\n   */\n  const tsconfig: string = pathe.join(pathe.dirname(path), 'tsconfig.json')\n\n  // resolve path aliases\n  content = await tscu.resolvePaths(content, {\n    baseUrl: pathe.dirname(path),\n    ext: '',\n    parent,\n    tsconfig\n  })\n\n  // convert module specifiers to absolute specifiers\n  content = await mlly.resolveModules(content, { parent })\n\n  // convert content to pure javascript\n  const { code } = await esbuild.transform(\n    content,\n    cast<esbuild.TransformOptions>({\n      format: 'esm',\n      loader: ext.slice(/^\\.[cm]/.test(ext) ? 2 : 1),\n      sourcefile: path,\n      tsconfigRaw: { compilerOptions: tscu.loadCompilerOptions(tsconfig) }\n    })\n  )\n\n  return cast(get(await import(mlly.toDataURL(code)), 'default'))\n}\n\nexport default esLoader\n"],
  "mappings": ";;AAMA,YAAY,UAAU;AACtB,YAAY,WAAW;AACvB,YAAY,UAAU;AACtB,SAAS,MAAM,WAA6B;AAC5C,YAAY,aAAa;AACzB,SAAS,qBAA+B;AAgBxC,MAAM,WAAW,8BAAO,MAAc,YAAqC;AAMzE,QAAM,MAA+B,MAAM,QAAQ,IAAI,GAOjD,SAAc,cAAc,IAAI;AAGtC,MAAI,CAAC,qBAAqB,KAAK,GAAG;AAChC,qBAAU,KAAK,UAAU,MAAM,KAAK,eAAe,SAAS,EAAE,OAAO,CAAC,CAAC,GAChE,KAAK,IAAI,MAAM,OAAO,UAAU,SAAS,CAAC;AAQnD,QAAM,WAAmB,MAAM,KAAK,MAAM,QAAQ,IAAI,GAAG,eAAe;AAGxE,YAAU,MAAM,KAAK,aAAa,SAAS;AAAA,IACzC,SAAS,MAAM,QAAQ,IAAI;AAAA,IAC3B,KAAK;AAAA,IACL;AAAA,IACA;AAAA,EACF,CAAC,GAGD,UAAU,MAAM,KAAK,eAAe,SAAS,EAAE,OAAO,CAAC;AAGvD,QAAM,EAAE,KAAK,IAAI,MAAM,QAAQ;AAAA,IAC7B;AAAA,IACA,KAA+B;AAAA,MAC7B,QAAQ;AAAA,MACR,QAAQ,IAAI,MAAM,UAAU,KAAK,GAAG,IAAI,IAAI,CAAC;AAAA,MAC7C,YAAY;AAAA,MACZ,aAAa,EAAE,iBAAiB,KAAK,oBAAoB,QAAQ,EAAE;AAAA,IACrE,CAAC;AAAA,EACH;AAEA,SAAO,KAAK,IAAI,MAAM,OAAO,KAAK,UAAU,IAAI,IAAI,SAAS,CAAC;AAChE,GAnDiB;AAqDjB,IAAO,oBAAQ;",
  "names": []
}
