@moneko/core 3.52.2 → 3.54.0-beta.0

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.
@@ -4,6 +4,7 @@ import { convert } from '@moneko/convert';
4
4
  import { ink, println, removeDir } from '@moneko/utils';
5
5
  import setupEnv from '../commom/setup-env.mjs';
6
6
  import { cwd, swcCachePath } from './utils/config.mjs';
7
+ import { convertSolid } from './utils/convert-solid.mjs';
7
8
  import { getSwcOption } from './utils/setup-swcrc.mjs';
8
9
  import { lesscCommonjs } from './lessc.mjs';
9
10
  import tsc from './tsc.mjs';
package/lib/bin/build.mjs CHANGED
@@ -1 +1 @@
1
- import{join as o}from"node:path";import{argv as t,exit as e}from"node:process";import{convert as r}from"@moneko/convert";import{ink as s,println as i,removeDir as m}from"@moneko/utils";import n from"../commom/setup-env.mjs";import{cwd as c,swcCachePath as l}from"./utils/config.mjs";import{getSwcOption as p}from"./utils/setup-swcrc.mjs";import{lesscCommonjs as d}from"./lessc.mjs";import a from"./tsc.mjs";async function f(){let f=t[3],u=t[4],j=t.slice(5);f||(i(s(`type: 无效值 ${s(f,"245")}`,"red")),e(1));let y=!j.includes("no-docs"),g=!j.includes("no-lib"),b=!j.includes("no-es"),x=!j.includes("no-dts"),w=j.filter(o=>!["no-docs","no-es","no-lib"].includes(o));if(await n("production",f,u,w),"library"===f){let{CONFIG:t}=await import("../config.mjs"),e="swc"===t.dts,s=[g&&{type:"commonjs",dir:"lib",msg:"Convert to CommonJS"},b&&{type:"es6",dir:"es",msg:"Convert to ES Module"}].filter(Boolean);for(let t=0,i=s.length;t<i;t++){m(o(c,`./${s[t].dir}`));let i=p(u);"es6"===s[t].type&&(i.jsc.target="es2015"),i.jsc.experimental.emitIsolatedDts=x&&e,i.jsc.experimental.cacheRoot=l,i.module.type=s[t].type,r({outDir:s[t].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:i}),"commonjs"===s[t].type&&d(),x&&!e&&a(s[t].dir)}}if("library"!==f||y&&"library"===f)try{await import("../build.mjs")}catch(o){i(s(Error(o).message,"red")),e(1)}}export default f;
1
+ import{join as o}from"node:path";import{argv as t,exit as e}from"node:process";import{convert as s}from"@moneko/convert";import{ink as r,println as i,removeDir as m}from"@moneko/utils";import n from"../commom/setup-env.mjs";import{cwd as c,swcCachePath as l}from"./utils/config.mjs";import{convertSolid as p}from"./utils/convert-solid.mjs";import{getSwcOption as d}from"./utils/setup-swcrc.mjs";import{lesscCommonjs as a}from"./lessc.mjs";import j from"./tsc.mjs";async function u(){let u=t[3],f=t[4],x=t.slice(5);u||(i(r(`type: 无效值 ${r(u,"245")}`,"red")),e(1));let y=!x.includes("no-docs"),_=!x.includes("no-lib"),g=!x.includes("no-es"),D=!x.includes("no-dts"),$=x.filter(o=>!["no-docs","no-es","no-lib"].includes(o));if(await n("production",u,f,$),"library"===u){let{CONFIG:t}=await import("../config.mjs"),e="swc"===t.dts,r=[_&&{type:"commonjs",dir:"lib",msg:"Convert to CommonJS"},g&&{type:"es6",dir:"es",msg:"Convert to ES Module"}].filter(Boolean);for(let i=0,n=r.length;i<n;i++){if(m(o(c,`./${r[i].dir}`)),"react"===f){let o=d();"es6"===r[i].type&&(o.jsc.target="es2015"),o.jsc.experimental.emitIsolatedDts=D&&e,o.jsc.experimental.cacheRoot=l,o.module.type=r[i].type,s({outDir:r[i].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:o})}else"solid"===f&&p({outDir:r[i].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:t.jsxDomExpressions});"commonjs"===r[i].type&&a(),D&&!e&&j(r[i].dir)}}if("library"!==u||y&&"library"===u)try{await import("../build.mjs")}catch(o){i(r(Error(o).message,"red")),e(1)}}export default u;
@@ -0,0 +1,31 @@
1
+ import path from 'node:path';
2
+ import { copyFile, ink, loadFileSync, println, scanFolderSync, updateFile } from '@moneko/utils';
3
+ import { transformSolidJs, TransformSolidJsOption } from '../../commom/transform-solid-js.mjs';
4
+ declare function getOutfilePath(outDir: string, file: string, outFileExtension?: string);
5
+ interface ConvertOptions {
6
+ outDir: string;
7
+ inputDir: string;
8
+ options: TransformSolidJsOption;
9
+ ignore?: RegExp[];
10
+ extensions?: string[];
11
+ copy?: boolean;
12
+ quiet?: boolean;
13
+ outputExtension?: string;
14
+ }
15
+ interface ConvertResult {
16
+ duration: number;
17
+ compiled: string[];
18
+ copied: string[];
19
+ failed: string[];
20
+ }
21
+ declare const normalizeExtension: Record<string, string>;
22
+ export declare async function convertSolid({ ignore = [], quiet = true, copy = true, outDir, outputExtension, inputDir, options, extensions = [
23
+ '.ts',
24
+ '.js',
25
+ '.tsx',
26
+ '.jsx',
27
+ '.mts',
28
+ '.mjs',
29
+ '.cts',
30
+ '.cjs'
31
+ ] }: ConvertOptions): Promise<ConvertResult>;
@@ -0,0 +1 @@
1
+ import e from"node:path";import{copyFile as t,ink as o,loadFileSync as s,println as i,scanFolderSync as a,updateFile as m}from"@moneko/utils";import{transformSolidJs as n}from"../../commom/transform-solid-js.mjs";function r(t,o,s){let i=o.split(e.sep),a=""===i[0]?i[1]:i[0],m=o.replace(a,""),n=e.join(t,m);return s?n.replace(e.extname(n),s):n}let p={".ts":".js",".tsx":".js",".mts":".mjs",".cts":".cjs",".js":".js",".jsx":".js",".mjs":".mjs",".cjs":".cjs"};export async function convertSolid({ignore:l=[],quiet:c=!0,copy:d=!0,outDir:j,outputExtension:f,inputDir:h,options:u,extensions:$=[".ts",".js",".tsx",".jsx",".mts",".mjs",".cts",".cjs"]}){let g=process.hrtime(),x={duration:0,compiled:[],copied:[],failed:[]},y=a(h,["^.*"]).map(t=>e.normalize(t)),w=[],S=[];y.forEach(t=>{!(/\.DS_Store/.test(t)||l.some(e=>e.test(t)))&&($.includes(e.extname(t))?w.push(t):d&&S.push(t))});let E=w.map(async t=>{try{let o=f||p[e.extname(t)],i=await n(s(t)||"",{...u,filename:t,minified:!0,compact:!0}),a=r(j,t,o);await m(a,i?.code??""),i?.map&&await m(`${a}.map`,"string"==typeof i.map?i.map:JSON.stringify(i.map)),x.compiled.push(`${t} -> ${a}`)}catch(e){x.failed.push(`Error converting ${t}: ${e}`)}}).concat(S.map(async e=>{let o=r(j,e);await t(e,o)?x.copied.push(`${e} -> ${o}`):x.failed.push(`Error copying ${e} -> ${o}`)}));await Promise.all(E);let v=process.hrtime(g);if(x.duration=1e3*v[0]+v[1]/1e6,c){let e=u.presetEnvOption?.modules?.toString().toLocaleUpperCase();i([`${o("✨ 编译成功!🎉","82",{bold:!0})} ${o(`(${e})`,"213")}`,o(`⏱️ 总耗时:${x.duration.toFixed(3)} ms`,"117"),x.compiled.length&&o(`📄 编译文件:${x.compiled.length} 个`,"111"),x.copied.length&&o(`📋 复制文件:${x.copied.length} 个`,"226"),x.failed.length&&o(`❌ 编译失败:${x.failed.length} 个`,"203")].filter(Boolean).join("\n- "))}return x}
@@ -1,4 +1,4 @@
1
1
  import type { Config, JscConfig } from '@swc/core';
