@moneko/core 4.0.0-bate.1 → 4.0.0-bate.2

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.
@@ -14,7 +14,6 @@ declare const Rule: {
14
14
  node_modules_css_module: RegExp;
15
15
  node_modules: RegExp;
16
16
  __tests__: RegExp;
17
- dev_watch_ignored: RegExp;
18
17
  /**
19
18
  * 提取函数字符串
20
19
  * @example
@@ -1 +1 @@
1
- export default{js:/\.(cj|mj|t|j)s(|x)$/i,css:/\.css$/i,less:/\.less$/i,scss:/\.(sa|sc)ss$/i,wasm:/\.wasm$/i,txt:/\.txt$/i,image:/\.(gif|png|jpe?g|webp|svg|ico)$/i,video:/\.(webm|mp4|ogv)$/i,font:/\.(woff2?|eot|ttf|otf)(\?.*)?$/i,markdown:/\.mdx?$/i,tsdoc:/^(?![._]).*(?<!\.test)\.(tsx?)$/,css_module:/(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,node_modules_css_module:/(^(?!.*node_modules))(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,node_modules:/node_modules/,__tests__:/(.+)\/__tests__\/(.+)/,dev_watch_ignored:/node_modules(?![\\/]app:)/,extract_func:/"rr\((.+?)\)rr"/g};
1
+ export default{js:/\.(cj|mj|t|j)s(|x)$/i,css:/\.css$/i,less:/\.less$/i,scss:/\.(sa|sc)ss$/i,wasm:/\.wasm$/i,txt:/\.txt$/i,image:/\.(gif|png|jpe?g|webp|svg|ico)$/i,video:/\.(webm|mp4|ogv)$/i,font:/\.(woff2?|eot|ttf|otf)(\?.*)?$/i,markdown:/\.mdx?$/i,tsdoc:/^(?![._]).*(?<!\.test)\.(tsx?)$/,css_module:/(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,node_modules_css_module:/(^(?!.*node_modules))(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,node_modules:/[\\/]node_modules[\\/]/,__tests__:/(.+)\/__tests__\/(.+)/,extract_func:/"rr\((.+?)\)rr"/g};
package/lib/common.mjs CHANGED
@@ -1 +1 @@
1
- import{extname as e,join as t,resolve as s}from"node:path";import{argv as o}from"node:process";import a,{config_files as n,CUSTOMCONFIG as i,TMP_DIR as r}from"./commom/paths.mjs";import{OverrideResolverPlugin as l}from"./plugin/override-resolve.mjs";import{isObject as c,md5 as m,node_modules as p,resolveProgram as u}from"./utils/index.mjs";import h from"./vm/info.mjs";import{CONFIG as d}from"./config.mjs";import f from"./plugins.config.mjs";import{isCI as g,isDev as y,isLibrary as b,NODE_ENV as j,packageJson as v}from"./process-env.mjs";export const outputConfig={path:u(b?"docs":"dist"),filename:e=>e.filename?.includes(".worker")?"worker/[name].js":"js/[name].[contenthash].bundle.js",chunkFilename:"js/[contenthash].chunk.js",cssFilename:"style/[contenthash].css",cssChunkFilename:"style/[contenthash].chunk.css",assetModuleFilename:t=>{let s=e(t.filename||"").substring(1);return`assets/${s}/[hash][ext]`},library:{name:`${h.projectName}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${v.name}`,pathinfo:y,clean:!0,publicPath:d.publicPath,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"use-credentials",enabledWasmLoadingTypes:["fetch"],uniqueName:`${h.projectName}`};let C={main:["app:entry"]},P=[t(a.corePath,"./polyfills/public-path.mjs")];if(y&&d.refresh&&d.env.injectRemoteReactRefresh&&P.push(t(a.corePath,"./polyfills/inject-react-refresh.mjs")),d.polyfill&&P.push(t(a.corePath,"./polyfills/replace-children.mjs")),d.entry&&("string"==typeof d.entry?C={...C,main:[d.entry]}:Object.keys(d.entry)&&(C=Object.assign(C,d.entry))),"string"==typeof C.main?C.main=[...P,C.main]:Array.isArray(C.main)&&(C.main=[...P,...C.main]),d.output){if("string"==typeof d.output)outputConfig.path=d.output;else if(Object.keys(d.output)){let e=d.output,t={...outputConfig.library};Object.assign(outputConfig,e),"object"==typeof d.output&&e.library&&(outputConfig.library=Object.assign(t,e.library))}}let k={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:a.webpackCachePath,memoryCacheUnaffected:!y,name:m(`${i}-${j}-${o[2]}`),version:`${v.version}`,buildDependencies:{config:n},maxMemoryGenerations:1};!1===d.cache?k=!1:c(d.cache)&&(k=Object.assign(k,d.cache)),g&&(void 0===d.cache||d.cache&&!d.cache.cacheDirectory)&&(k.cacheDirectory=s(r,v.name));let x={},M={imports:!0,entries:!0,test:e=>{let t=e.nameForCondition();return!!(t&&(t.startsWith(p("app:example"))||t.startsWith(p("app:comment"))||t.startsWith(a.pagesPath)||t.startsWith(a.componentsPath)))}};d.lazyCompilation&&y&&"true"!==process.env.IS_BUILD?c(d.lazyCompilation)?Object.assign(x,M,d.lazyCompilation):Object.assign(x,M):x=!1;export const commonConfig={name:"client",target:"web",devtool:d.devtool,entry:C,mode:d.mode??"production",stats:"errors-only",cache:k,snapshot:{immutablePaths:[a.pnpmNodeModules,a.denoNodeModules,/node_modules\/(?!(app:)\/)/],managedPaths:[a.pnpmNodeModules,a.denoNodeModules,/node_modules\/(?!(app:)\/)/],resolveBuildDependencies:{timestamp:!0,hash:!0},resolve:{timestamp:!0,hash:!0},module:{timestamp:!0,hash:!0},buildDependencies:{timestamp:!0,hash:!0},contextModule:{timestamp:!0,hash:!0}},infrastructureLogging:{level:"error"},externalsPresets:d.externalsPresets,plugins:f,node:{global:!1,__filename:!1,__dirname:!1},experiments:{asyncWebAssembly:!0,cacheUnaffected:!y,lazyCompilation:x,buildHttp:c(d.buildHttp)?{allowedUris:[],lockfileLocation:s(a.httpCachePath,"http.lock"),cacheLocation:s(a.httpCachePath,"data"),upgrade:!0,...d.buildHttp}:d.buildHttp,backCompat:!0,futureDefaults:!0,css:!0,outputModule:!1},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:d.alias,modules:[a.nodeModules,a.pnpmNodeModules,a.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:d.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:d.externals,output:outputConfig,recordsPath:d.recordsPath?t(a.programPath,d.recordsPath):t(a.webpackCachePath,"records.json")};d.overrideResolve&&commonConfig.resolve.plugins.push(new l(Object.assign({original:d.alias["@"],override:i&&u(i)},d.overrideResolve)));
1
+ import{extname as e,join as t,resolve as o}from"node:path";import{argv as s}from"node:process";import a,{config_files as n,CUSTOMCONFIG as i,TMP_DIR as r}from"./commom/paths.mjs";import l from"./commom/rule.mjs";import{OverrideResolverPlugin as m}from"./plugin/override-resolve.mjs";import{isObject as c,md5 as p,resolveProgram as u}from"./utils/index.mjs";import h from"./vm/info.mjs";import{CONFIG as d}from"./config.mjs";import f from"./plugins.config.mjs";import{app_schema as g,docs_schema as y,isCI as b,isDev as j,isLibrary as v,NODE_ENV as C,packageJson as P}from"./process-env.mjs";export const outputConfig={path:u(v?"docs":"dist"),filename:e=>e.filename?.includes(".worker")?"worker/[name].js":"js/[name].[contenthash].bundle.js",chunkFilename:"js/[contenthash].chunk.js",cssFilename:"style/[contenthash].css",cssChunkFilename:"style/[contenthash].chunk.css",assetModuleFilename:t=>{let o=e(t.filename||"").substring(1);return`assets/${o}/[hash][ext]`},library:{name:`${h.projectName}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${P.name}`,pathinfo:j,clean:!0,publicPath:d.publicPath,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"use-credentials",enabledWasmLoadingTypes:["fetch"],uniqueName:`${h.projectName}`};let k={main:[`${g}:entry`]},x=[t(a.corePath,"./polyfills/public-path.mjs")];if(j&&x.push(`${g}:mock`),j&&d.refresh&&d.env.injectRemoteReactRefresh&&x.push(t(a.corePath,"./polyfills/inject-react-refresh.mjs")),d.polyfill&&x.push(t(a.corePath,"./polyfills/replace-children.mjs")),d.entry&&("string"==typeof d.entry?k={...k,main:[d.entry]}:Object.keys(d.entry)&&(k=Object.assign(k,d.entry))),"string"==typeof k.main?k.main=[...x,k.main]:Array.isArray(k.main)&&(k.main=[...x,...k.main]),d.output){if("string"==typeof d.output)outputConfig.path=d.output;else if(Object.keys(d.output)){let e=d.output,t={...outputConfig.library};Object.assign(outputConfig,e),"object"==typeof d.output&&e.library&&(outputConfig.library=Object.assign(t,e.library))}}let M={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:a.webpackCachePath,memoryCacheUnaffected:!j,name:p(`${i}-${C}-${s[2]}`),version:`${P.version}`,buildDependencies:{config:n},maxMemoryGenerations:1};!1===d.cache?M=!1:c(d.cache)&&(M=Object.assign(M,d.cache)),b&&(void 0===d.cache||d.cache&&!d.cache.cacheDirectory)&&(M.cacheDirectory=o(r,P.name));let $={},w={imports:!0,entries:!0,test:e=>{let t=e.nameForCondition();return!!(t&&(t.includes(`${y}:example`)||t.includes(`${y}:comment`)||t.startsWith(a.pagesPath)||t.startsWith(a.componentsPath)))}};d.lazyCompilation&&j&&"true"!==process.env.IS_BUILD?c(d.lazyCompilation)?Object.assign($,w,d.lazyCompilation):Object.assign($,w):$=!1;export const commonConfig={name:"client",target:"web",devtool:d.devtool,entry:k,mode:d.mode??"production",stats:"errors-only",cache:M,snapshot:{immutablePaths:[a.pnpmNodeModules,a.denoNodeModules,l.node_modules],managedPaths:[a.pnpmNodeModules,a.denoNodeModules,l.node_modules],resolveBuildDependencies:{timestamp:!0,hash:!0},resolve:{timestamp:!0,hash:!0},module:{timestamp:!0,hash:!0},buildDependencies:{timestamp:!0,hash:!0},contextModule:{timestamp:!0,hash:!0}},infrastructureLogging:{level:"error"},externalsPresets:d.externalsPresets,plugins:f,node:{global:!1,__filename:!1,__dirname:!1},experiments:{asyncWebAssembly:!0,cacheUnaffected:!j,lazyCompilation:$,buildHttp:c(d.buildHttp)?{allowedUris:[],lockfileLocation:o(a.httpCachePath,"http.lock"),cacheLocation:o(a.httpCachePath,"data"),upgrade:!0,...d.buildHttp}:d.buildHttp,backCompat:!0,futureDefaults:!0,css:!0,outputModule:!1},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:d.alias,modules:[a.nodeModules,a.pnpmNodeModules,a.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:d.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:d.externals,output:outputConfig,recordsPath:d.recordsPath?t(a.programPath,d.recordsPath):t(a.webpackCachePath,"records.json")};d.overrideResolve&&commonConfig.resolve.plugins.push(new m(Object.assign({original:d.alias["@"],override:i&&u(i)},d.overrideResolve)));
package/lib/config.mjs CHANGED
@@ -1 +1 @@
1
- import{join as e,relative as o}from"node:path";import t from"node:process";import{merge as a}from"webpack-merge";import n from"./commom/paths.mjs";import s from"./commom/setup-env.mjs";import r from"./options/jsx-dom-expressions.mjs";import i from"./options/split-chunk.mjs";import{getConfigWithTypescript as l,isFunction as m,node_modules as p,resolveProgram as c}from"./utils/index.mjs";import{APPTYPE as u,FRAMEWORK as d,frameworkVersion as f,isCI as h,isDev as g,isLibrary as v,isMobile as x,isReact as P,jsxImportSource as b,mainDirectory as C,NODE_ENV as j,PACKAGENAME as k}from"./process-env.mjs";let w=[/(app|vm):[a-zA-Z_0-9]/,"@moneko","neko-ui",".cache/http/data","@element-plus","ant-design-vue","element-plus","element-ui","ng-zorro-antd","@mui","@du","@fontsource","@fortawesome","font-pingfang-sc","font-pingfang-tc","katex","react-markdown-editor-lite","react-photo-view","schema-design","monaco-editor"];export async function getConfig(e){let o=l(e).default;return(m(o)?await o(t):o)??{}}let I=await s(j,u,d,[],"true"===t.env.IS_BUILD),[O,S]=await Promise.all([getConfig(n.configPath),getConfig(n.customConfigPath)]),y={mode:j,strict:!1,devtool:"true"!==t.env.IS_BUILD&&g?"eval-cheap-module-source-map":"cheap-module-source-map",seo:!1,bundleAnalyzer:!1,polyfill:!1,entry:{},minifier:{},sourceMap:{filename:"[file].map",publicPath:"",namespace:k,moduleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]",fallbackModuleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]"},env:I,basename:"/",publicPath:"auto",rem:{designSize:x?375:1920},fallbackCompPath:null,modifyVars:{},prefixCls:"n",alias:Object.assign({"@":c(C)},P&&f<18?{"react/package.json":p("react/package.json"),"react/jsx-runtime":p("react/jsx-runtime.js"),"react/jsx-dev-runtime":p("react/jsx-dev-runtime.js")}:{}),moduleRules:[],prefixJsLoader:[],cssModules:[],cssModuleDefinition:!0,importOnDemand:{},proxy:{},devServer:{host:"localhost",port:3e3,open:!0},htmlPluginOption:{title:k.toLocaleUpperCase(),favicon:o(n.programPath,`${n.corePath}/options/favicon.ico`)},copy:{},routerMode:"browser",fixBrowserRouter:!1,plugins:[],resolvePlugins:[],overrideResolve:!1,splitChunk:i,runtimeChunk:"single",moduleFederation:[],rulesInclude:{css:w,js:w,media:w,font:w,wasm:[]},mdx:{jsx:!1,development:g,jsxImportSource:b,providerImportSource:`@moneko/${d}/mdx`},jsxDomExpressions:r,bar:{name:"Client",nameColor:"68",msgColor:"242",barBgColor:"15",barColor:"69",quiet:h},normalizeCss:!0,externalsPresets:{},buildHttp:void 0,virtualModule:{},cssExtract:{},externals:["@swc/core"],lazyCompilation:!1,performance:!1,refresh:"solid"!==d,bundleId:"com.moneko.bid",bundles:[],stylelint:{},eslint:{lintDirtyModulesOnly:!1},minChunkSize:1e3,compression:"true"!==t.env.IS_BUILD,manifest:{filename:"site.webmanifest"},corepack:!0,reactJsxRuntime:"automatic"};v&&(y.alias=Object.assign(y.alias,{"@pkg":n.componentsPath,[k]:n.componentsPath}));let M=y;(!1===(M=a(M,O,S)).devtool||!1===M.sourceMap)&&(M.sourceMap=!1,M.devtool=!1),"true"===t.env.CODESPACES&&(M.devServer.https=!1),!1===M.devServer.https&&"darwin"===t.platform&&(M.devServer.open=!1),M.htmlPluginOption&&(M.htmlPluginOption.tags||(M.htmlPluginOption.tags=[]),M.fixBrowserRouter&&M.htmlPluginOption.tags.push({textContent:"(function(l) {if (l.search[1] === '/' ) {var decoded = l.search.slice(1).split('&').map(function(s) {return s.replace(/~and~/g, '&')}).join('?');window.history.replaceState(null, null,l.pathname.slice(0, -1) + decoded + l.hash);}}(window.location))"}),M.manifest&&(M.manifest.publicPath||(M.manifest.publicPath=M.basename),M.htmlPluginOption.tags.push({href:e(M.manifest.publicPath,M.manifest.filename).replaceAll(/\\/g,"/"),tag:"link",rel:"manifest"})));export const CONFIG=M;export const PUBLICPATH="auto"===CONFIG.publicPath?"":CONFIG.publicPath;
1
+ import{join as e,relative as o}from"node:path";import t from"node:process";import{merge as a}from"webpack-merge";import n from"./commom/paths.mjs";import s from"./commom/setup-env.mjs";import r from"./options/jsx-dom-expressions.mjs";import i from"./options/split-chunk.mjs";import{getConfigWithTypescript as l,isFunction as m,node_modules as p,resolveProgram as c}from"./utils/index.mjs";import{APPTYPE as u,FRAMEWORK as d,frameworkVersion as f,isCI as h,isDev as g,isLibrary as v,isMobile as x,isReact as P,jsxImportSource as b,mainDirectory as C,NODE_ENV as j,PACKAGENAME as k}from"./process-env.mjs";let w=[/(app|vm|docs|example):[a-zA-Z_0-9]/,"@moneko","neko-ui",".cache/http/data","@element-plus","ant-design-vue","element-plus","element-ui","ng-zorro-antd","@mui","@du","@fontsource","@fortawesome","font-pingfang-sc","font-pingfang-tc","katex","react-markdown-editor-lite","react-photo-view","schema-design","monaco-editor"];export async function getConfig(e){let o=l(e).default;return(m(o)?await o(t):o)??{}}let I=await s(j,u,d,[],"true"===t.env.IS_BUILD),[O,S]=await Promise.all([getConfig(n.configPath),getConfig(n.customConfigPath)]),y={mode:j,strict:!1,devtool:"true"!==t.env.IS_BUILD&&g?"eval-cheap-module-source-map":"cheap-module-source-map",seo:!1,bundleAnalyzer:!1,polyfill:!1,entry:{},minifier:{},sourceMap:{filename:"[file].map",publicPath:"",namespace:k,moduleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]",fallbackModuleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]"},env:I,basename:"/",publicPath:"auto",rem:{designSize:x?375:1920},fallbackCompPath:null,modifyVars:{},prefixCls:"n",alias:Object.assign({"@":c(C)},P&&f<18?{"react/package.json":p("react/package.json"),"react/jsx-runtime":p("react/jsx-runtime.js"),"react/jsx-dev-runtime":p("react/jsx-dev-runtime.js")}:{}),moduleRules:[],prefixJsLoader:[],cssModules:[],cssModuleDefinition:!0,importOnDemand:{},proxy:{},devServer:{host:"localhost",port:3e3,open:!0},htmlPluginOption:{title:k.toLocaleUpperCase(),favicon:o(n.programPath,`${n.corePath}/options/favicon.ico`)},copy:{},routerMode:"browser",fixBrowserRouter:!1,plugins:[],resolvePlugins:[],overrideResolve:!1,splitChunk:i,runtimeChunk:"single",moduleFederation:[],rulesInclude:{css:w,js:w,media:w,font:w,wasm:[]},mdx:{jsx:!1,development:g,jsxImportSource:b,providerImportSource:`@moneko/${d}/mdx`},jsxDomExpressions:r,bar:{name:"Client",nameColor:"68",msgColor:"242",barBgColor:"15",barColor:"69",quiet:h},normalizeCss:!0,externalsPresets:{},buildHttp:void 0,virtualModule:{},cssExtract:{},externals:["@swc/core"],lazyCompilation:!1,performance:!1,refresh:"solid"!==d,bundleId:"com.moneko.bid",bundles:[],stylelint:{},eslint:{lintDirtyModulesOnly:!1},minChunkSize:1e3,compression:"true"!==t.env.IS_BUILD,manifest:{filename:"site.webmanifest"},corepack:!0,reactJsxRuntime:"automatic"};v&&(y.alias=Object.assign(y.alias,{"@pkg":n.componentsPath,[k]:n.componentsPath}));let M=y;(!1===(M=a(M,O,S)).devtool||!1===M.sourceMap)&&(M.sourceMap=!1,M.devtool=!1),"true"===t.env.CODESPACES&&(M.devServer.https=!1),!1===M.devServer.https&&"darwin"===t.platform&&(M.devServer.open=!1),M.htmlPluginOption&&(M.htmlPluginOption.tags||(M.htmlPluginOption.tags=[]),M.fixBrowserRouter&&M.htmlPluginOption.tags.push({textContent:"(function(l) {if (l.search[1] === '/' ) {var decoded = l.search.slice(1).split('&').map(function(s) {return s.replace(/~and~/g, '&')}).join('?');window.history.replaceState(null, null,l.pathname.slice(0, -1) + decoded + l.hash);}}(window.location))"}),M.manifest&&(M.manifest.publicPath||(M.manifest.publicPath=M.basename),M.htmlPluginOption.tags.push({href:e(M.manifest.publicPath,M.manifest.filename).replaceAll(/\\/g,"/"),tag:"link",rel:"manifest"})));export const CONFIG=M;export const PUBLICPATH="auto"===CONFIG.publicPath?"":CONFIG.publicPath;
@@ -53,13 +53,10 @@ export type YApiOption = {
53
53
  * @returns {Promise} data
54
54
  */
55
55
  export declare const yApiMock: (req: RequestFormData, yapi: YApiOption) => Promise<Any>;
56
- export interface MockPluginOptions {
57
- directory: string;
58
- }
59
- export declare const oldMock: MockConfiguration;
60
- export declare let nextMock: MockConfiguration;
56
+ export declare const updateMocks: () => {} | undefined;
57
+ export declare let mocks: MockConfiguration;
61
58
  export declare function containMockUrl(url: string): string | undefined;
62
- declare const setupMock: (options: MockPluginOptions) => ((req: RequestFormData, res: ServerResponse<IncomingMessage> & {
59
+ declare const setupMock: () => ((req: RequestFormData, res: ServerResponse<IncomingMessage> & {
63
60
  req: IncomingMessage;
64
61
  }) => boolean | (http.ServerResponse<http.IncomingMessage> & {
65
62
  req: IncomingMessage;
package/lib/dev/mock.mjs CHANGED
@@ -1 +1 @@
1
- import e from"node:http";import{StringDecoder as t}from"node:string_decoder";import{URL as r}from"node:url";import{directoryExists as o,ink as n,print as a}from"@moneko/utils";import{watch as c}from"chokidar";import{merge as i}from"webpack-merge";import s from"../commom/log.mjs";import d from"../commom/match-path.mjs";import l,{METHOD_COLOR as m}from"../commom/print-log.mjs";import p from"../commom/require.mjs";import{jsonSchema as u}from"./json-schema.mjs";function f(e){return!["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||"")}export function cacheBody(e){if(!e._bodyCached&&f(e)&&!e.readableEnded){e._bodyCached=!0;try{let t=[],r=e.on.bind(e),o=e.emit.bind(e),n=!1;e.on=function(e,o){return"data"!==e||n||(n=!0,r("data",e=>{t.push(e)})),r(e,o)};let a=!1;e.emit=function(r,...n){return"end"===r&&!a&&(a=!0,t.length>0&&(e._dataChunks=t)),o.call(this,r,...n)}}catch(e){s(e)}}}function h(e,r){try{let o=Buffer.concat(e);if(r.includes("application/json")){let e=new t("utf-8").write(o);return JSON.parse(e)}if(r.includes("application/octet-stream")||r.startsWith("image/"));else if(r.includes("text/"))return o.toString("utf-8");else if(r.includes("application/x-www-form-urlencoded"))return Object.fromEntries(new URLSearchParams(o.toString("utf8")));return o}catch(e){return s(e),null}}async function g(e){return new Promise(t=>{if(!f(e))return void t(null);let r=e.headers["content-type"]||"",o=e.headers["content-length"],n=e.headers["transfer-encoding"],a=[];return void 0!==e._dataChunks?void t(h(e._dataChunks,r)):o||n?void(e.on("data",e=>{a.push(e)}),e.on("end",()=>{t(h(a,r))}),e.on("error",e=>{t(null),s(e)})):void t(null)})}function y(e,t,r){if(delete p.cache[t],r[t]){for(let o in r[t])Object.prototype.hasOwnProperty.call(r[t],o)&&(e[o]=null,delete e[o]);r[t]=null,delete r[t]}}export const yApiSchemaMock=(t,r)=>new Promise(o=>{e.get(`${t.host}/api/interface/get?id=${t.id}&token=${t.token}`,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{let e=JSON.parse(t);if(e?.data?.res_body_is_json_schema){let t=JSON.parse(e.data.res_body),n=u(t);void 0!==r?o(i(n,r)):o(n)}}catch(e){s(e)}})})});export const yApiMock=(t,o)=>new Promise((n,a)=>{let c=new r(o.host),i={hostname:c.hostname,port:c.port,path:t.url?.replace(new RegExp(o.pathRewrite),`/mock/${o.projectId}/`),method:t.method,headers:t.headers,query:Object.fromEntries(c.searchParams)},d=e.request(i,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{n(JSON.parse(t))}catch(e){s(e)}})});d.on("error",e=>{a(e.message)}),d.write(JSON.stringify(t.body)),d.end()});export const oldMock={};export let nextMock={};export function containMockUrl(e){return Object.keys(nextMock).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}export default(e=>{if(!o(e.directory))return;let t=!0;return c(e.directory).on("all",async function(e,r){if("string"==typeof r){switch(a(n("Updating mock...","245"),!0),e){case"add":case"change":try{y(nextMock,r,oldMock);let e=p(r).default;oldMock[r]=e,nextMock=Object.assign(nextMock,e)}catch(e){s(e)}break;case"unlink":y(nextMock,r,oldMock)}t?t=!1:a(n("Mock update successful","245"),!0)}}),(e,t)=>{if(t.writableEnded)return t;let o=new r(`http://localhost:3000${e.url}`),n=e.method||"GET",a=`${n} ${o.pathname}`,c=containMockUrl(a)||a,i=nextMock[c];if(i){if(l(n,o.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:m[n].fg,labelBackgroundColor:m[n].bg}),t.send=e=>t.end("string"==typeof e?e:JSON.stringify(e)),t.writeHead(200,{"Content-Type":e.headers["content-type"]}),"function"==typeof i){let r=d(c.split(" ")[1],o.pathname);o.searchParams&&Object.assign(e,{query:Object.fromEntries(o.searchParams)}),r&&Object.assign(e,{params:r.params}),e.body=g(e);try{i(e,t)}catch(e){s(e)}return!0}return t.end("string"==typeof i?i:JSON.stringify(i)),!0}return!1}});
1
+ import e from"node:http";import{StringDecoder as t}from"node:string_decoder";import{URL as r}from"node:url";import{directoryExists as o,ink as n,print as a,scanFolderSync as c}from"@moneko/utils";import{merge as i}from"webpack-merge";import s from"../commom/log.mjs";import m from"../commom/match-path.mjs";import d from"../commom/paths.mjs";import l,{METHOD_COLOR as p}from"../commom/print-log.mjs";import u from"../commom/require.mjs";import{jsonSchema as f}from"./json-schema.mjs";function h(e){return!["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||"")}export function cacheBody(e){if(!e._bodyCached&&h(e)&&!e.readableEnded){e._bodyCached=!0;try{let t=[],r=e.on.bind(e),o=e.emit.bind(e),n=!1;e.on=function(e,o){return"data"!==e||n||(n=!0,r("data",e=>{t.push(e)})),r(e,o)};let a=!1;e.emit=function(r,...n){return"end"===r&&!a&&(a=!0,t.length>0&&(e._dataChunks=t)),o.call(this,r,...n)}}catch(e){s(e)}}}function g(e,r){try{let o=Buffer.concat(e);if(r.includes("application/json")){let e=new t("utf-8").write(o);return JSON.parse(e)}if(r.includes("application/octet-stream")||r.startsWith("image/"));else if(r.includes("text/"))return o.toString("utf-8");else if(r.includes("application/x-www-form-urlencoded"))return Object.fromEntries(new URLSearchParams(o.toString("utf8")));return o}catch(e){return s(e),null}}async function y(e){return new Promise(t=>{if(!h(e))return void t(null);let r=e.headers["content-type"]||"",o=e.headers["content-length"],n=e.headers["transfer-encoding"],a=[];return void 0!==e._dataChunks?void t(g(e._dataChunks,r)):o||n?void(e.on("data",e=>{a.push(e)}),e.on("end",()=>{t(g(a,r))}),e.on("error",e=>{t(null),s(e)})):void t(null)})}export const yApiSchemaMock=(t,r)=>new Promise(o=>{e.get(`${t.host}/api/interface/get?id=${t.id}&token=${t.token}`,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{let e=JSON.parse(t);if(e?.data?.res_body_is_json_schema){let t=JSON.parse(e.data.res_body),n=f(t);void 0!==r?o(i(n,r)):o(n)}}catch(e){s(e)}})})});export const yApiMock=(t,o)=>new Promise((n,a)=>{let c=new r(o.host),i={hostname:c.hostname,port:c.port,path:t.url?.replace(new RegExp(o.pathRewrite),`/mock/${o.projectId}/`),method:t.method,headers:t.headers,query:Object.fromEntries(c.searchParams)},m=e.request(i,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{n(JSON.parse(t))}catch(e){s(e)}})});m.on("error",e=>{a(e.message)}),m.write(JSON.stringify(t.body)),m.end()});export const updateMocks=()=>{if(!o(d.mockPath))return{};let e={},t=c(d.mockPath,["\\.(t|j)s$"]);a(n("Updating mock...","245"),!0),t.forEach(t=>{try{delete u.cache[t],e[t]=u(t).default}catch(e){s(e)}}),a(n("Mock update successful","245"),!0),mocks=e};export let mocks={};export function containMockUrl(e){return Object.keys(mocks).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}export default(()=>{if(o(d.mockPath))return updateMocks(),(e,t)=>{if(t.writableEnded)return t;let o=new r(`http://localhost:3000${e.url}`),n=e.method||"GET",a=`${n} ${o.pathname}`,c=containMockUrl(a)||a,i=mocks[c];if(i){if(l(n,o.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:p[n].fg,labelBackgroundColor:p[n].bg}),t.send=e=>t.end("string"==typeof e?e:JSON.stringify(e)),t.writeHead(200,{"Content-Type":e.headers["content-type"]}),"function"==typeof i){let r=m(c.split(" ")[1],o.pathname);o.searchParams&&Object.assign(e,{query:Object.fromEntries(o.searchParams)}),r&&Object.assign(e,{params:r.params}),e.body=y(e);try{i(e,t)}catch(e){s(e)}return!0}return t.end("string"==typeof i?i:JSON.stringify(i)),!0}return!1}});
@@ -1 +1 @@
1
- import{createServer as e}from"node:http";import{createServer as t}from"node:https";import{platform as o}from"node:os";import{extname as r,join as n,sep as i}from"node:path";import{env as s}from"node:process";import{ink as a,println as m}from"@moneko/utils";import{CA_ORGANIZATION as p,isCertificateInstalled as l}from"../commom/ca.mjs";import c from"../commom/mime.mjs";import d from"../commom/open.mjs";import C from"../commom/paths.mjs";import{CONFIG as f}from"../config.mjs";import h from"../dev/get-cert.mjs";import{setupProxy as u}from"../dev/proxy.mjs";import A,{cacheBody as y}from"./mock.mjs";let E={"Access-Control-Allow-Credentials":"true","Access-Control-Allow-Headers":"Authorization, Content-Type, Accept, X-Requested-With, Origin, DNT, User-Agent, Cache-Control, X-CSRF-Token, X-API-Key, X-Client-Version, X-Device-ID, Content-Language, Accept-Language, X-Custom-Header, X-Mx-ReqToken, Keep-Alive, If-Modified-Since","Access-Control-Allow-Methods":"GET, DELETE, HEAD, OPTIONS, POST, PUT, PATCH, PURGE, LINK, UNLINK, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, REPORT, SEARCH, CONNECT, TRACE","Access-Control-Allow-Origin":"*","Cache-Control":"no-store, no-cache, must-revalidate, proxy-revalidate",Pragma:"no-cache",Expires:"0"};async function T(T){let g=n(T.root_dir,"index.html"),w=A({directory:C.mockPath});function O(e,t,o){let n=e.headers["accept-encoding"],i=n?.includes("br"),s=`${o}.${i?"br":"gz"}`,a=T.fileSystem.existsSync(s);a&&t.setHeader("Content-Encoding",i?"br":"gzip");let m=T.fileSystem.createReadStream(a?s:o,{autoClose:!0});m.on("open",()=>{t.writeHead(200,Object.assign({},E,T.headers,{"Access-Control-Allow-Origin":e.headers.origin??"*","Content-Type":c[r(o)]||"application/octet-stream"}))}),m.on("error",e=>{switch(m.readable=!0,e.code){case"ENOENT":t.writeHead(301,{Location:"/index.html"}),t.end();break;case"EACCES":t.writeHead(403,{"Content-Type":"text/plain"}),t.end(`Forbidden: ${e.message}`);break;default:t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Internal Server Error: ${e.message}`)}}),m.pipe(t)}async function x(e,t){if(y(e),!(T.onRequest&&T.onRequest(e,t))){if(!(f.proxy&&await u(e,t,f.proxy)||t.writableEnded||w&&w(e,t))&&!t.writableEnded){if("GET"===e.method){let o="/"===e.url?g:decodeURIComponent(n(T.root_dir,e.url.replace(T.basename??"/","/")));if(T.fileSystem.existsSync(o))return O(e,t,o)}if(e.headers.accept?.includes("text/html"))return O(e,t,g);t.writeHead(404,{"Content-Type":"text/plain"}),t.end("File Not Found")}}}let S=T.https?t(await h(T.host,!0===T.https?{install:!0}:T.https),x):e(x);if(S.listen(T.port),T.https&&!await l(p)&&"darwin"===o()){let e=s.npm_execpath?.split(i).pop()?.split(".").shift()||"npm",t=s.npm_lifecycle_event??"start",o=`> sudo ${e} ${t}`;m(a("⚠️ 未检测到本地 SSL 证书,请通过以下命令重启项目以安装证书: ","yellow")),m(a(o,"yellow")),m("")}return T.open&&d(`${T.https?"https:":"http:"}//${T.host}:${T.port}${"/"===T.basename?"":T.basename}`),S}export default T;
1
+ import{createServer as e}from"node:http";import{createServer as t}from"node:https";import{platform as o}from"node:os";import{extname as r,join as n,sep as i}from"node:path";import{env as s}from"node:process";import{ink as a,println as m}from"@moneko/utils";import{CA_ORGANIZATION as l,isCertificateInstalled as p}from"../commom/ca.mjs";import c from"../commom/mime.mjs";import d from"../commom/open.mjs";import{CONFIG as C}from"../config.mjs";import f from"../dev/get-cert.mjs";import{setupProxy as h}from"../dev/proxy.mjs";import u,{cacheBody as A}from"./mock.mjs";let E={"Access-Control-Allow-Credentials":"true","Access-Control-Allow-Headers":"Authorization, Content-Type, Accept, X-Requested-With, Origin, DNT, User-Agent, Cache-Control, X-CSRF-Token, X-API-Key, X-Client-Version, X-Device-ID, Content-Language, Accept-Language, X-Custom-Header, X-Mx-ReqToken, Keep-Alive, If-Modified-Since","Access-Control-Allow-Methods":"GET, DELETE, HEAD, OPTIONS, POST, PUT, PATCH, PURGE, LINK, UNLINK, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, REPORT, SEARCH, CONNECT, TRACE","Access-Control-Allow-Origin":"*","Cache-Control":"no-store, no-cache, must-revalidate, proxy-revalidate",Pragma:"no-cache",Expires:"0"};async function y(y){let T=n(y.root_dir,"index.html"),g=u();function w(e,t,o){let n=e.headers["accept-encoding"],i=n?.includes("br"),s=`${o}.${i?"br":"gz"}`,a=y.fileSystem.existsSync(s);a&&t.setHeader("Content-Encoding",i?"br":"gzip");let m=y.fileSystem.createReadStream(a?s:o,{autoClose:!0});m.on("open",()=>{t.writeHead(200,Object.assign({},E,y.headers,{"Access-Control-Allow-Origin":e.headers.origin??"*","Content-Type":c[r(o)]||"application/octet-stream"}))}),m.on("error",e=>{switch(m.readable=!0,e.code){case"ENOENT":t.writeHead(301,{Location:"/index.html"}),t.end();break;case"EACCES":t.writeHead(403,{"Content-Type":"text/plain"}),t.end(`Forbidden: ${e.message}`);break;default:t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Internal Server Error: ${e.message}`)}}),m.pipe(t)}async function O(e,t){if(A(e),!(y.onRequest&&y.onRequest(e,t))){if(!(C.proxy&&await h(e,t,C.proxy)||t.writableEnded||g&&g(e,t))&&!t.writableEnded){if("GET"===e.method){let o="/"===e.url?T:decodeURIComponent(n(y.root_dir,e.url.replace(y.basename??"/","/")));if(y.fileSystem.existsSync(o))return w(e,t,o)}if(e.headers.accept?.includes("text/html"))return w(e,t,T);t.writeHead(404,{"Content-Type":"text/plain"}),t.end("File Not Found")}}}let x=y.https?t(await f(y.host,!0===y.https?{install:!0}:y.https),O):e(O);if(x.listen(y.port),y.https&&!await p(l)&&"darwin"===o()){let e=s.npm_execpath?.split(i).pop()?.split(".").shift()||"npm",t=s.npm_lifecycle_event??"start",o=`> sudo ${e} ${t}`;m(a("⚠️ 未检测到本地 SSL 证书,请通过以下命令重启项目以安装证书: ","yellow")),m(a(o,"yellow")),m("")}return y.open&&d(`${y.https?"https:":"http:"}//${y.host}:${y.port}${"/"===y.basename?"":y.basename}`),x}export default y;
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{relative as r}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as n,print as a,println as m,progressBar as l}from"@moneko/utils";import p from"webpack";import c from"webpack-hot-middleware";import{merge as h}from"webpack-merge";import{diffObject as f}from"./commom/diff-object.mjs";import d,{config_files as u}from"./commom/paths.mjs";import g from"./commom/sigint-exit.mjs";import{devLog as w,PORT as y}from"./dev/config.mjs";import $ from"./dev/generate-progress-html.mjs";import j from"./dev/server.mjs";import v from"./options/reslove.mjs";import{ESLintPlugin as b}from"./plugin/eslint.mjs";import{StylelintPlugin as x}from"./plugin/stylelint.mjs";import{empty as C}from"./utils/index.mjs";import{CONFIG as _,getConfig as P}from"./config.mjs";import{createDevelopmentConfiguration as S}from"./create-development-configuration.mjs";import{outputFileSystem as k}from"./file-system.mjs";import{isLibrary as E,refresh as B}from"./process-env.mjs";let H=!1,I="/____progress____",O={percentage:0,info:""},T="/__hmr__",q=new URLSearchParams({name:"client",path:T.substring(1),dynamicPublicPath:!0,timeout:2e3,reload:!B,quiet:!0,noInfo:!0,overlay:!1,autoConnect:!0}).toString(),G=await S({watchOptions:{stdin:!0,aggregateTimeout:300,ignored:/node_modules\/(?!(app:)\/)/},entry:{main:[`${v.hotMiddlewareClient}?${q}`]},plugins:[new p.WatchIgnorePlugin({paths:[/node_modules\/(?!(app:)\/)/,/\.d\.ts$/]}),new p.ProgressPlugin({handler(e,t,...o){let r=o.length?`[${t}] ${o.join(" ")}`:" ";H||(O.info=r,O.percentage=e,H=1===e);let s=_.bar;if(s){let t=s.name||"Build";s.quiet?i.stdout.write(`${r}
2
- `):(l(e||0,1,{msg:r,name:t,barColor:s.barColor,nameColor:s.nameColor,barBgColor:s.barBgColor,msgColor:s.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});function L(e){let t=e.join(","),o=[r(d.programPath,`${_.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return E&&o.push(r(d.programPath,`${_.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}_.eslint&&G.plugins.push(new b({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:L(["js","jsx","ts","tsx","json","html","vue"]),..._.eslint})),_.stylelint&&G.plugins.push(new x({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:L(["css","scss","sass","less","ts","tsx","js","jsx"]),..._.stylelint}));let U=p(G);if(!U)throw Error("无法创建编译器");U.outputFileSystem=k;let F=U.watch(U.options.watchOptions,w);if(!F)throw Error("无法创建监视器");U.hooks.done.tap("client-log",e=>{w(null,e)});let N=`${_.basename}/${T}`.replace(/\/+/g,"/"),R=c(U,{log:!1,path:N,heartbeat:2e3}),J=await j({port:y,root_dir:U.options.output.path,fileSystem:U.outputFileSystem,headers:_.devServer.headers,https:_.devServer.https,host:_.devServer.host,open:_.devServer.open,basename:_.basename,onRequest(e,t){if(!t.writableEnded){if("GET"===e.method){let o=new s(`${_.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if(o.pathname===I)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(O)),!0;if(!H)return t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end($(I,O)),!0;if(o.pathname===N&&"text/event-stream"===e.headers.accept)return R(e,t,C),!0}return!1}}});function K(){i.exit(0)}J.on("close",()=>{F.close(C),R.close()});let M=await Promise.all(u.map(P)),W=h(M[0]||{},M[1]||{});u.forEach(function(t){o(t,async function(){var o;let[r,s]=await Promise.all(u.map(P)),l=h(r||{},s||{}),p=f(W,l);1===Object.keys(p).length&&"proxy"in p?(a(n(`代理更新中...`,"yellow"),!0),a(n(`代理更新完成...`,"green"),!0),_.proxy=l.proxy,W.proxy=l.proxy,W=l):(W=l,m(n(`检测到工程配置${n(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),o=y,e(z?`netstat -ano | findstr :${o}`:`lsof -i :${o} -t`,(e,t)=>{if(e){m(n(`查找端口 ${o} 时发生错误: ${e.message}`,"red")),m(n("请尝试手动重启程序","yellow"));return}let r=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),s=z?r[0]?.split(/\s+/).pop()?.trim():r[0]?.trim();if(!s)return void m(n(`未找到占用端口 ${o} 的进程, 请尝试手动重启程序`,"yellow"));try{i.kill(Number(s),"SIGHUP")}catch(e){m(n(`终止进程 ${s} 时发生错误: ${e.message}`,"red"))}}))})});let z="win32"===i.platform;i.on("SIGHUP",function(){J.close(C);let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",K)}),i.on("exit",function(){J.close(C)}),g(K);
1
+ import{exec as e,spawn as t}from"node:child_process";import{watchFile as o}from"node:fs";import{relative as r}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as n,print as a,println as m,progressBar as l}from"@moneko/utils";import p from"webpack";import c from"webpack-hot-middleware";import{merge as f}from"webpack-merge";import{diffObject as h}from"./commom/diff-object.mjs";import d,{config_files as u}from"./commom/paths.mjs";import g from"./commom/rule.mjs";import w from"./commom/sigint-exit.mjs";import{devLog as y,PORT as $}from"./dev/config.mjs";import j from"./dev/generate-progress-html.mjs";import v from"./dev/server.mjs";import b from"./options/reslove.mjs";import{ESLintPlugin as x}from"./plugin/eslint.mjs";import{StylelintPlugin as C}from"./plugin/stylelint.mjs";import{empty as _}from"./utils/index.mjs";import{CONFIG as P,getConfig as S}from"./config.mjs";import{createDevelopmentConfiguration as k}from"./create-development-configuration.mjs";import{outputFileSystem as E}from"./file-system.mjs";import{isLibrary as B,refresh as H}from"./process-env.mjs";let I=!1,O="/____progress____",T={percentage:0,info:""},q="/__hmr__",G=new URLSearchParams({name:"client",path:q.substring(1),dynamicPublicPath:!0,timeout:2e3,reload:!H,quiet:!0,noInfo:!0,overlay:!1,autoConnect:!0}).toString(),L=await k({watchOptions:{stdin:!0,aggregateTimeout:300,ignored:g.node_modules},entry:{main:[`${b.hotMiddlewareClient}?${G}`]},plugins:[new p.WatchIgnorePlugin({paths:[g.node_modules,/\.d\.ts$/]}),new p.ProgressPlugin({handler(e,t,...o){let r=o.length?`[${t}] ${o.join(" ")}`:" ";I||(T.info=r,T.percentage=e,I=1===e);let s=P.bar;if(s){let t=s.name||"Build";s.quiet?i.stdout.write(`${r}
2
+ `):(l(e||0,1,{msg:r,name:t,barColor:s.barColor,nameColor:s.nameColor,barBgColor:s.barBgColor,msgColor:s.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});function U(e){let t=e.join(","),o=[r(d.programPath,`${P.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return B&&o.push(r(d.programPath,`${P.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}P.eslint&&L.plugins.push(new x({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:U(["js","jsx","ts","tsx","json","html","vue"]),...P.eslint})),P.stylelint&&L.plugins.push(new C({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:U(["css","scss","sass","less","ts","tsx","js","jsx"]),...P.stylelint}));let F=p(L);if(!F)throw Error("无法创建编译器");F.outputFileSystem=E;let N=F.watch(F.options.watchOptions,y);if(!N)throw Error("无法创建监视器");F.hooks.done.tap("client-log",e=>{y(null,e)});let R=`${P.basename}/${q}`.replace(/\/+/g,"/"),J=c(F,{log:!1,path:R,heartbeat:2e3}),K=await v({port:$,root_dir:F.options.output.path,fileSystem:F.outputFileSystem,headers:P.devServer.headers,https:P.devServer.https,host:P.devServer.host,open:P.devServer.open,basename:P.basename,onRequest(e,t){if(!t.writableEnded){if("GET"===e.method){let o=new s(`${P.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if(o.pathname===O)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(T)),!0;if(!I)return t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end(j(O,T)),!0;if(o.pathname===R&&"text/event-stream"===e.headers.accept)return J(e,t,_),!0}return!1}}});function M(){i.exit(0)}K.on("close",()=>{N.close(_),J.close()});let W=await Promise.all(u.map(S)),z=f(W[0]||{},W[1]||{});u.forEach(function(t){o(t,async function(){var o;let[r,s]=await Promise.all(u.map(S)),l=f(r||{},s||{}),p=h(z,l);1===Object.keys(p).length&&"proxy"in p?(a(n(`代理更新中...`,"yellow"),!0),a(n(`代理更新完成...`,"green"),!0),P.proxy=l.proxy,z.proxy=l.proxy,z=l):(z=l,m(n(`检测到工程配置${n(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),o=$,e(A?`netstat -ano | findstr :${o}`:`lsof -i :${o} -t`,(e,t)=>{if(e){m(n(`查找端口 ${o} 时发生错误: ${e.message}`,"red")),m(n("请尝试手动重启程序","yellow"));return}let r=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),s=A?r[0]?.split(/\s+/).pop()?.trim():r[0]?.trim();if(!s)return void m(n(`未找到占用端口 ${o} 的进程, 请尝试手动重启程序`,"yellow"));try{i.kill(Number(s),"SIGHUP")}catch(e){m(n(`终止进程 ${s} 时发生错误: ${e.message}`,"red"))}}))})});let A="win32"===i.platform;i.on("SIGHUP",function(){K.close(_);let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",M)}),i.on("exit",function(){K.close(_)}),w(M);
@@ -1 +1 @@
1
- let e;import{join as s,sep as o}from"node:path";import t,{CUSTOMCONFIG as r}from"./commom/paths.mjs";import a from"./commom/require.mjs";import n from"./commom/rule.mjs";import i from"./options/modify-vars.mjs";import l from"./options/reslove.mjs";import m from"./options/swcrc.mjs";import{getLightningCssTargets as c}from"./polyfills/targets.mjs";import{node_modules as p,resolveProgram as d}from"./utils/index.mjs";import u from"./utils/svg-to-data-uri.mjs";import{comment as f,getCommentPath as h}from"./vm/docs.mjs";import y from"./vm/generate-doc.mjs";import{outputConfig as j}from"./common.mjs";import{CONFIG as g}from"./config.mjs";import{FRAMEWORK as v,isDev as x,isLibrary as w}from"./process-env.mjs";let P={loader:s(t.corePath,"/loader/lightning-css.cjs"),options:{sourceMap:!!g.sourceMap,targets:c(),rem:!!g.rem,importLoaders:2}},_={loader:l.lessLoader,options:{sourceMap:!!g.sourceMap,lessOptions:{modifyVars:i,javascriptEnabled:!0}}},L=new Map,M=["components","example","mock","site","src","server"].map(d);function I(e){return new Promise(s=>{s([...M,t.corePath,...g.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(L.has(e))return L.get(e);try{let s,t=a.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),L.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");L.set(e,[s])}catch{L.set(e,[p(e),p(`.pnpm/${e}`)])}return L.get(e)}}(e):e).flat()||[]])})}r&&M.push(d(r)),g.overrideResolve&&g.overrideResolve.override&&M.push(g.overrideResolve.override);let O=await Promise.all([I("css"),I("js"),I("media"),I("wasm"),I("font")]),C=O[0],k=O[1],b=O[2],N=O[3],B=O[4];l.sassLoader&&(e={loader:l.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let E=w&&x&&"true"!==process.env.IS_BUILD&&{test:n.tsdoc,include:g.alias["@pkg"],exclude:[/node_modules\/(?!(app:|@moneko)).+/,n.__tests__],enforce:"pre",loader:s(t.corePath,"/loader/ts-doc.cjs"),options:{comment:f,generateDoc:y,getCommentPath:h}},J=j.library?.type==="umd"&&!1===g.htmlPluginOption,R=[{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:n.wasm,type:"webassembly/async",include:N},{test:n.txt,type:"asset/source"},{test:n.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:J?()=>!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")?u(e.toString()):e},include:b},{test:n.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:b},{test:n.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:B}],S=g.prefixJsLoader.filter(Boolean)||[];"react"===v&&g.reactCompiler&&S.unshift({loader:s(t.corePath,"/loader/react-compiler.cjs"),options:{...g.reactCompiler,panicThreshold:x?void 0:"NONE"}}),g.cssInJs&&"object"==typeof g.cssInJs.minify&&S.unshift({loader:s(t.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},g.cssInJs.minify)});export default(o=>{let r={react:{loader:l.swcLoader,options:m(o)},solid:{loader:s(t.corePath,"/loader/solid.cjs"),options:{jsxOptions:g.jsxDomExpressions,refresh:g.refresh}}}[v];return{generator:{"css/auto":{exportsOnly:!1,exportsConvention:"camel-case-only",localIdentName:"[uniqueName]_[id]_[local]",esModule:!0},"css/module":{exportsOnly:!1,exportsConvention:"camel-case-only",localIdentName:"[uniqueName]_[id]_[local]",esModule:!0}},parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0},css:{import:!0,namedExports:!0,url:!0},json:{exportsDepth:1}},noParse:g.noParse,rules:[!1!==g.htmlPluginOption&&E,{oneOf:[...R,{test:n.js,use:[...S,r].filter(Boolean),include:k,extractSourceMap:!0},...g.cssModules.map(e=>({test:s=>n.node_modules_css_module.test(s)&&s.includes(e),use:[P],type:"css/module"})),{test:n.css,use:[P],type:"css/auto",include:C},e&&{test:n.scss,use:[P,e],type:"css/auto",include:C},{test:n.less,use:[P,_],type:"css/auto",include:C},{test:n.markdown,use:[...S,{loader:s(t.corePath,"/loader/mdx.cjs"),options:g.mdx}].filter(Boolean),exclude:[/node_modules\/(?!(app:|@moneko)).+/]}].filter(Boolean)},...g.moduleRules].filter(Boolean)}});
1
+ let e;import{join as s,sep as o}from"node:path";import t,{CUSTOMCONFIG as r}from"./commom/paths.mjs";import a from"./commom/require.mjs";import n from"./commom/rule.mjs";import i from"./options/modify-vars.mjs";import l from"./options/reslove.mjs";import m from"./options/swcrc.mjs";import{getLightningCssTargets as c}from"./polyfills/targets.mjs";import{node_modules as p,resolveProgram as d}from"./utils/index.mjs";import u from"./utils/svg-to-data-uri.mjs";import{comment as f,getCommentPath as h}from"./vm/docs.mjs";import y from"./vm/generate-doc.mjs";import{outputConfig as j}from"./common.mjs";import{CONFIG as g}from"./config.mjs";import{app_schema as v,FRAMEWORK as x,isDev as w,isLibrary as P,virtual_schema as _}from"./process-env.mjs";let L={loader:s(t.corePath,"/loader/lightning-css.cjs"),options:{sourceMap:!!g.sourceMap,targets:c(),rem:!!g.rem,importLoaders:2}},M={loader:l.lessLoader,options:{sourceMap:!!g.sourceMap,lessOptions:{modifyVars:i,javascriptEnabled:!0}}},I=new Map,O=["components","example","mock","site","src","server"].map(d);function C(e){return new Promise(s=>{s([...O,t.corePath,...g.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(I.has(e))return I.get(e);try{let s,t=a.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),I.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");I.set(e,[s])}catch{I.set(e,[p(e),p(`.pnpm/${e}`)])}return I.get(e)}}(e):e).flat()||[]])})}r&&O.push(d(r)),g.overrideResolve&&g.overrideResolve.override&&O.push(g.overrideResolve.override);let $=await Promise.all([C("css"),C("js"),C("media"),C("wasm"),C("font")]),b=$[0],N=$[1],W=$[2],k=$[3],B=$[4];l.sassLoader&&(e={loader:l.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let E=P&&w&&"true"!==process.env.IS_BUILD&&{test:n.tsdoc,include:g.alias["@pkg"],exclude:[n.node_modules,n.__tests__,e=>e.startsWith(`${v}:`)||e.startsWith(`${_}:`)],enforce:"pre",loader:s(t.corePath,"/loader/ts-doc.cjs"),options:{comment:f,generateDoc:y,getCommentPath:h}},J=j.library?.type==="umd"&&!1===g.htmlPluginOption,R=[{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:n.wasm,type:"webassembly/async",include:k},{test:n.txt,type:"asset/source"},{test:n.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:J?()=>!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")?u(e.toString()):e},include:W},{test:n.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:W},{test:n.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:B}],S=g.prefixJsLoader.filter(Boolean)||[];"react"===x&&g.reactCompiler&&S.unshift({loader:s(t.corePath,"/loader/react-compiler.cjs"),options:{...g.reactCompiler,panicThreshold:w?void 0:"NONE"}}),g.cssInJs&&"object"==typeof g.cssInJs.minify&&S.unshift({loader:s(t.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},g.cssInJs.minify)});export default(o=>{let r={react:{loader:l.swcLoader,options:m(o)},solid:{loader:s(t.corePath,"/loader/solid.cjs"),options:{jsxOptions:g.jsxDomExpressions,refresh:g.refresh}}}[x];return{generator:{"css/auto":{exportsOnly:!1,exportsConvention:"camel-case-only",localIdentName:"[uniqueName]_[id]_[local]",esModule:!0},"css/module":{exportsOnly:!1,exportsConvention:"camel-case-only",localIdentName:"[uniqueName]_[id]_[local]",esModule:!0}},parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0},css:{import:!0,namedExports:!0,url:!0},json:{exportsDepth:1}},noParse:g.noParse,rules:[!1!==g.htmlPluginOption&&E,{oneOf:[...R,{test:n.js,use:[...S,r].filter(Boolean),include:N,extractSourceMap:!0},...g.cssModules.map(e=>({test:s=>n.node_modules_css_module.test(s)&&s.includes(e),use:[L],type:"css/module"})),{test:n.css,use:[L],type:"css/auto",include:b},e&&{test:n.scss,use:[L,e],type:"css/auto",include:b},{test:n.less,use:[L,M],type:"css/auto",include:b},{test:n.markdown,use:[...S,{loader:s(t.corePath,"/loader/mdx.cjs"),options:g.mdx}].filter(Boolean),exclude:[n.node_modules,e=>e.startsWith(`${v}:`)||e.startsWith(`${_}:`)]}].filter(Boolean)},...g.moduleRules].filter(Boolean)}});
@@ -1,5 +1,4 @@
1
1
  declare const reslove: {
2
- styleLoader: string;
3
2
  sassLoader: string | false;
4
3
  lessLoader: string;
5
4
  swcLoader: string;
@@ -1 +1 @@
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"),rawImport:e("@moneko/raw-import"),hotMiddlewareClient:o.resolve("webpack-hot-middleware/client.js")};export default r;
1
+ import o from"../commom/has-pkg.mjs";import e from"../commom/require.mjs";let r={sassLoader:o("sass-loader"),lessLoader:e.resolve("less-loader"),swcLoader:e.resolve("swc-loader"),transformImports:o("@moneko/transform-imports"),rawImport:o("@moneko/raw-import"),hotMiddlewareClient:e.resolve("webpack-hot-middleware/client.js")};export default r;
@@ -1 +1 @@
1
- let e=function(){let e={priority:-10,reuseExistingChunk:!0};return function(n){return{...e,test:n}}}(),n={chunks:"all",minChunks:1,minSize:2e4,maxSize:25e4,enforceSizeThreshold:5e4,maxAsyncRequests:30,maxInitialRequests:30,minRemainingSize:0,hidePathInfo:!0,cacheGroups:{json:{type:"json"},CHANGELOG:e(/CHANGELOG\.md/),site:e(/site/),vendors:{test:/[\\/]node_modules[\\/]/,priority:-10,reuseExistingChunk:!0},"monaco-editor":{test:/[\\/]node_modules[\\/]monaco-editor/,name:"monaco-editor",chunks:"all"},common:{minChunks:2,priority:-20,reuseExistingChunk:!0}}};export default n;
1
+ import e from"../commom/rule.mjs";let n=function(){let e={priority:-10,reuseExistingChunk:!0};return function(n){return{...e,test:n}}}(),i={chunks:"all",minChunks:1,minSize:2e4,maxSize:25e4,enforceSizeThreshold:5e4,maxAsyncRequests:30,maxInitialRequests:30,minRemainingSize:0,hidePathInfo:!0,cacheGroups:{json:{type:"json"},CHANGELOG:n(/CHANGELOG\.md/),site:n(/site/),vendors:{test:e.node_modules,priority:-10,reuseExistingChunk:!0},"monaco-editor":{test:/[\\/]node_modules[\\/]monaco-editor/,name:"monaco-editor",chunks:"all"},common:{minChunks:2,priority:-20,reuseExistingChunk:!0}}};export default i;
@@ -1 +1 @@
1
- import{saveFileSync as e}from"@moneko/utils";import{toCamelCase as s}from"../utils/index.mjs";export class CssModuleDtsPlugin{apply(t){t.hooks.compilation.tap(this.name,t=>{t.hooks.succeedModule.tap(this.name,t=>{if(t.buildMeta?.isCSSModule){let o=t.dependencies.map(e=>{if("name"in e){let t=e.name;return`export const ${s(t)}: string;`}return""}).join("\n");e(`${t.resource}.d.ts`,o)}})})}constructor(){this.name="CssModuleDtsPlugin"}}
1
+ import{saveFileSync as s}from"@moneko/utils";import{toCamelCase as e}from"../utils/index.mjs";export class CssModuleDtsPlugin{apply(o){o.hooks.compilation.tap(this.name,o=>{o.hooks.succeedModule.tap(this.name,o=>{if(o.buildMeta?.isCSSModule){let t=o.dependencies.map(s=>"name"in s?`export const ${e(s.name)}: string;`:"").join("\n");s(`${o.resource}.d.ts`,t)}})})}constructor(){this.name="CssModuleDtsPlugin"}}
@@ -1 +1 @@
1
- import e from"webpack";import{CompressionPlugin as t}from"./plugin/compression.mjs";import{CopyPlugin as i}from"./plugin/copy.mjs";import{CssModuleDtsPlugin as o}from"./plugin/css-module-dts.mjs";import{HtmlPlugin as r}from"./plugin/html-plugin.mjs";import{ManifestPlugin as n}from"./plugin/manifest/index.mjs";import p from"./plugin/module-federation.mjs";import{customVirtualModules as s,vm as l}from"./vm/modules.mjs";import{CONFIG as a}from"./config.mjs";import{packageJson as m}from"./process-env.mjs";let c="object"==typeof a.compression?a.compression:{},h=e.experiments.schemes.VirtualUrlPlugin,u=[...p,new h(l,"app"),a.virtualModule&&new h(s,"vm"),new i(a.copy),new e.DefinePlugin({"process.env":JSON.stringify(a.env)}),new e.IgnorePlugin({resourceRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),new o,...a.plugins].filter(Boolean);if(a.compression&&u.push(new t({algorithm:a.devServer.https?"brotli":"gzip",test:/\.(js|css|html|svg|ttf|woff|woff2|png|jpg|jpeg)$/,...c})),a.manifest&&u.push(new n(a.manifest)),a.htmlPluginOption){let e={charset:"UTF-8","X-UA-Compatible":{"http-equiv":"X-UA-Compatible",content:"IE=edge,Chrome=1"},HandheldFriendly:"true",MobileOptimized:"320","screen-orientation":"portrait","x5-orientation":"portrait",browsermode:"application","x5-page-mode":"app","msapplication-tap-highlight":"no","mobile-web-app-capable":"yes",renderer:"webkit",description:m.description,keywords:Array.isArray(m.keywords)?m.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};a.seo&&(e.relCanonical={rel:"canonical",href:`https://${a.seo.domain}${a.basename}`}),a.htmlPluginOption.meta&&Object.assign(e,a.htmlPluginOption.meta),u.push(new r({...a.htmlPluginOption,meta:e}))}if(a.fixBrowserRouter){let e=a.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,i=a.fixBrowserRouter.pathSegmentsToKeep??e;u.push(new r({filename:a.fixBrowserRouter.path??t,inject:!1,templateContent:()=>`<html lang="en"><head><title>Redirect</title><script>const pathKeep = ${i};const l = window.location;l.replace(l.protocol + '//' + l.hostname + (l.port ? ':' + l.port : '') + l.pathname.split('/').slice(0, 1 + pathKeep).join('/') + '/?/' + l.pathname.slice(1).split('/').slice(pathKeep).join('/').replace(/&/g, '~and~') + (l.search ? '&' + l.search.slice(1).replace(/&/g, '~and~') : '') + l.hash);</script></head><body></body></html>`}))}a.sourceMap&&u.push(new e.SourceMapDevToolPlugin(a.sourceMap));export default u;
1
+ import e from"webpack";import{CompressionPlugin as t}from"./plugin/compression.mjs";import{CopyPlugin as i}from"./plugin/copy.mjs";import{CssModuleDtsPlugin as o}from"./plugin/css-module-dts.mjs";import{HtmlPlugin as n}from"./plugin/html-plugin.mjs";import{ManifestPlugin as r}from"./plugin/manifest/index.mjs";import p from"./plugin/module-federation.mjs";import{app_vm as s,docs_vm as l,example_vm as a,scope_vm as m,virtual_vm as c}from"./vm/modules.mjs";import{CONFIG as h}from"./config.mjs";import{app_schema as u,docs_schema as g,example_schema as f,isLibrary as d,packageJson as w,scope_schema as j,virtual_schema as b}from"./process-env.mjs";let y="object"==typeof h.compression?h.compression:{},v=e.experiments.schemes.VirtualUrlPlugin,x=[...p,new v(s,u),d&&new v(l,g),d&&new v(a,f),d&&new v(m,j),h.virtualModule&&new v(c,b),new i(h.copy),new e.DefinePlugin({"process.env":JSON.stringify(h.env)}),new e.IgnorePlugin({resourceRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),new o,...h.plugins].filter(Boolean);if(h.compression&&x.push(new t({algorithm:h.devServer.https?"brotli":"gzip",test:/\.(js|css|html|svg|ttf|woff|woff2|png|jpg|jpeg)$/,...y})),h.manifest&&x.push(new r(h.manifest)),h.htmlPluginOption){let e={charset:"UTF-8","X-UA-Compatible":{"http-equiv":"X-UA-Compatible",content:"IE=edge,Chrome=1"},HandheldFriendly:"true",MobileOptimized:"320","screen-orientation":"portrait","x5-orientation":"portrait",browsermode:"application","x5-page-mode":"app","msapplication-tap-highlight":"no","mobile-web-app-capable":"yes",renderer:"webkit",description:w.description,keywords:Array.isArray(w.keywords)?w.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};h.seo&&(e.relCanonical={rel:"canonical",href:`https://${h.seo.domain}${h.basename}`}),h.htmlPluginOption.meta&&Object.assign(e,h.htmlPluginOption.meta),x.push(new n({...h.htmlPluginOption,meta:e}))}if(h.fixBrowserRouter){let e=h.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,i=h.fixBrowserRouter.pathSegmentsToKeep??e;x.push(new n({filename:h.fixBrowserRouter.path??t,inject:!1,templateContent:()=>`<html lang="en"><head><title>Redirect</title><script>const pathKeep = ${i};const l = window.location;l.replace(l.protocol + '//' + l.hostname + (l.port ? ':' + l.port : '') + l.pathname.split('/').slice(0, 1 + pathKeep).join('/') + '/?/' + l.pathname.slice(1).split('/').slice(pathKeep).join('/').replace(/&/g, '~and~') + (l.search ? '&' + l.search.slice(1).replace(/&/g, '~and~') : '') + l.hash);</script></head><body></body></html>`}))}h.sourceMap&&x.push(new e.SourceMapDevToolPlugin(h.sourceMap));export default x;
@@ -9,6 +9,11 @@ export declare const isMobile: boolean;
9
9
  export declare const isReact: boolean;
10
10
  export declare const isSolid: boolean;
11
11
  export declare const SSR: boolean;
12
+ export declare const app_schema = "app";
13
+ export declare const virtual_schema = "vm";
14
+ export declare const docs_schema = "docs";
15
+ export declare const example_schema = "example";
16
+ export declare const scope_schema = "scope";
12
17
  /** 项目主要文件夹 */
13
18
  export declare const mainDirectory: 'site' | 'src';
14
19
  export declare const jsxImportSource: string;
@@ -1 +1 @@
1
- import o from"node:process";import r from"./commom/has-pkg.mjs";import e from"./commom/is-ci-environment.mjs";import t from"./commom/require.mjs";export const IS_WINDOW="win32"===o.platform;export const APPTYPE=o.env.APPTYPE;export const FRAMEWORK=o.env.FRAMEWORK;export const NODE_ENV=o.env.NODE_ENV;export const isLibrary="library"===APPTYPE;export const isMicro="micro"===APPTYPE;export const isMobile="mobile"===APPTYPE;export const isReact="react"===FRAMEWORK;export const isSolid="solid"===FRAMEWORK;export const SSR="true"===o.env.SSR;export const mainDirectory=isLibrary?"site":"src";export const jsxImportSource={react:"react",solid:"solid-js/h"}[FRAMEWORK];export const framework={react:"react",solid:"solid-js"}[FRAMEWORK];export const frameworkVersionStr=framework?t(`${framework}/package.json`).version:19;export const frameworkVersion=parseFloat(frameworkVersionStr);export const packageJson=t(`${o.cwd()}/package.json`);delete packageJson.scripts;export const PACKAGENAME=packageJson.name;export const coreName="@moneko/core";export const isDev="development"===NODE_ENV;export const refresh=!!(isDev&&(r("solid-refresh")||r("react-refresh")));export const isCI=e();
1
+ import o from"node:process";import e from"./commom/has-pkg.mjs";import r from"./commom/is-ci-environment.mjs";import s from"./commom/require.mjs";export const IS_WINDOW="win32"===o.platform;export const APPTYPE=o.env.APPTYPE;export const FRAMEWORK=o.env.FRAMEWORK;export const NODE_ENV=o.env.NODE_ENV;export const isLibrary="library"===APPTYPE;export const isMicro="micro"===APPTYPE;export const isMobile="mobile"===APPTYPE;export const isReact="react"===FRAMEWORK;export const isSolid="solid"===FRAMEWORK;export const SSR="true"===o.env.SSR;export const app_schema="app";export const virtual_schema="vm";export const docs_schema="docs";export const example_schema="example";export const scope_schema="scope";export const mainDirectory=isLibrary?"site":"src";export const jsxImportSource={react:"react",solid:"solid-js/h"}[FRAMEWORK];export const framework={react:"react",solid:"solid-js"}[FRAMEWORK];export const frameworkVersionStr=framework?s(`${framework}/package.json`).version:19;export const frameworkVersion=parseFloat(frameworkVersionStr);export const packageJson=s(`${o.cwd()}/package.json`);delete packageJson.scripts;export const PACKAGENAME=packageJson.name;export const coreName="@moneko/core";export const isDev="development"===NODE_ENV;export const refresh=!!(isDev&&(e("solid-refresh")||e("react-refresh")));export const isCI=r();
package/lib/vm/docs.d.mts CHANGED
@@ -1,6 +1,4 @@
1
1
  import ReactiveObject from '../commom/reactive-object.mjs';
2
- export declare const docs: ReactiveObject<{
3
- 'app:docs': string;
4
- }>;
5
2
  export declare const comment: ReactiveObject<Record<string, string>>;
6
3
  export declare const getCommentPath: (file: string) => string;
4
+ export declare const getDocs: () => string;
package/lib/vm/docs.mjs CHANGED
@@ -1 +1 @@
1
- import{sep as e}from"node:path";import{loadFile as t,scanFolderSync as o}from"@moneko/utils";import m from"../commom/reactive-object.mjs";import r from"../commom/rule.mjs";import{CONFIG as a}from"../config.mjs";import{FRAMEWORK as n,framework as p,isLibrary as l,isReact as s,isSolid as c}from"../process-env.mjs";import i from"./generate-doc.mjs";let f={react:"createElement",solid:"createComponent"}[n];export const docs=new m({"app:docs":"export default {}"});export const comment=new m({});export const getCommentPath=function(){let e=/\/(.+?)\.tsx?$/,t=a.alias["@pkg"]?.length;return o=>o.substring(t).replace(/\\/g,"/").replace(e,"app:comment/$1.txt")}();if(l&&!1!==a.htmlPluginOption){let m={},n=`import { ${f}${c?",Dynamic":""} } from "${p}${c?"/web":""}";import SuspenseComp from "app:suspense";function call_then(res) {return {default: ${s?"() =>":""}${f}(${c?"Dynamic":"'div'"}, {${c?"innerHTML: res.default, component: 'div', class: 'n-md-box' ":"dangerouslySetInnerHTML: {__html:res.default}, className: 'n-md-box'"} })};}`;comment.on("change",(t,o)=>{((t,o)=>{let a=t.replace(/app:comment[/\\]/,"").split(e),p=a.pop(),l=a.join("/");m[l]||(m[l]={}),o?m[l][p]&&delete m[l][p]:m[l][p]=`rr(() => ${f}(SuspenseComp, { comp: () => import(/* webpackChunkName: '${t}' */ '${t}').then(call_then)}))rr`;let s={};for(let e in m)Object.prototype.hasOwnProperty.call(m,e)&&(s[e]=Object.values(m[e]));docs.setData("app:docs",`${n}export default ${JSON.stringify(s).replace(r.extract_func,"$1")}`)})(t,o?.length<0)});let l=o(a.alias["@pkg"],["\\.tsx?$"]).filter(e=>!/(^|\/)\.[^\\/\\.]|\.test\./i.test(e)),d=await Promise.all(l.map(async e=>({data:await t(e),file:e})));for(let e=0;e<d.length;e++){let t=d[e];t.data&&comment.setData(getCommentPath(t.file),i(t.data,t.file))}}
1
+ import{sep as e}from"node:path";import t from"../commom/reactive-object.mjs";import o from"../commom/rule.mjs";import{CONFIG as r}from"../config.mjs";import{app_schema as n,docs_schema as m,FRAMEWORK as c,framework as s,isLibrary as p,isReact as a,isSolid as l}from"../process-env.mjs";let i={react:"createElement",solid:"createComponent"}[c];export const comment=new t({});export const getCommentPath=function(){let e=/\/(.+?)\.tsx?$/,t=`${m}:comment/$1.txt`,o=r.alias["@pkg"]?.length;return r=>r.substring(o).replace(/\\/g,"/").replace(e,t)}();export const getDocs=()=>{let t=`import { ${i}${l?",Dynamic":""} } from "${s}${l?"/web":""}";import SuspenseComp from "${n}:suspense";function call_then(res) {return {default: ${a?"() =>":""}${i}(${l?"Dynamic":"'div'"}, {${l?"innerHTML: res.default, component: 'div', class: 'n-md-box' ":"dangerouslySetInnerHTML: {__html:res.default}, className: 'n-md-box'"} })};}`,r={};Object.keys(comment.data).forEach(t=>{let o=t.replace(/docs:comment[/\\]/,"").split(e),n=o.pop(),m=o.join("/");r[m]||(r[m]={}),r[m][n]=`rr(() => ${i}(SuspenseComp, { comp: () => import(/* webpackChunkName: '${t}' */ '${t}').then(call_then)}))rr`});let m={};for(let e in r)Object.prototype.hasOwnProperty.call(r,e)&&(m[e]=Object.values(r[e]));return`${t}export default ${JSON.stringify(m).replace(o.extract_func,"$1")}`};p&&!1!==r.htmlPluginOption&&comment.on("change",()=>{getDocs()});
@@ -1 +1 @@
1
- import{generateExample as e}from"@moneko/mdx";import t from"../commom/paths.mjs";import o from"../commom/reactive-object.mjs";import r from"../commom/rule.mjs";import{CONFIG as m}from"../config.mjs";import{isDev as p,isLibrary as n}from"../process-env.mjs";import{watchFiles as a}from"./utils.mjs";function l(){if(!n||!1===m.htmlPluginOption)return{};let o=JSON.parse(e(t.componentsPath,"app:example/","6")),p={};for(let e in o)Object.prototype.hasOwnProperty.call(o,e)&&Object.assign(p,{[e]:`rr(() => import('${e}'))rr`});let a={...o,"app:example":`export default ${JSON.stringify(p).replace(r.extract_func,"$1")}`},l={};for(let e in a)Object.prototype.hasOwnProperty.call(a,e)&&(l[e]=a[e]);return l}export const examples=new o(l());export function generatorExample(){let e=l();for(let t in e)Object.prototype.hasOwnProperty.call(e,t)&&examples.setData(t,e[t])}n&&p&&!1!==m.htmlPluginOption&&"true"!==process.env.IS_BUILD&&a(t.componentsPath,/(?<!\/examples\/(.+)\.md)$/,generatorExample);
1
+ import{generateExample as o}from"@moneko/mdx";import m from"../commom/paths.mjs";import t from"../commom/reactive-object.mjs";import{CONFIG as e}from"../config.mjs";import{example_schema as r,isLibrary as n}from"../process-env.mjs";function p(){return n&&!1!==e.htmlPluginOption?JSON.parse(o(m.componentsPath,`${r}:`,"6")):{}}export const examples=new t(p());export function generatorExample(){let o=p();for(let m in o)Object.hasOwn(o,m)&&examples.setData(m,o[m])}
package/lib/vm/info.d.mts CHANGED
@@ -1,2 +1,12 @@
1
- declare const app: Record<string, unknown>;
1
+ declare const app: {
2
+ projectName: string;
3
+ ssr: boolean;
4
+ base: string;
5
+ type: import("../index.mjs").AppType;
6
+ routerMode: "browser" | "hash" | "memory";
7
+ prefixCls: string | undefined;
8
+ theme: import("../index.mjs").Theme | undefined;
9
+ frameworkVersion: string;
10
+ framework: "react" | "solid-js";
11
+ };
2
12
  export default app;
@@ -1,4 +1 @@
1
- import ReactiveObject from '../commom/reactive-object.mjs';
2
- export declare const locales: ReactiveObject<{
3
- 'app:locales': string;
4
- }>;
1
+ export declare function generateLocales(): string;
@@ -1,2 +1,2 @@
1
- import{basename as e,join as t}from"node:path";import{directoryExists as a,scanFolderSync as o}from"@moneko/utils";import{watch as l}from"chokidar";import r from"../commom/log.mjs";import n from"../commom/reactive-object.mjs";import c from"../commom/require.mjs";import s from"../commom/sigint-exit.mjs";import{CONFIG as i}from"../config.mjs";import{FRAMEWORK as g,isDev as m}from"../process-env.mjs";let u={react:'import sso from "shared-store-object";',solid:'import { createEffect, createRoot, getOwner } from "solid-js";import { createStore } from "solid-js/store";'},p={react:'let storageKey="localizable.language",language=localStorage.getItem(storageKey)||navigator.language,{translation:a,...defaultLocale}=Object.assign({title:"简体中文",language:navigator.language,translation:{}},resources[language]||resources[navigator.language]),localizable=sso({lang:defaultLocale,t:a});export function setLang(a){let{translation:e,...l}=resources[a]||{};e&&(localizable.lang=l,localizable.t=e,localStorage.setItem(storageKey,l.language))}export default localizable;',solid:'let locale=createRoot(()=>{let e="localizable.language",a=localStorage.getItem(e)||navigator.language,{translation:l,...o}=Object.assign({title:"简体中文",language:navigator.language,translation:{}},resources[a]||resources[navigator.language]),[n,c]=createStore({lang:o,t:l});return createEffect(()=>{let a=resources[n.lang.language]?.translation;a&&(c("t",a),localStorage.setItem(e,n.lang.language))}),{localizable:n,setLocalizable:c,setLang:function(e){let{translation:a,...l}=resources[e]||{};a&&c("lang",l)}}},getOwner());export const setLocalizable=locale.setLocalizable;export const t=locale.localizable.t;export const lang=locale.localizable.lang;export const setLang=locale.setLang;'}[g];function f(e,t){return`${u[g]}
2
- export function template(r,n){return r.replace(/\\\${\\w+}/g,function(r){var t=r.slice(2,-1);var e=n[t];return e!==void 0?e.toString():""})}function deepFreeze(o) { const p = Reflect.ownKeys(o);for (const k of p) {const v = o[k];if ((v && typeof v === "object") || typeof v === "function") {deepFreeze(v);}}return Object.freeze(o);}export const locales = ${JSON.stringify(e)};const _res = ${JSON.stringify(t)};const resources = deepFreeze(_res);${p}`}export const locales=new n({"app:locales":f([],{})});let d={};async function b(t,a){let o=e(t).replace(/\.[^.]+$/,"");try{"deleted"===a?delete d[o]:(delete c.cache[t],Object.assign(d,{[o]:c(t).default}));let e=[],l={};for(let t in d)if(Object.prototype.hasOwnProperty.call(d,t)){let{language:a=o,title:r=a,icon:n,translation:c={}}=d[t];e.push({language:a,title:r,icon:n}),l[a]={language:a,title:r,icon:n,translation:c}}locales.setData("app:locales",f(e,l))}catch(e){r(e)}}let v=t(i.alias["@"],"./locales");if(a(v)&&!1!==i.htmlPluginOption){let e=o(v,[".ts$"]).filter(e=>!/^\..*|\.d\.ts$/.test(e));await Promise.allSettled(e.map(e=>b(e,"added"))),m&&"true"!==process.env.IS_BUILD&&function(e,t){let a=l(e,{ignored:t,persistent:!0,ignoreInitial:!0});function o(){a.unwatch(e),a.close()}a.on("add",e=>{b(e,"added")}),a.on("change",e=>{b(e,"change")}),a.on("unlink",e=>{b(e,"deleted")}),a.once("ready",()=>{m&&"true"!==process.env.IS_BUILD||o()}),s(o)}(v,[/^\..*/,/!\.ts$/,/\.d\.ts$/])}
1
+ import{basename as e,join as t}from"node:path";import{directoryExists as a,scanFolderSync as o}from"@moneko/utils";import l from"../commom/log.mjs";import r from"../commom/require.mjs";import{CONFIG as n}from"../config.mjs";import{FRAMEWORK as c}from"../process-env.mjs";export function generateLocales(){let s=t(n.alias["@"],"./locales"),g={react:'import sso from "shared-store-object";',solid:'import { createEffect, createRoot, getOwner } from "solid-js";import { createStore } from "solid-js/store";'},i={react:'let storageKey="localizable.language",language=localStorage.getItem(storageKey)||navigator.language,{translation:a,...defaultLocale}=Object.assign({title:"简体中文",language:navigator.language,translation:{}},resources[language]||resources[navigator.language]),localizable=sso({lang:defaultLocale,t:a});export function setLang(a){let{translation:e,...l}=resources[a]||{};e&&(localizable.lang=l,localizable.t=e,localStorage.setItem(storageKey,l.language))}export default localizable;',solid:'let locale=createRoot(()=>{let e="localizable.language",a=localStorage.getItem(e)||navigator.language,{translation:l,...o}=Object.assign({title:"简体中文",language:navigator.language,translation:{}},resources[a]||resources[navigator.language]),[n,c]=createStore({lang:o,t:l});return createEffect(()=>{let a=resources[n.lang.language]?.translation;a&&(c("t",a),localStorage.setItem(e,n.lang.language))}),{localizable:n,setLocalizable:c,setLang:function(e){let{translation:a,...l}=resources[e]||{};a&&c("lang",l)}}},getOwner());export const setLocalizable=locale.setLocalizable;export const t=locale.localizable.t;export const lang=locale.localizable.lang;export const setLang=locale.setLang;'}[c];function u(e,t){return`${g[c]}
2
+ export function template(r,n){return r.replace(/\\\${\\w+}/g,function(r){var t=r.slice(2,-1);var e=n[t];return e!==void 0?e.toString():""})}function deepFreeze(o) { const p = Reflect.ownKeys(o);for (const k of p) {const v = o[k];if ((v && typeof v === "object") || typeof v === "function") {deepFreeze(v);}}return Object.freeze(o);}export const locales = ${JSON.stringify(e)};const _res = ${JSON.stringify(t)};const resources = deepFreeze(_res);${i}`}if(a(s)&&!1!==n.htmlPluginOption){let t={};o(s,[".ts$"]).filter(e=>!/^\..*|\.d\.ts$/.test(e)).forEach(a=>{let o=e(a).replace(/\.[^.]+$/,"");try{delete r.cache[a],Object.assign(t,{[o]:r(a).default})}catch(e){Object.assign(t,{[o]:{}}),l(e)}});let a=[],n={};for(let e in t){if(!Object.hasOwn(t,e))continue;let{language:o=e,title:l=o,icon:r,translation:c={}}=t[e];a.push({language:o,title:l,icon:r}),n[o]={language:o,title:l,icon:r,translation:c}}return u(a,n)}return u([],{})}
@@ -1,5 +1,8 @@
1
1
  import webpack from 'webpack';
2
2
  type VirtualModules = ConstructorParameters<typeof webpack.experiments.schemes.VirtualUrlPlugin>[0];
3
- export declare const vm: VirtualModules;
4
- export declare const customVirtualModules: VirtualModules;
3
+ export declare const app_vm: VirtualModules;
4
+ export declare const docs_vm: VirtualModules;
5
+ export declare const example_vm: VirtualModules;
6
+ export declare const scope_vm: VirtualModules;
7
+ export declare const virtual_vm: VirtualModules;
5
8
  export {};
@@ -1 +1 @@
1
- import{join as e}from"node:path";import{getAppEntry as t,getAppFallback as o,getAppMdxScope as r,getAppMergeRouter as m,getAppNormalizeCss as s,getAppPrefixRouter as a,getAppRem as p,getAppSuspense as c}from"@moneko/mdx";import{updateFileSync as l}from"@moneko/utils";import i from"../commom/has-pkg.mjs";import n from"../commom/paths.mjs";import u from"../commom/reactive-object.mjs";import f from"../commom/require.mjs";import{CONFIG as d}from"../config.mjs";import v from"../plugin/module-federation.mjs";import{APPTYPE as j,FRAMEWORK as x,isLibrary as g}from"../process-env.mjs";import y from"../utils/create-types.mjs";import{generateDeclaration as D}from"../utils/dts.mjs";import{node_modules as h,transformModule as k}from"../utils/index.mjs";import b from"./coverage.mjs";import{comment as M,docs as P}from"./docs.mjs";import{examples as z}from"./example.mjs";import C from"./info.mjs";import{locales as O}from"./locales.mjs";import w from"./render-app.mjs";import{route as V}from"./routes.mjs";let $=i(e(d.alias["@"],"./mdx-scope.tsx"))||i(e(d.alias["@"],"./mdx-scope.ts")),q=new u({});q.on("change",()=>{l(h("@types/$vm/index.d.ts"),Object.values(q.data).join("\n"))});export const vm={env:{source:()=>{let e="app:env",t=k(d.env);return q.setData(e,y(e,D(t,e))),t}},info:{source:t=>{let o="app:info",r=e(n.programPath,"package.json");t.addDependency(r),delete f.cache[r];let m=k({...f(r),...C});return q.setData(o,y(o,D(m,o))),m}},render:{type:".tsx",source:()=>"react"===x?w:""},entry:{type:".tsx",source:()=>{let o="app:entry",r=t(e(d.alias["@"],"./index.ts"),!!v.length,!!d.rem,!!d.normalizeCss,j,x);return q.setData(o,y(o,D(r,o))),r}},fallback:{source:()=>{let e="app:fallback",t=o(d.fallbackCompPath);return q.setData(e,y(e,D(t,e))),t}},"merge-router":m(),"prefix-router":a(),suspense:{type:".tsx",source:()=>c(j,x)},routes:{type:".ts",source:e=>(e.addContextDependency(n.pagesPath),V.getData("app:routes"))},locals:{type:".ts",source:()=>O.getData("app:locales")}};if(d.normalizeCss&&(vm.normalize={type:".css",source:s}),d.rem&&(vm.rem=p(d.rem?.designSize||1680)),g){for(let e of(vm.coverage={source:e=>(e.addDependency(n.coveragePath),b(n.coveragePath))},vm["mdx-scope"]={type:".ts",source:()=>{let e="app:mdx-scope",t=$?r($):"export default {}";return q.setData(e,y(e,D(t,e))),t}},vm.docs={source:()=>P.getData("app:docs")},z))vm[e[0].replace("app:","")]={type:".tsx",source:()=>z.getData(e[0])};for(let e of P)vm[e[0].replace("app:","")]={type:".tsx",source:()=>P.getData(e[0])};for(let e of M)vm[e[0].replace("app:","")]={type:".txt",source:()=>M.getData(e[0])}}export const customVirtualModules={};for(let e in d.virtualModule){if(!Object.hasOwn(d.virtualModule,e))continue;let t=k(d.virtualModule[e]);customVirtualModules[e]=t;let o=`vm:${e}`;q.setData(o,y(o,D(t,o)))}
1
+ import{join as e}from"node:path";import{getAppEntry as o,getAppFallback as t,getAppMergeRouter as r,getAppNormalizeCss as m,getAppPrefixRouter as s,getAppRem as a,getAppScope as c,getAppSuspense as n}from"@moneko/mdx";import{updateFileSync as p}from"@moneko/utils";import l from"../commom/has-pkg.mjs";import i,{routeDir as d}from"../commom/paths.mjs";import u from"../commom/reactive-object.mjs";import f from"../commom/require.mjs";import v from"../commom/rule.mjs";import{CONFIG as x}from"../config.mjs";import{updateMocks as j}from"../dev/mock.mjs";import g from"../plugin/module-federation.mjs";import{app_schema as y,APPTYPE as D,docs_schema as h,example_schema as $,FRAMEWORK as _,isLibrary as k,virtual_schema as b}from"../process-env.mjs";import C from"../utils/create-types.mjs";import{generateDeclaration as O}from"../utils/dts.mjs";import{md5 as P,node_modules as z,transformModule as w}from"../utils/index.mjs";import M from"./coverage.mjs";import{comment as S,getDocs as q}from"./docs.mjs";import{examples as E,generatorExample as J}from"./example.mjs";import N from"./info.mjs";import{generateLocales as A}from"./locales.mjs";import B from"./render-app.mjs";import{getRouter as F}from"./routes.mjs";let G=new u({});G.on("change",()=>{p(z(`@types/$${y}/index.d.ts`),Object.values(G.data).join("\n"))});export const app_vm={mock:{source:e=>(e.addContextDependency(i.mockPath),j(),"export default null;")},env:{source:()=>{let e=`${y}:env`,o=w(x.env);return G.setData(e,C(e,O(o,e))),o}},info:{source:o=>{let t=`${y}:info`,r=e(i.programPath,"package.json");o.addDependency(r),delete f.cache[r];let m=w({...f(r),...N});return G.setData(t,C(t,O(m,t))),m}},render:{type:".tsx",source:()=>"react"===_?B:""},entry:{type:".tsx",source:()=>{let t=`${y}:entry`,r=o(e(x.alias["@"],"./index.ts"),!!g.length,!!x.rem,!!x.normalizeCss,D,_);return G.setData(t,C(t,O(r,t))),r}},fallback:{source:()=>{let e=`${y}:fallback`,o=t(x.fallbackCompPath);return G.setData(e,C(e,O(o,e))),o}},"merge-router":r(),"prefix-router":s(),suspense:{type:".tsx",source:()=>n(D,_)},routes:{source:e=>(e.addContextDependency(d),F())},locals:{source:o=>{let t=e(x.alias["@"],"./locales");return o.addContextDependency(t),A()}}};x.normalizeCss&&(app_vm.normalize={type:".css",source:m}),x.rem&&(app_vm.rem=a(x.rem?.designSize||1680));export const docs_vm={};export const example_vm={};export const scope_vm={};if(k){for(let o of(scope_vm.components={source:()=>{let o=!1,t=e(x.alias["@"],"./scope.tsx"),r=e(x.alias["@"],"./scope.ts");return l(t)?o=t:l(r)&&(o=r),o?c(o,"@/scope"):"export defatlu {}"}},docs_vm.coverage={source:e=>(e.addDependency(i.coveragePath),M(i.coveragePath))},docs_vm.docs={source:()=>q()},docs_vm.example={source:e=>{e.addContextDependency(i.componentsPath),J();let o={};return Object.keys(E.data).forEach(e=>{Object.assign(o,{[e]:`rr(() => import('${e}'))rr`})}),`export default ${JSON.stringify(o).replace(v.extract_func,"$1")}`}},S))docs_vm[o[0].replace(`${h}:`,"")]={type:".txt",source:()=>S.getData(o[0]),version:()=>P(S.getData(o[0]))};for(let e of(E.on("change",e=>{example_vm[e.replace(`${$}:`,"")]={source:o=>(o.addDependency(e),E.getData(e))}}),E))example_vm[e[0].replace(`${$}:`,"")]={source:()=>E.getData(e[0]),version:()=>P(E.getData(e[0]))}}export const virtual_vm={};let H=new u({});for(let e in H.on("change",()=>{p(z(`@types/$${b}/index.d.ts`),Object.values(H.data).join("\n"))}),x.virtualModule){if(!Object.hasOwn(x.virtualModule,e))continue;let o=w(x.virtualModule[e]);virtual_vm[e]=o;let t=`${b}:${e}`;H.setData(t,C(t,O(o,t)))}
@@ -1,2 +1,2 @@
1
- declare const renderApp: string;
2
- export default renderApp;
1
+ declare const code: string;
2
+ export default code;
@@ -1,11 +1,11 @@
1
- import{CONFIG as e}from"../config.mjs";import{APPTYPE as r,frameworkVersion as t,isDev as o}from"../process-env.mjs";let n=t<18,a="hash"===e.routerMode,c=a?"HashRouter":"BrowserRouter",s=e.strict?"StrictMode":"",m=`<${s}><${c} basename={${a?'"/"':"basename"}} window={window}><ErrorBoundary><App /></ErrorBoundary></${c}></${s}>`,p=o&&e.refresh&&e.env.injectRemoteReactRefresh?"window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(ReactDOM);":"",i=`
2
- import ReactDOM from '${n?"react-dom":"react-dom/client"}';
1
+ import{CONFIG as e}from"../config.mjs";import{app_schema as r,APPTYPE as t,frameworkVersion as o,isDev as n}from"../process-env.mjs";let a=o<18,c="hash"===e.routerMode,s=c?"HashRouter":"BrowserRouter",m=e.strict?"StrictMode":"",p=`<${m}><${s} basename={${c?'"/"':"basename"}} window={window}><ErrorBoundary><App /></ErrorBoundary></${s}></${m}>`,i=n&&e.refresh&&e.env.injectRemoteReactRefresh?"window.__REACT_DEVTOOLS_GLOBAL_HOOK__.inject(ReactDOM);":"",u=`
2
+ import ReactDOM from '${a?"react-dom":"react-dom/client"}';
3
3
  import React, { StrictMode, type ReactElement } from 'react';
4
4
  import { ErrorBoundary } from '@moneko/react';
5
- import routes from 'app:routes';
6
- import { ${c}, useRoutes } from 'react-router-dom';
5
+ import routes from '${r}:routes';
6
+ import { ${s}, useRoutes } from 'react-router-dom';
7
7
 
8
- ${p}
8
+ ${i}
9
9
  type RenderAppProps = {
10
10
  container?: HTMLElement;
11
11
  basename?: string;
@@ -23,8 +23,8 @@ export function App(props: RenderAppProps) {
23
23
  function renderApp(props: RenderAppProps = {}) {
24
24
  const { container, basename = "${e.basename}", language, ...args } = props;
25
25
  const _container = container?.querySelector('#root') || document.getElementById('root');
26
- ${"micro"===r?"window.mainApp = { ...args, container: _container as HTMLElement };":""}
27
- ${n?`ReactDOM.${o?"render":"hydrate"}(${m}, _container);return () => ReactDOM.unmountComponentAtNode(_container as Element);`:`const instance = ReactDOM.createRoot(_container as HTMLElement);instance.render(${m});return instance.unmount;`}
26
+ ${"micro"===t?"window.mainApp = { ...args, container: _container as HTMLElement };":""}
27
+ ${a?`ReactDOM.${n?"render":"hydrate"}(${p}, _container);return () => ReactDOM.unmountComponentAtNode(_container as Element);`:`const instance = ReactDOM.createRoot(_container as HTMLElement);instance.render(${p});return instance.unmount;`}
28
28
  }
29
29
 
30
- export default renderApp;`;export default i;
30
+ export default renderApp;`;export default u;
@@ -1,6 +1 @@
1
- import ReactiveObject from '../commom/reactive-object.mjs';
2
1
  export declare function getRouter(): string;
3
- export declare const route: ReactiveObject<{
4
- 'app:routes': string;
5
- }>;
6
- export declare function generatorRouter(): void;
package/lib/vm/routes.mjs CHANGED
@@ -1 +1 @@
1
- import{generateRouter as o}from"@moneko/mdx";import{routeDir as t}from"../commom/paths.mjs";import e from"../commom/reactive-object.mjs";import{CONFIG as r}from"../config.mjs";import{FRAMEWORK as m,isDev as p,isLibrary as s}from"../process-env.mjs";import{watchFiles as n}from"./utils.mjs";let i=s?"@pkg":"@/pages";export function getRouter(){return!1===r.htmlPluginOption?"":o(t,`${r.alias["@"]}/router/index.ts`,m,i,s,"6")}export const route=new e({"app:routes":getRouter()});export function generatorRouter(){route.setData("app:routes",getRouter())}p&&"true"!==process.env.IS_BUILD&&n(t,s?/(?<!README\.mdx?)$/:/(?<!index\.tsx?)$/,generatorRouter);
1
+ import{generateRouter as o}from"@moneko/mdx";import{routeDir as m}from"../commom/paths.mjs";import{CONFIG as r}from"../config.mjs";import{FRAMEWORK as t,isLibrary as e}from"../process-env.mjs";let i=e?"@pkg":"@/pages";export function getRouter(){return!1===r.htmlPluginOption?"":o(m,`${r.alias["@"]}/router/index.ts`,t,i,e,"6")}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "4.0.0-bate.1",
3
+ "version": "4.0.0-bate.2",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",
@@ -130,7 +130,7 @@
130
130
  "dependencies": {
131
131
  "@moneko/convert": "1.1.3",
132
132
  "@moneko/eslint": "1.9.14",
133
- "@moneko/mdx": "1.0.0",
133
+ "@moneko/mdx": "1.0.2",
134
134
  "@moneko/raw-import": "1.1.1",
135
135
  "@moneko/request": "1.6.2",
136
136
  "@moneko/stylelint": "1.6.0",
@@ -138,7 +138,6 @@
138
138
  "@moneko/utils": "0.3.3",
139
139
  "@swc/core": "1.13.5",
140
140
  "browserslist": "4.27.0",
141
- "chokidar": "4.0.3",
142
141
  "core-js": "3.46.0",
143
142
  "core-js-compat": "3.46.0",
144
143
  "husky": "9.1.7",
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export {};
@@ -1 +0,0 @@
1
- export declare function watchFiles(root: string, ignored?: RegExp, call?: VoidFunction): void;
package/lib/vm/utils.mjs DELETED
@@ -1 +0,0 @@
1
- import{watch as i}from"chokidar";import o from"../commom/sigint-exit.mjs";import{empty as t}from"../utils/index.mjs";export function watchFiles(n,r,e=t){let m=i(n,{ignored:(i,o)=>{if(o)return!o.isDirectory()&&r?.test(i)},persistent:!0,ignoreInitial:!0});m.on("add",e).on("change",e).on("unlink",e),o(function(){m.unwatch(n),m.close()})}