@ikaros-cli/ikaros 2.2.0 → 2.2.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.
- package/dist/index.d.mts +26 -2
- package/dist/index.mjs +5 -6
- package/package.json +12 -12
package/dist/index.d.mts
CHANGED
|
@@ -166,7 +166,8 @@ type CompileOptions = {
|
|
|
166
166
|
type CompileServeParams = {
|
|
167
167
|
command: Command;
|
|
168
168
|
options: CompileOptions;
|
|
169
|
-
configFile?: string;
|
|
169
|
+
configFile?: string; /** 工作目录,默认 process.cwd() */
|
|
170
|
+
context?: string;
|
|
170
171
|
onBuildStatus?: (status: BuildStatus) => void;
|
|
171
172
|
};
|
|
172
173
|
/**
|
|
@@ -562,6 +563,13 @@ type ResolveWebPreConfigParams = {
|
|
|
562
563
|
declare const resolveWebPreConfig: (params: ResolveWebPreConfigParams) => Promise<WebPreConfig>;
|
|
563
564
|
//#endregion
|
|
564
565
|
//#region src/node/shared/logger.d.ts
|
|
566
|
+
/**
|
|
567
|
+
* 日志系统
|
|
568
|
+
*
|
|
569
|
+
* 每次调用返回同一组方法,事件数组内聚在闭包内,避免模块级可变状态。
|
|
570
|
+
* 注意:多次调用 LoggerSystem() 会创建独立的事件数组。
|
|
571
|
+
* 如需共享状态,请在模块级缓存调用结果。
|
|
572
|
+
*/
|
|
565
573
|
declare const LoggerSystem: () => {
|
|
566
574
|
done: ({
|
|
567
575
|
text,
|
|
@@ -603,6 +611,22 @@ declare const LoggerSystem: () => {
|
|
|
603
611
|
eventArray: string[];
|
|
604
612
|
};
|
|
605
613
|
//#endregion
|
|
614
|
+
//#region src/node/shared/check-env.d.ts
|
|
615
|
+
/**
|
|
616
|
+
* 断言 Node.js 版本满足最低要求
|
|
617
|
+
*
|
|
618
|
+
* @param minMajor - 最低的主版本号
|
|
619
|
+
* @throws 当 Node.js 版本低于要求时终止进程
|
|
620
|
+
*/
|
|
621
|
+
declare function assertNodeVersion(minMajor: number): void;
|
|
622
|
+
/**
|
|
623
|
+
* 检查 Node.js 版本是否满足最低要求(不终止进程,抛出错误)
|
|
624
|
+
*
|
|
625
|
+
* @param minMajor - 最低的主版本号
|
|
626
|
+
* @throws Error 当 Node.js 版本低于要求时
|
|
627
|
+
*/
|
|
628
|
+
declare function checkNodeVersion(minMajor: number): void;
|
|
629
|
+
//#endregion
|
|
606
630
|
//#region src/node/bundler/rspack/rspack-runner.d.ts
|
|
607
631
|
type BuildStatus$1 = {
|
|
608
632
|
success: boolean;
|
|
@@ -673,4 +697,4 @@ declare class ViteAdapterLoader implements BundlerAdapter<unknown> {
|
|
|
673
697
|
runBuild(config: unknown, options: BundlerBuildOptions): Promise<string | undefined>;
|
|
674
698
|
}
|
|
675
699
|
//#endregion
|
|
676
|
-
export { type BuildStatus, Bundler, type BundlerAdapter, type BundlerBuildOptions, type BundlerDevOptions, Command, type CompileContext, type CompileOptions, type CompileServeParams, ConfigEnvPre, type CreateBundlerAdapterParams, type CreateConfigParams, CreateLoader, CreatePlugins, ElectronConfig, LoggerSystem, ModuleFederationOptions, type PackageJson, type PlatformAdapter, type PlatformCompileParams, type PlatformPreConfig, type ResolveWebPreConfigParams, RspackAdapter, UserConfig, UserConfigFn, UserConfigWebExport, ViteAdapterLoader, WebPlatformAdapter, type WebPreConfig, createBundlerAdapter, createCompileContext, createPlatformAdapter, defineConfig, extensions, resolveCLI, resolveWebPreConfig, runCompile, runRspackBuild, watchRspackBuild };
|
|
700
|
+
export { type BuildStatus, Bundler, type BundlerAdapter, type BundlerBuildOptions, type BundlerDevOptions, Command, type CompileContext, type CompileOptions, type CompileServeParams, ConfigEnvPre, type CreateBundlerAdapterParams, type CreateConfigParams, CreateLoader, CreatePlugins, ElectronConfig, LoggerSystem, ModuleFederationOptions, type PackageJson, type PlatformAdapter, type PlatformCompileParams, type PlatformPreConfig, type ResolveWebPreConfigParams, RspackAdapter, UserConfig, UserConfigFn, UserConfigWebExport, ViteAdapterLoader, WebPlatformAdapter, type WebPreConfig, assertNodeVersion, checkNodeVersion, createBundlerAdapter, createCompileContext, createPlatformAdapter, defineConfig, extensions, resolveCLI, resolveWebPreConfig, runCompile, runRspackBuild, watchRspackBuild };
|
package/dist/index.mjs
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import{createRequire as e}from"node:module";import{Option as t,program as n}from"commander";import{rspack as r}from"@rspack/core";import{isFunction as i,isString as a}from"es-toolkit";import o,{dirname as s,extname as c,join as l,resolve as u}from"node:path";import d,{join as f}from"path";import p,{pathToFileURL as m}from"node:url";import{isArray as h,isEmpty as g,isObject as _}from"es-toolkit/compat";import v from"chalk";import y from"fs/promises";import b from"node:os";import x from"pretty-bytes";import S from"easy-table";import C from"cli-cursor";import w from"node:process";import{RsdoctorRspackPlugin as T}from"@rsdoctor/rspack-plugin";import ee from"compression-webpack-plugin";import{ModuleFederationPlugin as E}from"@module-federation/enhanced/rspack";import te from"node:fs";import D,{readFile as ne}from"node:fs/promises";import{z as O}from"zod/v4";import k from"fs-extra";import{config as
|
|
1
|
+
import{createRequire as e}from"node:module";import{Option as t,program as n}from"commander";import{rspack as r}from"@rspack/core";import{isFunction as i,isString as a}from"es-toolkit";import o,{dirname as s,extname as c,join as l,resolve as u}from"node:path";import d,{join as f}from"path";import p,{pathToFileURL as m}from"node:url";import{isArray as h,isEmpty as g,isObject as _}from"es-toolkit/compat";import v from"chalk";import y from"fs/promises";import b from"node:os";import x from"pretty-bytes";import S from"easy-table";import C from"cli-cursor";import w from"node:process";import{RsdoctorRspackPlugin as T}from"@rsdoctor/rspack-plugin";import ee from"compression-webpack-plugin";import{ModuleFederationPlugin as E}from"@module-federation/enhanced/rspack";import te from"node:fs";import D,{readFile as ne}from"node:fs/promises";import{z as O}from"zod/v4";import k from"fs-extra";import{config as re}from"dotenv";import{parse as ie}from"yaml";import{transform as ae}from"oxc-transform";import{RspackDevServer as oe}from"@rspack/dev-server";import{detect as se}from"detect-port";var ce=`@ikaros-cli/ikaros`,A=`2.2.1`;const j=f(process.cwd(),`./`),M=[`...`,`.mjs`,`.jsx`,`.ts`,`.tsx`];f(j,`tsconfig.json`);const N=p.fileURLToPath(new p.URL(`../`,import.meta.url)),le=e(N),P=(...e)=>f(N,...e),F=(e,t)=>({loader:e.includes(`builtin`)?e:le.resolve(e),options:t}),ue=(e,t)=>{let{lightningcss:n,sourceMap:r}=t??{},i=F(`builtin:lightningcss-loader`,{...n}),a=(e,n)=>{let a=[i],o=t&&t[`${e}`];return e&&e!==`css`&&a.push(F(`${e}-loader`,Object.assign(o??{},n,{sourceMap:r}))),a};return{less:a(`less`),sass:a(`sass`,{sassOptions:{indentedSyntax:!0,api:`modern-compiler`}}),scss:a(`sass`,{sassOptions:{api:`modern-compiler`}}),stylus:a(`stylus`),styl:a(`stylus`),css:a(`css`)}},de=(e,t)=>{let n=ue(e,t);return Object.entries(n).map(([e,t])=>({test:RegExp(`\\.${e}$`),use:t,type:`css/auto`}))},fe={DONE:v.bgGreen.white,ERROR:v.bgRed.white,OKAY:v.bgBlue.white,WARNING:v.bgYellow.white,INFO:v.bgCyan.white},pe=(e,t)=>fe[e](` ${e} `)+` ${t}`,I=(e,t)=>({text:n,onlyText:r})=>{let i=pe(e,n);if(r)return i;t(i)},L=(()=>{let e=[],t={done:I(`DONE`,console.log),error:I(`ERROR`,console.error),okay:I(`OKAY`,console.log),warning:I(`WARNING`,console.warn),info:I(`INFO`,console.info),emitEvent:t=>{let n=new Date().toLocaleTimeString(`en-US`,{hour12:!1}).split(` `)[0];e.push(`[${n}] ${t}`)},clearEventArray:()=>{e.length=0},eventArray:e};return()=>t})(),R=(e,t)=>{let n=e,r=t;for(let e of Object.keys(r)){let t=r[e],i=n[e];_(t)&&_(i)?n[e]=R(i,t):n[e]=t}return e};async function z(e,t=process.cwd()){try{let n=f(t,`node_modules`,e);return await y.access(n,y.constants.F_OK),!0}catch(e){if(e.code===`ENOENT`)return!1;throw e}}var B=class{constructor({env:e=`development`,mode:t=``}){this.list=[],this.env=`development`,this.mode=``,this.isDev=!0,this.env=e,this.mode=t,this.isDev=e===`development`}add(e){return e&&(h(e)?this.list=this.list.concat(e):this.list.push(e)),this}end(){return this.list}},V=class extends B{constructor({env:e=`development`,mode:t=``}){super({env:e,mode:t}),this.defaultScriptLoader=e=>[{test:/\.m?ts$/i,loader:`builtin:swc-loader`,options:{jsc:{parser:{syntax:`typescript`}}},type:`javascript/auto`,exclude:[f(j,`node_modules`)]},{test:/\.m?js$/i,loader:`builtin:swc-loader`,options:{isModule:`unknown`,rspackExperiments:e},type:`javascript/auto`,exclude:[f(j,`node_modules`)]}],this.defaultResourceLoader=[{test:/\.(png|jpe?g|gif|svg|ico)(\?.*)?$/,type:`asset/resource`,generator:{filename:this.isDev?`[id][ext]`:`assets/img/[contenthash][ext]`}},{test:/\.(mp4|webm|ogg|mp3|wav|flac|aac)(\?.*)?$/,type:`asset/resource`,generator:{filename:this.isDev?`[id][ext]`:`assets/media/[contenthash][ext]`}},{test:/\.(woff2?|eot|ttf|otf)(\?.*)?$/,type:`asset/resource`,generator:{filename:this.isDev?`[id][ext]`:`assets/fonts/[contenthash][ext]`}}]}useDefaultCssLoader(e){return de(this.env,e).forEach(e=>this.add(e)),this}useDefaultScriptLoader(e){return this.add(this.defaultScriptLoader(e)),this}useDefaultResourceLoader(){return this.defaultResourceLoader.forEach(e=>this.add(e)),this}},H=class extends B{constructor({env:e=`development`,mode:t=``}){super({env:e,mode:t})}useDefaultEnvPlugin(e){let{frameworkEnv:t={},extEnv:n={},env:r={}}=e??{};return this.add(he({frameworkEnv:t,extEnv:n,env:r})),this}useCopyPlugin(){return this.env===`production`&&this.add(new r.CopyRspackPlugin({patterns:[{context:f(j,`public`),from:`./`,noErrorOnMissing:!0,globOptions:{ignore:[`**/index.html`,`.*`]}}]})),this}useHtmlPlugin(e){return this.add(new r.HtmlRspackPlugin({template:e??f(j,`index.html`)})),this}},me=class{constructor({pages:e,enablePages:t}){this.pages=e,this.enablePages=t,this.getEnablePages()}create(){let e={},t=[];return Object.keys(this.pages).forEach(n=>{e[n]={import:this.pages[n].entry,library:this.pages[n].library},t.push(new r.HtmlRspackPlugin({template:this.pages[n].html,filename:`${n}.html`,chunks:[n],scriptLoading:`blocking`,...this.pages[n].options}))}),{entry:e,plugins:t}}getEnablePages(){let{warning:e,emitEvent:t}=L();if(!g(this.pages)&&h(this.enablePages)){let n={},r=[];if(this.enablePages.forEach(e=>{this.pages[e]?n[e]=this.pages[e]:r.push(e)}),g(r)&&t(e({text:`当前设置页面${r.join()}不存在`,onlyText:!0})),g(n))return;this.pages=n}}};const he=({frameworkEnv:e={},extEnv:t={},env:n={}})=>{let i=Object.assign({},R(t,n)),a=Object.fromEntries(Object.entries(i).map(([e,t])=>[`import.meta.env.${e}`,JSON.stringify(t)])),o=Object.fromEntries(Object.entries({...a,...e}).map(([e,t])=>[e,t]));return new r.DefinePlugin(o)},U={name:ce,version:A},W=`@rspack/ikaros-stats-plugin`,G=v.hex(`#222222`);var ge=class{constructor(e){this.startCompileHrtime=void 0,this.userConfig=e}apply(e){this.compiler=e,this.isDev=e.options.mode===`development`,new r.ProgressPlugin().apply(e),C.hide(),this.isDev?this.initDevHook():this.initProdHook()}updateStartCompileTime(){this.startCompileHrtime=w.hrtime()}getCurrentEndCompileTime(){let e=w.hrtime(this.startCompileHrtime);return(e[0]*1e9+e[1])/1e6}getError(e){let{errors:t,errorsCount:n=0}=e;if(!(!t||n===0))return t.map(e=>`${G.bgRed(` ERROR `)} ${e.message.trim()}`).join(`
|
|
2
2
|
|
|
3
3
|
`)}getWarn(e){let{warnings:t,warningsCount:n=0}=e;if(!(!t||n===0))return t.map(e=>`${G.bgYellow(` WARN `)} ${e.message.trim()}`).join(`
|
|
4
4
|
|
|
5
5
|
`)}getEndTips(e,t){let{gray:n,cyan:r,red:i,green:a,yellow:o}=v,{errorsCount:s=-1,warningsCount:c=-1}=e,l=(t/1e3).toFixed(2);return n(s>0?`${r(U.name)} compiled with${i(` ${s} error`)}`:c>0?`compile ${a(`success`)} and with ${o(`${c} warning`)}, time: ${l}s`:`compile ${a(`success`)}, time: ${l}s.`)}getTableInfo(e){let{assets:t}=e;if(!t||t.length===0)return;let n=new S,r=this.userConfig?.build?.gzip??!1,i=0,a=0,o=!1;for(let e=0;e<t.length;e++){let{name:s,size:c,related:l,info:u}=t[e];if(u.development)continue;let d=r&&h(l)?l.find(e=>e.type===`gzipped`).size:0;if(i+=c,a+=d,t.length>20&&e>=4&&e<t.length-1-4){o||(o=!0,n.cell(`name`,`....`),n.cell(`size`,`....`),r&&n.cell(`gzip`,`....`),n.newRow());continue}n.cell(`name`,s),n.cell(`size`,x(c)),r&&n.cell(`gzip`,x(d)),n.newRow()}return n.pushDelimeter(),n.cell(`name`,`There are ${t.length} files`),n.cell(`size`,x(i)),r&&n.cell(`gzip`,x(a)),n.newRow(),v.cyan.dim(n.toString().trim())}getHostList(){let{userConfig:e,compiler:t}=this,{devServer:n}=t.options,r=n?.server===`https`||typeof n?.server==`object`,i=Number(n?.port),a=[],s=``,c=Object.values(b.networkInterfaces());if(e){s=e.build?.base??``,(!s||s===`auto`)&&(s=`/`);let t=Object.keys(e?.pages||{})[0];t&&t!==`index`?s=o.join(s,`${t}.html`):s.endsWith(`/`)||(s+=`/`)}for(let e of c){let{address:t}=e?.find(e=>e.family===`IPv4`)||{};t&&a.push(t)}a.sort((e,t)=>{let n=e.split(`.`),r=t.split(`.`);for(let[t]of n.entries())if(e[t]!==r[t])return Number(r[t])-Number(e[t]);return 0});let l=a.indexOf(`127.0.0.1`);return l!==-1&&(a.splice(l,1),a.unshift(`localhost`)),a=a.map(e=>(r?(e=`https://${e}`,i!==443&&(e=e+`:`+i)):(e=`http://`+e,i!==80&&(e=e+`:`+i)),new URL(s,e).href)),a}initDevHook(){let{compiler:e}=this,t=this.getHostList(),{blue:n,cyan:r,gray:i}=v;e.hooks.environment.intercept({name:W}),e.hooks.watchRun.intercept({name:W,call:()=>{this.updateStartCompileTime()}}),e.hooks.done.intercept({name:W,call:e=>{console.clear();let a=e.toJson({preset:`errors-warnings`,colors:!0}),{eventArray:o}=L(),{errorsCount:s=0,warningsCount:c=0}=a;if(s>0)console.log(this.getError(a)),console.log();else{c>0&&(console.log(this.getWarn(a)),console.log()),o.length>0&&(console.log(o.map(e=>e).join(`
|
|
6
|
-
`)),console.log());let{name:e,version:s}=U,l=`${r(`${e} v${s}`)} entry address:\n\n`;for(let e of t)l+=n(` ${e}\n`);console.log(i(l))}console.log(this.getEndTips(a,this.getCurrentEndCompileTime())),console.log()}})}initProdHook(){let{compiler:e}=this,t;e.hooks.environment.intercept({name:W,call:()=>{console.log(v.gray(`start build...`)),this.updateStartCompileTime()}}),e.hooks.done.intercept({name:W,call:e=>{t=e.toJson({preset:`normal`,colors:!0,assetsSort:`size`})}}),e.cache.hooks.shutdown.intercept({name:W,done:()=>{let{errorsCount:e=0,warningsCount:n=0}=t;console.log(),e>0?(console.log(this.getError(t)),console.log()):(n>0&&(console.log(this.getWarn(t)),console.log()),console.log(this.getTableInfo(t)),console.log()),console.log(this.getEndTips(t,this.getCurrentEndCompileTime()))}})}};const K=`@rspack/ikaros-cdn-plugin`,q=/:([a-z]+)/gi;var he=class{constructor(e){this.isDev=!1,this.options={prodUrl:`https://unpkg.com/:name@:version/:path`,devUrl:`:name/:path`,crossOrigin:!1,...e}}apply(e){this.compiler=e,this.isDev=e.options.mode===`development`,this.handleExternals(),e.hooks.compilation.tap(K,e=>{r.HtmlRspackPlugin.getCompilationHooks(e).alterAssetTags.tapAsync(K,(e,t)=>{try{this.injectResources(e),t(null,e)}catch(e){t(e)}})})}handleExternals(){let e=this.compiler.options.externals||{};this.options.modules.filter(e=>!e.cssOnly).forEach(t=>{e[t.name]=t.var||t.name}),this.compiler.options.externals=e}injectResources(e){let t=this.options.modules,n=[];t.forEach(e=>{this.getStyles(e).forEach(e=>{n.push({tagName:`link`,voidTag:!0,attributes:{rel:`stylesheet`,href:e,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),t.filter(e=>!e.cssOnly).forEach(e=>{this.getScripts(e).forEach(e=>{n.push({tagName:`script`,voidTag:!0,attributes:{src:e,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),e.assetTags&&(e.assetTags.styles.unshift(...n.filter(e=>e.tagName===`link`)),e.assetTags.scripts.unshift(...n.filter(e=>e.tagName===`script`)))}getStyles(e){let t=[...e.styles||[]];return e.style&&t.unshift(e.style),t.map(t=>this.generateUrl(e,t))}getScripts(e){let t=[...e.paths||[]];return e.path&&t.unshift(e.path),t.map(t=>this.generateUrl(e,t))}joinUrl(e,t){return e=e.replace(/\/+$/,``),t=t.replace(/^\/+/,``),`${e}/${t}`}generateUrl(e,t){let n=this.isDev?e.devUrl||this.options.devUrl:e.prodUrl||this.options.prodUrl;return n.match(q)?n.replace(q,(n,r)=>{switch(r){case`name`:return e.name;case`version`:return e.version||this.getModuleVersion(e.name);case`path`:return t;default:return n}}):this.joinUrl(n,t)}getModuleVersion(t){try{return e(d.join(process.cwd(),`node_modules`))(d.join(t,`package.json`)).version}catch{return console.warn(v.yellow(`[${K}] 无法获取模块 "${t}" 的版本信息`)),`latest`}}},ge=class{constructor(e){this.options=e}createSourceMapPlugin(){let{isDev:e,userConfig:t}=this.options;if(e)return new r.EvalSourceMapDevToolPlugin({columns:!1,module:!0});if(t?.build?.sourceMap??!1)return new r.SourceMapDevToolPlugin({test:[/.js/,/.mjs/],filename:`[file].map[query]`})}createCssExtractPlugin(){if(!this.options.isDev)return new r.CssExtractRspackPlugin({filename:this.joinAssetsDir(`assets/css/[contenthash].css`),ignoreOrder:!0})}createDoctorPlugin(){let{isDev:e,userConfig:t}=this.options;if(!(e||!t?.build?.outReport))return new T}createGzipPlugin(){let{isDev:e,userConfig:t}=this.options;if(!(e||!t?.build?.gzip))return new ee}createCdnPlugin(){let{cdnOptions:e}=this.options.userConfig??{};if(!(!e||g(e.modules)))return new he(e)}createModuleFederationPlugin(){let e=this.options.userConfig?.moduleFederation;if(e)return h(e)?e.map(e=>new E(e)):new E(e)}createDependencyCyclePlugin(){let{isDev:e,userConfig:t}=this.options;if(!(e||!t?.build?.dependencyCycleCheck))return new r.CircularDependencyRspackPlugin({exclude:/node_modules/,failOnError:!1})}joinAssetsDir(...e){return[this.options.assetsDir,...e].join(`/`).replace(/\/+/g,`/`)}};const J={target:O.enum([`pc`,`mobile`]).optional().default(`pc`),pages:O.custom().optional(),enablePages:O.union([O.array(O.string()),O.literal(!1)]).optional(),define:O.custom().optional(),build:O.object({base:O.string().optional().default(`/`),assetsDir:O.string().optional(),sourceMap:O.boolean().optional().default(!1),outDirName:O.string().optional().default(`dist`)}).optional(),resolve:O.object({alias:O.record(O.string(),O.string()).optional(),extensions:O.array(O.string()).optional()}).optional(),server:O.object({port:O.number().int().min(1024).max(65535).optional()}).optional(),electron:O.unknown().optional()},_e=O.object({bundler:O.custom().optional().default(`rspack`).refine(e=>e===`rspack`,{message:`bundler must be 'rspack' for rspack config`}),...J,moduleFederation:O.union([O.custom(),O.array(O.custom())]).optional(),plugins:O.union([O.custom(),O.array(O.custom())]).optional(),loaders:O.array(O.custom()).optional(),experiments:O.custom().optional(),cdnOptions:O.custom().optional(),server:O.object({port:O.number().int().min(1024).max(65535).optional(),proxy:O.custom().optional(),https:O.union([O.boolean(),O.record(O.string(),O.unknown())]).optional().default(!1)}).optional(),css:O.object({lightningcssOptions:O.record(O.string(),O.unknown()).optional(),sourceMap:O.boolean().optional(),lessOptions:O.record(O.string(),O.unknown()).optional(),sassOptions:O.record(O.string(),O.unknown()).optional(),stylusOptions:O.record(O.string(),O.unknown()).optional()}).optional(),build:O.object({base:O.string().optional().default(`/`),assetsDir:O.string().optional(),gzip:O.boolean().optional().default(!1),sourceMap:O.boolean().optional().default(!1),outDirName:O.string().optional().default(`dist`),outReport:O.boolean().optional().default(!1),cache:O.boolean().optional().default(!1),dependencyCycleCheck:O.boolean().optional().default(!1)}).optional()}),ve=O.object({bundler:O.literal(`vite`),...J,server:O.object({port:O.number().int().min(1024).max(65535).optional(),proxy:O.record(O.string(),O.unknown()).optional(),https:O.union([O.boolean(),O.record(O.string(),O.unknown())]).optional()}).optional(),vite:O.object({plugins:O.unknown().optional()}).strict().optional()}).passthrough().superRefine((e,t)=>{for(let n of[`plugins`,`loaders`,`experiments`,`cdnOptions`,`moduleFederation`,`css`]){let r=e;n in r&&r[n]!==void 0&&t.addIssue({code:O.ZodIssueCode.custom,path:[n],message:`bundler='vite' 时不支持 ${String(n)},请使用 vite.plugins 或 Vite 原生配置能力`})}}),Y=O.union([ve,_e]),X=(e,t)=>t?f(e,`env`,`.env.${t}`):f(e,`env`,`.env`),ye=async(e,t)=>{let{warning:n,emitEvent:r}=L();if(!await k.pathExists(f(e,`env`)))return r(n({text:`env folder not found`,onlyText:!0})),!1;if(t){if(!await k.pathExists(X(e,t)))return r(n({text:`.env.${t} file not found`,onlyText:!0})),!1}else return await k.pathExists(X(e))?!0:(r(n({text:`.env file not found`,onlyText:!0})),!1);return!0},be=async(e,t)=>await ye(e,t)?t?A({path:X(e,t),quiet:!0}).parsed??{}:A({path:X(e),quiet:!0}).parsed??{}:{};async function xe(e,t){let{code:n,errors:r}=await ie(e,await ne(e,`utf-8`),{lang:t?`ts`:`js`});if(r.length>0)throw Error(`Transformation failed: `+r.map(e=>e.message).join(`, `));return{code:n}}async function Se(e,t){let n=`${e}.timestamp-${Date.now()}-${Math.random().toString(16).slice(2)}`,r=`${n}.mjs`,i=`${m(n)}.mjs`;await D.writeFile(r,t);try{return(await import(i)).default}finally{await D.unlink(r)}}async function Ce(e,t=!1){let{code:n}=await xe(e,t);return Se(e,n)}const Z=new Map;Z.set(`.mjs`,async e=>(await import(m(e).href)).default),Z.set(`.ts`,async e=>await Ce(e,!0)),Z.set(`.json`,async e=>await k.readJson(e)),Z.set(`.yaml`,async e=>re(await D.readFile(e,`utf8`)));async function we({configFile:e,context:t}){let n,r=t??process.cwd(),i=`ikaros.config`,a=[`ts`,`mjs`,`json`,`yaml`].map(e=>`${l(r,i)}.${e}`),o=(await Promise.all(a.map(e=>k.pathExists(e)))).findIndex(Boolean);if(!(o<0)){if(n=c(a[o]),r=u(r,`${i}${n}`),e&&(r=s(e),n=c(e)),!Z.has(n))throw Error(`No configuration file ! `);return Z.get(n)(r)}}let Q=function(e){return e.SERVER=`server`,e.BUILD=`build`,e}({});async function Te(t){let{command:n,options:r,configFile:i,onBuildStatus:a}=t,o=process.cwd(),s=e(l(o,`./`)),c=(...e)=>l(o,...e),u=e=>s(e),d=e=>{try{return s.resolve(e)}catch{return}},f=await Ee(c),p=await De(r,o);return{context:o,command:n,options:r,env:p,userConfig:await Oe({configFile:i,context:o,options:r,env:p,command:n}),contextPkg:f,resolveContext:c,loadContextModule:u,resolveContextModule:d,contextRequire:s,isElectron:r.platform===`desktopClient`,configFile:i,onBuildStatus:a}}async function Ee(e){let t=e(`package.json`);try{await D.access(t,te.constants.F_OK)}catch{return}return JSON.parse(await D.readFile(t,{encoding:`utf8`}))}async function De(e,t){let{platform:n,mode:r}=e,i={PLATFORM:n,MODE:r},a=await be(t,r);return{...i,...a}}async function Oe(e){let{configFile:t,context:n,options:r,env:a,command:o}=e,s=await we({configFile:t,context:n});if(s){if(i(s)){let e={mode:r.mode??``,env:{...a,PLATFORM:r.platform,MODE:r.mode??a?.MODE},command:o};return Y.parse(await s(e))}if(_(s))return Y.parse(s)}}const ke=e=>{let{isVue:t,isReact:n}=e;return t?{noParse:/^(vue|vue-router|vuex|vuex-router-sync)$/,env:{__VUE_OPTIONS_API__:!0,__VUE_PROD_DEVTOOLS__:!1,__VUE_PROD_HYDRATION_MISMATCH_DETAILS__:!1}}:n?{noParse:e=>/(react|react-dom|react-is)\.production\.min\.js$/.test(e),env:{REACT_APP_ENABLE_DEVTOOLS:!1}}:{env:void 0,noParse:void 0}},Ae=e=>e===Q.SERVER?{minimize:!1,removeAvailableModules:!1,removeEmptyChunks:!1,splitChunks:!1}:{minimize:!0,minimizer:[new r.LightningCssMinimizerRspackPlugin,new r.SwcJsMinimizerRspackPlugin],splitChunks:{chunks:`all`,minSize:3e4,minChunks:1,maxAsyncRequests:5,maxInitialRequests:3,cacheGroups:{vendor:{test:/[\\/]node_modules[\\/]/,name:`vendors`,priority:10,chunks:`all`},common:{name:`common`,minChunks:2,priority:5,reuseExistingChunk:!0}}}},je=e=>{if(e.command!==Q.SERVER&&e.userConfig?.build?.cache)return{cache:!0,experiments:{cache:{type:`persistent`}}}},Me=e=>{let{userConfig:t,isElectron:n,resolveContext:r}=e,i=t?.build?.outDirName;if(n){let e=t?.electron,n=r(`dist/electron/renderer`);return e?.build?.outDir?l(r(e.build.outDir),`renderer`):n}return a(i)?r(i):r(`dist`)},Ne=(e,t)=>[e,t].filter(Boolean).join(`/`).replace(/\/+/g,`/`),Pe=e=>{let{command:t,mode:n,env:r,context:i,contextPkg:a,userConfig:o,pages:s,browserslist:c,base:u,port:d,isElectron:f,resolveContext:p}=e,m=t===Q.SERVER,h=m?`development`:`production`,g=new V({env:h,mode:n}),_=new H({env:h,mode:n}),{entry:v,plugins:y}=new fe({pages:s,enablePages:o?.enablePages}).create(),{env:b,noParse:x}=ke({isVue:e.isVue,isReact:e.isReact}),S=g.useDefaultResourceLoader().useDefaultScriptLoader(o?.experiments).useDefaultCssLoader(o?.css).add(o?.loaders).end(),C=o?.build?.assetsDir??``,w=new ge({command:t,userConfig:o,isDev:m,assetsDir:C}),T=_.useDefaultEnvPlugin({extEnv:{...o?.define},frameworkEnv:b,env:r}).useCopyPlugin().add(y).add(new me).add(w.createSourceMapPlugin()).add(w.createCssExtractPlugin()).add(w.createDoctorPlugin()).add(w.createGzipPlugin()).add(w.createCdnPlugin()).add(w.createModuleFederationPlugin()).add(w.createDependencyCyclePlugin()).add(o?.plugins).end();return{mode:h,context:i,entry:v,target:f?`electron-renderer`:[`web`,`es2015`,`browserslist:${c}`],resolve:{alias:{"@":p(`src`),...o?.resolve?.alias},extensions:o?.resolve?.extensions||M,modules:[`node_modules`,p(`node_modules`),P(`node_modules`)]},output:{clean:!0,path:Me({userConfig:o,isElectron:f,resolveContext:p}),publicPath:f&&!m?`./`:u,filename:m?`[name].[contenthash:8].js`:Ne(C,`assets/js/[contenthash:8].js`),chunkFilename:m?`[name].[contenthash:8].chunk.js`:Ne(C,`assets/js/[contenthash:8].chunk.js`),chunkLoadingGlobal:`${a?.name||`ikaros`}_chunk`,pathinfo:!1},optimization:Ae(t),stats:`none`,watchOptions:{aggregateTimeout:500,ignored:/node_modules/},module:{rules:S,noParse:x},plugins:T,devServer:{hot:!0,port:d,server:(()=>{let e=o?.server?.https;return e?e===!0?`https`:{type:`https`,options:e}:`http`})(),allowedHosts:`all`,proxy:o?.server?.proxy,historyApiFallback:{disableDotRule:!0,rewrites:[{from:/\.(js|css|json|png|jpe?g|gif|svg|ico|woff2?|eot|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|map)(\?.*)?$/,to:e=>e.parsedUrl.pathname},{from:RegExp(`^${u}`),to:l(u,`index.html`)}]},headers:{"Access-Control-Allow-Origin":`*`},static:{directory:p(`public`),publicPath:u},client:{logging:`none`,overlay:{errors:!0,warnings:!1,runtimeErrors:!1},webSocketURL:`auto://0.0.0.0:${d}/ws`}},experiments:{css:!0},...je({command:t,userConfig:o})}},Fe=e=>{let t=`Build failed with errors.
|
|
7
|
-
`;return e.toString({chunks:!1,colors:!0}).split(/\r?\n/).forEach(e=>{t+=` ${e}\n`}),t},
|
|
8
|
-
`))}
|
|
9
|
-
`))};var He=class{constructor(e){this.name=`vite`,this.loadContextModule=e.loadContextModule}ensureAdapter(){if(this.adapter)return this.adapter;let e=Number(process.versions.node.split(`.`)[0]);if(Number.isFinite(e)&&e<22)throw Ve();try{let e=this.loadContextModule(`@ikaros-cli/ikaros-bundler-vite`),t=(e.default??e).ViteBundlerAdapter;if(typeof t!=`function`)throw Be();return this.adapter=new t,this.adapter}catch(e){throw e instanceof Error&&e.message.includes(`bundler='vite'`)?e:Be()}}createConfig(e){return this.ensureAdapter().createConfig(e)}async runDev(e,t){return this.ensureAdapter().runDev(e,t)}async runBuild(e,t){return this.ensureAdapter().runBuild(e,t)}};function Ue(e){let{bundler:t,loadContextModule:n}=e;switch(t){case`vite`:return new He({loadContextModule:n});default:return new ze}}const We=e=>{let t=e===`mobile`,n=[`defaults`];return t?n.push(`IOS >= 16`,`Chrome >= 80`):n.push(`>0.2%`,`Chrome >= 90`,`Safari >= 16`,`last 2 versions`,`not dead`),n.join(`,`)},Ge=(e,t)=>t?{index:{html:e(`src/renderer/index.html`),entry:e(`src/renderer/index`)}}:{index:{html:e(`index.html`),entry:e(`src/index`)}},Ke=async e=>{let{command:t,context:n,resolveContext:r,getUserConfig:i,isElectron:a}=e,o=await i(),s=o?.build?.base??`/`;if(t===Q.SERVER&&/^https?:/.test(s)){let e=v.cyan(`build.base`);throw Error(`本地开发时 ${e} 不应该为外部 Host!`)}let c=o?.target??`pc`,l=o?.pages??Ge(r,!!a),u=o?.server?.port??await oe(`8080`),d=!1,f=!1;try{let[e,t]=await Promise.all([z(`react`,n),z(`vue`,n)]);d=t,f=e}catch{}return{userConfig:o,base:s,target:c,pages:l,port:u,browserslist:We(c),isVue:d,isReact:f}};var qe=class{constructor(){this.name=`web`}async resolvePreConfig(e){return Ke({command:e.command,context:e.context,resolveContext:e.resolveContext,getUserConfig:async()=>e.userConfig,isElectron:e.isElectron})}async compile(e,t){let{command:n,preConfig:r,compileContext:i}=t,a=await e.createConfig({command:n,mode:i.options.mode,env:i.env,context:i.context,contextPkg:i.contextPkg,userConfig:r.userConfig,pages:r.pages,base:r.base,port:r.port,browserslist:r.browserslist,isElectron:i.isElectron,isVue:r.isVue,isReact:r.isReact,resolveContext:i.resolveContext});n===`server`?await e.runDev(a,{port:r.port,onBuildStatus:i.onBuildStatus}):await e.runBuild(a,{onBuildStatus:i.onBuildStatus})}};function Je(e){switch(e){case`desktopClient`:return Ye();default:return new qe}}function Ye(){let e,t=async()=>e||(e=await Xe(),e);return{name:`desktopClient`,async resolvePreConfig(e){return(await t()).resolvePreConfig(e)},async compile(e,n){return(await t()).compile(e,n)}}}async function Xe(){let t=`@ikaros-cli/ikaros-platform-desktop-client`,n=e=>{let n=[`你启用了 platform='desktopClient',但未安装可选依赖 ${t}。`,``,`请安装后重试:`,` pnpm add -D ${t}`];if(e){let t=e instanceof Error?e.message:String(e);n.push(``,`原始错误: ${t}`)}return Error(n.join(`
|
|
6
|
+
`)),console.log());let{name:e,version:s}=U,l=`${r(`${e} v${s}`)} entry address:\n\n`;for(let e of t)l+=n(` ${e}\n`);console.log(i(l))}console.log(this.getEndTips(a,this.getCurrentEndCompileTime())),console.log()}})}initProdHook(){let{compiler:e}=this,t;e.hooks.environment.intercept({name:W,call:()=>{console.log(v.gray(`start build...`)),this.updateStartCompileTime()}}),e.hooks.done.intercept({name:W,call:e=>{t=e.toJson({preset:`normal`,colors:!0,assetsSort:`size`})}}),e.cache.hooks.shutdown.intercept({name:W,done:()=>{let{errorsCount:e=0,warningsCount:n=0}=t;console.log(),e>0?(console.log(this.getError(t)),console.log()):(n>0&&(console.log(this.getWarn(t)),console.log()),console.log(this.getTableInfo(t)),console.log()),console.log(this.getEndTips(t,this.getCurrentEndCompileTime()))}})}};const K=`@rspack/ikaros-cdn-plugin`,_e=/:([a-z]+)/gi;function ve(e){return e.filter(e=>!e.cssOnly).reduce((e,t)=>(e[t.name]=t.var||t.name,e),{})}var ye=class{constructor(e){this.isDev=!1,this.versionCache=new Map,this.options={prodUrl:`https://unpkg.com/:name@:version/:path`,devUrl:`:name/:path`,crossOrigin:!1,...e}}apply(e){this.isDev=e.options.mode===`development`,e.hooks.compilation.tap(K,e=>{r.HtmlRspackPlugin.getCompilationHooks(e).alterAssetTags.tapAsync(K,(e,t)=>{try{this.injectResources(e),t(null,e)}catch(e){t(e)}})})}injectResources(e){let t=this.options.modules,n=[];t.forEach(e=>{this.getStyles(e).forEach(e=>{n.push({tagName:`link`,voidTag:!0,attributes:{rel:`stylesheet`,href:e,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),t.filter(e=>!e.cssOnly).forEach(e=>{this.getScripts(e).forEach(e=>{n.push({tagName:`script`,voidTag:!0,attributes:{src:e,...this.options.crossOrigin&&{crossorigin:this.options.crossOrigin}}})})}),e.assetTags&&(e.assetTags.styles.unshift(...n.filter(e=>e.tagName===`link`)),e.assetTags.scripts.unshift(...n.filter(e=>e.tagName===`script`)))}getStyles(e){let t=[...e.styles||[]];return e.style&&t.unshift(e.style),t.map(t=>this.generateUrl(e,t))}getScripts(e){let t=[...e.paths||[]];return e.path&&t.unshift(e.path),t.map(t=>this.generateUrl(e,t))}joinUrl(e,t){return e=e.replace(/\/+$/,``),t=t.replace(/^\/+/,``),`${e}/${t}`}generateUrl(e,t){let n=this.isDev?e.devUrl||this.options.devUrl:e.prodUrl||this.options.prodUrl;return n.match(_e)?n.replace(_e,(n,r)=>{switch(r){case`name`:return e.name;case`version`:return e.version||this.getModuleVersion(e.name);case`path`:return t;default:return n}}):this.joinUrl(n,t)}getModuleVersion(t){let n=this.versionCache.get(t);if(n)return n;try{let n=e(d.join(process.cwd(),`node_modules`))(d.join(t,`package.json`)).version;return this.versionCache.set(t,n),n}catch{return console.warn(v.yellow(`[${K}] 无法获取模块 "${t}" 的版本信息`)),`latest`}}},be=class{constructor(e){this.options=e}createSourceMapPlugin(){let{isDev:e,userConfig:t}=this.options;if(e)return new r.EvalSourceMapDevToolPlugin({columns:!1,module:!0});if(t?.build?.sourceMap??!1)return new r.SourceMapDevToolPlugin({test:[/.js/,/.mjs/],filename:`[file].map[query]`})}createCssExtractPlugin(){if(!this.options.isDev)return new r.CssExtractRspackPlugin({filename:this.joinAssetsDir(`assets/css/[contenthash].css`),ignoreOrder:!0})}createDoctorPlugin(){let{isDev:e,userConfig:t}=this.options;if(!(e||!t?.build?.outReport))return new T}createGzipPlugin(){let{isDev:e,userConfig:t}=this.options;if(!(e||!t?.build?.gzip))return new ee}createCdnPlugin(){let{cdnOptions:e}=this.options.userConfig??{};if(!(!e||g(e.modules)))return new ye(e)}createModuleFederationPlugin(){let e=this.options.userConfig?.moduleFederation;if(e)return h(e)?e.map(e=>new E(e)):new E(e)}createDependencyCyclePlugin(){let{isDev:e,userConfig:t}=this.options;if(!(e||!t?.build?.dependencyCycleCheck))return new r.CircularDependencyRspackPlugin({exclude:/node_modules/,failOnError:!1})}joinAssetsDir(...e){return[this.options.assetsDir,...e].join(`/`).replace(/\/+/g,`/`)}};const q={target:O.enum([`pc`,`mobile`]).optional().default(`pc`),pages:O.custom().optional(),enablePages:O.union([O.array(O.string()),O.literal(!1)]).optional(),define:O.custom().optional(),build:O.object({base:O.string().optional().default(`/`),assetsDir:O.string().optional(),sourceMap:O.boolean().optional().default(!1),outDirName:O.string().optional().default(`dist`)}).optional(),resolve:O.object({alias:O.record(O.string(),O.string()).optional(),extensions:O.array(O.string()).optional()}).optional(),server:O.object({port:O.number().int().min(1024).max(65535).optional()}).optional(),electron:O.unknown().optional()},xe=O.object({bundler:O.custom().optional().default(`rspack`).refine(e=>e===`rspack`,{message:`bundler must be 'rspack' for rspack config`}),...q,moduleFederation:O.union([O.custom(),O.array(O.custom())]).optional(),plugins:O.union([O.custom(),O.array(O.custom())]).optional(),loaders:O.array(O.custom()).optional(),experiments:O.custom().optional(),cdnOptions:O.custom().optional(),server:O.object({port:O.number().int().min(1024).max(65535).optional(),proxy:O.custom().optional(),https:O.union([O.boolean(),O.record(O.string(),O.unknown())]).optional().default(!1)}).optional(),css:O.object({lightningcssOptions:O.record(O.string(),O.unknown()).optional(),sourceMap:O.boolean().optional(),lessOptions:O.record(O.string(),O.unknown()).optional(),sassOptions:O.record(O.string(),O.unknown()).optional(),stylusOptions:O.record(O.string(),O.unknown()).optional()}).optional(),build:O.object({base:O.string().optional().default(`/`),assetsDir:O.string().optional(),gzip:O.boolean().optional().default(!1),sourceMap:O.boolean().optional().default(!1),outDirName:O.string().optional().default(`dist`),outReport:O.boolean().optional().default(!1),cache:O.boolean().optional().default(!1),dependencyCycleCheck:O.boolean().optional().default(!1)}).optional()}),Se=O.object({bundler:O.literal(`vite`),...q,server:O.object({port:O.number().int().min(1024).max(65535).optional(),proxy:O.record(O.string(),O.unknown()).optional(),https:O.union([O.boolean(),O.record(O.string(),O.unknown())]).optional()}).optional(),vite:O.object({plugins:O.unknown().optional()}).strict().optional()}).passthrough().superRefine((e,t)=>{for(let n of[`plugins`,`loaders`,`experiments`,`cdnOptions`,`moduleFederation`,`css`]){let r=e;n in r&&r[n]!==void 0&&t.addIssue({code:O.ZodIssueCode.custom,path:[n],message:`bundler='vite' 时不支持 ${String(n)},请使用 vite.plugins 或 Vite 原生配置能力`})}}),J=O.union([Se,xe]),Y=(e,t)=>t?f(e,`env`,`.env.${t}`):f(e,`env`,`.env`),Ce=async(e,t)=>{let{warning:n,emitEvent:r}=L();if(!await k.pathExists(f(e,`env`)))return r(n({text:`env folder not found`,onlyText:!0})),!1;if(t){if(!await k.pathExists(Y(e,t)))return r(n({text:`.env.${t} file not found`,onlyText:!0})),!1}else return await k.pathExists(Y(e))?!0:(r(n({text:`.env file not found`,onlyText:!0})),!1);return!0},we=async(e,t)=>await Ce(e,t)?t?re({path:Y(e,t),quiet:!0}).parsed??{}:re({path:Y(e),quiet:!0}).parsed??{}:{};async function Te(e,t){let{code:n,errors:r}=await ae(e,await ne(e,`utf-8`),{lang:t?`ts`:`js`});if(r.length>0)throw Error(`Transformation failed: `+r.map(e=>e.message).join(`, `));return{code:n}}async function Ee(e,t){let n=`${e}.timestamp-${Date.now()}-${Math.random().toString(16).slice(2)}`,r=`${n}.mjs`,i=`${m(n)}.mjs`;await D.writeFile(r,t);try{return(await import(i)).default}finally{await D.unlink(r)}}async function De(e,t=!1){let{code:n}=await Te(e,t);return Ee(e,n)}const X=new Map;X.set(`.mjs`,async e=>(await import(m(e).href)).default),X.set(`.ts`,async e=>await De(e,!0)),X.set(`.json`,async e=>await k.readJson(e)),X.set(`.yaml`,async e=>ie(await D.readFile(e,`utf8`)));async function Oe({configFile:e,context:t}){let n,r=t??process.cwd(),i=`ikaros.config`,a=[`ts`,`mjs`,`json`,`yaml`].map(e=>`${l(r,i)}.${e}`),o=(await Promise.all(a.map(e=>k.pathExists(e)))).findIndex(Boolean);if(!(o<0)){if(n=c(a[o]),r=u(r,`${i}${n}`),e&&(r=s(e),n=c(e)),!X.has(n))throw Error(`No configuration file ! `);return X.get(n)(r)}}let Z=function(e){return e.SERVER=`server`,e.BUILD=`build`,e}({});async function ke(t){let{command:n,options:r,configFile:i,onBuildStatus:a}=t,o=t.context??process.cwd(),s=e(l(o,`./`)),c=(...e)=>l(o,...e),u=e=>s(e),d=e=>{try{return s.resolve(e)}catch{return}},f=await Ae(c),p=await je(r,o);return{context:o,command:n,options:r,env:p,userConfig:await Me({configFile:i,context:o,options:r,env:p,command:n}),contextPkg:f,resolveContext:c,loadContextModule:u,resolveContextModule:d,contextRequire:s,isElectron:r.platform===`desktopClient`,configFile:i,onBuildStatus:a}}async function Ae(e){let t=e(`package.json`);try{await D.access(t,te.constants.F_OK)}catch{return}return JSON.parse(await D.readFile(t,{encoding:`utf8`}))}async function je(e,t){let{platform:n,mode:r}=e,i={PLATFORM:n,MODE:r},a=await we(t,r);return{...i,...a}}async function Me(e){let{configFile:t,context:n,options:r,env:a,command:o}=e,s=await Oe({configFile:t,context:n});if(s){if(i(s)){let e={mode:r.mode??``,env:{...a,PLATFORM:r.platform,MODE:r.mode??a?.MODE},command:o};return J.parse(await s(e))}if(_(s))return J.parse(s)}}const Ne=e=>{let{isVue:t,isReact:n}=e;return t?{noParse:/^(vue|vue-router|vuex|vuex-router-sync)$/}:n?{noParse:e=>/(react|react-dom|react-is)\.production\.min\.js$/.test(e),env:{REACT_APP_ENABLE_DEVTOOLS:!1}}:{env:void 0,noParse:void 0}},Pe=e=>e===Z.SERVER?{minimize:!1,removeAvailableModules:!1,removeEmptyChunks:!1,splitChunks:!1}:{minimize:!0,minimizer:[new r.LightningCssMinimizerRspackPlugin,new r.SwcJsMinimizerRspackPlugin],splitChunks:{chunks:`all`,minSize:3e4,minChunks:1,maxAsyncRequests:5,maxInitialRequests:3,cacheGroups:{vendor:{test:/[\\/]node_modules[\\/]/,name:`vendors`,priority:10,chunks:`all`},common:{name:`common`,minChunks:2,priority:5,reuseExistingChunk:!0}}}},Fe=e=>{if(e.command!==Z.SERVER&&e.userConfig?.build?.cache)return{cache:!0,experiments:{cache:{type:`persistent`}}}},Ie=e=>{let{userConfig:t,isElectron:n,resolveContext:r}=e,i=t?.build?.outDirName;if(n){let e=t?.electron,n=r(`dist/electron/renderer`);return e?.build?.outDir?l(r(e.build.outDir),`renderer`):n}return a(i)?r(i):r(`dist`)},Q=(e,t)=>[e,t].filter(Boolean).join(`/`).replace(/\/+/g,`/`),Le=e=>{let{command:t,mode:n,env:r,context:i,contextPkg:a,userConfig:o,pages:s,browserslist:c,base:u,port:d,isElectron:f,resolveContext:p}=e,m=t===Z.SERVER,h=m?`development`:`production`,g=new V({env:h,mode:n}),_=new H({env:h,mode:n}),{entry:v,plugins:y}=new me({pages:s,enablePages:o?.enablePages}).create(),{env:b,noParse:x}=Ne({isVue:e.isVue,isReact:e.isReact}),S=g.useDefaultResourceLoader().useDefaultScriptLoader(o?.experiments).useDefaultCssLoader(o?.css).add(o?.loaders).end(),C=o?.build?.assetsDir??``,w=new be({command:t,userConfig:o,isDev:m,assetsDir:C}),T=_.useDefaultEnvPlugin({extEnv:{...o?.define},frameworkEnv:b,env:r}).useCopyPlugin().add(y).add(new ge).add(w.createSourceMapPlugin()).add(w.createCssExtractPlugin()).add(w.createDoctorPlugin()).add(w.createGzipPlugin()).add(w.createCdnPlugin()).add(w.createModuleFederationPlugin()).add(w.createDependencyCyclePlugin()).add(o?.plugins).end();return{mode:h,context:i,entry:v,target:f?`electron-renderer`:[`web`,`es2015`,`browserslist:${c}`],externals:o?.cdnOptions?.modules?ve(o.cdnOptions.modules):void 0,resolve:{alias:{"@":p(`src`),...o?.resolve?.alias},extensions:o?.resolve?.extensions||M,modules:[`node_modules`,p(`node_modules`),P(`node_modules`)]},output:{clean:!m,path:Ie({userConfig:o,isElectron:f,resolveContext:p}),publicPath:f&&!m?`./`:u,filename:m?`[name].js`:Q(C,`assets/js/[contenthash:8].js`),chunkFilename:m?`[name].chunk.js`:Q(C,`assets/js/[contenthash:8].chunk.js`),cssFilename:m?`[name].css`:Q(C,`assets/css/[contenthash:8].css`),cssChunkFilename:m?`[name].chunk.css`:Q(C,`assets/css/[contenthash:8].chunk.css`),chunkLoadingGlobal:`${a?.name||`ikaros`}_chunk`,pathinfo:!1},optimization:Pe(t),stats:`none`,watchOptions:{aggregateTimeout:500,ignored:/node_modules/},module:{rules:S,noParse:x},plugins:T,devServer:{hot:!0,port:d,server:(()=>{let e=o?.server?.https;return e?e===!0?`https`:{type:`https`,options:e}:`http`})(),allowedHosts:`all`,proxy:o?.server?.proxy,historyApiFallback:{rewrites:[{from:/\.(js|css|json|png|jpe?g|gif|svg|ico|woff2?|eot|ttf|otf|mp4|webm|ogg|mp3|wav|flac|aac|map)(\?.*)?$/,to:e=>e.parsedUrl.pathname},{from:RegExp(`^${u}`),to:l(u,`index.html`)}]},headers:{"Access-Control-Allow-Origin":`*`},static:{directory:p(`public`),publicPath:u},client:{logging:`none`,overlay:{errors:!0,warnings:!1,runtimeErrors:!1},webSocketURL:`auto://0.0.0.0:${d}/ws`}},experiments:{css:!0},...Fe({command:t,userConfig:o})}},Re=e=>{let t=`Build failed with errors.
|
|
7
|
+
`;return e.toString({chunks:!1,colors:!0}).split(/\r?\n/).forEach(e=>{t+=` ${e}\n`}),t},ze=(e,t)=>{let{onBuildStatus:n}=t??{};return new Promise((t,i)=>{let a=r(e);a.run((e,r)=>{a.close(a=>{let o=e||a;if(o)return n?.({success:!1,message:o.message||`build error`}),i(o);if(r?.hasErrors()){let e=Re(r);return n?.({success:!1,message:e}),i(Error(e))}let s=r?.toString({chunks:!1,colors:!0});return n?.({success:!0,message:s}),t(s)})})})},Be=async(e,t)=>{let{port:n,onBuildStatus:i}=t??{},a=r(e),o=new oe(e.devServer,a);await new Promise((e,t)=>{o.startCallback(r=>r?(i?.({success:!1,port:n,message:r.message}),t(r)):(i?.({success:!0,port:n}),e()))})},Ve=(e,t)=>{let{onBuildStatus:n,...i}=t??{};return new Promise((t,a)=>{r(e).watch({ignored:/node_modules/,aggregateTimeout:300,poll:!1,...i},(e,r)=>{if(e)return n?.({success:!1,message:e.message||`watch build error`}),a(e);if(r?.hasErrors()){let e=Re(r);return n?.({success:!1,message:e}),a(Error(e))}let i=r?.toString({chunks:!1,colors:!0});return n?.({success:!0,message:i}),t(i)})})};var He=class{constructor(){this.name=`rspack`}createConfig(e){return Le({command:e.command===`server`?Z.SERVER:Z.BUILD,mode:e.mode,env:e.env,context:e.context,contextPkg:e.contextPkg,userConfig:e.userConfig,pages:e.pages,browserslist:e.browserslist,base:e.base,port:e.port,isElectron:e.isElectron,isVue:e.isVue,isReact:e.isReact,resolveContext:e.resolveContext})}async runDev(e,t){await Be(e,{port:t.port,onBuildStatus:t.onBuildStatus})}async runBuild(e,t){return ze(e,{onBuildStatus:t.onBuildStatus})}};function Ue(e){let t=Number(process.versions.node.split(`.`)[0]);if(Number.isFinite(t)&&t<e){let t=v.bgRed.white(` ERROR `);process.stderr.write(`${t} Node.js version must be greater than or equal to v${e}! (current: v${process.versions.node})\n\n`),process.exit(1)}}function We(e){let t=Number(process.versions.node.split(`.`)[0]);if(Number.isFinite(t)&&t<e)throw Error(`Node.js >= ${e} is required (current: v${process.versions.node})`)}const Ge=()=>{let e=`@ikaros-cli/ikaros-bundler-vite`,t=[`你启用了 bundler='vite',但未安装可选依赖 ${e}。`,``,`请安装后重试:`,` pnpm add -D ${e}`];return Error(t.join(`
|
|
8
|
+
`))};var Ke=class{constructor(e){this.name=`vite`,this.loadContextModule=e.loadContextModule}ensureAdapter(){if(this.adapter)return this.adapter;We(22);try{let e=this.loadContextModule(`@ikaros-cli/ikaros-bundler-vite`),t=(e.default??e).ViteBundlerAdapter;if(typeof t!=`function`)throw Ge();return this.adapter=new t,this.adapter}catch(e){throw e instanceof Error&&e.message.includes(`bundler='vite'`)?e:Ge()}}createConfig(e){return this.ensureAdapter().createConfig(e)}async runDev(e,t){return this.ensureAdapter().runDev(e,t)}async runBuild(e,t){return this.ensureAdapter().runBuild(e,t)}};function qe(e){let{bundler:t,loadContextModule:n}=e;switch(t){case`vite`:return new Ke({loadContextModule:n});default:return new He}}const Je=e=>{let t=e===`mobile`,n=[`defaults`];return t?n.push(`IOS >= 16`,`Chrome >= 80`):n.push(`>0.2%`,`Chrome >= 90`,`Safari >= 16`,`last 2 versions`,`not dead`),n.join(`,`)},Ye=(e,t)=>t?{index:{html:e(`src/renderer/index.html`),entry:e(`src/renderer/index`)}}:{index:{html:e(`index.html`),entry:e(`src/index`)}},Xe=async e=>{let{command:t,context:n,resolveContext:r,getUserConfig:i,isElectron:a}=e,o=await i(),s=o?.build?.base??`/`;if(t===Z.SERVER&&/^https?:/.test(s)){let e=v.cyan(`build.base`);throw Error(`本地开发时 ${e} 不应该为外部 Host!`)}let c=o?.target??`pc`,l=o?.pages??Ye(r,!!a),u=o?.server?.port??await se(`8080`),d=!1,f=!1;try{let[e,t]=await Promise.all([z(`react`,n),z(`vue`,n)]);d=t,f=e}catch{}return{userConfig:o,base:s,target:c,pages:l,port:u,browserslist:Je(c),isVue:d,isReact:f}};var Ze=class{constructor(){this.name=`web`}async resolvePreConfig(e){return Xe({command:e.command,context:e.context,resolveContext:e.resolveContext,getUserConfig:async()=>e.userConfig,isElectron:e.isElectron})}async compile(e,t){let{command:n,preConfig:r,compileContext:i}=t,a=await e.createConfig({command:n,mode:i.options.mode,env:i.env,context:i.context,contextPkg:i.contextPkg,userConfig:r.userConfig,pages:r.pages,base:r.base,port:r.port,browserslist:r.browserslist,isElectron:i.isElectron,isVue:r.isVue,isReact:r.isReact,resolveContext:i.resolveContext});n===`server`?await e.runDev(a,{port:r.port,onBuildStatus:i.onBuildStatus}):await e.runBuild(a,{onBuildStatus:i.onBuildStatus})}};function Qe(e){switch(e){case`desktopClient`:return $e();default:return new Ze}}function $e(){let e,t=async()=>e||(e=await et(),e);return{name:`desktopClient`,async resolvePreConfig(e){return(await t()).resolvePreConfig(e)},async compile(e,n){return(await t()).compile(e,n)}}}async function et(){let t=`@ikaros-cli/ikaros-platform-desktop-client`,n=e=>{let n=[`你启用了 platform='desktopClient',但未安装可选依赖 ${t}。`,``,`请安装后重试:`,` pnpm add -D ${t}`];if(e){let t=e instanceof Error?e.message:String(e);n.push(``,`原始错误: ${t}`)}return Error(n.join(`
|
|
10
9
|
`))},r;try{r=await import(m(e(l(process.cwd(),`./`)).resolve(t)).href)}catch(e){throw n(e)}let i=(r.default??r).ElectronDesktopPlatformInstance;if(!i||typeof i.resolvePreConfig!=`function`)throw Error([`${t} 已安装但加载失败:未找到 ElectronDesktopPlatformInstance 导出。`,`请确认安装的版本与 @ikaros-cli/ikaros 兼容(需 >=3.0)。`].join(`
|
|
11
|
-
`));return i}async function
|
|
10
|
+
`));return i}async function tt(e){let t=await ke(e),n=Qe(t.options.platform),r=await n.resolvePreConfig(t),i={...t,userConfig:r.userConfig},a=qe({bundler:i.userConfig?.bundler??`rspack`,loadContextModule:i.loadContextModule});await n.compile(a,{command:i.command,preConfig:r,compileContext:i})}const nt={WEB:`web`,DESKTOPCLIENT:`desktopClient`,ELECTRON:`desktopClient`},rt=[new t(`-m, --mode <name>`,`Environment variable`),new t(`-p, --platform <type>`,`build platform type`).default(nt.WEB).choices(Object.values(nt))],$=async e=>{try{await tt(e)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`${t}\n`),process.exit(1)}},it=e=>{let t=e.command(Z.SERVER,{isDefault:!0}).description(`Start local develop serve`).action(async e=>{await $({command:Z.SERVER,options:e})}),n=e.command(Z.BUILD).description(`Start build`).action(async e=>{await $({command:Z.BUILD,options:e})});for(let e of rt)t.addOption(e),n.addOption(e)},at=e=>e;Ue(22),n.version(A,`-v, --version`),it(n),n.parse();export{Z as Command,V as CreateLoader,H as CreatePlugins,L as LoggerSystem,He as RspackAdapter,Ke as ViteAdapterLoader,Ze as WebPlatformAdapter,Ue as assertNodeVersion,We as checkNodeVersion,qe as createBundlerAdapter,ke as createCompileContext,Qe as createPlatformAdapter,at as defineConfig,M as extensions,P as resolveCLI,Xe as resolveWebPreConfig,tt as runCompile,ze as runRspackBuild,Ve as watchRspackBuild};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ikaros-cli/ikaros",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.1",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"publishConfig": {
|
|
@@ -43,25 +43,25 @@
|
|
|
43
43
|
"npm": ">=9.5.0"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@module-federation/enhanced": "^2.0.
|
|
47
|
-
"@rsdoctor/rspack-plugin": "^1.5.
|
|
48
|
-
"@rspack/core": "^1.7.
|
|
46
|
+
"@module-federation/enhanced": "^2.0.1",
|
|
47
|
+
"@rsdoctor/rspack-plugin": "^1.5.3",
|
|
48
|
+
"@rspack/core": "^1.7.7",
|
|
49
49
|
"@rspack/dev-server": "^1.2.1",
|
|
50
50
|
"chalk": "^5.6.2",
|
|
51
51
|
"cli-cursor": "^5.0.0",
|
|
52
52
|
"commander": "^14.0.3",
|
|
53
|
-
"compression-webpack-plugin": "^
|
|
54
|
-
"css-loader": "^7.1.
|
|
53
|
+
"compression-webpack-plugin": "^12.0.0",
|
|
54
|
+
"css-loader": "^7.1.4",
|
|
55
55
|
"detect-port": "^2.1.0",
|
|
56
|
-
"dotenv": "^17.
|
|
56
|
+
"dotenv": "^17.3.1",
|
|
57
57
|
"easy-table": "^1.2.0",
|
|
58
|
-
"es-toolkit": "^1.
|
|
59
|
-
"fs-extra": "^11.3.
|
|
60
|
-
"glob": "^13.0.
|
|
58
|
+
"es-toolkit": "^1.45.1",
|
|
59
|
+
"fs-extra": "^11.3.4",
|
|
60
|
+
"glob": "^13.0.6",
|
|
61
61
|
"less-loader": "^12.3.1",
|
|
62
|
-
"listr2": "^10.1
|
|
62
|
+
"listr2": "^10.2.1",
|
|
63
63
|
"ora": "^9.3.0",
|
|
64
|
-
"oxc-transform": "^0.
|
|
64
|
+
"oxc-transform": "^0.116.0",
|
|
65
65
|
"picocolors": "^1.1.1",
|
|
66
66
|
"pretty-bytes": "^7.1.0",
|
|
67
67
|
"sass-loader": "^16.0.7",
|