@moneko/core 3.8.5-beta.3 → 3.8.5-beta.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/common.js +1 -1
- package/lib/dev.js +1 -1
- package/lib/loader/router.cjs +1 -0
- package/lib/loader/router.d.cts +1 -0
- package/lib/module-federation.d.ts +3 -5
- package/lib/module-federation.js +1 -1
- package/lib/plugin/add-entry-attribute.js +1 -1
- package/lib/plugin/done.js +1 -1
- package/lib/plugin/external-remotes.d.ts +2 -2
- package/lib/plugin/external-remotes.js +1 -1
- package/lib/plugin/virtual-module.js +1 -1
- package/lib/prod.js +1 -1
- package/lib/reactive-object.js +1 -1
- package/lib/vm/docs.js +1 -1
- package/lib/vm/example.d.ts +3 -0
- package/lib/vm/example.js +1 -0
- package/lib/vm/routes.d.ts +1 -12
- package/lib/vm/routes.js +1 -1
- package/lib/vm/utils.d.ts +19 -0
- package/lib/vm/utils.js +1 -0
- package/package.json +7 -5
- package/typings/bundle-analyzer.d.ts +120 -0
- package/typings/global.d.ts +2 -0
package/lib/common.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"add-asset-html-webpack-plugin";import t from"html-webpack-plugin";import o from"webpack";import{CONFIG as l,PUBLICPATH as r}from"./config.js";import s from"./html-plugin-option.js";import
|
|
1
|
+
import e from"add-asset-html-webpack-plugin";import t from"html-webpack-plugin";import o from"webpack";import{CONFIG as l,PUBLICPATH as r}from"./config.js";import s from"./html-plugin-option.js";import n from"./module-federation.js";import i from"./module.config.js";import a,{CUSTOMCONFIG as p}from"./paths.js";import c from"./plugin/add-entry-attribute.js";import m from"./plugin/override-resolve.js";import u from"./plugin/virtual-module.js";import{PACKAGENAME as f,PACKAGEVERSION as h,isDev as d,isLibrary as g,isMicro as y}from"./process-env.js";import{resolveNodeModulesPath as b,resolveProgramPath as j}from"./utils.js";import w from"./virtual-modules.js";let{AutomaticPrefetchPlugin:v,DefinePlugin:k,SourceMapDevToolPlugin:x,WatchIgnorePlugin:C}=o,O=l.assetHtml.map(e=>({publicPath:"",...e}));export const outputConfig={path:j(g?"docs":"dist"),filename:"js/[name].bundle.js",chunkFilename:`js/[${d?"name":"chunkhash"}].js`,assetModuleFilename:e=>{let t=e.filename;return t&&t.endsWith("?url")&&/(?:webworker|worker)(\.|\b).*\.(js|ts)\b/.test(t.replace("?url",""))?"worker/[name][ext]":"assets/[name][hash][ext]"},library:{name:f,type:"window"},globalObject:"window",chunkLoadingGlobal:`webpackJsonp_${f}`,pathinfo:d,clean:!0,publicPath:r,asyncChunks:!0,charset:!0};let $={main:b("@app/entry")};l.polyfill&&Object.assign($,{"dom-polyfills":[`${a.corePath}/polyfills/replace-children.js`]}),l.entry&&("string"==typeof l.entry?$={main:l.entry}:Object.keys(l.entry)&&Object.assign($,l.entry)),l.output&&("string"==typeof l.output?outputConfig.path=l.output:Object.keys(l.output)&&Object.assign(outputConfig,l.output));let P=l.basename.split("/").filter(Boolean).length,B=`${Array(P).fill("..").join("/")+(P?"/":"")}404.html`,{pathSegmentsToKeep:D=P,path:M=B}=l.fixBrowserRouter||{},R=!1;l.cacheDirectory&&(R={type:"filesystem",store:"pack",allowCollectingMemory:!0,cacheDirectory:l.cacheDirectory,memoryCacheUnaffected:!0,name:[p,process.env.NODE_ENV].filter(Boolean).join("-"),version:h});let A=Object.assign({original:l.alias["@"],override:p&&j(p)},l.overrideResolve);export const clientConfig={entry:$,stats:"errors-only",cache:R,infrastructureLogging:{level:"error"},target:"web",externalsPresets:l.externalsPresets,plugins:[...n,new u(w),new v,l.htmlPluginOption&&new t(s),l.fixBrowserRouter&&new t({filename:M,inject:!1,templateContent:()=>`<html lang="en"><head><title>${s.title}</title><script>const pathKeep = ${D||P};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>`}),new e(O),y&&new c(e=>!!(e.match(/main\.(.*)\.bundle.js$/)||e.match("main.bundle.js"))),new k({"process.env":JSON.stringify(l.env)}),new C({paths:[/\.d\.ts$/]}),l.sourceMap&&new x(l.sourceMap),...l.plugins].filter(e=>!!e),experiments:{topLevelAwait:!0,asyncWebAssembly:!0,cacheUnaffected:!0,layers:!0,lazyCompilation:d&&{imports:!1,entries:!1},buildHttp:l.buildHttp,backCompat:!0,futureDefaults:!1,css:!1,outputModule:!1},resolve:{extensions:[".tsx",".ts",".js",".jsx"],alias:l.alias,plugins:[l.overrideResolve&&new m(A),...l.resolvePlugins].filter(Boolean),fallback:{path:!1,fs:!1,crypto:!1,assert:!1}},module:i,externals:l.externals,output:outputConfig};
|
package/lib/dev.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import{readdirSync as e}from"fs";import t from"chalk";import o from"webpack";import s from"webpack-dev-server";import{merge as r}from"webpack-merge";import l from"webpackbar";import{clientConfig as i}from"./common.js";import{CONFIG as n}from"./config.js";import{hasPkg as a}from"./has-pkg.js";import{getIPv4 as c,getPort as p}from"./net.js";import m from"./paths.js";import{hasEslintConfig as d,hasStylelintConfig as f,isLibrary as u,isReact as h}from"./process-env.js";import{cleanDir as v,isFunction as w,log as g,resolveProgramPath as b}from"./utils.js";let{HotModuleReplacementPlugin:k}=o,{yellow:j,green:y,grey:$,gray:x,bgBlue:S,bgGreenBright:T,blueBright:C,greenBright:A}=t,B=[".eslintrc.js",".eslintrc.json",".eslintrc.yaml",".eslintrc.json"],D=[".stylelintrc",".stylelintrc.json",".stylelintrc.yaml",".stylelintrc.yml",".stylelintrc.js","stylelint.config.js","stylelint.config.cjs"],E=e(m.programPath),H=!1,M=!1;for(let e=0,t=E.length;e<t;e++)D.includes(E[e])&&(M=!0),B.includes(E[e])&&(H=!0);H||(H=d),M||(M=f);let O=M?(await import("stylelint-webpack-plugin")).default:null,P=H?(await import("eslint-webpack-plugin")).default:null,_=n.devServer.port||3e3,I=await p(_,65535,n.devServer.host),J=a("@moneko/mock")&&(await import("@moneko/mock")).default,N=h&&(await import("@pmmmwh/react-refresh-webpack-plugin")).default,W=!1===n.devtool||n.devtool?n.devtool:"eval-cheap-module-source-map";n.devServer.port=I;let F="/"===n.basename,G=n.devServer.https?"https:":"http:",L=F?"":n.basename,R=n.devServer.port!==I&&x(`Port ${j(_)} is in use, trying ${y(I)} instead.
|
|
2
2
|
`);function Y(e){return`${G}//${"local"===e?n.devServer.host:c()}:${I}${L}`}let q=x("You application is running here:"),z=`${S(" Local ")} ${C(Y("local"))}
|
|
3
|
-
${T(" Network ")} ${A(Y("net"))}`,K=["js","md","mdx","jsx","ts","tsx","json","html","vue"],Q=K.join(","),U=["css","scss","sass","less","ts","tsx","js","jsx"],V=U.join(","),X=["node_modules/","es/","lib/","umd/","docs/","coverage/","dist/"],Z=[new k,N&&new N,P&&new P({fix:!0,threads:!0,files:[`${n.alias["@"]}/**/*.{${Q}}`,u&&`${n.alias["@pkg"]}/**/*.{${Q}}`].filter(Boolean),extensions:K,exclude:X,cache:!
|
|
3
|
+
${T(" Network ")} ${A(Y("net"))}`,K=["js","md","mdx","jsx","ts","tsx","json","html","vue"],Q=K.join(","),U=["css","scss","sass","less","ts","tsx","js","jsx"],V=U.join(","),X=["node_modules/","es/","lib/","umd/","docs/","coverage/","dist/"],Z=[new k,N&&new N,P&&new P({fix:!0,threads:!0,files:[`${n.alias["@"]}/**/*.{${Q}}`,u&&`${n.alias["@pkg"]}/**/*.{${Q}}`].filter(Boolean),extensions:K,exclude:X,cache:!0,lintDirtyModulesOnly:!0}),O&&new O({fix:!0,threads:!0,files:[`${n.alias["@"]}/**/*.{${V}}`,u&&`${n.alias["@pkg"]}/**/*.{${V}}`].filter(Boolean),extensions:U,exclude:X,cache:!0,lintDirtyModulesOnly:!0}),n.bar&&new l(n.bar)].filter(Boolean),ee={headers:{"Access-Control-Allow-Origin":"*"},compress:n.devServer.compress,host:"0.0.0.0",port:I,historyApiFallback:F||{index:L.endsWith("/")?L:`${L}/`,disableDotRule:!0},https:n.devServer.https,proxy:n.proxy,allowedHosts:n.devServer.allowedHosts,client:{reconnect:!0,progress:!1,logging:"info",overlay:!1,webSocketTransport:"ws"},webSocketServer:"ws",static:{watch:{ignored:e=>e.endsWith(".d.ts")||e.includes("/node_modules/")}},setupMiddlewares:(e,t)=>{if(!t)throw Error("devServer is not defined");return t.app&&w(J)&&J(t.app,b("mock/")),e},open:!1,hot:!0},et=o(r(i,{devtool:W,mode:"development",plugins:Z}));et.watch({aggregateTimeout:20,ignored:/node_modules(?![\\/]@app)/,stdin:!0},(e,t)=>{!e&&t&&(process.stdout.write("\x1b[2J\x1b[3J\x1b[H"),g([q,"",z,"",$(`Compiled successfully in ${y(`${t.endTime-t.startTime}ms`)}`)]),t.compilation.warnings.forEach(e=>g(e.message)),t.compilation.errors.forEach(e=>g(e.message)),R&&g(R))});let eo=new s(ee,et);eo.startCallback(e=>{e||g([q,"",z])}),eo.stopCallback(e=>{e||v(m.cachePath)}),process.on("exit",function(){et.close(()=>{}),eo.invalidate(),eo.stop()}),process.on("SIGINT",()=>{process.exit()});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export declare const moduleFederation: (typeof ModuleFederationPlugin | typeof NormalModuleReplacementPlugin)[];
|
|
5
|
-
export {};
|
|
1
|
+
import { type WebpackPluginInstance } from 'webpack';
|
|
2
|
+
declare const moduleFederation: WebpackPluginInstance[];
|
|
3
|
+
export default moduleFederation;
|
package/lib/module-federation.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"webpack";import r from"webpack/lib/container/ModuleFederationPlugin.js";import{CONFIG as t}from"./config.js";import o from"./plugin/external-remotes.js";import{realResolve as
|
|
1
|
+
import e from"webpack";import r from"webpack/lib/container/ModuleFederationPlugin.js";import{CONFIG as t}from"./config.js";import o from"./plugin/external-remotes.js";import{realResolve as s}from"./utils.js";let{NormalModuleReplacementPlugin:i}=e,a={},l={},n={},m=t.moduleFederation?.map(e=>{if(Array.isArray(e.remotes))for(let r=0,t=e.remotes.length;r<t;r++){let t=e.remotes[r],o=t.alias||t.name,s=t.filename||"remote_entry.js";if(n[o]=`${t.name}@${t.host}/${s}`,Array.isArray(t.library))for(let e=0,r=t.library.length;e<r;e++)a[t.library[e]]=`${o}/${t.library[e]}`}if(Array.isArray(e.exposes))for(let r=0,t=e.exposes.length;r<t;r++){let t=e.exposes[r];"string"==typeof t?l[`./${t}`]=s(t):"[object Object]"===Object.prototype.toString.call(t)&&(l[`./${t.name}`]=s(t.path))}return new r({filename:"remote_entry.js",...e,remotes:n,exposes:l})});m.length&&(m.push(new o),m.push(new i(/(.*)/,e=>{a[e.request]&&(e.request=a[e.request])})));export default m;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export default class{constructor(t){this.entryMatchCallback=t}apply(
|
|
1
|
+
import t from"html-webpack-plugin";export default class{constructor(t){this.entryMatchCallback=t}apply(a){a.hooks.compilation.tap("AddEntryAttributeWebpackPlugin",e=>{let r=a.options.plugins.find(a=>a instanceof t);r&&r.getHooks(e).alterAssetTagGroups.tap("AddEntryAttributeWebpackPlugin",t=>(t.headTags.forEach(t=>{"script"===t.tagName&&this.entryMatchCallback(t.attributes.src)&&(t.attributes.entry=!0)}),t))})}}
|
package/lib/plugin/done.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{isDev as o}from"../process-env.js";import{vmWriteing as
|
|
1
|
+
import{isDev as o}from"../process-env.js";import{vmWriteing as t}from"../reactive-object.js";let e="DoneWebpackPlugin";export default class{constructor(o){this.options=Object.assign({},o)}apply(s){o||s.hooks.compilation.tap(e,o=>{t.setData("DoneDonePlugin",!0),o.compiler.hooks.done.tap(e,()=>{t.setData("DoneDonePlugin",!1)})}),s.hooks.done.tap(e,o=>{this.options.done(o)})}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import e from"webpack";import t from"webpack/lib/util/extractUrlAndGlobal.js";let{
|
|
1
|
+
import e from"webpack";import t from"webpack/lib/util/extractUrlAndGlobal.js";let{sources:o}=e,l="ExternalRemotesPlugin";export default class{apply(e){e.hooks.make.tap(l,e=>{let r=[];e.hooks.buildModule.tap(l,e=>{"ExternalModule"===e.constructor.name&&"script"===e.externalType&&r.push(e)}),e.hooks.afterCodeGeneration.tap(l,function(){r.map(l=>{let r=t(l.request)[0],a=function(e){let t=[],o=[],l=!1,r=!1;for(let a of e)if("["===a){if(l){r=!0;break}l=!0,o.length&&(t.push(`"${o.join("")}"`),o.length=0)}else if("]"===a){if(!l){r=!0;break}l=!1,o.length&&(t.push(`${o.join("")}`),o.length=0),o.length=0}else o.push(a);if(l||r)throw Error(`Invalid template URL "${e}"`);return o.length&&t.push(`"${o.join("")}"`),t.join(" + ")}(r),n=e.codeGenerationResults.get(l,void 0).sources;n.set("javascript",new o.RawSource(n.get("javascript")?.source().replace(`"${r}"`,a)))})})})}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import
|
|
1
|
+
import o from"webpack-virtual-modules";import{isLibrary as t}from"../process-env.js";import{vmWriteing as e}from"../reactive-object.js";import{docs as s}from"../vm/docs.js";import{exampleModuleName as a,examples as p}from"../vm/example.js";import{locales as r,localesModuleName as i}from"../vm/locales.js";import{route as l,routesModuleName as m}from"../vm/routes.js";let n="VirtualModuleWebpackPlugin";export default class{constructor(o){this.options=o,this.hasTapped=!1}apply(d){let f=new o({[`node_modules/${m}`]:l.getData(m),[`node_modules/${a}`]:"export default []",[`node_modules/${i}`]:r.getData(i)});f.apply(d),d.hooks.compilation.tap(n,o=>{if(!this.hasTapped){let a=(t,s)=>{let a=`node_modules/${t}`;e.setData(a,!0),f.writeModule(a,s||""),o.compiler.hooks.done.tap(n,()=>{e.setData(a,!1)})};for(let o in this.options)if(Object.prototype.hasOwnProperty.call(this.options,o)){let t=this.options[o];a(o,"string"==typeof t?t:`export default ${JSON.stringify(t)}`)}for(let o of p)a(...o);for(let o of s)a(...o);l.on("change",a),r.on("change",a),t&&(p.on("change",a),s.on("change",a)),this.hasTapped=!0}})}}
|
package/lib/prod.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let e;import i from"css-minimizer-webpack-plugin";import o from"mini-css-extract-plugin";import n from"terser-webpack-plugin";import m from"webpack";import{BundleAnalyzerPlugin as r}from"webpack-bundle-analyzer";import{merge as t}from"webpack-merge";import s from"webpackbar";import{clientConfig as p}from"./common.js";import{CONFIG as a}from"./config.js";import{getMinifyOption as l}from"./minify.js";import c from"./paths.js";import u from"./plugin/done.js";import{vmWriteing as f}from"./reactive-object.js";import d from"./seo.js";import{cleanDir as h}from"./utils.js";let{optimize:{MinChunkSizePlugin:w}}=m,{cssnanoMinify:k,swcMinify:b}=i,
|
|
1
|
+
let e;import i from"css-minimizer-webpack-plugin";import o from"mini-css-extract-plugin";import n from"terser-webpack-plugin";import m from"webpack";import{BundleAnalyzerPlugin as r}from"webpack-bundle-analyzer";import{merge as t}from"webpack-merge";import s from"webpackbar";import{clientConfig as p}from"./common.js";import{CONFIG as a}from"./config.js";import{getMinifyOption as l}from"./minify.js";import c from"./paths.js";import u from"./plugin/done.js";import{vmWriteing as f}from"./reactive-object.js";import d from"./seo.js";import{cleanDir as h}from"./utils.js";let{optimize:{MinChunkSizePlugin:w}}=m,{cssnanoMinify:k,swcMinify:b}=i,g="swc"===a.compiler,j=[];a.minifier&&(a.minifier.js&&j.push(new n(l(a.minifier.js?.type||(g?"swc":"terser"),a.minifier.js?.options))),a.minifier.css&&j.push(new i({minify:{swc:b,cssnano:k}[a.minifier.css?.type||(g?"swc":"cssnano")],minimizerOptions:a.minifier.css?.options})));let y={splitChunks:a.splitChunk,runtimeChunk:a.runtimeChunk,chunkIds:"named",moduleIds:"named",removeAvailableModules:!0,removeEmptyChunks:!0,mergeDuplicateChunks:!0,mangleWasmImports:!0,minimize:!0,minimizer:j},z=m(t(p,{devtool:!1===a.devtool||a.devtool?a.devtool:"cheap-module-source-map",mode:"production",optimization:y,plugins:[new o({filename:"style/[name].bundle.css",chunkFilename:"style/[name].chunk.css",experimentalUseImportModule:!0}),a.bundleAnalyzer&&new r(a.bundleAnalyzer),a.splitChunk&&new w({minChunkSize:1e4}),a.bar&&new s(a.bar),new u({done:e=>{f.setData("done",!0),a.done?.(e),a.seo&&d(),f.setData("done",!1)}})].filter(Boolean)}));z.watch({aggregateTimeout:20,ignored:/node_modules(?![\\/]@app)/,stdin:!0},()=>{}),f.on("change",()=>{clearTimeout(e);let i=f.data;for(let e in i)if(i[e])return;e=setTimeout(()=>{z.close(()=>{})},300)}),process.on("exit",function(){h(c.cachePath)});
|
package/lib/reactive-object.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import t from"events";import{isDev as e}from"./process-env.js";class a extends t{constructor(t={}){super(),this.data=t}setData(t,a){e||a===this.data[t]||(this.data[t]=a,this.emit("change",t,a))}getData(t){return this.data[t]}removeData(t){Object.prototype.hasOwnProperty.call(this.data,t)&&(delete this.data[t],this.emit("change",t,null))}[Symbol.iterator](){let t=Object.keys(this.data),e=0;return{next:()=>{if(e<t.length){let a=t[e++];return{value:[a,this.data[a]],done:!1}}return{value:void 0,done:!0}}}}}export const vmWriteing=new a({done:!0});export default class extends a{constructor(t={}){super(),this.data=t}setData(t,e){e!==this.data[t]&&(this.data[t]=e,
|
|
1
|
+
import t from"events";import{isDev as e}from"./process-env.js";class a extends t{constructor(t={}){super(),this.data=t}setData(t,a){e||a===this.data[t]||(this.data[t]=a,this.emit("change",t,a))}getData(t){return this.data[t]}removeData(t){Object.prototype.hasOwnProperty.call(this.data,t)&&(delete this.data[t],this.emit("change",t,null))}[Symbol.iterator](){let t=Object.keys(this.data),e=0;return{next:()=>{if(e<t.length){let a=t[e++];return{value:[a,this.data[a]],done:!1}}return{value:void 0,done:!0}}}}}export const vmWriteing=new a({done:!0});export default class extends a{constructor(t={}){super(),this.data=t}setData(t,e){e!==this.data[t]&&(this.data[t]=e,this.emit("change",t,e))}}
|
package/lib/vm/docs.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{statSync as e}from"fs";import{dirname as t,join as o}from"path";import{watch as r}from"chokidar";import{CONFIG as n}from"../config.js";import s from"../generate-api.js";import i from"../paths.js";import{FRAMEWORK as a,FRAMEWORKNAME as p,createElement as l,isDev as c,isLibrary as
|
|
1
|
+
import{statSync as e}from"fs";import{dirname as t,join as o}from"path";import{watch as r}from"chokidar";import{CONFIG as n}from"../config.js";import s from"../generate-api.js";import i from"../paths.js";import{FRAMEWORK as a,FRAMEWORKNAME as p,createElement as l,isDev as c,isLibrary as d,isReact as m,isSolid as f}from"../process-env.js";import u,{vmWriteing as $}from"../reactive-object.js";let h="@app/comment";export const docs=new u;let g={[h]:{}},b=`() => ${l}(SuspenseComp, { comp: $1 })`,x=`import { ${l}${f?",Dynamic":""} } from "${p}${f?"/web":""}";import SuspenseComp from "@app/suspense";`;function j(e,r){let i=e.replace(RegExp(`^${n.alias["@pkg"]}`),""),a=t(i).replace(/^\//,""),p=[h,a].join("/"),c=i.split("/").pop()?.replace(/\.tsx?/,".md");if(!c)return;g[h][a]||(g[h][a]={});let d=o(p,c);if("deleted"===r)g[h][a][c]&&delete g[h][a][c];else{let t=s(e);g[d]=t,t?g[h][a][c]=`rr(() => import(/* webpackChunkName: '${d}' */'${d}?raw').then((res) => ({default: ${m?"() =>":""}${l}(${f?"Dynamic":"'n-md'"}, {text: res.default, ${f?"component: 'n-md', ":""}css: 'table td a {display:inline-flex;align-items:center;gap:2px;}table td a n-img{display:inline-block;overflow:hidden;border-radius:var(--border-radius);inline-size:18px;block-size:18px;}'})})))rr`:g[h][a][c]&&delete g[h][a][c]}let u={};for(let e in g)if(Object.prototype.hasOwnProperty.call(g,e)){let t=g[e];if(e===h)for(let e in t)Object.prototype.hasOwnProperty.call(t,e)&&(u[e]=Object.values(t[e]));else docs.setData(e,t)}docs.setData("@app/docs",`${x}export default ${JSON.stringify(u).replace(/"rr\((.+?)\)rr"/g,b)}`)}["react","solid"].includes(a)||(b="$1",x=""),d&&function(){$.setData("vm-docs",!0);let t=[],o=r(i.componentsPath,{ignored:[/(^|\/)\../,/(^|\/)__tests__(\/|$)/],persistent:!0,ignoreInitial:!1});function n(){o.unwatch(i.componentsPath),o.close(),$.setData("vm-docs",!1)}function s(t){return/\.tsx?$/.test(t)&&e(t).isFile()}o.on("add",e=>{s(e)&&(j(e,"added"),t.push(e))}),o.on("change",e=>{s(e)&&j(e,"change")}),o.on("unlink",e=>{s(e)&&(j(e,"deleted"),t.splice(t.indexOf(e),1))}),o.once("ready",()=>{t.forEach(e=>{j(e,"change")}),c||n()}),process.on("SIGINT",n)}();
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
let e;import{getTree as o,watchFiles as t}from"./utils.js";import r from"../paths.js";import{isLibrary as a}from"../process-env.js";import m from"../reactive-object.js";export const exampleModuleName="@app/example";export const examples=new m;a&&t(r.componentsPath,/(?<!\/examples\/(.+)\.md)$/,function(t){clearTimeout(e),e=setTimeout(()=>{clearTimeout(e),o({base:r.componentsPath,files:t,outputSource:!0}).forEach(e=>{let o=(e.children||[]).filter(e=>e.codes).map(e=>({title:e.path.replace(/.md$/,""),order:0,...e.meta,codes:e.codes})).sort((e,o)=>e.order-o.order);examples.setData(["@app/example",e.key].filter(Boolean).join("/"),`export default ${JSON.stringify(o)};`)})},8)},"vm-examples");
|
package/lib/vm/routes.d.ts
CHANGED
|
@@ -1,18 +1,7 @@
|
|
|
1
|
+
import { type BaseRoute } from './utils.js';
|
|
1
2
|
import ReactiveObject from '../reactive-object.js';
|
|
2
|
-
type BaseRoute = {
|
|
3
|
-
path: string;
|
|
4
|
-
key: string;
|
|
5
|
-
component?: string;
|
|
6
|
-
meta?: object;
|
|
7
|
-
children?: BaseRoute[];
|
|
8
|
-
codes?: Record<string, string>;
|
|
9
|
-
order?: number;
|
|
10
|
-
};
|
|
11
3
|
export declare const routesModuleName = "@app/routes";
|
|
12
4
|
export declare const route: ReactiveObject<{
|
|
13
5
|
"@app/routes": string;
|
|
14
6
|
}>;
|
|
15
|
-
export declare const exampleModuleName = "@app/example";
|
|
16
|
-
export declare const examples: ReactiveObject<Record<string, string | undefined>>;
|
|
17
7
|
export declare let routes: BaseRoute[];
|
|
18
|
-
export {};
|
package/lib/vm/routes.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
let e,
|
|
1
|
+
let e,r;import{accessSync as t,constants as o}from"fs";import{getTree as s,mergeRouter as p,watchFiles as m}from"./utils.js";import{CONFIG as u}from"../config.js";import i from"../paths.js";import{FRAMEWORK as a,FRAMEWORKNAME as c,createElement as f,isLibrary as l,isReact as n,isSolid as $}from"../process-env.js";import x from"../reactive-object.js";try{t(`${u.alias["@"]}/router/index.ts`,o.R_OK),e=!0}catch(r){e=!1}let d=`${$?"() => ":""}${f}(SuspenseComp, { comp: $1 })`,g=`import { ${f} } from "${c}";import SuspenseComp from "@app/suspense";${n?'import prefix from "@app/prefix-router";':""}`;e&&(g+='import merge from "@app/merge-router";import customRouter from "@/router";'),["react","solid"].includes(a)||(d="$1",g="");export const routesModuleName="@app/routes";export const route=new x({[routesModuleName]:"export default []"});export let routes=[];let h=l?i.componentsPath:i.pagesPath,j=l?"@pkg":"@/pages";m(h,l?/(?<!README\.mdx?)$/:/(?<!index\.tsx?)$/,function(t){clearTimeout(r),r=setTimeout(()=>{var o;clearTimeout(r),routes=p(s({base:h,files:t,alia:j}).reverse(),"key"),route.setData(routesModuleName,(o=JSON.stringify(routes).replace(/"rr\((.+?)\)rr"/g,d).slice(1,-1),`${g}const routes = [{ path: "/", children: [${$?'{ path: "/" },':""} ${o}] }];const _routes = ${e?'merge([...routes, ...customRouter], "path")':"routes"};export default ${n?"prefix(_routes)":"_routes"};`))},8)},"vm-router");
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export type BaseRoute = {
|
|
2
|
+
path: string;
|
|
3
|
+
key: string;
|
|
4
|
+
component?: string;
|
|
5
|
+
meta?: object;
|
|
6
|
+
children?: BaseRoute[];
|
|
7
|
+
codes?: Record<string, string>;
|
|
8
|
+
order?: number;
|
|
9
|
+
};
|
|
10
|
+
export declare function mergeRouter(route: BaseRoute[], key: keyof BaseRoute): BaseRoute[] | undefined;
|
|
11
|
+
type TreeOption = {
|
|
12
|
+
files: string[];
|
|
13
|
+
base: string;
|
|
14
|
+
alia?: string;
|
|
15
|
+
outputSource?: boolean;
|
|
16
|
+
};
|
|
17
|
+
export declare function getTree(opt: TreeOption): BaseRoute[];
|
|
18
|
+
export declare function watchFiles(root: string, ignored: RegExp, call: (files: string[]) => void, name: string): void;
|
|
19
|
+
export {};
|
package/lib/vm/utils.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{readFile as e}from"fs";import{join as t,relative as n}from"path";import{frontmatter as r}from"@moneko/mdx";import{watch as a}from"chokidar";import{isDev as o,isSolid as i}from"../process-env.js";import l,{vmWriteing as s}from"../reactive-object.js";let c=new l({}),h=i?"component":"element";export function mergeRouter(e,t){if(!e.length)return;let n=[];return e.forEach(e=>{let r=n.findIndex(n=>n[t]==e[t]);if(r>-1){let a=[...n[r].children||[],...e.children||[]];n[r]=Object.assign(e,n[r]),a.length&&(n[r].children=mergeRouter(a,t))}else n.push(Object.assign(e,Array.isArray(e.children)&&{children:mergeRouter(e.children,t)}))}),n.forEach((e,t)=>{if(e.children?.length){let{children:r=[],...a}=e;n[t]={path:a.path,key:a.key,children:[i&&{...a,path:e.path===a.path?"/":a.path},...r].filter(e=>e&&(e.component||e.children?.length))}}}),n}export function getTree(e){let r={};return e.files.forEach(a=>{let o=c.getData(a)||{code:""},i=n(e.base,a),l=e.base.split("/").filter(Boolean),s=a.split("/").filter(Boolean).slice(0,-1),p={},f=Object.assign({meta:JSON.parse(o.frontmatter||"{}")},e.alia&&{[h]:`rr(() => import(/* webpackChunkName: '${i}' */'${t(e.alia,i)}'))rr`},e.outputSource&&{codes:function(e){let t;let n={},r=/```(.+?)\n([\s\S]*?)\n```/g;for(;null!==(t=r.exec(e));){let[,e="jsx",r]=t;n[e.split(" ").pop()||"jsx"]=r.trim()}return Object.keys(n).length?n:{jsx:e}}(o.code.replace(/^\n+|\n+$/g,""))});for(let t=l.length;t<s.length;t++){let n={path:s[t],key:s[t]};t===l.length?(Object.assign(p,r[n.key],{path:n.path,key:n.key},t===s.length-1&&f),r[n.key]=p):(p.children=(p.children||[]).concat([n]),e.outputSource?(Object.assign(n,{path:a.split("/").pop(),key:a.split("/").pop()},f),n.children=getTree({...e,base:`${e.base}/${n.key}`,files:e.files.filter(t=>t.startsWith(`${e.base}/${n.key}`))})):Object.assign(n,{key:s.slice(l.length,t+1).join("/")},f),p=n)}}),Object.values(r)}function p(t,n,a){a?(c.removeData(t),n.removeData(t)):e(t,{encoding:"utf-8"},(e,a)=>{e||(t.endsWith(".md")||t.endsWith(".mdx")?r(a).then(e=>{c.setData(t,e),n.setData(t,!0)}):(c.setData(t,{code:a,frontmatter:"{}"}),n.setData(t,!0)))})}export function watchFiles(e,t,n,r){s.setData(r,!0);let i=new l({}),c=a(e,{ignored:(e,n)=>{if(n)return!n.isDirectory()&&t.test(e)},persistent:!0,ignoreInitial:!1});function h(){c.unwatch(e),c.close(),s.setData(r,!1)}c.on("add",e=>{p(e,i)}).on("change",e=>{p(e,i)}).on("unlink",e=>{p(e,i,!0)}),c.once("ready",()=>{o||h()}),i.on("change",()=>{n(Object.keys(i.data))}),process.on("SIGINT",h)}
|
package/package.json
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moneko/core",
|
|
3
|
-
"version": "3.8.5-beta.
|
|
3
|
+
"version": "3.8.5-beta.6",
|
|
4
4
|
"description": "core",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"scripts": {
|
|
8
8
|
"build": "rm -rf ./lib && tsc && swc src -d lib -D",
|
|
9
|
-
"postbuild": "
|
|
9
|
+
"postbuild": "npm run cjs",
|
|
10
|
+
"cjs": "find ./lib/loader/ -type f -name \"*.js\" -execdir bash -c 'mv \"$1\" \"${1%.js}.cjs\"' _ {} \\;"
|
|
10
11
|
},
|
|
11
12
|
"keywords": [],
|
|
12
13
|
"author": "moneko",
|
|
@@ -37,7 +38,7 @@
|
|
|
37
38
|
"ts-import-plugin": "3.0.0",
|
|
38
39
|
"ts-loader": "9.5.1",
|
|
39
40
|
"typescript": "5.2.2",
|
|
40
|
-
"webpack": "5.
|
|
41
|
+
"webpack": "5.89.0",
|
|
41
42
|
"webpack-bundle-analyzer": "4.10.1",
|
|
42
43
|
"webpack-cli": "5.1.4",
|
|
43
44
|
"webpack-dev-server": "4.15.1",
|
|
@@ -47,13 +48,14 @@
|
|
|
47
48
|
"xml2js": "0.6.2"
|
|
48
49
|
},
|
|
49
50
|
"devDependencies": {
|
|
50
|
-
"@swc/cli": "0.1.
|
|
51
|
+
"@swc/cli": "0.1.63",
|
|
51
52
|
"eslint-config-neko": "2.1.0",
|
|
52
53
|
"stylelint-config-moneko": "1.2.0"
|
|
53
54
|
},
|
|
54
55
|
"files": [
|
|
55
56
|
"lib",
|
|
56
57
|
"template",
|
|
57
|
-
"typings/global.d.ts"
|
|
58
|
+
"typings/global.d.ts",
|
|
59
|
+
"typings/bundle-analyzer.d.ts"
|
|
58
60
|
]
|
|
59
61
|
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
import type { AddressInfo } from 'net';
|
|
2
|
+
import type { StatsOptions } from 'webpack';
|
|
3
|
+
|
|
4
|
+
export type StatsPreset =
|
|
5
|
+
| boolean
|
|
6
|
+
| 'errors-only'
|
|
7
|
+
| 'errors-warnings'
|
|
8
|
+
| 'minimal'
|
|
9
|
+
| 'none'
|
|
10
|
+
| 'normal'
|
|
11
|
+
| 'verbose';
|
|
12
|
+
|
|
13
|
+
export type ToJsonOptionsObject = StatsOptions;
|
|
14
|
+
|
|
15
|
+
export type ToJsonOptions = StatsPreset | ToJsonOptionsObject;
|
|
16
|
+
|
|
17
|
+
export type StatsExcludeFilter =
|
|
18
|
+
| string
|
|
19
|
+
| string[]
|
|
20
|
+
| RegExp
|
|
21
|
+
| RegExp[]
|
|
22
|
+
| ((assetName: string) => boolean)
|
|
23
|
+
| Array<(assetName: string) => boolean>;
|
|
24
|
+
export type ExcludeAssetsPatternFn = (assetName: string) => boolean;
|
|
25
|
+
export type ExcludeAssetsPattern = string | RegExp | ExcludeAssetsPatternFn;
|
|
26
|
+
|
|
27
|
+
export interface BundleAnalyzerOption {
|
|
28
|
+
/**
|
|
29
|
+
* 可以是 "server"、"static" 或 "disabled"。
|
|
30
|
+
* 默认为 "server"。
|
|
31
|
+
* 在 "server" 模式下,分析器将启动 HTTP 服务器以显示捆绑报告。
|
|
32
|
+
* 在 "static" 模式下,将生成包含捆绑报告的单个 HTML 文件。
|
|
33
|
+
* 在 "json" 模式下,将生成包含捆绑报告的单个 JSON 文件。
|
|
34
|
+
* 在 "disabled" 模式下,您可以设置 "generateStatsFile" 为 true,仅使用此插件生成 Webpack Stats JSON 文件。
|
|
35
|
+
*/
|
|
36
|
+
analyzerMode?: 'server' | 'static' | 'json' | 'disabled' | undefined;
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 在 `server` 模式下用于启动 HTTP 服务器的主机。
|
|
40
|
+
* @default '127.0.0.1'
|
|
41
|
+
*/
|
|
42
|
+
analyzerHost?: string | undefined;
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* 在 `server` 模式下用于启动 HTTP 服务器的端口。
|
|
46
|
+
* @default 8888
|
|
47
|
+
*/
|
|
48
|
+
analyzerPort?: number | 'auto' | undefined;
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* 用于服务器模式下打印到控制台的 URL。
|
|
52
|
+
* @default 'http://${listenHost}:${boundAddress.port}'
|
|
53
|
+
*/
|
|
54
|
+
analyzerUrl?: (options: {
|
|
55
|
+
listenPort: string;
|
|
56
|
+
listenHost: string;
|
|
57
|
+
boundAddress: AddressInfo;
|
|
58
|
+
}) => string;
|
|
59
|
+
|
|
60
|
+
/**
|
|
61
|
+
* 在 "static" 模式下将生成的捆绑报告文件的路径。
|
|
62
|
+
* 相对于捆绑输出目录。
|
|
63
|
+
* @default 'report.html'
|
|
64
|
+
*/
|
|
65
|
+
reportFilename?: string | undefined;
|
|
66
|
+
|
|
67
|
+
/**
|
|
68
|
+
* HTML 标题元素的内容,或提供内容的形式为 () => string 的函数。
|
|
69
|
+
* @default 返回当前日期和时间的漂亮格式化函数。
|
|
70
|
+
*/
|
|
71
|
+
reportTitle?: string | (() => string) | undefined;
|
|
72
|
+
|
|
73
|
+
/**
|
|
74
|
+
* 默认显示在报告中的模块大小。
|
|
75
|
+
* 应为 "stat"、"parsed" 或 "gzip" 之一。
|
|
76
|
+
* @default 'parsed'
|
|
77
|
+
*/
|
|
78
|
+
defaultSizes?: 'parsed' | 'stat' | 'gzip' | undefined;
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* 自动在默认浏览器中打开报告。
|
|
82
|
+
* @default true
|
|
83
|
+
*/
|
|
84
|
+
openAnalyzer?: boolean | undefined;
|
|
85
|
+
|
|
86
|
+
/**
|
|
87
|
+
* 如果为 true,则将生成 Webpack Stats JSON 文件在捆绑输出目录中。
|
|
88
|
+
* @default false
|
|
89
|
+
*/
|
|
90
|
+
generateStatsFile?: boolean | undefined;
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* 如果 generateStatsFile 为 true,则生成的 Webpack Stats JSON 文件的名称。
|
|
94
|
+
* 相对于捆绑输出目录。
|
|
95
|
+
* @default 'stats.json'
|
|
96
|
+
*/
|
|
97
|
+
statsFilename?: string | undefined;
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* stats.toJson() 方法的选项。
|
|
101
|
+
* 例如,您可以使用 "source: false" 选项从统计文件中排除模块的源代码。
|
|
102
|
+
* @default null
|
|
103
|
+
*/
|
|
104
|
+
statsOptions?: null | ToJsonOptions | undefined;
|
|
105
|
+
|
|
106
|
+
/**
|
|
107
|
+
* 用于匹配要从报告中排除的资产名称的模式。
|
|
108
|
+
* 如果模式是字符串,则将其转换为 RegExp 通过 `new RegExp(str)`。
|
|
109
|
+
* 如果模式是函数,则应具有以下签名 `(assetName: string) => boolean` 并应返回 true 以排除匹配的资产。
|
|
110
|
+
* 如果提供了多个模式,则资产应至少与其中一个匹配以被排除。
|
|
111
|
+
* @default null
|
|
112
|
+
*/
|
|
113
|
+
excludeAssets?: null | ExcludeAssetsPattern | ExcludeAssetsPattern[] | undefined;
|
|
114
|
+
|
|
115
|
+
/**
|
|
116
|
+
* 日志级别。可以是 "info"、"warn"、"error" 或 "silent"。
|
|
117
|
+
* @default 'info'
|
|
118
|
+
*/
|
|
119
|
+
logLevel?: 'info' | 'warn' | 'error' | 'silent' | undefined;
|
|
120
|
+
}
|
package/typings/global.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import VirtualModulesPlugin from 'webpack-virtual-modules';
|
|
1
2
|
import WebpackBar from 'webpackbar';
|
|
2
3
|
import type { BundleAnalyzerOption } from './bundle-analyzer.d';
|
|
3
4
|
import type { OverrideResolverOption } from '../lib/index';
|
|
@@ -480,6 +481,7 @@ export declare interface SharedConfig {
|
|
|
480
481
|
export declare type CommomType<T> = {
|
|
481
482
|
CONFIG: ConfigType<T>;
|
|
482
483
|
log: (msg: string) => void;
|
|
484
|
+
vm: typeof VirtualModulesPlugin;
|
|
483
485
|
};
|
|
484
486
|
export declare interface SourceMapDevToolPluginOptions {
|
|
485
487
|
append?: null | string | false;
|