{
  "version": 3,
  "sources": ["../../../src/plugins/filter/plugin.ts"],
  "sourceRoot": "file://",
  "sourcesContent": ["/**\n * @file Plugins - filter\n * @module mkbuild/plugins/filter/plugin\n */\n\nimport type { OutputMetadata } from '#src/types'\nimport { entries, select } from '@flex-development/tutils'\nimport type { BuildOptions, BuildResult, Plugin, PluginBuild } from 'esbuild'\n\n/**\n * Plugin-specific build options.\n *\n * @internal\n */\ntype SpecificOptions = { metafile: true; write: false }\n\n/**\n * Returns an output file filter plugin.\n *\n * @param {RegExp} [filter=/.+/] - Output file path filter\n * @return {Plugin} Output file path filter plugin\n */\nconst plugin = (filter: RegExp = /.+/): Plugin => {\n  /**\n   * Filters output files.\n   *\n   * [1]: https://esbuild.github.io/plugins\n   * [2]: https://esbuild.github.io/api/#build-api\n   *\n   * @param {PluginBuild} build - [esbuild plugin api][1]\n   * @param {BuildOptions} build.initialOptions - [esbuild build api][2] options\n   * @param {PluginBuild['onEnd']} build.onEnd - Build end callback\n   * @return {void} Nothing when complete\n   * @throws {Error}\n   */\n  const setup = ({ initialOptions, onEnd }: PluginBuild): void => {\n    // metafile required to filter output metadata from result.metafile\n    if (!initialOptions.metafile) throw new Error('metafile required')\n\n    // esbuild write must be disabled to filter result.outputFiles\n    if (initialOptions.write) throw new Error('write must be disabled')\n\n    // filter output files and metadata\n    return void onEnd((result: BuildResult<SpecificOptions>): void => {\n      /**\n       * Output file metadata.\n       *\n       * @const {Record<string, OutputMetadata>} outputs\n       */\n      const outputs: Record<string, OutputMetadata> = {}\n\n      // filter output files\n      result.outputFiles = select(result.outputFiles, o => filter.test(o.path))\n\n      // filter output file metadata\n      for (const [outfile, metadata] of entries(result.metafile.outputs)) {\n        if (result.outputFiles.some(o => o.path.endsWith(outfile))) {\n          outputs[outfile] = metadata\n        }\n      }\n\n      // reset metafile\n      result.metafile.outputs = outputs\n\n      return void result\n    })\n  }\n\n  return { name: 'filter', setup }\n}\n\nexport default plugin\n"],
  "mappings": ";;AAMA,SAAS,SAAS,cAAc;AAgBhC,MAAM,SAAS,wBAAC,SAAiB,UA8CxB,EAAE,MAAM,UAAU,OAjCX,wBAAC,EAAE,gBAAgB,MAAM,MAAyB;AAE9D,MAAI,CAAC,eAAe;AAAU,UAAM,IAAI,MAAM,mBAAmB;AAGjE,MAAI,eAAe;AAAO,UAAM,IAAI,MAAM,wBAAwB;AAGlE,SAAO,KAAK,MAAM,CAAC,WAA+C;AAMhE,UAAM,UAA0C,CAAC;AAGjD,WAAO,cAAc,OAAO,OAAO,aAAa,OAAK,OAAO,KAAK,EAAE,IAAI,CAAC;AAGxE,eAAW,CAAC,SAAS,QAAQ,KAAK,QAAQ,OAAO,SAAS,OAAO;AAC/D,MAAI,OAAO,YAAY,KAAK,OAAK,EAAE,KAAK,SAAS,OAAO,CAAC,MACvD,QAAQ,OAAO,IAAI;AAKvB,WAAO,SAAS,UAAU;AAAA,EAG5B,CAAC;AACH,GA/Bc,SAiCiB,IA9ClB;AAiDf,IAAO,iBAAQ;",
  "names": []
}
