@meng-xi/vite-plugin 0.0.4 → 0.0.5

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.
@@ -0,0 +1,36 @@
1
+ "use strict";const index=require("./vite-plugin.DqWt65U-.cjs"),format=require("./vite-plugin.BZsetDCm.cjs");require("crypto");const u$2=require("path"),o=require("fs"),validation=require("./vite-plugin.IGZeStMa.cjs");class p extends index.BasePlugin{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:t,overwrite:s=!0,recursive:i=!0,incremental:r=!0,enabled:n=!0}=this.options;if(!n){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${t}`);return}await format.checkSourceExists(e);const c=await format.copySourceToTarget(e,t,{recursive:i,overwrite:s,incremental:r});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${t}`,`\u590D\u5236\u4E86 ${c.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${c.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${c.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const copyFile=index.createPluginFactory(p);class R extends index.BasePlugin{projectRoot=process.cwd();tabBarPages=new Set;watcher=null;getDefaultOptions(){return{pagesJsonPath:"src/pages.json",outputPath:"src/router.config.ts",outputFormat:"ts",nameStrategy:"camelCase",includeSubPackages:!0,watch:!0,exportTypes:!0,preserveRouteChanges:!0,metaMapping:{navigationBarTitleText:"title",requireAuth:"requireAuth"}}}validateOptions(){if(this.validator.field("pagesJsonPath").string().field("outputPath").string().field("outputFormat").custom(e=>!e||["ts","js"].includes(e),"outputFormat \u5FC5\u987B\u662F ts \u6216 js").field("nameStrategy").custom(e=>!e||["path","camelCase","pascalCase","custom"].includes(e),"nameStrategy \u5FC5\u987B\u662F path, camelCase, pascalCase \u6216 custom").validate(),this.options.nameStrategy==="custom"&&!this.options.customNameGenerator)throw new Error("\u5F53 nameStrategy \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customNameGenerator")}getPluginName(){return"generate-router"}generateRouteName(e){switch(this.options.nameStrategy){case"path":return e.replace(/\//g,"_").replace(/^_/,"");case"camelCase":return format.toCamelCase(e);case"pascalCase":return format.toPascalCase(e);case"custom":return this.options.customNameGenerator(e);default:return format.toCamelCase(e)}}extractMeta(e,t){const s={},i=e.style||{},r=this.options.metaMapping||{};for(const[n,c]of Object.entries(r))i[n]!==void 0&&(s[c]=i[n]);return this.tabBarPages.has(t)&&(s.isTab=!0),s}parsePageToRoute(e,t=""){const s=t?`/${t}/${e.path}`:`/${e.path}`,i=this.generateRouteName(s),r=this.extractMeta(e,s.replace(/^\//,"")),n={path:s,name:i};return Object.keys(r).length>0&&(n.meta=r),n}parsePagesJson(e){const t=[];if(!e.pages||!Array.isArray(e.pages)||e.pages.length===0)return this.logger.warn("pages.json \u4E2D\u6CA1\u6709\u6709\u6548\u7684\u9875\u9762\u914D\u7F6E"),t;if(this.tabBarPages.clear(),e.tabBar?.list)for(const s of e.tabBar.list)this.tabBarPages.add(s.pagePath);for(const s of e.pages)t.push(this.parsePageToRoute(s));if(this.options.includeSubPackages&&e.subPackages){for(const s of e.subPackages)if(s.pages&&Array.isArray(s.pages))for(const i of s.pages)t.push(this.parsePageToRoute(i,s.root))}return t}generateTypeDefinitions(){return!this.options.exportTypes||this.options.outputFormat==="js"?"":`
2
+ /**
3
+ * \u8DEF\u7531\u5143\u4FE1\u606F
4
+ */
5
+ export interface RouteMeta {
6
+ /** \u9875\u9762\u6807\u9898 */
7
+ title?: string
8
+ /** \u662F\u5426\u4E3ATabBar\u9875\u9762 */
9
+ isTab?: boolean
10
+ /** \u662F\u5426\u9700\u8981\u767B\u5F55 */
11
+ requireAuth?: boolean
12
+ /** \u81EA\u5B9A\u4E49\u6269\u5C55\u5B57\u6BB5 */
13
+ [key: string]: unknown
14
+ }
15
+
16
+ /**
17
+ * \u8DEF\u7531\u914D\u7F6E\u9879
18
+ */
19
+ export interface RouteConfig {
20
+ /** \u8DEF\u7531\u8DEF\u5F84 */
21
+ path: string
22
+ /** \u8DEF\u7531\u540D\u79F0\uFF08\u7528\u4E8E\u547D\u540D\u8DEF\u7531\u5BFC\u822A\uFF09 */
23
+ name?: string
24
+ /** \u8DEF\u7531\u5143\u4FE1\u606F */
25
+ meta?: RouteMeta
26
+ }
27
+ `}generateFileContent(e){const t=this.generateTypeDefinitions(),s=this.options.outputFormat==="ts",i=JSON.stringify(e,null," ").replace(/"(\w+)":/g,"$1:").replace(/: "([^"]+)"/g,": '$1'");return`${t}
28
+ /**
29
+ * \u8DEF\u7531\u914D\u7F6E\u5217\u8868
30
+ * @description \u7531 pages.json \u81EA\u52A8\u751F\u6210
31
+ */
32
+ export const routes${s?": RouteConfig[]":""} = ${i}
33
+
34
+ export default routes
35
+ `}readPagesJson(){const e=u$2.resolve(this.projectRoot,this.options.pagesJsonPath);if(!o.existsSync(e))return this.logger.warn(`pages.json \u6587\u4EF6\u4E0D\u5B58\u5728: ${e}`),null;try{const t=format.readFileSync(e),s=format.stripJsonComments(t);return JSON.parse(s)}catch(t){return this.logger.error(`\u89E3\u6790 pages.json \u5931\u8D25: ${t.message}`),null}}extractExistingRoutes(e){const t=new Map,s=e.match(/export const routes[^=]*=\s*(\[[\s\S]*?\](?=\s*\n|\s*$|\s*\/\/))/);if(!s)return t;try{let i=s[1].replace(/(\w+)(?=\s*:)/g,'"$1"').replace(/'([^']*)'/g,'"$1"').replace(/,\s*([\]\}])/g,"$1");const r=JSON.parse(i);for(const n of r)n.path&&t.set(n.path,n)}catch{this.logger.warn("\u89E3\u6790\u73B0\u6709 routes \u914D\u7F6E\u5931\u8D25\uFF0C\u5C06\u5B8C\u5168\u91CD\u65B0\u751F\u6210")}return t}mergeRoutes(e,t){return e.map(s=>{const i=t.get(s.path);if(!i)return s;const r={};return s.meta&&Object.assign(r,s.meta),i.meta&&Object.assign(r,i.meta),{...i,path:s.path,meta:Object.keys(r).length>0?r:void 0}})}async generateRouterConfig(){const e=this.readPagesJson();if(!e)return;let t=this.parsePagesJson(e);const s=u$2.resolve(this.projectRoot,this.options.outputPath);if(this.options.preserveRouteChanges&&o.existsSync(s))try{const r=format.readFileSync(s),n=this.extractExistingRoutes(r);n.size>0&&(t=this.mergeRoutes(t,n),this.logger.info("\u5DF2\u5408\u5E76\u7528\u6237\u5BF9\u8DEF\u7531\u914D\u7F6E\u7684\u4FEE\u6539"))}catch{}const i=this.generateFileContent(t);await format.writeFileContent(s,i),this.logger.success(`\u8DEF\u7531\u914D\u7F6E\u6587\u4EF6\u5DF2\u751F\u6210: ${s}`),this.logger.info(`\u5171\u751F\u6210 ${t.length} \u6761\u8DEF\u7531\u914D\u7F6E`)}startWatching(){if(!this.options.watch)return;const e=u$2.resolve(this.projectRoot,this.options.pagesJsonPath);o.existsSync(e)&&(this.watcher=o.watch(e,async t=>{t==="change"&&(this.logger.info("\u68C0\u6D4B\u5230 pages.json \u53D8\u5316\uFF0C\u91CD\u65B0\u751F\u6210\u8DEF\u7531\u914D\u7F6E..."),await this.safeExecute(()=>this.generateRouterConfig(),"\u91CD\u65B0\u751F\u6210\u8DEF\u7531\u914D\u7F6E"))}),this.logger.info(`\u6B63\u5728\u76D1\u542C pages.json \u53D8\u5316: ${e}`))}stopWatching(){this.watcher&&(this.watcher.close(),this.watcher=null)}addPluginHooks(e){e.configResolved=async t=>{this.options.enabled&&(this.projectRoot=t.root,await this.safeExecute(()=>this.generateRouterConfig(),"\u751F\u6210\u8DEF\u7531\u914D\u7F6E"),t.command==="serve"&&this.startWatching())},e.buildEnd=()=>{this.stopWatching()}}}const generateRouter=index.createPluginFactory(R);let u$1=class extends index.BasePlugin{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",autoIncrement:!1,outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").custom(e=>!e||["timestamp","date","datetime","semver","hash","custom"].includes(e),"format \u5FC5\u987B\u662F timestamp, date, datetime, semver, hash \u6216 custom").field("outputType").custom(e=>!e||["file","define","both"].includes(e),"outputType \u5FC5\u987B\u662F file, define \u6216 both").field("hashLength").number().custom(e=>!e||e>0&&e<=32,"hashLength \u5FC5\u987B\u5728 1-32 \u4E4B\u95F4").validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const e=format.getDateFormatParams(this.buildTime),t=format.generateRandomHash(this.options.hashLength);let s;switch(this.options.format){case"timestamp":s=`${e.YYYY}${e.MM}${e.DD}${e.HH}${e.mm}${e.ss}`;break;case"date":s=`${e.YYYY}.${e.MM}.${e.DD}`;break;case"datetime":s=`${e.YYYY}.${e.MM}.${e.DD}.${e.HH}${e.mm}${e.ss}`;break;case"semver":s=this.options.semverBase||"1.0.0";break;case"hash":s=t;break;case"custom":s=this.parseCustomFormat({...e,hash:t});break;default:s=e.timestamp}const i=this.options.prefix||"",r=this.options.suffix||"";return`${i}${s}${r}`}parseCustomFormat(e){const t={...e};if(this.options.semverBase){const[s,i,r]=this.options.semverBase.split(".");t.major=s||"1",t.minor=i||"0",t.patch=r||"0"}return format.parseTemplate(this.options.customFormat||"",t)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(e){const t=u$2.join(e,this.options.outputFile||"version.json"),s=this.generateVersionInfo();await format.writeFileContent(t,JSON.stringify(s,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`)}addPluginHooks(e){const t=e.configResolved;e.configResolved=s=>{this.options.enabled&&(this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)),typeof t=="function"&&t(s)},(this.options.outputType==="define"||this.options.outputType==="both")&&(e.config=()=>{if(!this.options.enabled)return{};this.version||(this.buildTime=new Date,this.version=this.generateVersion());const s=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${s} = "${this.version}"`),{define:{[s]:JSON.stringify(this.version),[`${s}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(e.writeBundle=async()=>{!this.options.enabled||!this.viteConfig||await this.safeExecute(async()=>{const s=this.viteConfig.build.outDir;await this.writeVersionFile(s)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}};const generateVersion=index.createPluginFactory(u$1);function generateIconTagDescriptors(a){const e=[];if(a.link)return[];if(a.icons&&a.icons.length>0)for(const t of a.icons){const s={rel:t.rel,href:t.href};t.sizes&&(s.sizes=t.sizes),t.type&&(s.type=t.type),e.push({tag:"link",attrs:s,injectTo:"head"})}else if(a.url)e.push({tag:"link",attrs:{rel:"icon",href:a.url},injectTo:"head"});else{const t=a.base||"/",s=t.endsWith("/")?`${t}favicon.ico`:`${t}/favicon.ico`;e.push({tag:"link",attrs:{rel:"icon",href:s},injectTo:"head"})}return e}class u extends index.BasePlugin{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new validation.Validator(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"inject-ico"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const e=generateIconTagDescriptors(this.options);return e.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${e.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),e}injectCustomLinkTag(e){if(!this.options.enabled||!this.options.link)return e;const t=this.options.link,s=/<\/head>/i,i=e.match(s);if(i&&i.index!==void 0){const r=e.slice(0,i.index)+t+`
36
+ `+e.slice(i.index);return this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${t}`),r}return this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),e}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:e}=this.options;if(!e)return;const{sourceDir:t,targetDir:s,overwrite:i=!0,recursive:r=!0}=e;await format.checkSourceExists(t);const n=await format.copySourceToTarget(t,s,{recursive:r,overwrite:i,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${t} \u5230 ${s}`,`\u590D\u5236\u4E86 ${n.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${n.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${n.executionTime}ms`)}addPluginHooks(e){e.transformIndexHtml={order:"pre",handler:t=>{if(this.options.link)return this.injectCustomLinkTag(t);const s=this.getIconTagDescriptors();return s.length>0?{html:t,tags:s}:t}},e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const injectIco=index.createPluginFactory(u,a=>typeof a=="string"?{base:a}:a||{});exports.copyFile=copyFile,exports.generateRouter=generateRouter,exports.generateVersion=generateVersion,exports.injectIco=injectIco;
@@ -0,0 +1 @@
1
+ import s from"fs";import l from"path";import{randomBytes as j}from"crypto";const T=10;async function Y(t){try{await s.promises.access(t,s.constants.F_OK)}catch(u){const e=u;throw e.code==="ENOENT"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728 - ${t}`):e.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6E90\u6587\u4EF6 - ${t}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u68C0\u67E5\u6E90\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}async function f(t){try{await s.promises.mkdir(t,{recursive:!0})}catch(u){const e=u;throw e.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u521B\u5EFA\u76EE\u6807\u76EE\u5F55 - ${t}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u521B\u5EFA\u76EE\u6807\u76EE\u5F55\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}async function D(t,u){const e=await s.promises.readdir(t,{withFileTypes:!0}),r=[];for(const i of e){const n=l.join(t,i.name),E=i.isFile(),c=i.isDirectory();if(r.push({path:n,isFile:E,isDirectory:c}),c&&u){const F=await D(n,u);r.push(...F)}}return r}async function g(t,u){try{const[e,r]=await Promise.all([s.promises.stat(t),s.promises.stat(u)]);return e.mtimeMs>r.mtimeMs||e.size!==r.size}catch{return!0}}async function y(t){try{return await s.promises.access(t,s.constants.F_OK),!0}catch{return!1}}async function B(t,u,e){const r=[];let i=0;async function n(){for(;i<t.length;){const c=i++,F=await u(t[c]);r[c]=F}}const E=Array(Math.min(e,t.length)).fill(null).map(()=>n());return await Promise.all(E),r}async function k(t,u,e){const r=Date.now(),{recursive:i,overwrite:n,incremental:E=!1,parallelLimit:c=T}=e;let F=0,d=0,A=0;if((await s.promises.stat(t)).isDirectory()){await f(u);const o=await D(t,i),C=o.filter(a=>a.isFile);A=o.filter(a=>a.isDirectory).length;const S=new Set;for(const a of C){const h=l.relative(t,a.path),m=l.dirname(l.join(u,h));S.add(m)}await Promise.all([...S].map(a=>f(a)));const x=await B(C,async a=>{const h=l.relative(t,a.path),m=l.join(u,h);let w=n;return w||(w=!await y(m)),E&&w&&(w=await g(a.path,m)),w?(await s.promises.copyFile(a.path,m),{copied:!0,skipped:!1}):{copied:!1,skipped:!0}},c);for(const a of x)a.copied&&F++,a.skipped&&d++}else{await f(l.dirname(u));let o=n;o||(o=!await y(u)),E&&o&&(o=await g(t,u)),o?(await s.promises.copyFile(t,u),F++):d++}const M=Date.now()-r;return{copiedFiles:F,skippedFiles:d,copiedDirs:A,executionTime:M}}async function v(t,u){try{await s.promises.writeFile(t,u,"utf-8")}catch(e){const r=e;throw r.code==="EACCES"?new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u5199\u5165\u6587\u4EF6 - ${t}`):new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u5199\u5165\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${r.message}`)}}function O(t){try{return s.readFileSync(t,"utf-8")}catch(u){const e=u;throw e.code==="EACCES"?new Error(`\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BFB\u53D6\u6587\u4EF6 - ${t}`):new Error(`\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u8BFB\u53D6\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}function p(t,u=2){return t.toString().padStart(u,"0")}function P(t=8){const u=Math.max(1,Math.min(64,t));return j(Math.ceil(u/2)).toString("hex").slice(0,u)}function $(t=new Date){return{YYYY:t.getFullYear().toString(),YY:t.getFullYear().toString().slice(-2),MM:p(t.getMonth()+1),DD:p(t.getDate()),HH:p(t.getHours()),mm:p(t.getMinutes()),ss:p(t.getSeconds()),SSS:p(t.getMilliseconds(),3),timestamp:t.getTime().toString()}}function b(t,u){const e=$(t);let r=u;for(const[i,n]of Object.entries(e))r=r.replace(new RegExp(`\\{${i}\\}`,"g"),n);return r}function H(t,u){let e=t;for(const[r,i]of Object.entries(u))e=e.replace(new RegExp(`\\{${r}\\}`,"g"),i);return e}function L(t,u=/[/-]/){return t.replace(/^\/+/,"").split(u).filter(Boolean).map((e,r)=>r===0?e.toLowerCase():e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function R(t,u=/[/-]/){return t.replace(/^\/+/,"").split(u).filter(Boolean).map(e=>e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()).join("")}function N(t){return t.replace(/\/\/.*$/gm,"").replace(/\/\*[\s\S]*?\*\//g,"")}export{k as a,b,Y as c,$ as d,f as e,y as f,P as g,H as h,O as i,B as j,N as k,R as l,p,D as r,g as s,L as t,v as w};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@meng-xi/vite-plugin",
3
3
  "type": "module",
4
- "version": "0.0.4",
4
+ "version": "0.0.5",
5
5
  "private": false,
6
6
  "description": "一个为 Vite 提供的插件库",
7
7
  "keywords": [
@@ -51,12 +51,12 @@
51
51
  "build": "unbuild"
52
52
  },
53
53
  "peerDependencies": {
54
- "vite": "^5.0.0"
54
+ "vite": "^5.0.0 || ^6.0.0 || ^7.0.0"
55
55
  },
56
56
  "devDependencies": {
57
- "@types/node": "^20.0.0",
58
- "unbuild": "^3.0.0",
59
- "typescript": "^5.2.0"
57
+ "@types/node": "^22.0.0",
58
+ "unbuild": "^3.6.0",
59
+ "typescript": "^5.9.3"
60
60
  },
61
61
  "author": {
62
62
  "name": "PedroQue99",
@@ -1 +0,0 @@
1
- "use strict";const o=require("fs"),u=require("path"),crypto=require("crypto");function _interopDefaultCompat(t){return t&&typeof t=="object"&&"default"in t?t.default:t}const o__default=_interopDefaultCompat(o),u__default=_interopDefaultCompat(u),h=10;async function checkSourceExists(t){try{await o__default.promises.access(t,o__default.constants.F_OK)}catch(e){const r=e;throw r.code==="ENOENT"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728 - ${t}`):r.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6E90\u6587\u4EF6 - ${t}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u68C0\u67E5\u6E90\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${r.message}`)}}async function ensureTargetDir(t){try{await o__default.promises.mkdir(t,{recursive:!0})}catch(e){const r=e;throw r.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u521B\u5EFA\u76EE\u6807\u76EE\u5F55 - ${t}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u521B\u5EFA\u76EE\u6807\u76EE\u5F55\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${r.message}`)}}async function readDirRecursive(t,e){const r=await o__default.promises.readdir(t,{withFileTypes:!0}),s=[];for(const i of r){const n=u__default.join(t,i.name),l=i.isFile(),F=i.isDirectory();if(s.push({path:n,isFile:l,isDirectory:F}),F&&e){const p=await readDirRecursive(n,e);s.push(...p)}}return s}async function shouldUpdateFile(t,e){try{const[r,s]=await Promise.all([o__default.promises.stat(t),o__default.promises.stat(e)]);return r.mtimeMs>s.mtimeMs||r.size!==s.size}catch{return!0}}async function C(t){try{return await o__default.promises.access(t,o__default.constants.F_OK),!0}catch{return!1}}async function D(t,e,r){const s=[];let i=0;async function n(){for(;i<t.length;){const F=i++,p=await e(t[F]);s[F]=p}}const l=Array(Math.min(r,t.length)).fill(null).map(()=>n());return await Promise.all(l),s}async function copySourceToTarget(t,e,r){const s=Date.now(),{recursive:i,overwrite:n,incremental:l=!1,parallelLimit:F=h}=r;let p=0,f=0,d=0;if((await o__default.promises.stat(t)).isDirectory()){await ensureTargetDir(e);const c=await readDirRecursive(t,i),g=c.filter(a=>a.isFile);d=c.filter(a=>a.isDirectory).length;const y=new Set;for(const a of g){const w=u__default.relative(t,a.path),E=u__default.dirname(u__default.join(e,w));y.add(E)}await Promise.all([...y].map(a=>ensureTargetDir(a)));const S=await D(g,async a=>{const w=u__default.relative(t,a.path),E=u__default.join(e,w);let m=n;return m||(m=!await C(E)),l&&m&&(m=await shouldUpdateFile(a.path,E)),m?(await o__default.promises.copyFile(a.path,E),{copied:!0,skipped:!1}):{copied:!1,skipped:!0}},F);for(const a of S)a.copied&&p++,a.skipped&&f++}else{await ensureTargetDir(u__default.dirname(e));let c=n;c||(c=!await C(e)),l&&c&&(c=await shouldUpdateFile(t,e)),c?(await o__default.promises.copyFile(t,e),p++):f++}const A=Date.now()-s;return{copiedFiles:p,skippedFiles:f,copiedDirs:d,executionTime:A}}async function writeFileContent(t,e){try{await o__default.promises.writeFile(t,e,"utf-8")}catch(r){const s=r;throw s.code==="EACCES"?new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u5199\u5165\u6587\u4EF6 - ${t}`):new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u5199\u5165\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${s.message}`)}}function readFileSync(t){try{return o__default.readFileSync(t,"utf-8")}catch(e){const r=e;throw r.code==="EACCES"?new Error(`\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BFB\u53D6\u6587\u4EF6 - ${t}`):new Error(`\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u8BFB\u53D6\u6587\u4EF6\u65F6\u51FA\u9519 - ${t}\uFF0C\u9519\u8BEF\uFF1A${r.message}`)}}function padNumber(t,e=2){return t.toString().padStart(e,"0")}function generateRandomHash(t=8){const e=Math.max(1,Math.min(64,t));return crypto.randomBytes(Math.ceil(e/2)).toString("hex").slice(0,e)}function getDateFormatParams(t=new Date){return{YYYY:t.getFullYear().toString(),YY:t.getFullYear().toString().slice(-2),MM:padNumber(t.getMonth()+1),DD:padNumber(t.getDate()),HH:padNumber(t.getHours()),mm:padNumber(t.getMinutes()),ss:padNumber(t.getSeconds()),SSS:padNumber(t.getMilliseconds(),3),timestamp:t.getTime().toString()}}function formatDate(t,e){const r=getDateFormatParams(t);let s=e;for(const[i,n]of Object.entries(r))s=s.replace(new RegExp(`\\{${i}\\}`,"g"),n);return s}function parseTemplate(t,e){let r=t;for(const[s,i]of Object.entries(e))r=r.replace(new RegExp(`\\{${s}\\}`,"g"),i);return r}exports.checkSourceExists=checkSourceExists,exports.copySourceToTarget=copySourceToTarget,exports.ensureTargetDir=ensureTargetDir,exports.formatDate=formatDate,exports.generateRandomHash=generateRandomHash,exports.getDateFormatParams=getDateFormatParams,exports.padNumber=padNumber,exports.parseTemplate=parseTemplate,exports.readDirRecursive=readDirRecursive,exports.readFileSync=readFileSync,exports.shouldUpdateFile=shouldUpdateFile,exports.writeFileContent=writeFileContent;
@@ -1,2 +0,0 @@
1
- "use strict";const index=require("./vite-plugin.DqWt65U-.cjs"),format=require("./vite-plugin.D6NYITpX.cjs");require("crypto");const u$2=require("path"),validation=require("./vite-plugin.IGZeStMa.cjs");class p extends index.BasePlugin{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:t,overwrite:i=!0,recursive:o=!0,incremental:r=!0,enabled:n=!0}=this.options;if(!n){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${t}`);return}await format.checkSourceExists(e);const a=await format.copySourceToTarget(e,t,{recursive:o,overwrite:i,incremental:r});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${t}`,`\u590D\u5236\u4E86 ${a.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${a.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${a.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const copyFile=index.createPluginFactory(p);let u$1=class extends index.BasePlugin{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",autoIncrement:!1,outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").custom(e=>!e||["timestamp","date","datetime","semver","hash","custom"].includes(e),"format \u5FC5\u987B\u662F timestamp, date, datetime, semver, hash \u6216 custom").field("outputType").custom(e=>!e||["file","define","both"].includes(e),"outputType \u5FC5\u987B\u662F file, define \u6216 both").field("hashLength").number().custom(e=>!e||e>0&&e<=32,"hashLength \u5FC5\u987B\u5728 1-32 \u4E4B\u95F4").validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const e=format.getDateFormatParams(this.buildTime),t=format.generateRandomHash(this.options.hashLength);let i;switch(this.options.format){case"timestamp":i=`${e.YYYY}${e.MM}${e.DD}${e.HH}${e.mm}${e.ss}`;break;case"date":i=`${e.YYYY}.${e.MM}.${e.DD}`;break;case"datetime":i=`${e.YYYY}.${e.MM}.${e.DD}.${e.HH}${e.mm}${e.ss}`;break;case"semver":i=this.options.semverBase||"1.0.0";break;case"hash":i=t;break;case"custom":i=this.parseCustomFormat({...e,hash:t});break;default:i=e.timestamp}const o=this.options.prefix||"",r=this.options.suffix||"";return`${o}${i}${r}`}parseCustomFormat(e){const t={...e};if(this.options.semverBase){const[i,o,r]=this.options.semverBase.split(".");t.major=i||"1",t.minor=o||"0",t.patch=r||"0"}return format.parseTemplate(this.options.customFormat||"",t)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(e){const t=u$2.join(e,this.options.outputFile||"version.json"),i=this.generateVersionInfo();await format.writeFileContent(t,JSON.stringify(i,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`)}addPluginHooks(e){const t=e.configResolved;e.configResolved=i=>{this.options.enabled&&(this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)),typeof t=="function"&&t(i)},(this.options.outputType==="define"||this.options.outputType==="both")&&(e.config=()=>{if(!this.options.enabled)return{};this.version||(this.buildTime=new Date,this.version=this.generateVersion());const i=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${i} = "${this.version}"`),{define:{[i]:JSON.stringify(this.version),[`${i}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(e.writeBundle=async()=>{!this.options.enabled||!this.viteConfig||await this.safeExecute(async()=>{const i=this.viteConfig.build.outDir;await this.writeVersionFile(i)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}};const generateVersion=index.createPluginFactory(u$1);function generateIconTagDescriptors(s){const e=[];if(s.link)return[];if(s.icons&&s.icons.length>0)for(const t of s.icons){const i={rel:t.rel,href:t.href};t.sizes&&(i.sizes=t.sizes),t.type&&(i.type=t.type),e.push({tag:"link",attrs:i,injectTo:"head"})}else if(s.url)e.push({tag:"link",attrs:{rel:"icon",href:s.url},injectTo:"head"});else{const t=s.base||"/",i=t.endsWith("/")?`${t}favicon.ico`:`${t}/favicon.ico`;e.push({tag:"link",attrs:{rel:"icon",href:i},injectTo:"head"})}return e}class u extends index.BasePlugin{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new validation.Validator(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"inject-ico"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const e=generateIconTagDescriptors(this.options);return e.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${e.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),e}injectCustomLinkTag(e){if(!this.options.enabled||!this.options.link)return e;const t=this.options.link,i=/<\/head>/i,o=e.match(i);if(o&&o.index!==void 0){const r=e.slice(0,o.index)+t+`
2
- `+e.slice(o.index);return this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${t}`),r}return this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),e}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:e}=this.options;if(!e)return;const{sourceDir:t,targetDir:i,overwrite:o=!0,recursive:r=!0}=e;await format.checkSourceExists(t);const n=await format.copySourceToTarget(t,i,{recursive:r,overwrite:o,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${t} \u5230 ${i}`,`\u590D\u5236\u4E86 ${n.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${n.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${n.executionTime}ms`)}addPluginHooks(e){e.transformIndexHtml={order:"pre",handler:t=>{if(this.options.link)return this.injectCustomLinkTag(t);const i=this.getIconTagDescriptors();return i.length>0?{html:t,tags:i}:t}},e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const injectIco=index.createPluginFactory(u,s=>typeof s=="string"?{base:s}:s||{});exports.copyFile=copyFile,exports.generateVersion=generateVersion,exports.injectIco=injectIco;
@@ -1,2 +0,0 @@
1
- import{c as a,B as c}from"./vite-plugin.C7isVPKg.mjs";import{c as l,a as h,b as p,g as F,d as m,w as f}from"./vite-plugin.HZb-1B5l.mjs";import"crypto";import{join as d}from"path";import{V as g}from"./vite-plugin.B88RyRN8.mjs";class E extends c{getDefaultOptions(){return{overwrite:!0,recursive:!0,incremental:!0}}validateOptions(){this.validator.field("sourceDir").required().string().custom(e=>e.trim()!=="","sourceDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("targetDir").required().string().custom(e=>e.trim()!=="","targetDir \u4E0D\u80FD\u4E3A\u7A7A\u5B57\u7B26\u4E32").field("overwrite").boolean().field("recursive").boolean().field("incremental").boolean().validate()}getPluginName(){return"copy-file"}getEnforce(){return"post"}async copyFiles(){const{sourceDir:e,targetDir:t,overwrite:i=!0,recursive:u=!0,incremental:o=!0,enabled:r=!0}=this.options;if(!r){this.logger.info(`\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6267\u884C\uFF1A\u4ECE ${e} \u590D\u5236\u5230 ${t}`);return}await l(e);const n=await h(e,t,{recursive:u,overwrite:i,incremental:o});this.logger.success(`\u590D\u5236\u6587\u4EF6\u6210\u529F\uFF1A\u4ECE ${e} \u5230 ${t}`,`\u590D\u5236\u4E86 ${n.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${n.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${n.executionTime}ms`)}addPluginHooks(e){e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u590D\u5236\u6587\u4EF6")}}}const D=a(E);let v=class extends c{version="";buildTime=new Date;getDefaultOptions(){return{format:"timestamp",semverBase:"1.0.0",autoIncrement:!1,outputType:"file",outputFile:"version.json",defineName:"__APP_VERSION__",hashLength:8,prefix:"",suffix:""}}validateOptions(){if(this.validator.field("format").custom(e=>!e||["timestamp","date","datetime","semver","hash","custom"].includes(e),"format \u5FC5\u987B\u662F timestamp, date, datetime, semver, hash \u6216 custom").field("outputType").custom(e=>!e||["file","define","both"].includes(e),"outputType \u5FC5\u987B\u662F file, define \u6216 both").field("hashLength").number().custom(e=>!e||e>0&&e<=32,"hashLength \u5FC5\u987B\u5728 1-32 \u4E4B\u95F4").validate(),this.options.format==="custom"&&!this.options.customFormat)throw new Error("\u5F53 format \u4E3A custom \u65F6\uFF0C\u5FC5\u987B\u63D0\u4F9B customFormat")}getPluginName(){return"generate-version"}generateVersion(){const e=p(this.buildTime),t=F(this.options.hashLength);let i;switch(this.options.format){case"timestamp":i=`${e.YYYY}${e.MM}${e.DD}${e.HH}${e.mm}${e.ss}`;break;case"date":i=`${e.YYYY}.${e.MM}.${e.DD}`;break;case"datetime":i=`${e.YYYY}.${e.MM}.${e.DD}.${e.HH}${e.mm}${e.ss}`;break;case"semver":i=this.options.semverBase||"1.0.0";break;case"hash":i=t;break;case"custom":i=this.parseCustomFormat({...e,hash:t});break;default:i=e.timestamp}const u=this.options.prefix||"",o=this.options.suffix||"";return`${u}${i}${o}`}parseCustomFormat(e){const t={...e};if(this.options.semverBase){const[i,u,o]=this.options.semverBase.split(".");t.major=i||"1",t.minor=u||"0",t.patch=o||"0"}return m(this.options.customFormat||"",t)}generateVersionInfo(){return{version:this.version,buildTime:this.buildTime.toISOString(),timestamp:this.buildTime.getTime(),format:this.options.format,...this.options.extra}}async writeVersionFile(e){const t=d(e,this.options.outputFile||"version.json"),i=this.generateVersionInfo();await f(t,JSON.stringify(i,null,2)),this.logger.success(`\u7248\u672C\u6587\u4EF6\u5DF2\u751F\u6210: ${t}`)}addPluginHooks(e){const t=e.configResolved;e.configResolved=i=>{this.options.enabled&&(this.buildTime=new Date,this.version=this.generateVersion(),this.logger.info(`\u751F\u6210\u7248\u672C\u53F7: ${this.version}`)),typeof t=="function"&&t(i)},(this.options.outputType==="define"||this.options.outputType==="both")&&(e.config=()=>{if(!this.options.enabled)return{};this.version||(this.buildTime=new Date,this.version=this.generateVersion());const i=this.options.defineName||"__APP_VERSION__";return this.logger.info(`\u6CE8\u5165\u5168\u5C40\u53D8\u91CF: ${i} = "${this.version}"`),{define:{[i]:JSON.stringify(this.version),[`${i}_INFO`]:JSON.stringify(this.generateVersionInfo())}}}),(this.options.outputType==="file"||this.options.outputType==="both")&&(e.writeBundle=async()=>{!this.options.enabled||!this.viteConfig||await this.safeExecute(async()=>{const i=this.viteConfig.build.outDir;await this.writeVersionFile(i)},"\u5199\u5165\u7248\u672C\u6587\u4EF6")})}};const C=a(v);function $(s){const e=[];if(s.link)return[];if(s.icons&&s.icons.length>0)for(const t of s.icons){const i={rel:t.rel,href:t.href};t.sizes&&(i.sizes=t.sizes),t.type&&(i.type=t.type),e.push({tag:"link",attrs:i,injectTo:"head"})}else if(s.url)e.push({tag:"link",attrs:{rel:"icon",href:s.url},injectTo:"head"});else{const t=s.base||"/",i=t.endsWith("/")?`${t}favicon.ico`:`${t}/favicon.ico`;e.push({tag:"link",attrs:{rel:"icon",href:i},injectTo:"head"})}return e}class b extends c{getDefaultOptions(){return{base:"/"}}validateOptions(){this.validator.field("base").string().field("url").string().field("link").string().field("icons").array(),this.options?.copyOptions&&(this.validator.field("copyOptions").object(),new g(this.options.copyOptions).field("sourceDir").required().string().field("targetDir").required().string().field("overwrite").boolean().field("recursive").boolean().validate()),this.validator.validate()}getPluginName(){return"inject-ico"}getIconTagDescriptors(){if(!this.options.enabled)return this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),[];const e=$(this.options);return e.length>0&&this.logger.success(`\u6210\u529F\u6CE8\u5165 ${e.length} \u4E2A\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6`),e}injectCustomLinkTag(e){if(!this.options.enabled||!this.options.link)return e;const t=this.options.link,i=/<\/head>/i,u=e.match(i);if(u&&u.index!==void 0){const o=e.slice(0,u.index)+t+`
2
- `+e.slice(u.index);return this.logger.success("\u6210\u529F\u6CE8\u5165\u81EA\u5B9A\u4E49\u56FE\u6807\u6807\u7B7E\u5230 HTML \u6587\u4EF6"),this.logger.info(` - ${t}`),o}return this.logger.warn("\u672A\u627E\u5230 </head> \u6807\u7B7E\uFF0C\u8DF3\u8FC7\u56FE\u6807\u6CE8\u5165"),e}async copyFiles(){if(!this.options.enabled){this.logger.info("\u63D2\u4EF6\u5DF2\u7981\u7528\uFF0C\u8DF3\u8FC7\u6587\u4EF6\u590D\u5236");return}const{copyOptions:e}=this.options;if(!e)return;const{sourceDir:t,targetDir:i,overwrite:u=!0,recursive:o=!0}=e;await l(t);const r=await h(t,i,{recursive:o,overwrite:u,incremental:!0});this.logger.success(`\u56FE\u6807\u6587\u4EF6\u590D\u5236\u6210\u529F\uFF1A\u4ECE ${t} \u5230 ${i}`,`\u590D\u5236\u4E86 ${r.copiedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8DF3\u8FC7\u4E86 ${r.skippedFiles} \u4E2A\u6587\u4EF6\uFF0C\u8017\u65F6 ${r.executionTime}ms`)}addPluginHooks(e){e.transformIndexHtml={order:"pre",handler:t=>{if(this.options.link)return this.injectCustomLinkTag(t);const i=this.getIconTagDescriptors();return i.length>0?{html:t,tags:i}:t}},e.writeBundle=async()=>{await this.safeExecute(()=>this.copyFiles(),"\u56FE\u6807\u6587\u4EF6\u590D\u5236")}}}const y=a(b,s=>typeof s=="string"?{base:s}:s||{});export{D as c,C as g,y as i};
@@ -1 +0,0 @@
1
- import i from"fs";import l from"path";import{randomBytes as x}from"crypto";const T=10;async function Y(u){try{await i.promises.access(u,i.constants.F_OK)}catch(t){const e=t;throw e.code==="ENOENT"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6E90\u6587\u4EF6\u4E0D\u5B58\u5728 - ${u}`):e.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BBF\u95EE\u6E90\u6587\u4EF6 - ${u}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u68C0\u67E5\u6E90\u6587\u4EF6\u65F6\u51FA\u9519 - ${u}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}async function f(u){try{await i.promises.mkdir(u,{recursive:!0})}catch(t){const e=t;throw e.code==="EACCES"?new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u521B\u5EFA\u76EE\u6807\u76EE\u5F55 - ${u}`):new Error(`\u590D\u5236\u6587\u4EF6\u5931\u8D25\uFF1A\u521B\u5EFA\u76EE\u6807\u76EE\u5F55\u65F6\u51FA\u9519 - ${u}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}async function h(u,t){const e=await i.promises.readdir(u,{withFileTypes:!0}),r=[];for(const s of e){const n=l.join(u,s.name),p=s.isFile(),c=s.isDirectory();if(r.push({path:n,isFile:p,isDirectory:c}),c&&t){const F=await h(n,t);r.push(...F)}}return r}async function g(u,t){try{const[e,r]=await Promise.all([i.promises.stat(u),i.promises.stat(t)]);return e.mtimeMs>r.mtimeMs||e.size!==r.size}catch{return!0}}async function C(u){try{return await i.promises.access(u,i.constants.F_OK),!0}catch{return!1}}async function k(u,t,e){const r=[];let s=0;async function n(){for(;s<u.length;){const c=s++,F=await t(u[c]);r[c]=F}}const p=Array(Math.min(e,u.length)).fill(null).map(()=>n());return await Promise.all(p),r}async function v(u,t,e){const r=Date.now(),{recursive:s,overwrite:n,incremental:p=!1,parallelLimit:c=T}=e;let F=0,D=0,y=0;if((await i.promises.stat(u)).isDirectory()){await f(t);const o=await h(u,s),A=o.filter(a=>a.isFile);y=o.filter(a=>a.isDirectory).length;const S=new Set;for(const a of A){const d=l.relative(u,a.path),m=l.dirname(l.join(t,d));S.add(m)}await Promise.all([...S].map(a=>f(a)));const M=await k(A,async a=>{const d=l.relative(u,a.path),m=l.join(t,d);let w=n;return w||(w=!await C(m)),p&&w&&(w=await g(a.path,m)),w?(await i.promises.copyFile(a.path,m),{copied:!0,skipped:!1}):{copied:!1,skipped:!0}},c);for(const a of M)a.copied&&F++,a.skipped&&D++}else{await f(l.dirname(t));let o=n;o||(o=!await C(t)),p&&o&&(o=await g(u,t)),o?(await i.promises.copyFile(u,t),F++):D++}const $=Date.now()-r;return{copiedFiles:F,skippedFiles:D,copiedDirs:y,executionTime:$}}async function j(u,t){try{await i.promises.writeFile(u,t,"utf-8")}catch(e){const r=e;throw r.code==="EACCES"?new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u5199\u5165\u6587\u4EF6 - ${u}`):new Error(`\u5199\u5165\u6587\u4EF6\u5931\u8D25\uFF1A\u5199\u5165\u6587\u4EF6\u65F6\u51FA\u9519 - ${u}\uFF0C\u9519\u8BEF\uFF1A${r.message}`)}}function O(u){try{return i.readFileSync(u,"utf-8")}catch(t){const e=t;throw e.code==="EACCES"?new Error(`\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u6CA1\u6709\u6743\u9650\u8BFB\u53D6\u6587\u4EF6 - ${u}`):new Error(`\u8BFB\u53D6\u6587\u4EF6\u5931\u8D25\uFF1A\u8BFB\u53D6\u6587\u4EF6\u65F6\u51FA\u9519 - ${u}\uFF0C\u9519\u8BEF\uFF1A${e.message}`)}}function E(u,t=2){return u.toString().padStart(t,"0")}function b(u=8){const t=Math.max(1,Math.min(64,u));return x(Math.ceil(t/2)).toString("hex").slice(0,t)}function B(u=new Date){return{YYYY:u.getFullYear().toString(),YY:u.getFullYear().toString().slice(-2),MM:E(u.getMonth()+1),DD:E(u.getDate()),HH:E(u.getHours()),mm:E(u.getMinutes()),ss:E(u.getSeconds()),SSS:E(u.getMilliseconds(),3),timestamp:u.getTime().toString()}}function H(u,t){const e=B(u);let r=t;for(const[s,n]of Object.entries(e))r=r.replace(new RegExp(`\\{${s}\\}`,"g"),n);return r}function P(u,t){let e=u;for(const[r,s]of Object.entries(t))e=e.replace(new RegExp(`\\{${r}\\}`,"g"),s);return e}export{v as a,B as b,Y as c,P as d,f as e,H as f,b as g,O as h,E as p,h as r,g as s,j as w};