2
2
  import require from '../../commom/require.mjs';
3
3
  import { cwd } from './config.mjs';
4
- export declare function getSwcOption(framework: string): Config;
4
+ export declare function getSwcOption(): Config;
@@ -1 +1 @@
1
- import e from"../../commom/require.mjs";import{cwd as o}from"./config.mjs";export function getSwcOption(r){let s="solid"===r;return{module:{type:"es6"},minify:!0,jsc:{minify:{format:{comments:!1},ecma:2015,compress:{drop_console:!0,drop_debugger:!0,global_defs:{"@alert":"console.log"},pure_funcs:["console.log","console.warn","console.error","console.info"],ecma:2015,toplevel:!1,module:!1,ie8:!1,keep_classnames:void 0,keep_fnames:!1,top_retain:[],keep_infinity:!0},mangle:!0},parser:{syntax:"typescript",decorators:!0,dynamicImport:!0,tsx:!0},loose:!0,target:"es2022",transform:{legacyDecorator:!0,decoratorMetadata:!0,react:{runtime:"automatic",throwIfNamespace:!0,useBuiltins:!0,refresh:"react"===r,development:!1,importSource:s?"solid-js/h":void 0}},experimental:{plugins:[[e.resolve("@moneko/raw-import"),{rootDir:o}],[e.resolve("@moneko/transform-imports"),{lodash:{transform:"lodash/${member}"},"@ant-design/icons":{transform:"es/icons/${member}"},antd:{transform:"es/${member}",memberTransformers:["dashed_case"]}}],s&&[e.resolve("@moneko/jsx-dom-expressions"),{moduleName:"solid-js/web",builtIns:["For","Show","Switch","Match","Suspense","SuspenseList","Portal","Index","Dynamic","ErrorBoundary"],contextToCustomElements:!0,wrapConditionals:!0,generate:"dom",hydratable:!1}]].filter(Boolean)}},sourceMaps:!0,exclude:["__tests__/","examples/","\\.d\\.ts$"]}}
1
+ import e from"../../commom/require.mjs";import{cwd as o}from"./config.mjs";export function getSwcOption(){return{module:{type:"es6"},minify:!0,jsc:{minify:{format:{comments:!1},ecma:2015,compress:{drop_console:!0,drop_debugger:!0,global_defs:{"@alert":"console.log"},pure_funcs:["console.log","console.warn","console.error","console.info"],ecma:2015,toplevel:!1,module:!1,ie8:!1,keep_classnames:void 0,keep_fnames:!1,top_retain:[],keep_infinity:!0},mangle:!0},parser:{syntax:"typescript",decorators:!0,dynamicImport:!0,tsx:!0},loose:!0,target:"es2022",transform:{legacyDecorator:!0,decoratorMetadata:!0,react:{runtime:"automatic",throwIfNamespace:!0,useBuiltins:!0,refresh:!0,development:!1}},experimental:{plugins:[[e.resolve("@moneko/raw-import"),{rootDir:o}]].filter(Boolean)}},sourceMaps:!0,exclude:["__tests__/","examples/","\\.d\\.ts$"]}}
@@ -0,0 +1,38 @@
1
+ import { type PluginItem, transformAsync, type TransformOptions } from '@moneko/eslint/babel-core';
2
+ import jsxDomTransform from 'babel-plugin-jsx-dom-expressions';
3
+ import BabelPluginSolidRefresh from 'solid-refresh/babel';
4
+ import { JsxDomExpressions } from '../index.mjs';
5
+ export interface TransformSolidJsOption extends TransformOptions {
6
+ refresh?: boolean;
7
+ jsxOptions?: JsxDomExpressions;
8
+ typescriptOption?: TypescriptOption;
9
+ presetEnvOption?: PresetEnvOption;
10
+ }
11
+ export interface TypescriptOption {
12
+ ignoreExtensions?: boolean;
13
+ allowNamespaces?: boolean;
14
+ disallowAmbiguousJSXLike?: boolean;
15
+ jsxPragma?: string;
16
+ jsxPragmaFrag?: string;
17
+ onlyRemoveTypeImports?: boolean;
18
+ optimizeConstEnums?: boolean;
19
+ rewriteImportExtensions?: boolean;
20
+ }
21
+ export interface PresetEnvOption {
22
+ configPath?: string;
23
+ corejs?: string | {
24
+ version: string;
25
+ proposals: boolean;
26
+ };
27
+ debug?: boolean;
28
+ exclude?: Array<string | RegExp>;
29
+ forceAllTransforms?: boolean;
30
+ ignoreBrowserslistConfig?: boolean;
31
+ include?: Array<string | RegExp>;
32
+ modules?: 'amd' | 'umd' | 'systemjs' | 'commonjs' | 'cjs' | 'auto' | false;
33
+ shippedProposals?: boolean;
34
+ targets?: string | Array<string> | Record<string, string>;
35
+ useBuiltIns?: 'usage' | 'entry' | false;
36
+ browserslistEnv?: string;
37
+ }
38
+ export declare async function transformSolidJs(sourceCode: string, { refresh, filename, jsxOptions, typescriptOption = {}, presetEnvOption = {}, ...options }: TransformSolidJsOption);
@@ -0,0 +1 @@
1
+ import{transformAsync as e}from"@moneko/eslint/babel-core";import o from"babel-plugin-jsx-dom-expressions";import n from"solid-refresh/babel";export async function transformSolidJs(r,{refresh:s,filename:l,jsxOptions:i,typescriptOption:t={},presetEnvOption:a={},...b}){return e(r,{sourceFileName:l,filename:l,sourceMaps:"inline",cloneInputAst:!1,ast:!1,configFile:!1,babelrc:!1,...b,presets:[["@moneko/eslint/babel-preset-env",a],["@moneko/eslint/babel-typescript",t]],plugins:[[o,i],s&&[n,{bundler:"webpack5"}]].filter(Boolean)})}
package/lib/dev.d.mts CHANGED
@@ -10,7 +10,7 @@ import { merge } from 'webpack-merge';
10
10
  import { diffObject } from './commom/diff-object.mjs';
