@shellicar/build-clean 1.0.0-preview.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (113) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +19 -0
  3. package/dist/cjs/astro.cjs +1 -0
  4. package/dist/cjs/astro.cjs.map +1 -0
  5. package/dist/cjs/astro.d.cts +5 -0
  6. package/dist/cjs/chunk-5XEO4AJH.cjs +1 -0
  7. package/dist/cjs/chunk-5XEO4AJH.cjs.map +1 -0
  8. package/dist/cjs/chunk-CKDUYIXO.cjs +1 -0
  9. package/dist/cjs/chunk-CKDUYIXO.cjs.map +1 -0
  10. package/dist/cjs/chunk-FD3CZK4P.cjs +1 -0
  11. package/dist/cjs/chunk-FD3CZK4P.cjs.map +1 -0
  12. package/dist/cjs/chunk-H44HDUOM.cjs +1 -0
  13. package/dist/cjs/chunk-H44HDUOM.cjs.map +1 -0
  14. package/dist/cjs/chunk-JV6XTZ6N.cjs +1 -0
  15. package/dist/cjs/chunk-JV6XTZ6N.cjs.map +1 -0
  16. package/dist/cjs/chunk-PK6SKIKE.cjs +1 -0
  17. package/dist/cjs/chunk-PK6SKIKE.cjs.map +1 -0
  18. package/dist/cjs/chunk-TRULVDNJ.cjs +1 -0
  19. package/dist/cjs/chunk-TRULVDNJ.cjs.map +1 -0
  20. package/dist/cjs/chunk-Z4BCISP5.cjs +1 -0
  21. package/dist/cjs/chunk-Z4BCISP5.cjs.map +1 -0
  22. package/dist/cjs/core/cleanUnusedFiles.cjs +1 -0
  23. package/dist/cjs/core/cleanUnusedFiles.cjs.map +1 -0
  24. package/dist/cjs/core/cleanUnusedFiles.d.cts +5 -0
  25. package/dist/cjs/core/createLogger.cjs +1 -0
  26. package/dist/cjs/core/createLogger.cjs.map +1 -0
  27. package/dist/cjs/core/createLogger.d.cts +5 -0
  28. package/dist/cjs/core/defaults.cjs +1 -0
  29. package/dist/cjs/core/defaults.cjs.map +1 -0
  30. package/dist/cjs/core/defaults.d.cts +7 -0
  31. package/dist/cjs/core/getAllFiles.cjs +1 -0
  32. package/dist/cjs/core/getAllFiles.cjs.map +1 -0
  33. package/dist/cjs/core/getAllFiles.d.cts +5 -0
  34. package/dist/cjs/core/index.cjs +1 -0
  35. package/dist/cjs/core/index.cjs.map +1 -0
  36. package/dist/cjs/core/index.d.cts +6 -0
  37. package/dist/cjs/core/types.cjs +1 -0
  38. package/dist/cjs/core/types.cjs.map +1 -0
  39. package/dist/cjs/core/types.d.cts +14 -0
  40. package/dist/cjs/core/validateOutDir.cjs +1 -0
  41. package/dist/cjs/core/validateOutDir.cjs.map +1 -0
  42. package/dist/cjs/core/validateOutDir.d.cts +5 -0
  43. package/dist/cjs/esbuild.cjs +1 -0
  44. package/dist/cjs/esbuild.cjs.map +1 -0
  45. package/dist/cjs/esbuild.d.cts +6 -0
  46. package/dist/cjs/index.cjs +1 -0
  47. package/dist/cjs/index.cjs.map +1 -0
  48. package/dist/cjs/index.d.cts +3 -0
  49. package/dist/cjs/nuxt.cjs +1 -0
  50. package/dist/cjs/nuxt.cjs.map +1 -0
  51. package/dist/cjs/nuxt.d.cts +6 -0
  52. package/dist/cjs/rollup.cjs +1 -0
  53. package/dist/cjs/rollup.cjs.map +1 -0
  54. package/dist/cjs/rollup.d.cts +6 -0
  55. package/dist/cjs/vite.cjs +1 -0
  56. package/dist/cjs/vite.cjs.map +1 -0
  57. package/dist/cjs/vite.d.cts +6 -0
  58. package/dist/esm/astro.d.ts +5 -0
  59. package/dist/esm/astro.js +1 -0
  60. package/dist/esm/astro.js.map +1 -0
  61. package/dist/esm/chunk-7QVYU63E.js +1 -0
  62. package/dist/esm/chunk-7QVYU63E.js.map +1 -0
  63. package/dist/esm/chunk-GGQ2IM6X.js +1 -0
  64. package/dist/esm/chunk-GGQ2IM6X.js.map +1 -0
  65. package/dist/esm/chunk-M6I5B37D.js +1 -0
  66. package/dist/esm/chunk-M6I5B37D.js.map +1 -0
  67. package/dist/esm/chunk-NTAOZL73.js +1 -0
  68. package/dist/esm/chunk-NTAOZL73.js.map +1 -0
  69. package/dist/esm/chunk-PVPUCTHV.js +1 -0
  70. package/dist/esm/chunk-PVPUCTHV.js.map +1 -0
  71. package/dist/esm/chunk-QZKD24XZ.js +1 -0
  72. package/dist/esm/chunk-QZKD24XZ.js.map +1 -0
  73. package/dist/esm/chunk-RB6ZS752.js +1 -0
  74. package/dist/esm/chunk-RB6ZS752.js.map +1 -0
  75. package/dist/esm/chunk-ZJZOBFU7.js +1 -0
  76. package/dist/esm/chunk-ZJZOBFU7.js.map +1 -0
  77. package/dist/esm/core/cleanUnusedFiles.d.ts +5 -0
  78. package/dist/esm/core/cleanUnusedFiles.js +1 -0
  79. package/dist/esm/core/cleanUnusedFiles.js.map +1 -0
  80. package/dist/esm/core/createLogger.d.ts +5 -0
  81. package/dist/esm/core/createLogger.js +1 -0
  82. package/dist/esm/core/createLogger.js.map +1 -0
  83. package/dist/esm/core/defaults.d.ts +7 -0
  84. package/dist/esm/core/defaults.js +1 -0
  85. package/dist/esm/core/defaults.js.map +1 -0
  86. package/dist/esm/core/getAllFiles.d.ts +5 -0
  87. package/dist/esm/core/getAllFiles.js +1 -0
  88. package/dist/esm/core/getAllFiles.js.map +1 -0
  89. package/dist/esm/core/index.d.ts +6 -0
  90. package/dist/esm/core/index.js +1 -0
  91. package/dist/esm/core/index.js.map +1 -0
  92. package/dist/esm/core/types.d.ts +14 -0
  93. package/dist/esm/core/types.js +1 -0
  94. package/dist/esm/core/types.js.map +1 -0
  95. package/dist/esm/core/validateOutDir.d.ts +5 -0
  96. package/dist/esm/core/validateOutDir.js +1 -0
  97. package/dist/esm/core/validateOutDir.js.map +1 -0
  98. package/dist/esm/esbuild.d.ts +6 -0
  99. package/dist/esm/esbuild.js +1 -0
  100. package/dist/esm/esbuild.js.map +1 -0
  101. package/dist/esm/index.d.ts +3 -0
  102. package/dist/esm/index.js +1 -0
  103. package/dist/esm/index.js.map +1 -0
  104. package/dist/esm/nuxt.d.ts +6 -0
  105. package/dist/esm/nuxt.js +1 -0
  106. package/dist/esm/nuxt.js.map +1 -0
  107. package/dist/esm/rollup.d.ts +6 -0
  108. package/dist/esm/rollup.js +1 -0
  109. package/dist/esm/rollup.js.map +1 -0
  110. package/dist/esm/vite.d.ts +6 -0
  111. package/dist/esm/vite.js +1 -0
  112. package/dist/esm/vite.js.map +1 -0
  113. package/package.json +240 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Stephen Hellicar
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,19 @@
1
+ # @shellicar/build-clean
2
+
3
+ > TODO: description
4
+
5
+ ## Installation & Quick Start
6
+
7
+ ```sh
8
+ pnpm add @shellicar/build-clean
9
+ ```
10
+
11
+ ## Quick Example
12
+
13
+ ```ts
14
+ // TODO: example
15
+ ```
16
+
17
+ ## Documentation
18
+
19
+ For full documentation, visit the [GitHub repository](https://github.com/shellicar/build-clean).
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-5XEO4AJH.cjs");require("./chunk-TRULVDNJ.cjs"),require("./chunk-Z4BCISP5.cjs"),require("./chunk-CKDUYIXO.cjs"),require("./chunk-JV6XTZ6N.cjs"),require("./chunk-FD3CZK4P.cjs");var u=require("./chunk-PK6SKIKE.cjs"),c=u.__name(c=>({name:"build-clean",hooks:{"astro:config:setup":u.__name(async u=>{u.config.vite.plugins||=[],u.config.vite.plugins.push(e.plugin.vite(c))},"astro:config:setup")}}),"default");module.exports=c;//# sourceMappingURL=astro.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/astro.ts"],"names":["plugin"],"mappings":";AAIA,IAAO,aAAA,6CAAS,OAAA,MAA2B;AAAA,EACzC,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,oBAAA,kDAA6B,KAAA,KAAe;AAC1C,MAAA,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,OAAA,KAAY,EAAC;AAC/B,MAAA,KAAA,CAAM,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAKA,wBAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACrD,CAAA,EAHsB,oBAAA;AAAA;AAK1B,CAAA,CAAA,EARe,SAAA","file":"astro.cjs","sourcesContent":["import type { Options } from './core/types';\n\nimport { plugin } from './core';\n\nexport default (options: Options): any => ({\n name: 'build-clean',\n hooks: {\n 'astro:config:setup': async (astro: any) => {\n astro.config.vite.plugins ||= [];\n astro.config.vite.plugins.push(plugin.vite(options));\n },\n },\n});\n"]}
@@ -0,0 +1,5 @@
1
+ import { Options } from './core/types.cjs';
2
+
3
+ declare const _default: (options: Options) => any;
4
+
5
+ export { _default as default };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-TRULVDNJ.cjs"),i=require("./chunk-Z4BCISP5.cjs"),n=require("./chunk-FD3CZK4P.cjs"),r=require("./chunk-PK6SKIKE.cjs"),t=require("unplugin"),u=r.__name((r={})=>{const t={...e.defaults,...r},u=n.createLogger(t);return{name:"unplugin-build-cleaner",enforce:"post",esbuild:{setup(e){e.initialOptions.metafile=!0,e.onEnd(async n=>{u.debug("Build completed, starting cleanup process");const r=e.initialOptions.outdir;if(!r)throw new Error("[build-cleaner] No output directory specified in build options");if(!n.metafile)throw new Error("[build-cleaner] No metafile available - ensure metafile is enabled");const l=new Set(Object.keys(n.metafile.outputs));u.debug(`Found ${l.size} built files in metafile for directory: "${r}"`),await i.cleanUnusedFiles(r,l,t,u)})}}}},"pluginFactory"),l=t.createUnplugin(u);exports.plugin=l;//# sourceMappingURL=chunk-5XEO4AJH.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/index.ts"],"names":["__name","defaults","createLogger","cleanUnusedFiles","createUnplugin"],"mappings":"sPAMA,IAAM,aAAA,mBAAsDA,wBAAA,CAAA,CAAC,cAAA,GAA0B,EAAC,KAAM;AAC5F,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAGC,0BAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,MAAA,GAASC,+BAAa,OAAO,CAAA;AAEnC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,wBAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IAET,OAAA,EAAS;AAAA,MACP,MAAM,KAAA,EAAO;AACX,QAAA,KAAA,CAAM,eAAe,QAAA,GAAW,IAAA;AAEhC,QAAA,KAAA,CAAM,KAAA,CAAM,OAAO,MAAA,KAAW;AAC5B,UAAA,MAAA,CAAO,MAAM,2CAA2C,CAAA;AAExD,UAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,MAAA;AACpC,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,UAClF;AAEA,UAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,YAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,UACtF;AAEA,UAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,MAAA,CAAO,QAAA,CAAS,OAAO,CAAC,CAAA;AAC/D,UAAA,MAAA,CAAO,MAAM,CAAA,MAAA,EAAS,UAAA,CAAW,IAAI,CAAA,yCAAA,EAA4C,MAAM,CAAA,CAAA,CAAG,CAAA;AAE1F,UAAA,MAAMC,kCAAA,CAAiB,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,MAAM,CAAA;AAAA,QAC5D,CAAC,CAAA;AAAA,MACH;AAAA;AACF,GACF;AACF,CAAA,EApC4D,eAAA,CAAA;AAsCrD,IAAM,MAAA,GAASC,wBAAe,aAAa","file":"chunk-5XEO4AJH.cjs","sourcesContent":["import { type UnpluginFactory, createUnplugin } from 'unplugin';\nimport { cleanUnusedFiles } from './cleanUnusedFiles';\nimport { createLogger } from './createLogger';\nimport { defaults } from './defaults';\nimport type { Options } from './types';\n\nconst pluginFactory: UnpluginFactory<Options | undefined> = (initialOptions: Options = {}) => {\n const options = {\n ...defaults,\n ...initialOptions,\n };\n\n const logger = createLogger(options);\n\n return {\n name: 'unplugin-build-cleaner',\n enforce: 'post',\n\n esbuild: {\n setup(build) {\n build.initialOptions.metafile = true;\n\n build.onEnd(async (result) => {\n logger.debug('Build completed, starting cleanup process');\n\n const outdir = build.initialOptions.outdir;\n if (!outdir) {\n throw new Error('[build-cleaner] No output directory specified in build options');\n }\n\n if (!result.metafile) {\n throw new Error('[build-cleaner] No metafile available - ensure metafile is enabled');\n }\n\n const builtFiles = new Set(Object.keys(result.metafile.outputs));\n logger.debug(`Found ${builtFiles.size} built files in metafile for directory: \"${outdir}\"`);\n\n await cleanUnusedFiles(outdir, builtFiles, options, logger);\n });\n },\n },\n };\n};\n\nexport const plugin = createUnplugin(pluginFactory);\n"]}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-PK6SKIKE.cjs"),r=require("node:fs/promises"),n=require("node:path");async function o(e,s){const i=[];try{s.verbose(`Reading directory: "${e}"`);const t=await r.readdir(e,{withFileTypes:!0});s.verbose(`Found ${t.length} entries in "${e}"`);for(const r of t){const t=n.join(e,r.name);if(r.isDirectory()){s.verbose(`Recursing into subdirectory: "${r.name}"`);const e=await o(t,s);i.push(...e)}else i.push(t),s.verbose(`Found file: "${r.name}"`)}}catch(r){s.debug(`Could not read directory "${e}":`,r)}return s.verbose(`Total files found in "${e}": ${i.length}`),i}e.__name(o,"getAllFiles"),exports.getAllFiles=o;//# sourceMappingURL=chunk-CKDUYIXO.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/getAllFiles.ts"],"names":["readdir","join","__name"],"mappings":"uIAIA,eAAsB,WAAA,CAAY,KAAa,MAAA,EAAoC;AACjF,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAA,CAAG,CAAA;AAC5C,IAAA,MAAM,UAAU,MAAMA,gBAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,IAAA,MAAA,CAAO,QAAQ,CAAA,MAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,CAAG,CAAA;AAE5D,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,QAAA,GAAWC,cAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AACrC,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,8BAAA,EAAiC,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAC7D,QAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,QAAA,EAAU,MAAM,CAAA;AACnD,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,aAAA,EAAgB,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AAEd,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,0BAAA,EAA6B,GAAG,CAAA,EAAA,CAAA,EAAM,KAAK,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAA,CAAO,QAAQ,CAAA,sBAAA,EAAyB,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAC/D,EAAA,OAAO,KAAA;AACT;AA1BsBC,wBAAA,CAAA,WAAA,EAAA,aAAA,CAAA","file":"chunk-CKDUYIXO.cjs","sourcesContent":["import { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { ILogger } from './types';\n\nexport async function getAllFiles(dir: string, logger: ILogger): Promise<string[]> {\n const files: string[] = [];\n\n try {\n logger.verbose(`Reading directory: \"${dir}\"`);\n const entries = await readdir(dir, { withFileTypes: true });\n logger.verbose(`Found ${entries.length} entries in \"${dir}\"`);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n logger.verbose(`Recursing into subdirectory: \"${entry.name}\"`);\n const subFiles = await getAllFiles(fullPath, logger);\n files.push(...subFiles);\n } else {\n files.push(fullPath);\n logger.verbose(`Found file: \"${entry.name}\"`);\n }\n }\n } catch (error) {\n // Directory might not exist yet\n logger.debug(`Could not read directory \"${dir}\":`, error);\n }\n\n logger.verbose(`Total files found in \"${dir}\": ${files.length}`);\n return files;\n}\n"]}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-PK6SKIKE.cjs"),r="",o="",n="",$="",a="",c="";function s(s){const m="[build-cleaner]";return{debug:e.__name((e,...o)=>{s.debug&&console.log(`${a}${m} DEBG${r} ${e}`,...o)},"debug"),verbose:e.__name((e,...o)=>{s.verbose&&console.log(`${$}${m} VERB${r} ${e}`,...o)},"verbose"),info:e.__name((e,...o)=>{console.log(`${c}${m} INFO${r} ${e}`,...o)},"info"),warn:e.__name((e,...o)=>{console.warn(`${n}${m} WARN${r} ${e}`,...o)},"warn"),error:e.__name((e,...n)=>{console.error(`${o}${m} EROR${r} ${e}`,...n)},"error")}}e.__name(s,"createLogger"),exports.createLogger=s;//# sourceMappingURL=chunk-FD3CZK4P.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/createLogger.ts"],"names":["__name"],"mappings":";AAEA,IAAM,MAAA,GAAS;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,GAAA,EAAK,UAAA;AAAA,EACL,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,aAAa,OAAA,EAA2B;AACtD,EAAA,MAAM,MAAA,GAAS,iBAAA;AAEf,EAAA,OAAO;AAAA,IACL,KAAA,kBAAOA,wBAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AAC1C,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,MAC/E;AAAA,IACF,CAAA,EAJO,OAAA,CAAA;AAAA,IAKP,OAAA,kBAASA,wBAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AAC5C,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,MAC/E;AAAA,IACF,CAAA,EAJS,SAAA,CAAA;AAAA,IAKT,IAAA,kBAAMA,wBAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AACzC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAChF,CAAA,EAFM,MAAA,CAAA;AAAA,IAGN,IAAA,kBAAMA,wBAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AACzC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAClF,CAAA,EAFM,MAAA,CAAA;AAAA,IAGN,KAAA,kBAAOA,wBAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AAC1C,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAChF,CAAA,EAFO,OAAA;AAAA,GAGT;AACF;AAxBgBA,wBAAA,CAAA,YAAA,EAAA,cAAA,CAAA","file":"chunk-FD3CZK4P.cjs","sourcesContent":["import type { ILogger, Options } from './types';\n\nconst colors = {\n reset: '\\x1b[0m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n gray: '\\x1b[90m',\n green: '\\x1b[32m',\n};\n\nexport function createLogger(options: Options): ILogger {\n const prefix = '[build-cleaner]';\n\n return {\n debug: (message: string, ...args: any[]) => {\n if (options.debug) {\n console.log(`${colors.gray}${prefix} DEBG${colors.reset} ${message}`, ...args);\n }\n },\n verbose: (message: string, ...args: any[]) => {\n if (options.verbose) {\n console.log(`${colors.blue}${prefix} VERB${colors.reset} ${message}`, ...args);\n }\n },\n info: (message: string, ...args: any[]) => {\n console.log(`${colors.green}${prefix} INFO${colors.reset} ${message}`, ...args);\n },\n warn: (message: string, ...args: any[]) => {\n console.warn(`${colors.yellow}${prefix} WARN${colors.reset} ${message}`, ...args);\n },\n error: (message: string, ...args: any[]) => {\n console.error(`${colors.red}${prefix} EROR${colors.reset} ${message}`, ...args);\n },\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ "use strict";//# sourceMappingURL=chunk-H44HDUOM.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-H44HDUOM.cjs"}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-PK6SKIKE.cjs"),r=require("node:path"),t=e.__name((e,t)=>{const o=process.cwd(),s=r.resolve(e),i=r.relative(o,s),a=e.replace(/\\/g,"/"),c=r.resolve(e)!==r.resolve(o,e),u=s===o,d=o.startsWith(`${s}/`),n=o.startsWith(`${s}\\`),l=d||n,b=i.startsWith("..");if(t.verbose("Path validation:"),t.verbose(` Input: "${e}"`),t.verbose(` Current working directory: "${o}"`),t.verbose(` Resolved output directory: "${s}"`),t.verbose(` Relative path from cwd: "${i}"`),t.verbose(` Normalized path: "${a}"`),t.verbose(` Is absolute path outside project: ${c}`),t.verbose(` Is same as current directory: ${u}`),t.verbose(` Is parent of current directory (Unix): ${d}`),t.verbose(` Is parent of current directory (Windows): ${n}`),t.verbose(` Is parent of current directory: ${l}`),t.verbose(` Goes up directory levels: ${b}`),u)throw new Error(`[build-cleaner] Refusing to clean current directory: "${e}". Use a subdirectory like "dist" or "build".`);if(l)throw new Error(`[build-cleaner] Refusing to clean parent directory: "${e}". This would delete the current project.`);if(b)throw new Error(`[build-cleaner] Refusing to clean directory outside project: "${e}". Use a subdirectory like "dist" or "build".`);if(c)throw new Error(`[build-cleaner] Refusing to clean absolute path outside project: "${e}". Use a relative subdirectory.`);if(["src","source","lib","app","components","pages","routes"].some(e=>a===e||a.endsWith(`/${e}`)))throw new Error(`[build-cleaner] Refusing to clean source directory: "${e}". Use a build output directory like "dist" or "build".`);t.debug(`Validated output directory: "${e}" -> "${s}"`)},"validateOutDir");exports.validateOutDir=t;//# sourceMappingURL=chunk-JV6XTZ6N.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/validateOutDir.ts"],"names":["__name","resolve","relative"],"mappings":"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","file":"chunk-JV6XTZ6N.cjs","sourcesContent":["import { relative, resolve } from 'node:path';\nimport type { ILogger } from './types';\n\nexport const validateOutDir = (outDir: string, logger: ILogger) => {\n const cwd = process.cwd();\n const resolvedOutDir = resolve(outDir);\n const relativePath = relative(cwd, resolvedOutDir);\n const normalizedPath = outDir.replace(/\\\\/g, '/');\n const isAbsolutePath = resolve(outDir) !== resolve(cwd, outDir);\n const isSameAsCurrentDir = resolvedOutDir === cwd;\n const isParentOfCurrentDirUnix = cwd.startsWith(`${resolvedOutDir}/`);\n const isParentOfCurrentDirWindows = cwd.startsWith(`${resolvedOutDir}\\\\`);\n const isParentOfCurrentDir = isParentOfCurrentDirUnix || isParentOfCurrentDirWindows;\n const goesUpDirectory = relativePath.startsWith('..');\n\n logger.verbose('Path validation:');\n logger.verbose(` Input: \"${outDir}\"`);\n logger.verbose(` Current working directory: \"${cwd}\"`);\n logger.verbose(` Resolved output directory: \"${resolvedOutDir}\"`);\n logger.verbose(` Relative path from cwd: \"${relativePath}\"`);\n logger.verbose(` Normalized path: \"${normalizedPath}\"`);\n logger.verbose(` Is absolute path outside project: ${isAbsolutePath}`);\n logger.verbose(` Is same as current directory: ${isSameAsCurrentDir}`);\n logger.verbose(` Is parent of current directory (Unix): ${isParentOfCurrentDirUnix}`);\n logger.verbose(` Is parent of current directory (Windows): ${isParentOfCurrentDirWindows}`);\n logger.verbose(` Is parent of current directory: ${isParentOfCurrentDir}`);\n logger.verbose(` Goes up directory levels: ${goesUpDirectory}`);\n\n // Check if the resolved path is the same as current directory\n if (isSameAsCurrentDir) {\n throw new Error(`[build-cleaner] Refusing to clean current directory: \"${outDir}\". Use a subdirectory like \"dist\" or \"build\".`);\n }\n\n // Check if the resolved path is a parent of current directory\n if (isParentOfCurrentDir) {\n throw new Error(`[build-cleaner] Refusing to clean parent directory: \"${outDir}\". This would delete the current project.`);\n }\n\n // Check if the relative path goes up (.., ../.., etc.)\n if (goesUpDirectory) {\n throw new Error(`[build-cleaner] Refusing to clean directory outside project: \"${outDir}\". Use a subdirectory like \"dist\" or \"build\".`);\n }\n\n // Check if it's an absolute path outside the project\n if (isAbsolutePath) {\n throw new Error(`[build-cleaner] Refusing to clean absolute path outside project: \"${outDir}\". Use a relative subdirectory.`);\n }\n\n // Prevent cleaning common source directories (even as subdirectories)\n const dangerousPaths = ['src', 'source', 'lib', 'app', 'components', 'pages', 'routes'];\n const isDangerousPath = dangerousPaths.some((dangerous) => normalizedPath === dangerous || normalizedPath.endsWith(`/${dangerous}`));\n\n if (isDangerousPath) {\n throw new Error(`[build-cleaner] Refusing to clean source directory: \"${outDir}\". Use a build output directory like \"dist\" or \"build\".`);\n }\n\n logger.debug(`Validated output directory: \"${outDir}\" -> \"${resolvedOutDir}\"`);\n};\n"]}
@@ -0,0 +1 @@
1
+ "use strict";var e=Object.defineProperty;exports.__name=(r,a)=>e(r,"name",{value:a,configurable:!0});//# sourceMappingURL=chunk-PK6SKIKE.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-PK6SKIKE.cjs"}
@@ -0,0 +1 @@
1
+ "use strict";exports.defaults={debug:!1,verbose:!1,dry:!1};//# sourceMappingURL=chunk-TRULVDNJ.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/defaults.ts"],"names":[],"mappings":";AAEO,IAAM,QAAA,GAAW;AAAA,EACtB,KAAA,EAAO,KAAA;AAAA,EACP,OAAA,EAAS,KAAA;AAAA,EACT,GAAA,EAAK;AACP","file":"chunk-TRULVDNJ.cjs","sourcesContent":["import type { Options } from './types';\n\nexport const defaults = {\n debug: false,\n verbose: false,\n dry: false,\n} satisfies Options;\n"]}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-CKDUYIXO.cjs"),i=require("./chunk-JV6XTZ6N.cjs"),r=require("./chunk-PK6SKIKE.cjs"),n=require("node:fs/promises"),s=require("node:path");async function t(r,t,o,l){i.validateOutDir(r,l);try{l.debug(`Starting cleanup of directory: "${r}"`),l.debug(`Built files count: ${t.size}`);const i=await e.getAllFiles(r,l);if(l.debug(`Existing files count: ${i.length}`),0===i.length&&t.size>0)return void l.error('Disable tsup "clean: true" to use this plugin.');l.info(`Processing ${i.length} existing files vs ${t.size} built files`);const u=[];for(const e of i){const i=s.relative(process.cwd(),e);l.verbose(`Checking file: "${i}"`),t.has(i)?l.verbose(`Keeping built file: "${i}"`):(u.push(e),l.verbose(`Marked for deletion: "${i}"`))}if(u.length>0){const e=o.dry?" (dry run)":"";l.warn(`Files marked for deletion: ${u.length}${e}`)}else l.info("No files marked for deletion");let c=0;for(const e of u){const i=s.relative(process.cwd(),e);o.dry||await n.unlink(e),l.info(`Deleting: "${i}"`),c++}0===c&&l.info("No unused files found")}catch(e){throw l.error("Error during cleanup:",e),e}}r.__name(t,"cleanUnusedFiles"),exports.cleanUnusedFiles=t;//# sourceMappingURL=chunk-Z4BCISP5.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/cleanUnusedFiles.ts"],"names":["validateOutDir","getAllFiles","relative","unlink","__name"],"mappings":"2OAMA,eAAsB,gBAAA,CAAiB,MAAA,EAAgB,UAAA,EAAyB,OAAA,EAAkB,MAAA,EAAgC;AAChI,EAAAA,gCAAA,CAAe,QAAQ,MAAM,CAAA;AAE7B,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,MAAM,CAAA,CAAA,CAAG,CAAA;AACzD,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,UAAA,CAAW,IAAI,CAAA,CAAE,CAAA;AAEpD,IAAA,MAAM,aAAA,GAAgB,MAAMC,6BAAA,CAAY,MAAA,EAAQ,MAAM,CAAA;AACtD,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,aAAA,CAAc,MAAM,CAAA,CAAE,CAAA;AAE5D,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AACrD,MAAA,MAAA,CAAO,MAAM,gDAAgD,CAAA;AAC7D,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,CAAA,WAAA,EAAc,aAAA,CAAc,MAAM,CAAA,mBAAA,EAAsB,UAAA,CAAW,IAAI,CAAA,YAAA,CAAc,CAAA;AAEjG,IAAA,MAAM,gBAA0B,EAAC;AAEjC,IAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,MAAA,MAAM,YAAA,GAAeC,kBAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACjD,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,gBAAA,EAAmB,YAAY,CAAA,CAAA,CAAG,CAAA;AAEjD,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,YAAY,CAAA,EAAG;AACjC,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AACvB,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,sBAAA,EAAyB,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,qBAAA,EAAwB,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,GAAM,YAAA,GAAe,EAAA;AAClD,MAAA,MAAA,CAAO,KAAK,CAAA,2BAAA,EAA8B,aAAA,CAAc,MAAM,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AAAA,IACjF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,MAAA,MAAM,YAAA,GAAeA,kBAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAEjD,MAAA,IAAI,CAAC,QAAQ,GAAA,EAAK;AAChB,QAAA,MAAMC,gBAAO,IAAI,CAAA;AAAA,MACnB;AAEA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc,YAAY,CAAA,CAAA,CAAG,CAAA;AACzC,MAAA,YAAA,EAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,KAAK,uBAAuB,CAAA;AAAA,IACrC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAC3C,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAzDsBC,wBAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA","file":"chunk-Z4BCISP5.cjs","sourcesContent":["import { unlink } from 'node:fs/promises';\nimport { relative } from 'node:path';\nimport { getAllFiles } from './getAllFiles';\nimport type { ILogger, Options } from './types';\nimport { validateOutDir } from './validateOutDir';\n\nexport async function cleanUnusedFiles(outDir: string, builtFiles: Set<string>, options: Options, logger: ILogger): Promise<void> {\n validateOutDir(outDir, logger);\n\n try {\n logger.debug(`Starting cleanup of directory: \"${outDir}\"`);\n logger.debug(`Built files count: ${builtFiles.size}`);\n\n const existingFiles = await getAllFiles(outDir, logger);\n logger.debug(`Existing files count: ${existingFiles.length}`);\n\n if (existingFiles.length === 0 && builtFiles.size > 0) {\n logger.error('Disable tsup \"clean: true\" to use this plugin.');\n return;\n }\n\n logger.info(`Processing ${existingFiles.length} existing files vs ${builtFiles.size} built files`);\n\n const filesToDelete: string[] = [];\n\n for (const file of existingFiles) {\n const relativePath = relative(process.cwd(), file);\n logger.verbose(`Checking file: \"${relativePath}\"`);\n\n if (!builtFiles.has(relativePath)) {\n filesToDelete.push(file);\n logger.verbose(`Marked for deletion: \"${relativePath}\"`);\n } else {\n logger.verbose(`Keeping built file: \"${relativePath}\"`);\n }\n }\n\n if (filesToDelete.length > 0) {\n const dryRunSuffix = options.dry ? ' (dry run)' : '';\n logger.warn(`Files marked for deletion: ${filesToDelete.length}${dryRunSuffix}`);\n } else {\n logger.info('No files marked for deletion');\n }\n\n let deletedCount = 0;\n for (const file of filesToDelete) {\n const relativePath = relative(process.cwd(), file);\n\n if (!options.dry) {\n await unlink(file);\n }\n\n logger.info(`Deleting: \"${relativePath}\"`);\n deletedCount++;\n }\n\n if (deletedCount === 0) {\n logger.info('No unused files found');\n }\n } catch (error) {\n logger.error('Error during cleanup:', error);\n throw error;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../chunk-Z4BCISP5.cjs");require("../chunk-CKDUYIXO.cjs"),require("../chunk-JV6XTZ6N.cjs"),require("../chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"cleanUnusedFiles",{enumerable:!0,get:function(){return e.cleanUnusedFiles}});//# sourceMappingURL=cleanUnusedFiles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"cleanUnusedFiles.cjs"}
@@ -0,0 +1,5 @@
1
+ import { Options, ILogger } from './types.cjs';
2
+
3
+ declare function cleanUnusedFiles(outDir: string, builtFiles: Set<string>, options: Options, logger: ILogger): Promise<void>;
4
+
5
+ export { cleanUnusedFiles };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../chunk-FD3CZK4P.cjs");require("../chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"createLogger",{enumerable:!0,get:function(){return e.createLogger}});//# sourceMappingURL=createLogger.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"createLogger.cjs"}
@@ -0,0 +1,5 @@
1
+ import { Options, ILogger } from './types.cjs';
2
+
3
+ declare function createLogger(options: Options): ILogger;
4
+
5
+ export { createLogger };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../chunk-TRULVDNJ.cjs");require("../chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"defaults",{enumerable:!0,get:function(){return e.defaults}});//# sourceMappingURL=defaults.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"defaults.cjs"}
@@ -0,0 +1,7 @@
1
+ declare const defaults: {
2
+ debug: false;
3
+ verbose: false;
4
+ dry: false;
5
+ };
6
+
7
+ export { defaults };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../chunk-CKDUYIXO.cjs");require("../chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"getAllFiles",{enumerable:!0,get:function(){return e.getAllFiles}});//# sourceMappingURL=getAllFiles.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"getAllFiles.cjs"}
@@ -0,0 +1,5 @@
1
+ import { ILogger } from './types.cjs';
2
+
3
+ declare function getAllFiles(dir: string, logger: ILogger): Promise<string[]>;
4
+
5
+ export { getAllFiles };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../chunk-5XEO4AJH.cjs");require("../chunk-TRULVDNJ.cjs"),require("../chunk-Z4BCISP5.cjs"),require("../chunk-CKDUYIXO.cjs"),require("../chunk-JV6XTZ6N.cjs"),require("../chunk-FD3CZK4P.cjs"),require("../chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"plugin",{enumerable:!0,get:function(){return e.plugin}});//# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,6 @@
1
+ import * as unplugin from 'unplugin';
2
+ import { Options } from './types.cjs';
3
+
4
+ declare const plugin: unplugin.UnpluginInstance<Options | undefined, boolean>;
5
+
6
+ export { plugin };
@@ -0,0 +1 @@
1
+ "use strict";//# sourceMappingURL=types.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"types.cjs"}
@@ -0,0 +1,14 @@
1
+ interface Options {
2
+ debug?: boolean;
3
+ verbose?: boolean;
4
+ dry?: boolean;
5
+ }
6
+ type ILogger = {
7
+ debug: (typeof console)['debug'];
8
+ verbose: (typeof console)['debug'];
9
+ info: (typeof console)['info'];
10
+ warn: (typeof console)['warn'];
11
+ error: (typeof console)['error'];
12
+ };
13
+
14
+ export type { ILogger, Options };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("../chunk-JV6XTZ6N.cjs");require("../chunk-PK6SKIKE.cjs"),Object.defineProperty(exports,"validateOutDir",{enumerable:!0,get:function(){return e.validateOutDir}});//# sourceMappingURL=validateOutDir.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"validateOutDir.cjs"}
@@ -0,0 +1,5 @@
1
+ import { ILogger } from './types.cjs';
2
+
3
+ declare const validateOutDir: (outDir: string, logger: ILogger) => void;
4
+
5
+ export { validateOutDir };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-5XEO4AJH.cjs");require("./chunk-TRULVDNJ.cjs"),require("./chunk-Z4BCISP5.cjs"),require("./chunk-CKDUYIXO.cjs"),require("./chunk-JV6XTZ6N.cjs"),require("./chunk-FD3CZK4P.cjs"),require("./chunk-PK6SKIKE.cjs");var r=e.plugin.esbuild;module.exports=r;//# sourceMappingURL=esbuild.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/esbuild.ts"],"names":["plugin"],"mappings":";AAEA,IAAO,kBAAQA,wBAAA,CAAO","file":"esbuild.cjs","sourcesContent":["import { plugin } from './core';\n\nexport default plugin.esbuild;\n"]}
@@ -0,0 +1,6 @@
1
+ import * as esbuild from 'esbuild';
2
+ import { Options } from './core/types.cjs';
3
+
4
+ declare const _default: (options?: Options | undefined) => esbuild.Plugin;
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ "use strict";require("./chunk-H44HDUOM.cjs");var e=require("./chunk-5XEO4AJH.cjs");require("./chunk-TRULVDNJ.cjs"),require("./chunk-Z4BCISP5.cjs"),require("./chunk-CKDUYIXO.cjs"),require("./chunk-JV6XTZ6N.cjs"),require("./chunk-FD3CZK4P.cjs"),require("./chunk-PK6SKIKE.cjs"),module.exports=e.plugin;//# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.cjs"}
@@ -0,0 +1,3 @@
1
+ export { plugin as default } from './core/index.cjs';
2
+ import 'unplugin';
3
+ import './core/types.cjs';
@@ -0,0 +1 @@
1
+ "use strict";require("./chunk-H44HDUOM.cjs");var e=require("./chunk-5XEO4AJH.cjs");require("./chunk-TRULVDNJ.cjs"),require("./chunk-Z4BCISP5.cjs"),require("./chunk-CKDUYIXO.cjs"),require("./chunk-JV6XTZ6N.cjs"),require("./chunk-FD3CZK4P.cjs"),require("./chunk-PK6SKIKE.cjs"),require("@nuxt/schema");var u=require("@nuxt/kit"),r=u.defineNuxtModule({meta:{name:"nuxt-build-clean",configKey:"buildVersion"},setup(r){u.addWebpackPlugin(e.plugin.webpack(r)),u.addVitePlugin(e.plugin.vite(r))}});module.exports=r;//# sourceMappingURL=nuxt.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/nuxt.ts"],"names":["defineNuxtModule","addWebpackPlugin","plugin","addVitePlugin"],"mappings":"wVAKA,IAAO,eAAQA,oBAAA,CAAiB;AAAA,EAC9B,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAM,OAAA,EAAkB;AACtB,IAAAC,oBAAA,CAAiBC,wBAAA,CAAS,OAAA,CAAQ,OAAO,CAAC,CAAA;AAC1C,IAAAC,iBAAA,CAAcD,wBAAA,CAAS,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACtC;AACF,CAAC","file":"nuxt.cjs","sourcesContent":["import '@nuxt/schema';\nimport { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit';\nimport unplugin from '.';\nimport type { Options } from './core/types';\n\nexport default defineNuxtModule({\n meta: {\n name: 'nuxt-build-clean',\n configKey: 'buildVersion',\n },\n setup(options: Options) {\n addWebpackPlugin(unplugin.webpack(options));\n addVitePlugin(unplugin.vite(options));\n },\n});\n"]}
@@ -0,0 +1,6 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+ import { Options } from './core/types.cjs';
3
+
4
+ declare const _default: _nuxt_schema.NuxtModule<Options, Options, false>;
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ "use strict";var r=require("./chunk-5XEO4AJH.cjs");require("./chunk-TRULVDNJ.cjs"),require("./chunk-Z4BCISP5.cjs"),require("./chunk-CKDUYIXO.cjs"),require("./chunk-JV6XTZ6N.cjs"),require("./chunk-FD3CZK4P.cjs"),require("./chunk-PK6SKIKE.cjs");var u=r.plugin.rollup;module.exports=u;//# sourceMappingURL=rollup.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/rollup.ts"],"names":["plugin"],"mappings":";AAEA,IAAO,iBAAQA,wBAAA,CAAO","file":"rollup.cjs","sourcesContent":["import { plugin } from './core';\n\nexport default plugin.rollup;\n"]}
@@ -0,0 +1,6 @@
1
+ import * as rollup from 'rollup';
2
+ import { Options } from './core/types.cjs';
3
+
4
+ declare const _default: (options?: Options | undefined) => rollup.Plugin<any> | rollup.Plugin<any>[];
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ "use strict";var e=require("./chunk-5XEO4AJH.cjs");require("./chunk-TRULVDNJ.cjs"),require("./chunk-Z4BCISP5.cjs"),require("./chunk-CKDUYIXO.cjs"),require("./chunk-JV6XTZ6N.cjs"),require("./chunk-FD3CZK4P.cjs"),require("./chunk-PK6SKIKE.cjs");var r=e.plugin.vite;module.exports=r;//# sourceMappingURL=vite.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/vite.ts"],"names":["plugin"],"mappings":";AAEA,IAAO,eAAQA,wBAAA,CAAO","file":"vite.cjs","sourcesContent":["import { plugin } from './core';\n\nexport default plugin.vite;\n"]}
@@ -0,0 +1,6 @@
1
+ import * as vite from 'vite';
2
+ import { Options } from './core/types.cjs';
3
+
4
+ declare const _default: (options?: Options | undefined) => vite.Plugin<any> | vite.Plugin<any>[];
5
+
6
+ export { _default as default };
@@ -0,0 +1,5 @@
1
+ import { Options } from './core/types.js';
2
+
3
+ declare const _default: (options: Options) => any;
4
+
5
+ export { _default as default };
@@ -0,0 +1 @@
1
+ import{plugin as o}from"./chunk-GGQ2IM6X.js";import"./chunk-ZJZOBFU7.js";import"./chunk-RB6ZS752.js";import"./chunk-NTAOZL73.js";import"./chunk-PVPUCTHV.js";import"./chunk-M6I5B37D.js";import{__name as i}from"./chunk-7QVYU63E.js";var s=i(s=>({name:"build-clean",hooks:{"astro:config:setup":i(async i=>{i.config.vite.plugins||=[],i.config.vite.plugins.push(o.vite(s))},"astro:config:setup")}}),"default");export{s as default};//# sourceMappingURL=astro.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/astro.ts"],"names":[],"mappings":";AAIA,IAAO,aAAA,2BAAS,OAAA,MAA2B;AAAA,EACzC,IAAA,EAAM,aAAA;AAAA,EACN,KAAA,EAAO;AAAA,IACL,oBAAA,gCAA6B,KAAA,KAAe;AAC1C,MAAA,KAAA,CAAM,MAAA,CAAO,IAAA,CAAK,OAAA,KAAY,EAAC;AAC/B,MAAA,KAAA,CAAM,OAAO,IAAA,CAAK,OAAA,CAAQ,KAAK,MAAA,CAAO,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,IACrD,CAAA,EAHsB,oBAAA;AAAA;AAK1B,CAAA,CAAA,EARe,SAAA","file":"astro.js","sourcesContent":["import type { Options } from './core/types';\n\nimport { plugin } from './core';\n\nexport default (options: Options): any => ({\n name: 'build-clean',\n hooks: {\n 'astro:config:setup': async (astro: any) => {\n astro.config.vite.plugins ||= [];\n astro.config.vite.plugins.push(plugin.vite(options));\n },\n },\n});\n"]}
@@ -0,0 +1 @@
1
+ var e=Object.defineProperty,r=(r,a)=>e(r,"name",{value:a,configurable:!0});export{r as __name};//# sourceMappingURL=chunk-7QVYU63E.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-7QVYU63E.js"}
@@ -0,0 +1 @@
1
+ import{defaults as e}from"./chunk-ZJZOBFU7.js";import{cleanUnusedFiles as i}from"./chunk-RB6ZS752.js";import{createLogger as t}from"./chunk-M6I5B37D.js";import{__name as o}from"./chunk-7QVYU63E.js";import{createUnplugin as n}from"unplugin";var r=n(o((o={})=>{const n={...e,...o},r=t(n);return{name:"unplugin-build-cleaner",enforce:"post",esbuild:{setup(e){e.initialOptions.metafile=!0,e.onEnd(async t=>{r.debug("Build completed, starting cleanup process");const o=e.initialOptions.outdir;if(!o)throw new Error("[build-cleaner] No output directory specified in build options");if(!t.metafile)throw new Error("[build-cleaner] No metafile available - ensure metafile is enabled");const u=new Set(Object.keys(t.metafile.outputs));r.debug(`Found ${u.size} built files in metafile for directory: "${o}"`),await i(o,u,n,r)})}}}},"pluginFactory"));export{r as plugin};//# sourceMappingURL=chunk-GGQ2IM6X.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/index.ts"],"names":[],"mappings":"4NAMA,IAAM,aAAA,mBAAsD,MAAA,CAAA,CAAC,cAAA,GAA0B,EAAC,KAAM;AAC5F,EAAA,MAAM,OAAA,GAAU;AAAA,IACd,GAAG,QAAA;AAAA,IACH,GAAG;AAAA,GACL;AAEA,EAAA,MAAM,MAAA,GAAS,aAAa,OAAO,CAAA;AAEnC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,wBAAA;AAAA,IACN,OAAA,EAAS,MAAA;AAAA,IAET,OAAA,EAAS;AAAA,MACP,MAAM,KAAA,EAAO;AACX,QAAA,KAAA,CAAM,eAAe,QAAA,GAAW,IAAA;AAEhC,QAAA,KAAA,CAAM,KAAA,CAAM,OAAO,MAAA,KAAW;AAC5B,UAAA,MAAA,CAAO,MAAM,2CAA2C,CAAA;AAExD,UAAA,MAAM,MAAA,GAAS,MAAM,cAAA,CAAe,MAAA;AACpC,UAAA,IAAI,CAAC,MAAA,EAAQ;AACX,YAAA,MAAM,IAAI,MAAM,gEAAgE,CAAA;AAAA,UAClF;AAEA,UAAA,IAAI,CAAC,OAAO,QAAA,EAAU;AACpB,YAAA,MAAM,IAAI,MAAM,oEAAoE,CAAA;AAAA,UACtF;AAEA,UAAA,MAAM,UAAA,GAAa,IAAI,GAAA,CAAI,MAAA,CAAO,KAAK,MAAA,CAAO,QAAA,CAAS,OAAO,CAAC,CAAA;AAC/D,UAAA,MAAA,CAAO,MAAM,CAAA,MAAA,EAAS,UAAA,CAAW,IAAI,CAAA,yCAAA,EAA4C,MAAM,CAAA,CAAA,CAAG,CAAA;AAE1F,UAAA,MAAM,gBAAA,CAAiB,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,MAAM,CAAA;AAAA,QAC5D,CAAC,CAAA;AAAA,MACH;AAAA;AACF,GACF;AACF,CAAA,EApC4D,eAAA,CAAA;AAsCrD,IAAM,MAAA,GAAS,eAAe,aAAa","file":"chunk-GGQ2IM6X.js","sourcesContent":["import { type UnpluginFactory, createUnplugin } from 'unplugin';\nimport { cleanUnusedFiles } from './cleanUnusedFiles';\nimport { createLogger } from './createLogger';\nimport { defaults } from './defaults';\nimport type { Options } from './types';\n\nconst pluginFactory: UnpluginFactory<Options | undefined> = (initialOptions: Options = {}) => {\n const options = {\n ...defaults,\n ...initialOptions,\n };\n\n const logger = createLogger(options);\n\n return {\n name: 'unplugin-build-cleaner',\n enforce: 'post',\n\n esbuild: {\n setup(build) {\n build.initialOptions.metafile = true;\n\n build.onEnd(async (result) => {\n logger.debug('Build completed, starting cleanup process');\n\n const outdir = build.initialOptions.outdir;\n if (!outdir) {\n throw new Error('[build-cleaner] No output directory specified in build options');\n }\n\n if (!result.metafile) {\n throw new Error('[build-cleaner] No metafile available - ensure metafile is enabled');\n }\n\n const builtFiles = new Set(Object.keys(result.metafile.outputs));\n logger.debug(`Found ${builtFiles.size} built files in metafile for directory: \"${outdir}\"`);\n\n await cleanUnusedFiles(outdir, builtFiles, options, logger);\n });\n },\n },\n };\n};\n\nexport const plugin = createUnplugin(pluginFactory);\n"]}
@@ -0,0 +1 @@
1
+ import{__name as o}from"./chunk-7QVYU63E.js";var e="",r="",$="",n="",c="",l="";function s(s){const g="[build-cleaner]";return{debug:o((o,...r)=>{s.debug&&console.log(`${c}${g} DEBG${e} ${o}`,...r)},"debug"),verbose:o((o,...r)=>{s.verbose&&console.log(`${n}${g} VERB${e} ${o}`,...r)},"verbose"),info:o((o,...r)=>{console.log(`${l}${g} INFO${e} ${o}`,...r)},"info"),warn:o((o,...r)=>{console.warn(`${$}${g} WARN${e} ${o}`,...r)},"warn"),error:o((o,...$)=>{console.error(`${r}${g} EROR${e} ${o}`,...$)},"error")}}o(s,"createLogger");export{s as createLogger};//# sourceMappingURL=chunk-M6I5B37D.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/createLogger.ts"],"names":[],"mappings":";AAEA,IAAM,MAAA,GAAS;AAAA,EACb,KAAA,EAAO,SAAA;AAAA,EACP,GAAA,EAAK,UAAA;AAAA,EACL,MAAA,EAAQ,UAAA;AAAA,EACR,IAAA,EAAM,UAAA;AAAA,EACN,IAAA,EAAM,UAAA;AAAA,EACN,KAAA,EAAO;AACT,CAAA;AAEO,SAAS,aAAa,OAAA,EAA2B;AACtD,EAAA,MAAM,MAAA,GAAS,iBAAA;AAEf,EAAA,OAAO;AAAA,IACL,KAAA,kBAAO,MAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AAC1C,MAAA,IAAI,QAAQ,KAAA,EAAO;AACjB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,MAC/E;AAAA,IACF,CAAA,EAJO,OAAA,CAAA;AAAA,IAKP,OAAA,kBAAS,MAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AAC5C,MAAA,IAAI,QAAQ,OAAA,EAAS;AACnB,QAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,IAAI,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,MAC/E;AAAA,IACF,CAAA,EAJS,SAAA,CAAA;AAAA,IAKT,IAAA,kBAAM,MAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AACzC,MAAA,OAAA,CAAQ,GAAA,CAAI,CAAA,EAAG,MAAA,CAAO,KAAK,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAChF,CAAA,EAFM,MAAA,CAAA;AAAA,IAGN,IAAA,kBAAM,MAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AACzC,MAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAClF,CAAA,EAFM,MAAA,CAAA;AAAA,IAGN,KAAA,kBAAO,MAAA,CAAA,CAAC,OAAA,EAAA,GAAoB,IAAA,KAAgB;AAC1C,MAAA,OAAA,CAAQ,KAAA,CAAM,CAAA,EAAG,MAAA,CAAO,GAAG,CAAA,EAAG,MAAM,CAAA,KAAA,EAAQ,MAAA,CAAO,KAAK,CAAA,CAAA,EAAI,OAAO,CAAA,CAAA,EAAI,GAAG,IAAI,CAAA;AAAA,IAChF,CAAA,EAFO,OAAA;AAAA,GAGT;AACF;AAxBgB,MAAA,CAAA,YAAA,EAAA,cAAA,CAAA","file":"chunk-M6I5B37D.js","sourcesContent":["import type { ILogger, Options } from './types';\n\nconst colors = {\n reset: '\\x1b[0m',\n red: '\\x1b[31m',\n yellow: '\\x1b[33m',\n blue: '\\x1b[34m',\n gray: '\\x1b[90m',\n green: '\\x1b[32m',\n};\n\nexport function createLogger(options: Options): ILogger {\n const prefix = '[build-cleaner]';\n\n return {\n debug: (message: string, ...args: any[]) => {\n if (options.debug) {\n console.log(`${colors.gray}${prefix} DEBG${colors.reset} ${message}`, ...args);\n }\n },\n verbose: (message: string, ...args: any[]) => {\n if (options.verbose) {\n console.log(`${colors.blue}${prefix} VERB${colors.reset} ${message}`, ...args);\n }\n },\n info: (message: string, ...args: any[]) => {\n console.log(`${colors.green}${prefix} INFO${colors.reset} ${message}`, ...args);\n },\n warn: (message: string, ...args: any[]) => {\n console.warn(`${colors.yellow}${prefix} WARN${colors.reset} ${message}`, ...args);\n },\n error: (message: string, ...args: any[]) => {\n console.error(`${colors.red}${prefix} EROR${colors.reset} ${message}`, ...args);\n },\n };\n}\n"]}
@@ -0,0 +1 @@
1
+ import{__name as e}from"./chunk-7QVYU63E.js";import{readdir as o}from"node:fs/promises";import{join as r}from"node:path";async function t(e,n){const s=[];try{n.verbose(`Reading directory: "${e}"`);const i=await o(e,{withFileTypes:!0});n.verbose(`Found ${i.length} entries in "${e}"`);for(const o of i){const i=r(e,o.name);if(o.isDirectory()){n.verbose(`Recursing into subdirectory: "${o.name}"`);const e=await t(i,n);s.push(...e)}else s.push(i),n.verbose(`Found file: "${o.name}"`)}}catch(o){n.debug(`Could not read directory "${e}":`,o)}return n.verbose(`Total files found in "${e}": ${s.length}`),s}e(t,"getAllFiles");export{t as getAllFiles};//# sourceMappingURL=chunk-NTAOZL73.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/getAllFiles.ts"],"names":[],"mappings":"6GAIA,eAAsB,WAAA,CAAY,KAAa,MAAA,EAAoC;AACjF,EAAA,MAAM,QAAkB,EAAC;AAEzB,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,oBAAA,EAAuB,GAAG,CAAA,CAAA,CAAG,CAAA;AAC5C,IAAA,MAAM,UAAU,MAAM,OAAA,CAAQ,KAAK,EAAE,aAAA,EAAe,MAAM,CAAA;AAC1D,IAAA,MAAA,CAAO,QAAQ,CAAA,MAAA,EAAS,OAAA,CAAQ,MAAM,CAAA,aAAA,EAAgB,GAAG,CAAA,CAAA,CAAG,CAAA;AAE5D,IAAA,KAAA,MAAW,SAAS,OAAA,EAAS;AAC3B,MAAA,MAAM,QAAA,GAAW,IAAA,CAAK,GAAA,EAAK,KAAA,CAAM,IAAI,CAAA;AACrC,MAAA,IAAI,KAAA,CAAM,aAAY,EAAG;AACvB,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,8BAAA,EAAiC,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAC7D,QAAA,MAAM,QAAA,GAAW,MAAM,WAAA,CAAY,QAAA,EAAU,MAAM,CAAA;AACnD,QAAA,KAAA,CAAM,IAAA,CAAK,GAAG,QAAQ,CAAA;AAAA,MACxB,CAAA,MAAO;AACL,QAAA,KAAA,CAAM,KAAK,QAAQ,CAAA;AACnB,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,aAAA,EAAgB,KAAA,CAAM,IAAI,CAAA,CAAA,CAAG,CAAA;AAAA,MAC9C;AAAA,IACF;AAAA,EACF,SAAS,KAAA,EAAO;AAEd,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,0BAAA,EAA6B,GAAG,CAAA,EAAA,CAAA,EAAM,KAAK,CAAA;AAAA,EAC1D;AAEA,EAAA,MAAA,CAAO,QAAQ,CAAA,sBAAA,EAAyB,GAAG,CAAA,GAAA,EAAM,KAAA,CAAM,MAAM,CAAA,CAAE,CAAA;AAC/D,EAAA,OAAO,KAAA;AACT;AA1BsB,MAAA,CAAA,WAAA,EAAA,aAAA,CAAA","file":"chunk-NTAOZL73.js","sourcesContent":["import { readdir } from 'node:fs/promises';\nimport { join } from 'node:path';\nimport type { ILogger } from './types';\n\nexport async function getAllFiles(dir: string, logger: ILogger): Promise<string[]> {\n const files: string[] = [];\n\n try {\n logger.verbose(`Reading directory: \"${dir}\"`);\n const entries = await readdir(dir, { withFileTypes: true });\n logger.verbose(`Found ${entries.length} entries in \"${dir}\"`);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n if (entry.isDirectory()) {\n logger.verbose(`Recursing into subdirectory: \"${entry.name}\"`);\n const subFiles = await getAllFiles(fullPath, logger);\n files.push(...subFiles);\n } else {\n files.push(fullPath);\n logger.verbose(`Found file: \"${entry.name}\"`);\n }\n }\n } catch (error) {\n // Directory might not exist yet\n logger.debug(`Could not read directory \"${dir}\":`, error);\n }\n\n logger.verbose(`Total files found in \"${dir}\": ${files.length}`);\n return files;\n}\n"]}
@@ -0,0 +1 @@
1
+ import{__name as e}from"./chunk-7QVYU63E.js";import{resolve as r,relative as t}from"node:path";var o=e((e,o)=>{const i=process.cwd(),s=r(e),c=t(i,s),d=e.replace(/\\/g,"/"),a=r(e)!==r(i,e),u=s===i,n=i.startsWith(`${s}/`),l=i.startsWith(`${s}\\`),b=n||l,p=c.startsWith("..");if(o.verbose("Path validation:"),o.verbose(` Input: "${e}"`),o.verbose(` Current working directory: "${i}"`),o.verbose(` Resolved output directory: "${s}"`),o.verbose(` Relative path from cwd: "${c}"`),o.verbose(` Normalized path: "${d}"`),o.verbose(` Is absolute path outside project: ${a}`),o.verbose(` Is same as current directory: ${u}`),o.verbose(` Is parent of current directory (Unix): ${n}`),o.verbose(` Is parent of current directory (Windows): ${l}`),o.verbose(` Is parent of current directory: ${b}`),o.verbose(` Goes up directory levels: ${p}`),u)throw new Error(`[build-cleaner] Refusing to clean current directory: "${e}". Use a subdirectory like "dist" or "build".`);if(b)throw new Error(`[build-cleaner] Refusing to clean parent directory: "${e}". This would delete the current project.`);if(p)throw new Error(`[build-cleaner] Refusing to clean directory outside project: "${e}". Use a subdirectory like "dist" or "build".`);if(a)throw new Error(`[build-cleaner] Refusing to clean absolute path outside project: "${e}". Use a relative subdirectory.`);if(["src","source","lib","app","components","pages","routes"].some(e=>d===e||d.endsWith(`/${e}`)))throw new Error(`[build-cleaner] Refusing to clean source directory: "${e}". Use a build output directory like "dist" or "build".`);o.debug(`Validated output directory: "${e}" -> "${s}"`)},"validateOutDir");export{o as validateOutDir};//# sourceMappingURL=chunk-PVPUCTHV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/validateOutDir.ts"],"names":[],"mappings":"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","file":"chunk-PVPUCTHV.js","sourcesContent":["import { relative, resolve } from 'node:path';\nimport type { ILogger } from './types';\n\nexport const validateOutDir = (outDir: string, logger: ILogger) => {\n const cwd = process.cwd();\n const resolvedOutDir = resolve(outDir);\n const relativePath = relative(cwd, resolvedOutDir);\n const normalizedPath = outDir.replace(/\\\\/g, '/');\n const isAbsolutePath = resolve(outDir) !== resolve(cwd, outDir);\n const isSameAsCurrentDir = resolvedOutDir === cwd;\n const isParentOfCurrentDirUnix = cwd.startsWith(`${resolvedOutDir}/`);\n const isParentOfCurrentDirWindows = cwd.startsWith(`${resolvedOutDir}\\\\`);\n const isParentOfCurrentDir = isParentOfCurrentDirUnix || isParentOfCurrentDirWindows;\n const goesUpDirectory = relativePath.startsWith('..');\n\n logger.verbose('Path validation:');\n logger.verbose(` Input: \"${outDir}\"`);\n logger.verbose(` Current working directory: \"${cwd}\"`);\n logger.verbose(` Resolved output directory: \"${resolvedOutDir}\"`);\n logger.verbose(` Relative path from cwd: \"${relativePath}\"`);\n logger.verbose(` Normalized path: \"${normalizedPath}\"`);\n logger.verbose(` Is absolute path outside project: ${isAbsolutePath}`);\n logger.verbose(` Is same as current directory: ${isSameAsCurrentDir}`);\n logger.verbose(` Is parent of current directory (Unix): ${isParentOfCurrentDirUnix}`);\n logger.verbose(` Is parent of current directory (Windows): ${isParentOfCurrentDirWindows}`);\n logger.verbose(` Is parent of current directory: ${isParentOfCurrentDir}`);\n logger.verbose(` Goes up directory levels: ${goesUpDirectory}`);\n\n // Check if the resolved path is the same as current directory\n if (isSameAsCurrentDir) {\n throw new Error(`[build-cleaner] Refusing to clean current directory: \"${outDir}\". Use a subdirectory like \"dist\" or \"build\".`);\n }\n\n // Check if the resolved path is a parent of current directory\n if (isParentOfCurrentDir) {\n throw new Error(`[build-cleaner] Refusing to clean parent directory: \"${outDir}\". This would delete the current project.`);\n }\n\n // Check if the relative path goes up (.., ../.., etc.)\n if (goesUpDirectory) {\n throw new Error(`[build-cleaner] Refusing to clean directory outside project: \"${outDir}\". Use a subdirectory like \"dist\" or \"build\".`);\n }\n\n // Check if it's an absolute path outside the project\n if (isAbsolutePath) {\n throw new Error(`[build-cleaner] Refusing to clean absolute path outside project: \"${outDir}\". Use a relative subdirectory.`);\n }\n\n // Prevent cleaning common source directories (even as subdirectories)\n const dangerousPaths = ['src', 'source', 'lib', 'app', 'components', 'pages', 'routes'];\n const isDangerousPath = dangerousPaths.some((dangerous) => normalizedPath === dangerous || normalizedPath.endsWith(`/${dangerous}`));\n\n if (isDangerousPath) {\n throw new Error(`[build-cleaner] Refusing to clean source directory: \"${outDir}\". Use a build output directory like \"dist\" or \"build\".`);\n }\n\n logger.debug(`Validated output directory: \"${outDir}\" -> \"${resolvedOutDir}\"`);\n};\n"]}
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=chunk-QZKD24XZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-QZKD24XZ.js"}
@@ -0,0 +1 @@
1
+ import{getAllFiles as e}from"./chunk-NTAOZL73.js";import{validateOutDir as o}from"./chunk-PVPUCTHV.js";import{__name as i}from"./chunk-7QVYU63E.js";import{unlink as r}from"node:fs/promises";import{relative as n}from"node:path";async function s(i,s,t,f){o(i,f);try{f.debug(`Starting cleanup of directory: "${i}"`),f.debug(`Built files count: ${s.size}`);const o=await e(i,f);if(f.debug(`Existing files count: ${o.length}`),0===o.length&&s.size>0)return void f.error('Disable tsup "clean: true" to use this plugin.');f.info(`Processing ${o.length} existing files vs ${s.size} built files`);const l=[];for(const e of o){const o=n(process.cwd(),e);f.verbose(`Checking file: "${o}"`),s.has(o)?f.verbose(`Keeping built file: "${o}"`):(l.push(e),f.verbose(`Marked for deletion: "${o}"`))}if(l.length>0){const e=t.dry?" (dry run)":"";f.warn(`Files marked for deletion: ${l.length}${e}`)}else f.info("No files marked for deletion");let c=0;for(const e of l){const o=n(process.cwd(),e);t.dry||await r(e),f.info(`Deleting: "${o}"`),c++}0===c&&f.info("No unused files found")}catch(e){throw f.error("Error during cleanup:",e),e}}i(s,"cleanUnusedFiles");export{s as cleanUnusedFiles};//# sourceMappingURL=chunk-RB6ZS752.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/cleanUnusedFiles.ts"],"names":[],"mappings":"+MAMA,eAAsB,gBAAA,CAAiB,MAAA,EAAgB,UAAA,EAAyB,OAAA,EAAkB,MAAA,EAAgC;AAChI,EAAA,cAAA,CAAe,QAAQ,MAAM,CAAA;AAE7B,EAAA,IAAI;AACF,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,gCAAA,EAAmC,MAAM,CAAA,CAAA,CAAG,CAAA;AACzD,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,mBAAA,EAAsB,UAAA,CAAW,IAAI,CAAA,CAAE,CAAA;AAEpD,IAAA,MAAM,aAAA,GAAgB,MAAM,WAAA,CAAY,MAAA,EAAQ,MAAM,CAAA;AACtD,IAAA,MAAA,CAAO,KAAA,CAAM,CAAA,sBAAA,EAAyB,aAAA,CAAc,MAAM,CAAA,CAAE,CAAA;AAE5D,IAAA,IAAI,aAAA,CAAc,MAAA,KAAW,CAAA,IAAK,UAAA,CAAW,OAAO,CAAA,EAAG;AACrD,MAAA,MAAA,CAAO,MAAM,gDAAgD,CAAA;AAC7D,MAAA;AAAA,IACF;AAEA,IAAA,MAAA,CAAO,KAAK,CAAA,WAAA,EAAc,aAAA,CAAc,MAAM,CAAA,mBAAA,EAAsB,UAAA,CAAW,IAAI,CAAA,YAAA,CAAc,CAAA;AAEjG,IAAA,MAAM,gBAA0B,EAAC;AAEjC,IAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AACjD,MAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,gBAAA,EAAmB,YAAY,CAAA,CAAA,CAAG,CAAA;AAEjD,MAAA,IAAI,CAAC,UAAA,CAAW,GAAA,CAAI,YAAY,CAAA,EAAG;AACjC,QAAA,aAAA,CAAc,KAAK,IAAI,CAAA;AACvB,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,sBAAA,EAAyB,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,MACzD,CAAA,MAAO;AACL,QAAA,MAAA,CAAO,OAAA,CAAQ,CAAA,qBAAA,EAAwB,YAAY,CAAA,CAAA,CAAG,CAAA;AAAA,MACxD;AAAA,IACF;AAEA,IAAA,IAAI,aAAA,CAAc,SAAS,CAAA,EAAG;AAC5B,MAAA,MAAM,YAAA,GAAe,OAAA,CAAQ,GAAA,GAAM,YAAA,GAAe,EAAA;AAClD,MAAA,MAAA,CAAO,KAAK,CAAA,2BAAA,EAA8B,aAAA,CAAc,MAAM,CAAA,EAAG,YAAY,CAAA,CAAE,CAAA;AAAA,IACjF,CAAA,MAAO;AACL,MAAA,MAAA,CAAO,KAAK,8BAA8B,CAAA;AAAA,IAC5C;AAEA,IAAA,IAAI,YAAA,GAAe,CAAA;AACnB,IAAA,KAAA,MAAW,QAAQ,aAAA,EAAe;AAChC,MAAA,MAAM,YAAA,GAAe,QAAA,CAAS,OAAA,CAAQ,GAAA,IAAO,IAAI,CAAA;AAEjD,MAAA,IAAI,CAAC,QAAQ,GAAA,EAAK;AAChB,QAAA,MAAM,OAAO,IAAI,CAAA;AAAA,MACnB;AAEA,MAAA,MAAA,CAAO,IAAA,CAAK,CAAA,WAAA,EAAc,YAAY,CAAA,CAAA,CAAG,CAAA;AACzC,MAAA,YAAA,EAAA;AAAA,IACF;AAEA,IAAA,IAAI,iBAAiB,CAAA,EAAG;AACtB,MAAA,MAAA,CAAO,KAAK,uBAAuB,CAAA;AAAA,IACrC;AAAA,EACF,SAAS,KAAA,EAAO;AACd,IAAA,MAAA,CAAO,KAAA,CAAM,yBAAyB,KAAK,CAAA;AAC3C,IAAA,MAAM,KAAA;AAAA,EACR;AACF;AAzDsB,MAAA,CAAA,gBAAA,EAAA,kBAAA,CAAA","file":"chunk-RB6ZS752.js","sourcesContent":["import { unlink } from 'node:fs/promises';\nimport { relative } from 'node:path';\nimport { getAllFiles } from './getAllFiles';\nimport type { ILogger, Options } from './types';\nimport { validateOutDir } from './validateOutDir';\n\nexport async function cleanUnusedFiles(outDir: string, builtFiles: Set<string>, options: Options, logger: ILogger): Promise<void> {\n validateOutDir(outDir, logger);\n\n try {\n logger.debug(`Starting cleanup of directory: \"${outDir}\"`);\n logger.debug(`Built files count: ${builtFiles.size}`);\n\n const existingFiles = await getAllFiles(outDir, logger);\n logger.debug(`Existing files count: ${existingFiles.length}`);\n\n if (existingFiles.length === 0 && builtFiles.size > 0) {\n logger.error('Disable tsup \"clean: true\" to use this plugin.');\n return;\n }\n\n logger.info(`Processing ${existingFiles.length} existing files vs ${builtFiles.size} built files`);\n\n const filesToDelete: string[] = [];\n\n for (const file of existingFiles) {\n const relativePath = relative(process.cwd(), file);\n logger.verbose(`Checking file: \"${relativePath}\"`);\n\n if (!builtFiles.has(relativePath)) {\n filesToDelete.push(file);\n logger.verbose(`Marked for deletion: \"${relativePath}\"`);\n } else {\n logger.verbose(`Keeping built file: \"${relativePath}\"`);\n }\n }\n\n if (filesToDelete.length > 0) {\n const dryRunSuffix = options.dry ? ' (dry run)' : '';\n logger.warn(`Files marked for deletion: ${filesToDelete.length}${dryRunSuffix}`);\n } else {\n logger.info('No files marked for deletion');\n }\n\n let deletedCount = 0;\n for (const file of filesToDelete) {\n const relativePath = relative(process.cwd(), file);\n\n if (!options.dry) {\n await unlink(file);\n }\n\n logger.info(`Deleting: \"${relativePath}\"`);\n deletedCount++;\n }\n\n if (deletedCount === 0) {\n logger.info('No unused files found');\n }\n } catch (error) {\n logger.error('Error during cleanup:', error);\n throw error;\n }\n}\n"]}
@@ -0,0 +1 @@
1
+ var e={debug:!1,verbose:!1,dry:!1};export{e as defaults};//# sourceMappingURL=chunk-ZJZOBFU7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/core/defaults.ts"],"names":[],"mappings":";AAEO,IAAM,QAAA,GAAW;AAAA,EACtB,KAAA,EAAO,KAAA;AAAA,EACP,OAAA,EAAS,KAAA;AAAA,EACT,GAAA,EAAK;AACP","file":"chunk-ZJZOBFU7.js","sourcesContent":["import type { Options } from './types';\n\nexport const defaults = {\n debug: false,\n verbose: false,\n dry: false,\n} satisfies Options;\n"]}
@@ -0,0 +1,5 @@
1
+ import { Options, ILogger } from './types.js';
2
+
3
+ declare function cleanUnusedFiles(outDir: string, builtFiles: Set<string>, options: Options, logger: ILogger): Promise<void>;
4
+
5
+ export { cleanUnusedFiles };
@@ -0,0 +1 @@
1
+ export{cleanUnusedFiles}from"../chunk-RB6ZS752.js";import"../chunk-NTAOZL73.js";import"../chunk-PVPUCTHV.js";import"../chunk-7QVYU63E.js";//# sourceMappingURL=cleanUnusedFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"cleanUnusedFiles.js"}
@@ -0,0 +1,5 @@
1
+ import { Options, ILogger } from './types.js';
2
+
3
+ declare function createLogger(options: Options): ILogger;
4
+
5
+ export { createLogger };
@@ -0,0 +1 @@
1
+ export{createLogger}from"../chunk-M6I5B37D.js";import"../chunk-7QVYU63E.js";//# sourceMappingURL=createLogger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"createLogger.js"}
@@ -0,0 +1,7 @@
1
+ declare const defaults: {
2
+ debug: false;
3
+ verbose: false;
4
+ dry: false;
5
+ };
6
+
7
+ export { defaults };
@@ -0,0 +1 @@
1
+ export{defaults}from"../chunk-ZJZOBFU7.js";import"../chunk-7QVYU63E.js";//# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"defaults.js"}
@@ -0,0 +1,5 @@
1
+ import { ILogger } from './types.js';
2
+
3
+ declare function getAllFiles(dir: string, logger: ILogger): Promise<string[]>;
4
+
5
+ export { getAllFiles };
@@ -0,0 +1 @@
1
+ export{getAllFiles}from"../chunk-NTAOZL73.js";import"../chunk-7QVYU63E.js";//# sourceMappingURL=getAllFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"getAllFiles.js"}
@@ -0,0 +1,6 @@
1
+ import * as unplugin from 'unplugin';
2
+ import { Options } from './types.js';
3
+
4
+ declare const plugin: unplugin.UnpluginInstance<Options | undefined, boolean>;
5
+
6
+ export { plugin };
@@ -0,0 +1 @@
1
+ export{plugin}from"../chunk-GGQ2IM6X.js";import"../chunk-ZJZOBFU7.js";import"../chunk-RB6ZS752.js";import"../chunk-NTAOZL73.js";import"../chunk-PVPUCTHV.js";import"../chunk-M6I5B37D.js";import"../chunk-7QVYU63E.js";//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,14 @@
1
+ interface Options {
2
+ debug?: boolean;
3
+ verbose?: boolean;
4
+ dry?: boolean;
5
+ }
6
+ type ILogger = {
7
+ debug: (typeof console)['debug'];
8
+ verbose: (typeof console)['debug'];
9
+ info: (typeof console)['info'];
10
+ warn: (typeof console)['warn'];
11
+ error: (typeof console)['error'];
12
+ };
13
+
14
+ export type { ILogger, Options };
@@ -0,0 +1 @@
1
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"types.js"}
@@ -0,0 +1,5 @@
1
+ import { ILogger } from './types.js';
2
+
3
+ declare const validateOutDir: (outDir: string, logger: ILogger) => void;
4
+
5
+ export { validateOutDir };
@@ -0,0 +1 @@
1
+ export{validateOutDir}from"../chunk-PVPUCTHV.js";import"../chunk-7QVYU63E.js";//# sourceMappingURL=validateOutDir.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"validateOutDir.js"}
@@ -0,0 +1,6 @@
1
+ import * as esbuild from 'esbuild';
2
+ import { Options } from './core/types.js';
3
+
4
+ declare const _default: (options?: Options | undefined) => esbuild.Plugin;
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ import{plugin as r}from"./chunk-GGQ2IM6X.js";import"./chunk-ZJZOBFU7.js";import"./chunk-RB6ZS752.js";import"./chunk-NTAOZL73.js";import"./chunk-PVPUCTHV.js";import"./chunk-M6I5B37D.js";import"./chunk-7QVYU63E.js";var o=r.esbuild;export{o as default};//# sourceMappingURL=esbuild.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/esbuild.ts"],"names":[],"mappings":";AAEA,IAAO,kBAAQ,MAAA,CAAO","file":"esbuild.js","sourcesContent":["import { plugin } from './core';\n\nexport default plugin.esbuild;\n"]}
@@ -0,0 +1,3 @@
1
+ export { plugin as default } from './core/index.js';
2
+ import 'unplugin';
3
+ import './core/types.js';
@@ -0,0 +1 @@
1
+ import"./chunk-QZKD24XZ.js";export{plugin as default}from"./chunk-GGQ2IM6X.js";import"./chunk-ZJZOBFU7.js";import"./chunk-RB6ZS752.js";import"./chunk-NTAOZL73.js";import"./chunk-PVPUCTHV.js";import"./chunk-M6I5B37D.js";import"./chunk-7QVYU63E.js";//# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
@@ -0,0 +1,6 @@
1
+ import * as _nuxt_schema from '@nuxt/schema';
2
+ import { Options } from './core/types.js';
3
+
4
+ declare const _default: _nuxt_schema.NuxtModule<Options, Options, false>;
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ import"./chunk-QZKD24XZ.js";import{plugin as t}from"./chunk-GGQ2IM6X.js";import"./chunk-ZJZOBFU7.js";import"./chunk-RB6ZS752.js";import"./chunk-NTAOZL73.js";import"./chunk-PVPUCTHV.js";import"./chunk-M6I5B37D.js";import"./chunk-7QVYU63E.js";import"@nuxt/schema";import{defineNuxtModule as i,addWebpackPlugin as m,addVitePlugin as n}from"@nuxt/kit";var o=i({meta:{name:"nuxt-build-clean",configKey:"buildVersion"},setup(i){m(t.webpack(i)),n(t.vite(i))}});export{o as default};//# sourceMappingURL=nuxt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/nuxt.ts"],"names":[],"mappings":"0UAKA,IAAO,eAAQ,gBAAA,CAAiB;AAAA,EAC9B,IAAA,EAAM;AAAA,IACJ,IAAA,EAAM,kBAAA;AAAA,IACN,SAAA,EAAW;AAAA,GACb;AAAA,EACA,MAAM,OAAA,EAAkB;AACtB,IAAA,gBAAA,CAAiB,MAAA,CAAS,OAAA,CAAQ,OAAO,CAAC,CAAA;AAC1C,IAAA,aAAA,CAAc,MAAA,CAAS,IAAA,CAAK,OAAO,CAAC,CAAA;AAAA,EACtC;AACF,CAAC","file":"nuxt.js","sourcesContent":["import '@nuxt/schema';\nimport { addVitePlugin, addWebpackPlugin, defineNuxtModule } from '@nuxt/kit';\nimport unplugin from '.';\nimport type { Options } from './core/types';\n\nexport default defineNuxtModule({\n meta: {\n name: 'nuxt-build-clean',\n configKey: 'buildVersion',\n },\n setup(options: Options) {\n addWebpackPlugin(unplugin.webpack(options));\n addVitePlugin(unplugin.vite(options));\n },\n});\n"]}
@@ -0,0 +1,6 @@
1
+ import * as rollup from 'rollup';
2
+ import { Options } from './core/types.js';
3
+
4
+ declare const _default: (options?: Options | undefined) => rollup.Plugin<any> | rollup.Plugin<any>[];
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ import{plugin as r}from"./chunk-GGQ2IM6X.js";import"./chunk-ZJZOBFU7.js";import"./chunk-RB6ZS752.js";import"./chunk-NTAOZL73.js";import"./chunk-PVPUCTHV.js";import"./chunk-M6I5B37D.js";import"./chunk-7QVYU63E.js";var o=r.rollup;export{o as default};//# sourceMappingURL=rollup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/rollup.ts"],"names":[],"mappings":";AAEA,IAAO,iBAAQ,MAAA,CAAO","file":"rollup.js","sourcesContent":["import { plugin } from './core';\n\nexport default plugin.rollup;\n"]}
@@ -0,0 +1,6 @@
1
+ import * as vite from 'vite';
2
+ import { Options } from './core/types.js';
3
+
4
+ declare const _default: (options?: Options | undefined) => vite.Plugin<any> | vite.Plugin<any>[];
5
+
6
+ export { _default as default };
@@ -0,0 +1 @@
1
+ import{plugin as r}from"./chunk-GGQ2IM6X.js";import"./chunk-ZJZOBFU7.js";import"./chunk-RB6ZS752.js";import"./chunk-NTAOZL73.js";import"./chunk-PVPUCTHV.js";import"./chunk-M6I5B37D.js";import"./chunk-7QVYU63E.js";var t=r.vite;export{t as default};//# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/vite.ts"],"names":[],"mappings":";AAEA,IAAO,eAAQ,MAAA,CAAO","file":"vite.js","sourcesContent":["import { plugin } from './core';\n\nexport default plugin.vite;\n"]}
package/package.json ADDED
@@ -0,0 +1,240 @@
1
+ {
2
+ "name": "@shellicar/build-clean",
3
+ "private": false,
4
+ "version": "1.0.0-preview.1",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "author": "Stephen Hellicar",
8
+ "description": "",
9
+ "keywords": [
10
+ "esbuild",
11
+ "build",
12
+ "clean",
13
+ "plugin"
14
+ ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "git+https://github.com/shellicar/build-clean.git"
18
+ },
19
+ "bugs": {
20
+ "url": "https://github.com/shellicar/build-clean/issues"
21
+ },
22
+ "homepage": "https://github.com/shellicar/build-clean#readme",
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "exports": {
27
+ ".": {
28
+ "require": {
29
+ "types": "./dist/esm/cjs/index.d.ts",
30
+ "default": "./dist/esm/cjs/index.js"
31
+ },
32
+ "import": {
33
+ "types": "./dist/esm/esm/index.d.ts",
34
+ "default": "./dist/esm/esm/index.js"
35
+ }
36
+ },
37
+ "./astro": {
38
+ "require": {
39
+ "types": "./dist/esm/cjs/astro.d.ts",
40
+ "default": "./dist/esm/cjs/astro.js"
41
+ },
42
+ "import": {
43
+ "types": "./dist/esm/astro.d.ts",
44
+ "default": "./dist/esm/astro.js"
45
+ }
46
+ },
47
+ "./rspack": {
48
+ "require": {
49
+ "types": "./dist/esm/cjs/rspack.d.ts",
50
+ "default": "./dist/esm/cjs/rspack.js"
51
+ },
52
+ "import": {
53
+ "types": "./dist/esm/rspack.d.ts",
54
+ "default": "./dist/esm/rspack.js"
55
+ }
56
+ },
57
+ "./vite": {
58
+ "require": {
59
+ "types": "./dist/esm/cjs/vite.d.ts",
60
+ "default": "./dist/esm/cjs/vite.js"
61
+ },
62
+ "import": {
63
+ "types": "./dist/esm/vite.d.ts",
64
+ "default": "./dist/esm/vite.js"
65
+ }
66
+ },
67
+ "./webpack": {
68
+ "require": {
69
+ "types": "./dist/esm/cjs/webpack.d.ts",
70
+ "default": "./dist/esm/cjs/webpack.js"
71
+ },
72
+ "import": {
73
+ "types": "./dist/esm/webpack.d.ts",
74
+ "default": "./dist/esm/webpack.js"
75
+ }
76
+ },
77
+ "./rollup": {
78
+ "require": {
79
+ "types": "./dist/esm/cjs/rollup.d.ts",
80
+ "default": "./dist/esm/cjs/rollup.js"
81
+ },
82
+ "import": {
83
+ "types": "./dist/esm/rollup.d.ts",
84
+ "default": "./dist/esm/rollup.js"
85
+ }
86
+ },
87
+ "./esbuild": {
88
+ "require": {
89
+ "types": "./dist/esm/cjs/esbuild.d.ts",
90
+ "default": "./dist/esm/cjs/esbuild.js"
91
+ },
92
+ "import": {
93
+ "types": "./dist/esm/esbuild.d.ts",
94
+ "default": "./dist/esm/esbuild.js"
95
+ }
96
+ },
97
+ "./nuxt": {
98
+ "require": {
99
+ "types": "./dist/esm/cjs/nuxt.d.ts",
100
+ "default": "./dist/esm/cjs/nuxt.js"
101
+ },
102
+ "import": {
103
+ "types": "./dist/esm/nuxt.d.ts",
104
+ "default": "./dist/esm/nuxt.js"
105
+ }
106
+ },
107
+ "./farm": {
108
+ "require": {
109
+ "types": "./dist/esm/cjs/farm.d.ts",
110
+ "default": "./dist/esm/cjs/farm.js"
111
+ },
112
+ "import": {
113
+ "types": "./dist/esm/farm.d.ts",
114
+ "default": "./dist/esm/farm.js"
115
+ }
116
+ },
117
+ "./types": {
118
+ "require": {
119
+ "types": "./dist/esm/cjs/core/types.d.ts",
120
+ "default": "./dist/esm/cjs/core/types.js"
121
+ },
122
+ "import": {
123
+ "types": "./dist/esm/core/types.d.ts",
124
+ "default": "./dist/esm/core/types.js"
125
+ }
126
+ },
127
+ "./typedefs": {
128
+ "require": {
129
+ "types": "./dist/esm/cjs/core/typedefs.d.ts",
130
+ "default": "./dist/esm/cjs/core/typedefs.js"
131
+ },
132
+ "import": {
133
+ "types": "./dist/esm/core/typedefs.d.ts",
134
+ "default": "./dist/esm/core/typedefs.js"
135
+ }
136
+ },
137
+ "./*": {
138
+ "require": {
139
+ "types": "./dist/esm/cjs/*.d.ts",
140
+ "default": "./dist/esm/cjs/*.js"
141
+ },
142
+ "import": {
143
+ "types": "./dist/esm/*.d.ts",
144
+ "default": "./dist/esm/*.js"
145
+ }
146
+ }
147
+ },
148
+ "main": "dist/cjs/index.js",
149
+ "module": "dist/esm/index.js",
150
+ "types": "dist/esm/index.d.ts",
151
+ "typesVersions": {
152
+ "*": {
153
+ "astro": [
154
+ "./dist/esm/astro.d.ts"
155
+ ],
156
+ "rspack": [
157
+ "./dist/esm/rspack.d.ts"
158
+ ],
159
+ "vite": [
160
+ "./dist/esm/vite.d.ts"
161
+ ],
162
+ "webpack": [
163
+ "./dist/esm/webpack.d.ts"
164
+ ],
165
+ "rollup": [
166
+ "./dist/esm/rollup.d.ts"
167
+ ],
168
+ "esbuild": [
169
+ "./dist/esm/esbuild.d.ts"
170
+ ],
171
+ "nuxt": [
172
+ "./dist/esm/nuxt.d.ts"
173
+ ],
174
+ "farm": [
175
+ "./dist/esm/farm.d.ts"
176
+ ],
177
+ "types": [
178
+ "./dist/esm/core/types.d.ts"
179
+ ],
180
+ "typedefs": [
181
+ "./dist/esm/core/typedefs.d.ts"
182
+ ],
183
+ "*": [
184
+ "./dist/esm/*"
185
+ ]
186
+ }
187
+ },
188
+ "files": [
189
+ "dist",
190
+ "*.md"
191
+ ],
192
+ "peerDependencies": {
193
+ "@farmfe/core": ">=1",
194
+ "@nuxt/kit": "^3",
195
+ "@nuxt/schema": "^3",
196
+ "esbuild": "*",
197
+ "rollup": "^3",
198
+ "vite": "^6",
199
+ "webpack": "^4 || ^5"
200
+ },
201
+ "peerDependenciesMeta": {
202
+ "@farmfe/core": {
203
+ "optional": true
204
+ },
205
+ "@nuxt/kit": {
206
+ "optional": true
207
+ },
208
+ "@nuxt/schema": {
209
+ "optional": true
210
+ },
211
+ "esbuild": {
212
+ "optional": true
213
+ },
214
+ "rollup": {
215
+ "optional": true
216
+ },
217
+ "vite": {
218
+ "optional": true
219
+ },
220
+ "webpack": {
221
+ "optional": true
222
+ }
223
+ },
224
+ "devDependencies": {
225
+ "@nuxt/kit": "^4.0.3",
226
+ "@tsconfig/node22": "^22.0.2",
227
+ "@types/node": "^24.3.0",
228
+ "terser": "^5.43.1",
229
+ "tsup": "^8.5.0",
230
+ "typescript": "^5.9.2"
231
+ },
232
+ "dependencies": {
233
+ "unplugin": "^2.3.6"
234
+ },
235
+ "scripts": {
236
+ "build": "tsup",
237
+ "dev": "tsup --watch",
238
+ "type-check": "tsc -p tsconfig.check.json"
239
+ }
240
+ }