{
  "version": 3,
  "sources": ["../../../src/plugins/clean/plugin.ts"],
  "sourceRoot": "file://",
  "sourcesContent": ["/**\n * @file Plugins - clean\n * @module mkbuild/plugins/clean/plugin\n */\n\nimport fsa from '#src/utils/fs'\nimport pathe from '@flex-development/pathe'\nimport type { BuildOptions, Plugin, PluginBuild } from 'esbuild'\nimport CLEAN_CACHE from './cache'\nimport type Options from './options'\n\n/**\n * Returns an output directory cleaner plugin.\n *\n * @param {Options} [options] - Plugin options\n * @return {Plugin} Output directory cleaner plugin\n */\nconst plugin = ({\n  mkdir = fsa.mkdir,\n  rm = fsa.rm,\n  unlink = fsa.unlink\n}: Options = {}): Plugin => {\n  /**\n   * Cleans an output directory.\n   *\n   * Cleaning will skipped under either of the following conditions:\n   *\n   * - `initialOptions.outdir` resolves to `initialOptions.absWorkingDir`\n   * - a cache hit is found in {@linkcode CLEAN_CACHE}\n   *\n   * [1]: https://esbuild.github.io/plugins\n   * [2]: https://esbuild.github.io/api/#build-api\n   *\n   * @async\n   *\n   * @param {PluginBuild} build - [esbuild plugin api][1]\n   * @param {BuildOptions} build.initialOptions - [esbuild build api][2] options\n   * @return {Promise<void>} Nothing when complete\n   */\n  const setup = async ({ initialOptions }: PluginBuild): Promise<void> => {\n    const { absWorkingDir = process.cwd(), outdir = 'dist' } = initialOptions\n\n    /**\n     * Absolute path to output directory.\n     *\n     * @const {string} path\n     */\n    const path: string = pathe.resolve(absWorkingDir, outdir).replace(/\\/$/, '')\n\n    // clean output directory if outdir does not resolve to absWorkingDir and\n    // cache hit was not found for path\n    if (absWorkingDir.replace(/\\/$/, '') !== path && !CLEAN_CACHE.get(path)) {\n      // unlink output directory\n      await unlink(path).catch(() => ({}))\n\n      // try removing output directory\n      await rm(path, { recursive: true }).catch(() => ({}))\n\n      // recreate output directory\n      await mkdir(path, { recursive: true })\n    }\n\n    return void CLEAN_CACHE.set(path, true)\n  }\n\n  return { name: 'clean', setup }\n}\n\nexport { plugin as default, type Options }\n"],
  "mappings": ";;AAKA,OAAO,SAAS;AAChB,OAAO,WAAW;AAElB,OAAO,iBAAiB;AASxB,MAAM,SAAS,wBAAC;AAAA,EACd,QAAQ,IAAI;AAAA,EACZ,KAAK,IAAI;AAAA,EACT,SAAS,IAAI;AACf,IAAa,CAAC,OA4CL,EAAE,MAAM,SAAS,OA1BV,8BAAO,EAAE,eAAe,MAAkC;AACtE,QAAM,EAAE,gBAAgB,QAAQ,IAAI,GAAG,SAAS,OAAO,IAAI,gBAOrD,OAAe,MAAM,QAAQ,eAAe,MAAM,EAAE,QAAQ,OAAO,EAAE;AAI3E,SAAI,cAAc,QAAQ,OAAO,EAAE,MAAM,QAAQ,CAAC,YAAY,IAAI,IAAI,MAEpE,MAAM,OAAO,IAAI,EAAE,MAAM,OAAO,CAAC,EAAE,GAGnC,MAAM,GAAG,MAAM,EAAE,WAAW,GAAK,CAAC,EAAE,MAAM,OAAO,CAAC,EAAE,GAGpD,MAAM,MAAM,MAAM,EAAE,WAAW,GAAK,CAAC,IAGhC,KAAK,YAAY,IAAI,MAAM,EAAI;AACxC,GAxBc,SA0BgB,IAhDjB;",
  "names": []
}