11
11
  import paths, { config_files } from './commom/paths.mjs';
12
12
  import sigintExit from './commom/sigint-exit.mjs';
13
- import { devLog, PORT } from './dev/config.mjs';
13
+ import { devLog, getServerAddress, PORT } from './dev/config.mjs';
14
14
  import generateProgressHtml, { type CompliationProcess } from './dev/generate-progress-html.mjs';
15
15
  import server, { type FileSystem, type Server } from './dev/server.mjs';
16
16
  import reslove from './options/reslove.mjs';
package/lib/dev.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{exec as e,spawn as t}from"node:child_process";import{watchFile as o}from"node:fs";import{join as r,relative as n}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as a,print as m,println as l,progressBar as p}from"@moneko/utils";import c from"webpack";import f from"webpack-hot-middleware";import{merge as h}from"webpack-merge";import{diffObject as u}from"./commom/diff-object.mjs";import d,{config_files as g}from"./commom/paths.mjs";import w from"./commom/sigint-exit.mjs";import{devLog as y,PORT as $}from"./dev/config.mjs";import v from"./dev/generate-progress-html.mjs";import j from"./dev/server.mjs";import b from"./options/reslove.mjs";import{ESLintPlugin as C}from"./plugin/eslint.mjs";import{generateManifest as x}from"./plugin/manifest.mjs";import{StylelintPlugin as S}from"./plugin/stylelint.mjs";import{empty as P}from"./utils/index.mjs";import{commonConfig as _}from"./common.mjs";import{CONFIG as k,getConfig as H}from"./config.mjs";import{outputFileSystem as O}from"./file-system.mjs";import T from"./module.config.mjs";import{isLibrary as B,isReact as E,refresh as I}from"./process-env.mjs";let q=!1,G="/____progress____",L={percentage:0,info:""},N="/__hmr__",R=new URLSearchParams({name:"client",path:N.substring(1),dynamicPublicPath:!0,timeout:2e3,reload:!I,quiet:!0,noInfo:!0,overlay:!1,autoConnect:!0}).toString(),U=h(_,{output:{publicPath:`${k.devServer.https?"https":"http"}://${k.devServer.host}:${k.devServer.port}${k.basename}`},watchOptions:{stdin:!0,aggregateTimeout:300,ignored:/node_modules\/(?!(@app)\/)/},entry:{main:[`${b.hotMiddlewareClient}?${R}`]},module:T(!1),plugins:[new c.HotModuleReplacementPlugin,new c.WatchIgnorePlugin({paths:[/node_modules\/(?!(@app)\/)/,/\.d\.ts$/]}),new c.ProgressPlugin({handler(e,t,...o){let r=o.length?`[${t}] ${o.join(" ")}`:" ";q||(L.info=r,L.percentage=e,q=1===e);let n=k.bar;if(n){let t=n.name||"Build";n.quiet?i.stdout.write(`${r}
2
- `):(p(e||0,1,{msg:r,name:t,barColor:n.barColor,nameColor:n.nameColor,barBgColor:n.barBgColor,msgColor:n.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});if(E){let e=(await import("@pmmmwh/react-refresh-webpack-plugin")).default;U.plugins.push(new e({overlay:!1}))}function F(e){let t=e.join(","),o=[n(d.programPath,`${k.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return B&&o.push(n(d.programPath,`${k.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}k.eslint&&U.plugins.push(new C({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:F(["js","jsx","ts","tsx","json","html","vue"]),...k.eslint})),k.stylelint&&U.plugins.push(new S({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:F(["css","scss","sass","less","ts","tsx","js","jsx"]),...k.stylelint}));let J=c(U);if(!J)throw Error("无法创建编译器");J.outputFileSystem=O;let M=J.watch(J.options.watchOptions,y);J.hooks.done.tap("client-log",e=>{y(null,e)});let A=`${k.basename}/${N}`.replace(/\/+/g,"/"),K=f(J,{log:!1,path:A,heartbeat:2e3}),W=!!k.manifest&&r(k.basename,k.manifest.filename).replaceAll(/\\/g,"/"),z=await j({port:$,root_dir:J.options.output.path,fileSystem:J.outputFileSystem,headers:k.devServer.headers,https:k.devServer.https,host:k.devServer.host,open:k.devServer.open,basename:k.basename,onRequest(e,t){if(!t.writableEnded){if("GET"===e.method){let o=new s(`${k.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if(W&&o.pathname===W)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(x({}))),!0;if(o.pathname===G)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(L)),!0;if(!q)return t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end(v(G,L)),!0;if(o.pathname===A&&"text/event-stream"===e.headers.accept)return K(e,t,P),!0}return!1}}});function D(){i.exit(0)}z.on("close",()=>{M.close(P),K.close()});let Q=await Promise.all(g.map(H)),V=h(Q[0]||{},Q[1]||{});g.forEach(function(t){o(t,async function(){let[o,r]=await Promise.all(g.map(H)),n=h(o||{},r||{}),s=u(V,n);1===Object.keys(s).length&&"proxy"in s?(m(a(`代理更新中...`,"yellow"),!0),m(a(`代理更新完成...`,"green"),!0),k.proxy=n.proxy,V.proxy=n.proxy,V=n):(V=n,l(a(`检测到工程配置${a(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),e(X?`netstat -ano | findstr :${$}`:`lsof -i :${$} -t`,(e,t)=>{if(e){l(a(`查找端口 ${$} 时发生错误: ${e.message}`,"red")),l(a("请尝试手动重启程序","yellow"));return}let o=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),r=X?o[0]?.split(/\s+/).pop()?.trim():o[0]?.trim();if(!r){l(a(`未找到占用端口 ${$} 的进程, 请尝试手动重启程序`,"yellow"));return}try{i.kill(Number(r),"SIGHUP")}catch(e){l(a(`终止进程 ${r} 时发生错误: ${e.message}`,"red"))}}))})});let X="win32"===i.platform;i.on("SIGHUP",function(){z.close(P),function(){let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",D)}()}),i.on("exit",function(){z.close(P)}),w(D);
1
+ import{exec as e,spawn as t}from"node:child_process";import{watchFile as o}from"node:fs";import{join as r,relative as n}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as a,print as m,println as l,progressBar as p}from"@moneko/utils";import c from"webpack";import f from"webpack-hot-middleware";import{merge as h}from"webpack-merge";import{diffObject as u}from"./commom/diff-object.mjs";import d,{config_files as g}from"./commom/paths.mjs";import w from"./commom/sigint-exit.mjs";import{devLog as y,getServerAddress as j,PORT as $}from"./dev/config.mjs";import b from"./dev/generate-progress-html.mjs";import v from"./dev/server.mjs";import C from"./options/reslove.mjs";import{ESLintPlugin as x}from"./plugin/eslint.mjs";import{generateManifest as P}from"./plugin/manifest.mjs";import{StylelintPlugin as _}from"./plugin/stylelint.mjs";import{empty as S}from"./utils/index.mjs";import{commonConfig as k}from"./common.mjs";import{CONFIG as H,getConfig as O}from"./config.mjs";import{outputFileSystem as T}from"./file-system.mjs";import B from"./module.config.mjs";import{isLibrary as E,isReact as I,refresh as q}from"./process-env.mjs";let F=!1,G="/____progress____",L={percentage:0,info:""},N="/__hmr__",R=new URLSearchParams({name:"client",path:N.substring(1),dynamicPublicPath:!0,timeout:2e3,reload:!q,quiet:!0,noInfo:!0,overlay:!1,autoConnect:!0}).toString(),U=h(k,{output:{publicPath:H.moduleFederation?.length>0?`${j("local")}/`:"/"},watchOptions:{stdin:!0,aggregateTimeout:300,ignored:/node_modules\/(?!(@app)\/)/},entry:{main:[`${C.hotMiddlewareClient}?${R}`]},module:B(!1),plugins:[new c.HotModuleReplacementPlugin,new c.WatchIgnorePlugin({paths:[/node_modules\/(?!(@app)\/)/,/\.d\.ts$/]}),new c.ProgressPlugin({handler(e,t,...o){let r=o.length?`[${t}] ${o.join(" ")}`:" ";F||(L.info=r,L.percentage=e,F=1===e);let n=H.bar;if(n){let t=n.name||"Build";n.quiet?i.stdout.write(`${r}
2
+ `):(p(e||0,1,{msg:r,name:t,barColor:n.barColor,nameColor:n.nameColor,barBgColor:n.barBgColor,msgColor:n.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});if(I){let e=(await import("@pmmmwh/react-refresh-webpack-plugin")).default;U.plugins.push(new e({overlay:!1}))}function J(e){let t=e.join(","),o=[n(d.programPath,`${H.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return E&&o.push(n(d.programPath,`${H.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}H.eslint&&U.plugins.push(new x({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:J(["js","jsx","ts","tsx","json","html","vue"]),...H.eslint})),H.stylelint&&U.plugins.push(new _({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:J(["css","scss","sass","less","ts","tsx","js","jsx"]),...H.stylelint}));let M=c(U);if(!M)throw Error("无法创建编译器");M.outputFileSystem=T;let A=M.watch(M.options.watchOptions,y);M.hooks.done.tap("client-log",e=>{y(null,e)});let K=`${H.basename}/${N}`.replace(/\/+/g,"/"),W=f(M,{log:!1,path:K,heartbeat:2e3}),z=!!H.manifest&&r(H.basename,H.manifest.filename).replaceAll(/\\/g,"/"),D=await v({port:$,root_dir:M.options.output.path,fileSystem:M.outputFileSystem,headers:H.devServer.headers,https:H.devServer.https,host:H.devServer.host,open:H.devServer.open,basename:H.basename,onRequest(e,t){if(!t.writableEnded){if("GET"===e.method){let o=new s(`${H.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if(z&&o.pathname===z)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(P({}))),!0;if(o.pathname===G)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(L)),!0;if(!F)return t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end(b(G,L)),!0;if(o.pathname===K&&"text/event-stream"===e.headers.accept)return W(e,t,S),!0}return!1}}});function Q(){i.exit(0)}D.on("close",()=>{A.close(S),W.close()});let V=await Promise.all(g.map(O)),X=h(V[0]||{},V[1]||{});g.forEach(function(t){o(t,async function(){let[o,r]=await Promise.all(g.map(O)),n=h(o||{},r||{}),s=u(X,n);1===Object.keys(s).length&&"proxy"in s?(m(a(`代理更新中...`,"yellow"),!0),m(a(`代理更新完成...`,"green"),!0),H.proxy=n.proxy,X.proxy=n.proxy,X=n):(X=n,l(a(`检测到工程配置${a(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),e(Y?`netstat -ano | findstr :${$}`:`lsof -i :${$} -t`,(e,t)=>{if(e){l(a(`查找端口 ${$} 时发生错误: ${e.message}`,"red")),l(a("请尝试手动重启程序","yellow"));return}let o=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),r=Y?o[0]?.split(/\s+/).pop()?.trim():o[0]?.trim();if(!r){l(a(`未找到占用端口 ${$} 的进程, 请尝试手动重启程序`,"yellow"));return}try{i.kill(Number(r),"SIGHUP")}catch(e){l(a(`终止进程 ${r} 时发生错误: ${e.message}`,"red"))}}))})});let Y="win32"===i.platform;i.on("SIGHUP",function(){D.close(S),function(){let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",Q)}()}),i.on("exit",function(){D.close(S)}),w(Q);
@@ -1 +1 @@
1
- "use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var n in t)Object.defineProperty(e,n,{enumerable:!0,get:t[n]})}(exports,{custom:function(){return o},default:function(){return i}});const t=require("@moneko/eslint/babel-core"),n=(e=require("solid-refresh/babel"))&&e.__esModule?e:{default:e};async function r(e){let r=this.async();this.cacheable&&this.cacheable();let o=await (0,t.transformAsync)(e,{plugins:[[n.default,{bundler:"webpack5"}]]});r(null,o?.code||void 0,o?.map||void 0)}function o(e){return r.bind(this,e)}const i=r;
1
+ "use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),function(e,t){for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:t[r]})}(exports,{custom:function(){return n},default:function(){return s}});const t=(e=require("../commom/log.mjs"))&&e.__esModule?e:{default:e},r=require("../commom/transform-solid-js.mjs");async function o(e){let o=this.async();this.cacheable&&this.cacheable();let n=this.getOptions();(0,r.transformSolidJs)(e,{...n,filename:this.resourcePath}).then(t=>{null===t?o(Error(`Failed to transform "${this.resourcePath}"`),e):o(null,t.code??void 0,t.map??void 0)}).catch(r=>{r&&((0,t.default)(r),o(r,e))})}function n(e){return o.bind(this,e)}const s=o;
@@ -1,9 +1,8 @@
1
- import { transformAsync, type TransformOptions } from '@moneko/eslint/babel-core';
2
- import BabelPluginSolidRefresh from 'solid-refresh/babel';
1
+ import type { TransformOptions } from '@moneko/eslint/babel-core';
3
2
  import type { LoaderContext } from 'webpack';
4
- declare async function solidLoader(this: LoaderContext<TransformOptions & {
5
- refresh?: boolean;
6
- }>, sourceCode: string);
3
+ import log from '../commom/log.mjs';
4
+ import { transformSolidJs, TransformSolidJsOption } from '../commom/transform-solid-js.mjs';
5
+ declare async function solidLoader(this: LoaderContext<TransformSolidJsOption>, sourceCode: string);
7
6
  export declare function custom(this: LoaderContext<TransformOptions & {
8
7
  refresh?: boolean;
9
8
  }>, sourceCode: string);
@@ -1,2 +1,2 @@
1
1
  let e;import{join as s,sep as o}from"node:path";import{saveFileSync as t}from"@moneko/utils";import r,{CUSTOMCONFIG as a}from"./commom/paths.mjs";import n from"./commom/reactive-object.mjs";import i from"./commom/require.mjs";import m from"./commom/rule.mjs";import l from"./options/css-extract.mjs";import c from"./options/modify-vars.mjs";import d from"./options/reslove.mjs";import p from"./options/swcrc.mjs";import{getLightningCssTargets as u}from"./polyfills/targets.mjs";import{node_modules as f,resolveProgram as h,toCamelCase as j}from"./utils/index.mjs";import y from"./utils/svg-to-data-uri.mjs";import{comment as g,getCommentPath as v}from"./vm/docs.mjs";import x from"./vm/generate-doc.mjs";import{outputConfig as w}from"./common.mjs";import{CONFIG as P}from"./config.mjs";import{FRAMEWORK as L,isDev as k,isLibrary as M}from"./process-env.mjs";let _={loader:s(r.corePath,"/loader/lightning-css/loader.cjs"),options:{sourceMap:!!P.sourceMap,targets:u(),rem:!!P.rem,esModule:!0,modules:{auto(e){if(e){if(e.endsWith(".css")&&!e.endsWith("module.css"))return!1;for(let s=0,o=I.length;s<o;s++)if(e.includes(I[s]))return m.css_module.test(e)}return m.node_modules_css_module.test(e)},localIdentName:"[hash]_[local]",namedExport:!0,exportLocalsConvention:"dashesOnly",exportOnlyLocals:!1,getJSON:P.cssModuleDefinition?function(e){q.setData(`${e.resourcePath}.d.ts`,`${e.exports.map(({name:e,value:s})=>`export const ${j(e)}: '${s}';`).join("\n")}
2
- `)}:void 0},importLoaders:2}},O={loader:d.lessLoader,options:{sourceMap:!!P.sourceMap,lessOptions:{modifyVars:c,javascriptEnabled:!0}}},b=new Map;function C(e){if(b.has(e))return b.get(e);try{let s;let t=i.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),b.set(e,[s]),[s]}catch{try{let s=i.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");b.set(e,[s])}catch{b.set(e,[f(e),f(`.pnpm/${e}`)])}return b.get(e)}}let I=[...P.cssModules,`@moneko/${L}`,"neko-ui"].map(C).flat(),$=["components","example","mock","site","src","server"].map(h);function B(e){return new Promise(s=>{s([...$,r.corePath,...P.rulesInclude?.[e]?.map(C).flat()||[]])})}a&&$.push(h(a)),P.overrideResolve&&P.overrideResolve.override&&$.push(P.overrideResolve.override);let J=await Promise.all([B("css"),B("js"),B("media"),B("wasm"),B("font")]),W=J[0],R=J[1],N=J[2],S=J[3],z=J[4];d.sassLoader&&(e={loader:d.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let D=M&&k&&{test:m.tsdoc,include:P.alias["@pkg"],exclude:[/node_modules\/(?!(@app|@moneko)).+/,m.__tests__],enforce:"pre",loader:s(r.corePath,"/loader/ts-doc.cjs"),options:{comment:g,generateDoc:x,getCommentPath:v}},E=w.library?.type==="umd"&&!1===P.htmlPluginOption,Q=[{resourceQuery:/raw/i,type:"asset/source"},{resourceQuery:/url/i,type:"asset/resource",generator:{filename(e){let s=e.filename;return s&&s.toLocaleLowerCase().endsWith("wasm?url")?"wasm/[hash][ext]":"assets/[hash][ext]"}}},{test:m.wasm,type:"webassembly/async",include:S},{test:m.txt,type:"asset/source"},{test:m.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:E?()=>!0:{maxSize:4096}},generator:{filename:e=>e.filename?.toLocaleLowerCase().endsWith(".svg")?"assets/svg/[hash][ext]":"assets/images/[hash][ext]",dataUrl:(e,s)=>s.filename.toLocaleLowerCase().endsWith(".svg")?y(e.toString()):e},include:N},{test:m.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:N},{test:m.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:z}],U=P.prefixJsLoader.filter(Boolean)||[];switch(L){case"react":P.reactCompiler&&U.unshift({loader:s(r.corePath,"/loader/react-compiler.cjs"),options:P.reactCompiler});break;case"solid":P.refresh=!1}P.cssInJs&&"object"==typeof P.cssInJs.minify&&U.unshift({loader:s(r.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},P.cssInJs.minify)});let q=new n({});q.on("change",(e,s)=>{t(e,s)});export default(o=>{let t={loader:d.swcLoader,options:p(o)};return{parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0}},noParse:P.noParse,rules:[!1!==P.htmlPluginOption&&D,{oneOf:[...Q,{test:m.js,use:[...U,t].filter(Boolean),include:R},{test:m.css,use:[l,_],include:W},e&&{test:m.scss,use:[l,_,e],include:W},{test:m.less,use:[l,_,O],include:W},{test:m.markdown,use:[...U,{loader:s(r.corePath,"/loader/mdx.cjs"),options:P.mdx}].filter(Boolean),exclude:[/node_modules\/(?!(@app|@moneko)).+/]}].filter(Boolean)},...P.moduleRules].filter(Boolean)}});
2
+ `)}:void 0},importLoaders:2}},O={loader:d.lessLoader,options:{sourceMap:!!P.sourceMap,lessOptions:{modifyVars:c,javascriptEnabled:!0}}},b=new Map;function C(e){if(b.has(e))return b.get(e);try{let s;let t=i.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),b.set(e,[s]),[s]}catch{try{let s=i.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");b.set(e,[s])}catch{b.set(e,[f(e),f(`.pnpm/${e}`)])}return b.get(e)}}let I=[...P.cssModules,`@moneko/${L}`,"neko-ui"].map(C).flat(),$=["components","example","mock","site","src","server"].map(h);function B(e){return new Promise(s=>{s([...$,r.corePath,...P.rulesInclude?.[e]?.map(C).flat()||[]])})}a&&$.push(h(a)),P.overrideResolve&&P.overrideResolve.override&&$.push(P.overrideResolve.override);let J=await Promise.all([B("css"),B("js"),B("media"),B("wasm"),B("font")]),W=J[0],R=J[1],D=J[2],E=J[3],N=J[4];d.sassLoader&&(e={loader:d.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let S=M&&k&&{test:m.tsdoc,include:P.alias["@pkg"],exclude:[/node_modules\/(?!(@app|@moneko)).+/,m.__tests__],enforce:"pre",loader:s(r.corePath,"/loader/ts-doc.cjs"),options:{comment:g,generateDoc:x,getCommentPath:v}},z=w.library?.type==="umd"&&!1===P.htmlPluginOption,Q=[{resourceQuery:/raw/i,type:"asset/source"},{resourceQuery:/url/i,type:"asset/resource",generator:{filename(e){let s=e.filename;return s&&s.toLocaleLowerCase().endsWith("wasm?url")?"wasm/[hash][ext]":"assets/[hash][ext]"}}},{test:m.wasm,type:"webassembly/async",include:E},{test:m.txt,type:"asset/source"},{test:m.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:z?()=>!0:{maxSize:4096}},generator:{filename:e=>e.filename?.toLocaleLowerCase().endsWith(".svg")?"assets/svg/[hash][ext]":"assets/images/[hash][ext]",dataUrl:(e,s)=>s.filename.toLocaleLowerCase().endsWith(".svg")?y(e.toString()):e},include:D},{test:m.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:D},{test:m.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:N}],U=P.prefixJsLoader.filter(Boolean)||[];switch(L){case"react":P.reactCompiler&&U.unshift({loader:s(r.corePath,"/loader/react-compiler.cjs"),options:P.reactCompiler});break;case"solid":P.refresh=!1,U.unshift({loader:s(r.corePath,"/loader/solid.cjs"),options:{...P.jsxDomExpressions,refresh:P.refresh}})}P.cssInJs&&"object"==typeof P.cssInJs.minify&&U.unshift({loader:s(r.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},P.cssInJs.minify)});let q=new n({});q.on("change",(e,s)=>{t(e,s)});export default(o=>{let t="react"===L&&{loader:d.swcLoader,options:p(o)};return{parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0}},noParse:P.noParse,rules:[!1!==P.htmlPluginOption&&S,{oneOf:[...Q,{test:m.js,use:[...U,t].filter(Boolean),include:R},{test:m.css,use:[l,_],include:W},e&&{test:m.scss,use:[l,_,e],include:W},{test:m.less,use:[l,_,O],include:W},{test:m.markdown,use:[...U,{loader:s(r.corePath,"/loader/mdx.cjs"),options:P.mdx}].filter(Boolean),exclude:[/node_modules\/(?!(@app|@moneko)).+/]}].filter(Boolean)},...P.moduleRules].filter(Boolean)}});
@@ -6,7 +6,6 @@ declare const reslove: {
6
6
  readonly lessLoader;
7
7
  readonly swcLoader;
8
8
  readonly transformImports;
9
- readonly jsxDomExpressions;
10
9
  readonly hotMiddlewareClient;
11
10
  };
12
11
  export default reslove;
@@ -1 +1 @@
1
- import e from"../commom/has-pkg.mjs";import o from"../commom/require.mjs";let s={styleLoader:o.resolve("style-loader"),sassLoader:e("sass-loader"),lessLoader:o.resolve("less-loader"),swcLoader:o.resolve("swc-loader"),transformImports:e("@moneko/transform-imports"),jsxDomExpressions:e("@moneko/jsx-dom-expressions"),hotMiddlewareClient:o.resolve("webpack-hot-middleware/client.js")};export default s;
1
+ import e from"../commom/has-pkg.mjs";import o from"../commom/require.mjs";let r={styleLoader:o.resolve("style-loader"),sassLoader:e("sass-loader"),lessLoader:o.resolve("less-loader"),swcLoader:o.resolve("swc-loader"),transformImports:e("@moneko/transform-imports"),hotMiddlewareClient:o.resolve("webpack-hot-middleware/client.js")};export default r;
@@ -4,7 +4,7 @@ import paths from '../commom/paths.mjs';
4
4
  import { CONFIG } from '../config.mjs';
5
5
  import type { SwcImportOnDemandTransform } from '../index.mjs';
6
6
  import polyfills, { coreJsVersion } from '../polyfills/polyfills.mjs';
7
- import { isDev, isReact, isSolid, jsxImportSource } from '../process-env.mjs';
7
+ import { isDev, isReact, jsxImportSource } from '../process-env.mjs';
8
8
  import reslove from './reslove.mjs';
9
9
  declare function transformConfigs(config: SwcImportOnDemandTransform);
10
10
  declare const importOnDemand: SwcImportOnDemandTransform;
@@ -1 +1 @@
1
- import{merge as e}from"webpack-merge";import r from"../commom/paths.mjs";import{CONFIG as o}from"../config.mjs";import t,{coreJsVersion as s}from"../polyfills/polyfills.mjs";import{isDev as m,isReact as a,isSolid as l,jsxImportSource as p}from"../process-env.mjs";import i from"./reslove.mjs";let c=function(e){for(let r=0,o=Object.keys(e),t=o.length;r<t;r++)e[o[r]].transform=`${o[r]}/${e[o[r]].transform}`,e[o[r]].style&&(e[o[r]].style=`${o[r]}/${e[o[r]].style}`);return e}(o.importOnDemand||{}),n={include:t(),mode:"entry",coreJs:s};export default((t,s={})=>e({module:{type:"es6",resolveFully:!0},sync:!0,jsc:{parser:{syntax:"typescript",tsx:!0,decorators:!0,dynamicImport:!0},loose:!0,target:o.polyfill?void 0:"es2017",externalHelpers:!1,transform:{legacyDecorator:!0,decoratorMetadata:!0,react:{runtime:o.reactJsxRuntime||"automatic",throwIfNamespace:!0,refresh:a&&m,development:m,importSource:p},optimizer:{simplify:!1}},experimental:{emitAssertForImportAttributes:!0,cacheRoot:r.swcCachePath,plugins:[[i.transformImports,c],l&&[i.jsxDomExpressions,{...o.jsxDomExpressions,generate:t?"ssr":"dom",hydratable:t}]].filter(Boolean)}},env:o.polyfill?n:void 0,sourceMaps:!0,parseMap:!0},"function"==typeof o.swcrc?o.swcrc(m):o.swcrc||{},s));
1
+ import{merge as e}from"webpack-merge";import r from"../commom/paths.mjs";import{CONFIG as t}from"../config.mjs";import o,{coreJsVersion as s}from"../polyfills/polyfills.mjs";import{isDev as m,isReact as l,jsxImportSource as a}from"../process-env.mjs";import p from"./reslove.mjs";let c=function(e){for(let r=0,t=Object.keys(e),o=t.length;r<o;r++)e[t[r]].transform=`${t[r]}/${e[t[r]].transform}`,e[t[r]].style&&(e[t[r]].style=`${t[r]}/${e[t[r]].style}`);return e}(t.importOnDemand||{}),i={include:o(),mode:"entry",coreJs:s};export default((o,s={})=>e({module:{type:"es6",resolveFully:!0},sync:!0,jsc:{parser:{syntax:"typescript",tsx:l,decorators:!0,dynamicImport:!0},loose:!0,target:t.polyfill?void 0:"es2017",externalHelpers:!1,transform:{legacyDecorator:!0,decoratorMetadata:!0,react:{runtime:t.reactJsxRuntime||"automatic",throwIfNamespace:!0,refresh:l&&m,development:m,importSource:a},optimizer:{simplify:!1}},experimental:{emitAssertForImportAttributes:!0,cacheRoot:r.swcCachePath,plugins:[[p.transformImports,c]].filter(Boolean)}},env:t.polyfill?i:void 0,sourceMaps:!0,parseMap:!0},"function"==typeof t.swcrc?t.swcrc(m):t.swcrc||{},s));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "3.52.2",
3
+ "version": "3.54.0-beta.0",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",
@@ -108,7 +108,7 @@
108
108
  "license": "MIT",
109
109
  "dependencies": {
110
110
  "@moneko/convert": "1.0.1",
111
- "@moneko/eslint": "1.7.0",
111
+ "@moneko/eslint": "1.8.0-beta.0",
112
112
  "@moneko/mdx": "0.1.44",
113
113
  "@moneko/raw-import": "0.0.3",
114
114
  "@moneko/request": "1.6.2",
@@ -141,6 +141,7 @@
141
141
  "@types/stylis": "4.2.7",
142
142
  "@types/webpack-bundle-analyzer": "4.7.0",
143
143
  "@types/webpack-hot-middleware": "2.25.10",
144
+ "babel-plugin-jsx-dom-expressions": "0.40.1",
144
145
  "sass": "1.92.0",
145
146
  "sass-loader": "16.0.5",
146
147
  "solid-refresh": "0.7.5",
@@ -11,7 +11,7 @@ import type {
11
11
  ResolvePluginInstance,
12
12
  RuleSetRule,
13
13
  WebpackPluginInstance,
14
- SourceMapDevToolPlugin
14
+ SourceMapDevToolPlugin,
15
15
  } from 'webpack';
16
16
 
17
17
  import type {
@@ -101,7 +101,7 @@ export declare type ConfigType = {
101
101
  /** react jsx 运行时
102
102
  * @default 'automatic'
103
103
  */
104
- reactJsxRuntime?: 'classic' | 'automatic';
104
+ reactJsxRuntime?: 'automatic' | 'classic' | 'preserve';
105
105
  /** 是否启用 corepack
106
106
  * @default true
107
107
  */
@@ -258,29 +258,32 @@ export declare type ConfigType = {
258
258
  * };
259
259
  * export default conf;
260
260
  */
261
- https?: boolean | {
262
- /** 私钥文件的位置
263
- * @example
264
- * // 表示加载当前项目 config 目录下的 server.key
265
- * 'config/server.key'
266
- * // 表示加载当前项目根目录下的 server.key
267
- * 'server.key'
268
- */
269
- key: string;
270
- /** 证书文件的位置
271
- * @example
272
- * // 表示加载当前项目 config 目录下的 server.cert
273
- * 'config/server.cert'
274
- * // 表示加载当前项目根目录下的 server.cert
275
- * 'server.key'
276
- */
277
- cert: string;
278
- } | {
279
- /** 安装 CA 根证书
280
- * @default true
281
- */
282
- install: boolean;
283
- };
261
+ https?:
262
+ | boolean
263
+ | {
264
+ /** 私钥文件的位置
265
+ * @example
266
+ * // 表示加载当前项目 config 目录下的 server.key
267
+ * 'config/server.key'
268
+ * // 表示加载当前项目根目录下的 server.key
269
+ * 'server.key'
270
+ */
271
+ key: string;
272
+ /** 证书文件的位置
273
+ * @example
274
+ * // 表示加载当前项目 config 目录下的 server.cert
275
+ * 'config/server.cert'
276
+ * // 表示加载当前项目根目录下的 server.cert
277
+ * 'server.key'
278
+ */
279
+ cert: string;
280
+ }
281
+ | {
282
+ /** 安装 CA 根证书
283
+ * @default true
284
+ */
285
+ install: boolean;
286
+ };
284
287
  /** 打开浏览器
285
288
  * @default true
286
289
  */
@@ -3,3 +3,4 @@ declare module '*.cjs';
3
3
  declare module '@pmmmwh/react-refresh-webpack-plugin';
4
4
  declare module 'babel-plugin-react-compiler';
5
5
  declare module 'package.json';
6
+ declare module 'babel-plugin-jsx-dom-expressions';