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

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.
@@ -1,7 +1,8 @@
1
1
  import EventEmitter from 'node:events';
2
- declare class ReactiveObject<T extends object = Record<string, string | undefined>> extends EventEmitter {
2
+ declare class ReactiveObject<T extends object = Record<string, unknown | undefined>> extends EventEmitter {
3
3
  readonly data: T;
4
4
  constructor(props?: T);
5
+ has(key: keyof T): boolean;
5
6
  setData(key: keyof T, value: T[keyof T]): void;
6
7
  getData(key: keyof T): T[keyof T];
7
8
  removeData(key: keyof T): void;
@@ -1 +1 @@
1
- import t from"node:events";class e extends t{constructor(t={}){super(),this.data=t,this.setMaxListeners(0)}setData(t,e){this.data[t]!==e&&(this.data[t]=e,this.emit("change",t,e))}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 default e;
1
+ import t from"node:events";class e extends t{constructor(t={}){super(),this.data=t,this.setMaxListeners(0)}has(t){return t in this.data}setData(t,e){this.data[t]!==e&&(this.data[t]=e,this.emit("change",t,e))}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 default e;
package/lib/index.d.mts CHANGED
@@ -19,6 +19,7 @@ export type { CompressionPluginOptions } from './plugin/compression.mjs';
19
19
  export type { HtmlMeta, HtmlPluginOption } from './plugin/html-plugin.mjs';
20
20
  export * from './plugin/manifest/index.mjs';
21
21
  export type { OverrideResolverOption } from './plugin/override-resolve.mjs';
22
+ export type { VirtualModules } from './plugin/virtual-module.mjs';
22
23
  export { APPTYPE, coreName, FRAMEWORK, isCI, isDev, isLibrary, isMicro, mainDirectory, packageJson, PACKAGENAME, } from './process-env.mjs';
23
24
  export { type AlgorithmIdentifier, digest, md5, node_modules, resolveProgram, toCamelCase, } from './utils/index.mjs';
24
25
  export * from '@moneko/mdx';
@@ -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{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
+ 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{outputConfig as f}from"./common.mjs";import{CONFIG as h}from"./config.mjs";import{app_schema as y,FRAMEWORK as j,isDev as x,virtual_schema as g}from"./process-env.mjs";let v={loader:s(t.corePath,"/loader/lightning-css.cjs"),options:{sourceMap:!!h.sourceMap,targets:c(),rem:!!h.rem,importLoaders:2}},w={loader:l.lessLoader,options:{sourceMap:!!h.sourceMap,lessOptions:{modifyVars:i,javascriptEnabled:!0}}},M=new Map,P=["components","example","mock","site","src","server"].map(d);function L(e){return new Promise(s=>{s([...P,t.corePath,...h.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(M.has(e))return M.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),M.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");M.set(e,[s])}catch{M.set(e,[p(e),p(`.pnpm/${e}`)])}return M.get(e)}}(e):e).flat()||[]])})}r&&P.push(d(r)),h.overrideResolve&&h.overrideResolve.override&&P.push(h.overrideResolve.override);let C=await Promise.all([L("css"),L("js"),L("media"),L("wasm"),L("font")]),I=C[0],O=C[1],_=C[2],b=C[3],N=C[4];l.sassLoader&&(e={loader:l.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let $=f.library?.type==="umd"&&!1===h.htmlPluginOption,k=[{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:b},{test:n.txt,type:"asset/source"},{test:n.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:$?()=>!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:_},{test:n.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:_},{test:n.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:N}],B=h.prefixJsLoader.filter(Boolean)||[];"react"===j&&h.reactCompiler&&B.unshift({loader:s(t.corePath,"/loader/react-compiler.cjs"),options:{...h.reactCompiler,panicThreshold:x?void 0:"NONE"}}),h.cssInJs&&"object"==typeof h.cssInJs.minify&&B.unshift({loader:s(t.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},h.cssInJs.minify)});export default(o=>{let r={react:{loader:l.swcLoader,options:m(o)},solid:{loader:s(t.corePath,"/loader/solid.cjs"),options:{jsxOptions:h.jsxDomExpressions,refresh:h.refresh}}}[j];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:h.noParse,rules:[{oneOf:[...k,{test:n.js,use:[...B,r].filter(Boolean),include:O,extractSourceMap:!0},...h.cssModules.map(e=>({test:s=>n.node_modules_css_module.test(s)&&s.includes(e),use:[v],type:"css/module"})),{test:n.css,use:[v],type:"css/auto",include:I},e&&{test:n.scss,use:[v,e],type:"css/auto",include:I},{test:n.less,use:[v,w],type:"css/auto",include:I},{test:n.markdown,use:[...B,{loader:s(t.corePath,"/loader/mdx.cjs"),options:h.mdx}].filter(Boolean),exclude:[n.node_modules,e=>e.startsWith(`${y}:`)||e.startsWith(`${g}:`)]}].filter(Boolean)},...h.moduleRules].filter(Boolean)}});
@@ -0,0 +1,14 @@
1
+ import { type Compiler, type experiments } from 'webpack';
2
+ import type ReactiveObject from '../commom/reactive-object.mjs';
3
+ type VirtualModule = ConstructorParameters<typeof experiments.schemes.VirtualUrlPlugin>[0];
4
+ export interface VirtualModules extends VirtualModule {
5
+ [key: string]: VirtualModules[keyof VirtualModules];
6
+ }
7
+ export declare class VirtualModulePlugin {
8
+ private vm;
9
+ private modules;
10
+ private schema;
11
+ constructor(modules: ReactiveObject<VirtualModules>, schema: string);
12
+ apply(compiler: Compiler): void;
13
+ }
14
+ export {};
@@ -0,0 +1 @@
1
+ import e from"webpack";let s=e.experiments.schemes.VirtualUrlPlugin;export class VirtualModulePlugin{constructor(e,t){this.modules=e,this.schema=t,this.vm=new s(this.modules.data,this.schema)}apply(e){this.vm.apply(e),this.modules.on("change",(e,s)=>{var t,i;this.vm.modules=Object.assign(this.vm.modules,(t={[e]:s},i=this.schema,Object.keys(t).reduce((e,s)=>{var o,r,m;return e[r=s,m=i,`${m}:${r}`]="string"==typeof(o=t[s])?{type:"",source:()=>o}:"function"==typeof o?{type:"",source:o}:o,e},{})))})}}
@@ -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 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;
1
+ import e from"webpack";import{CompressionPlugin as t}from"./plugin/compression.mjs";import{CopyPlugin as o}from"./plugin/copy.mjs";import{CssModuleDtsPlugin as i}from"./plugin/css-module-dts.mjs";import{HtmlPlugin as r}from"./plugin/html-plugin.mjs";import{ManifestPlugin as p}from"./plugin/manifest/index.mjs";import n from"./plugin/module-federation.mjs";import{VirtualModulePlugin as s}from"./plugin/virtual-module.mjs";import{app_vm as l}from"./vm/app.mjs";import{docs_vm as m}from"./vm/docs.mjs";import{example_vm as a}from"./vm/example.mjs";import{scope_vm as c}from"./vm/scope.mjs";import{virtual_vm as h}from"./vm/virtual.mjs";import{CONFIG as f}from"./config.mjs";import{app_schema as u,docs_schema as g,example_schema as d,isLibrary as w,packageJson as j,scope_schema as v,virtual_schema as b}from"./process-env.mjs";let y="object"==typeof f.compression?f.compression:{},x=[...n,new s(l,u),w&&new s(m,g),w&&new s(a,d),w&&new s(c,v),f.virtualModule&&new s(h,b),new o(f.copy),new e.DefinePlugin({"process.env":JSON.stringify(f.env)}),new e.IgnorePlugin({resourceRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),new i,...f.plugins].filter(Boolean);if(f.compression&&x.push(new t({algorithm:f.devServer.https?"brotli":"gzip",test:/\.(js|css|html|svg|ttf|woff|woff2|png|jpg|jpeg)$/,...y})),f.manifest&&x.push(new p(f.manifest)),f.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:j.description,keywords:Array.isArray(j.keywords)?j.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};f.seo&&(e.relCanonical={rel:"canonical",href:`https://${f.seo.domain}${f.basename}`}),f.htmlPluginOption.meta&&Object.assign(e,f.htmlPluginOption.meta),x.push(new r({...f.htmlPluginOption,meta:e}))}if(f.fixBrowserRouter){let e=f.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,o=f.fixBrowserRouter.pathSegmentsToKeep??e;x.push(new r({filename:f.fixBrowserRouter.path??t,inject:!1,templateContent:()=>`<html lang="en"><head><title>Redirect</title><script>const pathKeep = ${o};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>`}))}f.sourceMap&&x.push(new e.SourceMapDevToolPlugin(f.sourceMap));export default x;
@@ -0,0 +1,3 @@
1
+ import ReactiveObject from '../commom/reactive-object.mjs';
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const app_vm: ReactiveObject<VirtualModules>;
package/lib/vm/app.mjs ADDED
@@ -0,0 +1 @@
1
+ import{join as e}from"node:path";import{getAppEntry as o,getAppFallback as r,getAppMergeRouter as t,getAppNormalizeCss as m,getAppPrefixRouter as s,getAppRem as n,getAppSuspense as a}from"@moneko/mdx";import{updateFileSync as p}from"@moneko/utils";import i,{routeDir as c}from"../commom/paths.mjs";import l from"../commom/reactive-object.mjs";import u from"../commom/require.mjs";import{CONFIG as d}from"../config.mjs";import{updateMocks as f}from"../dev/mock.mjs";import j from"../plugin/module-federation.mjs";import{app_schema as x,APPTYPE as y,FRAMEWORK as k}from"../process-env.mjs";import g from"../utils/create-types.mjs";import{generateDeclaration as h}from"../utils/dts.mjs";import{node_modules as v,transformModule as D}from"../utils/index.mjs";import $ from"./info.mjs";import{generateLocales as b}from"./locales.mjs";import C from"./render-app.mjs";import{getRouter as z}from"./routes.mjs";let P=new l({});P.on("change",()=>{p(v(`@types/$${x}/index.d.ts`),Object.values(P.data).join("\n"))});export const app_vm=new l({mock:{source:e=>(e.addContextDependency(i.mockPath),f(),"export default null;")},env:{source:()=>{let e=`${x}:env`,o=D(d.env);return P.setData(e,g(e,h(o,e))),o}},info:{source:o=>{let r=`${x}:info`,t=e(i.programPath,"package.json");o.addDependency(t),delete u.cache[t];let m=D({...u(t),...$});return P.setData(r,g(r,h(m,r))),m}},render:{type:".tsx",source:()=>"react"===k?C:""},entry:{type:".tsx",source:()=>{let r=`${x}:entry`,t=o(e(d.alias["@"],"./index.ts"),!!j.length,!!d.rem,!!d.normalizeCss,y,k);return P.setData(r,g(r,h(t,r))),t}},fallback:{source:()=>{let e=`${x}:fallback`,o=r(d.fallbackCompPath);return P.setData(e,g(e,h(o,e))),o}},"merge-router":t(),"prefix-router":s(),suspense:{type:".tsx",source:()=>a(y,k)},routes:{source:e=>(e.addContextDependency(c),z())},locals:{source:o=>{let r=e(d.alias["@"],"./locales");return o.addContextDependency(r),b()}},normalize:{type:".css",source:m},rem:n(d.rem?.designSize||1680)});
package/lib/vm/docs.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import ReactiveObject from '../commom/reactive-object.mjs';
2
- export declare const comment: ReactiveObject<Record<string, string>>;
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const docs_vm: ReactiveObject<VirtualModules>;
3
4
  export declare const getCommentPath: (file: string) => string;
4
- export declare const getDocs: () => string;
5
+ export declare const getDocs: (comments: string[]) => string;
package/lib/vm/docs.mjs CHANGED
@@ -1 +1 @@
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
+ import{join as e,sep as t}from"node:path";import{loadFile as o,scanFolderSync as r}from"@moneko/utils";import m from"../commom/paths.mjs";import n from"../commom/reactive-object.mjs";import c from"../commom/rule.mjs";import{CONFIG as s}from"../config.mjs";import{app_schema as a,docs_schema as p,FRAMEWORK as l,framework as i,isLibrary as d,isReact as u,isSolid as f}from"../process-env.mjs";import $ from"./coverage.mjs";import{generatorExample as g}from"./example.mjs";import h from"./generate-doc.mjs";let x={react:"createElement",solid:"createComponent"}[l],j=()=>d?r(s.alias["@pkg"],["\\.tsx?$"]).filter(e=>!/(^|\/)\.[^\\/\\.]|\.test\./i.test(e)).map(e=>{let t=getCommentPath(e),r=t.replace(`${p}:`,"");return docs_vm.has(r)||docs_vm.setData(r,{type:".txt",source:async t=>{let r=await o(e);return t.addDependency(e),h(r,e)}}),t}):[];export const docs_vm=new n({coverage:{source:e=>(e.addDependency(m.coveragePath),$(m.coveragePath))},docs:{source:async e=>{e.addContextDependency(m.componentsPath);let t=j();return getDocs(t)}},example:{source:e=>(e.addContextDependency(m.componentsPath),g())}});export const getCommentPath=function(){let t=s.alias["@pkg"]?.length;return o=>e(`${p}:comment`,o.substring(t)).replace(/\\/g,"/")}();export const getDocs=e=>{let o=`import { ${x}${f?",Dynamic":""} } from "${i}${f?"/web":""}";import SuspenseComp from "${a}:suspense";function call_then(res) {return {default: ${u?"() =>":""}${x}(${f?"Dynamic":"'div'"}, {${f?"innerHTML: res.default, component: 'div', class: 'n-md-box' ":"dangerouslySetInnerHTML: {__html:res.default}, className: 'n-md-box'"} })};}`,r={};e.forEach(e=>{let o=e.replace(/docs:comment[/\\]/,"").split(t),m=o.pop(),n=o.join("/");r[n]||(r[n]={}),r[n][m]=`rr(() => ${x}(SuspenseComp, { comp: () => import(/* webpackChunkName: '${e}' */ '${e}').then(call_then)}))rr`});let m={};for(let e in r)Object.hasOwn(r,e)&&(m[e]=Object.values(r[e]));return`${o}export default ${JSON.stringify(m).replace(c.extract_func,"$1")}`};j();
@@ -1,3 +1,4 @@
1
1
  import ReactiveObject from '../commom/reactive-object.mjs';
2
- export declare const examples: ReactiveObject<Record<string, string>>;
3
- export declare function generatorExample(): void;
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const example_vm: ReactiveObject<VirtualModules>;
4
+ export declare function generatorExample(): string;
@@ -1 +1 @@
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])}
1
+ import{generateExample as e}from"@moneko/mdx";import o from"../commom/paths.mjs";import r from"../commom/reactive-object.mjs";import t from"../commom/rule.mjs";import{CONFIG as m}from"../config.mjs";import{example_schema as n,isLibrary as p}from"../process-env.mjs";export const example_vm=new r({});export function generatorExample(){if(!p)return"export default {}";let r=p&&!1!==m.htmlPluginOption?JSON.parse(e(o.componentsPath,`${n}:`,"6")):{},a={};for(let e in r)Object.hasOwn(r,e)&&(example_vm.setData(e.replace(`${n}:`,""),{source:t=>(t.addContextDependency(o.componentsPath),r[e])}),Object.assign(a,{[e]:`rr(() => import('${e}'))rr`}));return`export default ${JSON.stringify(a).replace(t.extract_func,"$1")}`}generatorExample();
@@ -1 +1 @@
1
- import{dirname as e}from"node:path";import t from"typescript";import{CONFIG as n}from"../config.mjs";import r from"../options/md-to-html.mjs";let l=t.ScriptKind,o=t.ScriptTarget,i=t.SyntaxKind,a=t.createSourceFile,c=t.forEachChild,s=t.getLeadingCommentRanges,u=t.isInterfaceDeclaration,f=t.isQuestionToken,m=t.isPropertySignature,p=t.isFunctionTypeNode,g=t.isUnionTypeNode,$=t.isMethodSignature,d={};function h(e){let t=s(e.getSourceFile().text,e.pos);if(t){let n=e.getSourceFile().text.slice(t[0].pos,t[0].end).match(/\/\*\*([\s\S]*?)\*\//);if(n)return n[1].replaceAll(/^\s*\* ?/gm,"").replace(/\s+$/,"").trim()}}function b(e){if(!e)return;let t=e.match(/@since\s+([^\n]+)/);return t?t[1].trim():void 0}function y(e){if(!e)return;let t=e.match(/@author (\w+)\s*(?:<([^>]+)>)?/);if(t&&t.length>0){let e=t[1].trim(),n=t[2]?.trim(),r=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(n);return n?r&&(n=`mailto:${n}`):n=`https://github.com/${e}`,`[![${e}-alt](https://avatars.githubusercontent.com/${e}?s=64)${e}](${n})`}}function x(e){if(!e)return;let t=e.match(/@ignore\s+([^\n]+)/);return t?t[1].trim():void 0}let A=/(?<!['"])(unknown|any|void|bigint|object|undefined|null|boolean|number|string|symbol)(?!['"])/g;function j(e,t){if(!e)return;let r=e.replaceAll(/\b([A-Z][a-zA-Z0-9]*)\b/g,e=>{if(d[e]){let r=`/${[n.basename,d[e]].join("/").split("/").filter(Boolean).join("/")}`;return t?`[\\color{#009688}{${e}}](${r})`:`[${e}](${r})`}return t?`\\color{#009688}{${e}}`:e});return t&&(r=r.replaceAll(A,e=>`\\color{#009688}{${e}}`)),r}function S(e){if(e)return(function(e){let t;if(!e)return;let n=[];for(;t=/\\color{([^|}]*)\|?([^|}]*)\|?([^|}]*)\|?([^}]*)}{([^}]*)}/g.exec(e);)n.push(t[0]);return e.replaceAll(/[{}[\]()=>]|keyof|typeof|true|false/g,e=>n.some(t=>t.includes(e))?e:`\\color{#569cd6}{${e}}`)})(e)?.replaceAll(/^\s*\|\s*|\s*\|\s*$/gm,"").replaceAll(/\n/g,"<br/>").replaceAll(/\*/g,"\\*").replaceAll(/\|/g,"\\|").replaceAll(/(['"])((?:(?!\1).)*)\1/g,"\\color{#ce9178}{$1$2$1}")}function T(e){if(e)return e.replaceAll(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/g,"").replaceAll(/^@[a-z].+/gm,"").replaceAll(/(\n\s+)+/g,"<br />").replaceAll(/\n/g,"<br />").replaceAll(/(<br \/>)$/g,"")}export default function k(s,A){let k=a(A,s,o.Latest,!0,l.TS),v="";return c(k,r=>{u(r)?v+=function(r){let l=r.name.text;Object.assign(d,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let o=h(r),a=b(o),c=T(o),s=x(o)?.split("|")||[],u=s.includes("comment"),A=s.includes("initial"),k=s.includes("optional"),v=s.includes("version"),w=s.includes("author"),B=c?`\\color{|4||0.45}{${l}}`:l,z=(function(e){let n=[];if(e.heritageClauses){for(let r of e.heritageClauses)if(r.token===t.SyntaxKind.ExtendsKeyword)for(let e of r.types)n.push(e.getText())}return n})(r)?.map(e=>`<n-tag color="#4c81db" css=".tag{gap:0px;}">${j(S(e))}</n-tag>`),F=[c,B,a&&`\\color{#52c11b|1||0.9}{${a}}`,z.length>0&&`<sub>\`extends\`</sub> ${z.join(" ")}`].filter(Boolean).join(" "),N=`## ${F}`,K=r.members.filter(e=>m(e)&&e.type?.kind!==i.NeverKeyword||$(e)),C=[];if(K.length>0){for(let e=0,t=K.length;e<t;e++){let t=K[e],n=j(S($(t)?`(${t.parameters.map(e=>`${e.name.getText()}: ${e.type?.getText()||"any"}`).join(", ")}): ${t.type?.getText()||"any"}`:t.type?.getText()||"any"),!0),r=h(t),l=S(t.name.getText());l&&!l.startsWith("\\color")&&($(t)||function(e){if(e.type){if(!g(e.type))return p(e.type);else for(let t of e.type.types)if(p(t))return!0}return!1}(t)||n?.includes("=>")?l=`\\color{#f9a913}{${l}}`:/^["'](.+)["']$/.test(l)||(l=`\\color{#4c81db}{${l}}`));let i=t.questionToken&&f(t.questionToken);C.push([l,!k&&`\\color{${i?"#f9a913":"#52c11b"}\\|\\|\\|0.9}{${i?"✘":"✔"}}`,!u&&S(T(r)),n,!A&&S(function(e){if(!e)return;let t=e.match(/@default\s+([^\n]+)/);return t?t[1].trim():void 0}(r)),!v&&S(b(r)),!w&&(y(r)||y(o)),function(e){if(!e)return;let t=e.match(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/);return t?t[1].trim():void 0}(r)])}let e=!1,t=!1,n=!1,r=!1;for(let l=0,o=C.length;l<o;l++){let o=C[l];!u&&o[2]&&(r=!0),!A&&o[4]&&(n=!0),!v&&o[5]&&(t=!0),!w&&o[6]&&(e=!0)}N+="\n";let l=["属性",!k&&"必要",r&&"说明","类型",n&&"默认值",t&&"版本",e&&"作者"].filter(Boolean).join("|");N+=`|${l}|`;let i=[":-",!k&&":-",r&&":-",":-",n&&":-",t&&":-",e&&":-"].filter(Boolean);N+="\n";let a=i.join("|");N+=`|${a}|`;for(let l=0,o=C.length;l<o;l++){let o=C[l];N+="\n";let i=[(o[7]?`<n-popover arrow="true" trigger="click" content=${JSON.stringify(`<n-md css=.n-md-body{margin-bottom:0;padding:0.5rem;background-color:transparent;backdrop-filter:none;box-shadow:none;}>${o[7]}</n-md>`)}><n-button size="small" type="primary" circle="true" style="margin-right:8px;">?</n-button></n-popover>`:"")+(o[0]||"-"),!k&&(o[1]||"-"),r&&(o[2]||"-"),o[3]||"-",n&&(o[4]||"-"),t&&(o[5]||"-"),e&&(o[6]||"-")].filter(Boolean).join("|");N+=`|${i}|`}N+="\n"}return N+"\n"}(r):t.isEnumDeclaration(r)&&(v+=function(r){let l=r.name.text,o=h(r),i=T(o),a=b(o);Object.assign(d,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let c=i?`\\color{|4||0.45}{${l}}`:l,s=[i,c,a&&`\\color{#52c11b|1||0.9}{${a}}`].filter(Boolean).join(" "),u=x(o)?.split("|")||[],f=u.includes("comment"),m=u.includes("version"),p=u.includes("author"),g=`## ${s}`;if(r.members.length>0){let e=[];for(let n=0,l=r.members.length;n<l;n++){let l=r.members[n],i=S(l.name.getText()),a=h(l),c=S(function(e){let n=e.initializer;if(n&&t.isStringLiteral(n))return` '${n.text}'`}(l)),s=S(b(a)),u=S(T(a));!i||i.startsWith("\\color")||/^["'](.+)["']$/.test(i)||(i=`\\color{#4c81db}{${i}}`),e.push([i,!f&&u,c,!m&&s,!p&&(y(a)||y(o))])}let n=!1,l=!1,i=!1;for(let t=0,r=e.length;t<r;t++){let r=e[t];!f&&r[1]&&(i=!0),!m&&r[3]&&(l=!0),!p&&r[4]&&(n=!0)}g+="\n";let a=["属性",i&&"说明","值",l&&"版本",n&&"作者"].filter(Boolean).join("|");g+=`|${a}|`;let c=[":-",i&&":-",":-",l&&":-",n&&":-"].filter(Boolean);g+="\n";let s=c.join("|");g+=`|${s}|`;for(let t=0,r=e.length;t<r;t++){let r=e[t];g+="\n";let o=[r[0]||"-",i&&(r[1]||"-"),r[2]||"-",l&&(r[3]||"-"),n&&(r[4]||"-")].filter(Boolean).join("|");g+=`|${o}|`}}return g+"\n\n"}(r))}),r(v)}
1
+ import{dirname as e}from"node:path";import t from"typescript";import{CONFIG as n}from"../config.mjs";import r from"../options/md-to-html.mjs";import{md5 as l}from"../utils/index.mjs";let o=t.ScriptKind,i=t.ScriptTarget,a=t.SyntaxKind,c=t.createSourceFile,s=t.forEachChild,u=t.getLeadingCommentRanges,f=t.isInterfaceDeclaration,m=t.isQuestionToken,p=t.isPropertySignature,g=t.isFunctionTypeNode,$=t.isUnionTypeNode,d=t.isMethodSignature,h={};function b(e){let t=u(e.getSourceFile().text,e.pos);if(t){let n=e.getSourceFile().text.slice(t[0].pos,t[0].end).match(/\/\*\*([\s\S]*?)\*\//);if(n)return n[1].replaceAll(/^\s*\* ?/gm,"").replace(/\s+$/,"").trim()}}function y(e){if(!e)return;let t=e.match(/@since\s+([^\n]+)/);return t?t[1].trim():void 0}function x(e){if(!e)return;let t=e.match(/@author (\w+)\s*(?:<([^>]+)>)?/);if(t&&t.length>0){let e=t[1].trim(),n=t[2]?.trim(),r=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(n);return n?r&&(n=`mailto:${n}`):n=`https://github.com/${e}`,`[![${e}-alt](https://avatars.githubusercontent.com/${e}?s=64)${e}](${n})`}}function j(e){if(!e)return;let t=e.match(/@ignore\s+([^\n]+)/);return t?t[1].trim():void 0}let A=/(?<!['"])(unknown|any|void|bigint|object|undefined|null|boolean|number|string|symbol)(?!['"])/g;function S(e,t){if(!e)return;let r=e.replaceAll(/\b([A-Z][a-zA-Z0-9]*)\b/g,e=>{if(h[e]){let r=`/${[n.basename,h[e]].join("/").split("/").filter(Boolean).join("/")}`;return t?`[\\color{#009688}{${e}}](${r})`:`[${e}](${r})`}return t?`\\color{#009688}{${e}}`:e});return t&&(r=r.replaceAll(A,e=>`\\color{#009688}{${e}}`)),r}function T(e){if(e)return(function(e){let t;if(!e)return;let n=[];for(;t=/\\color{([^|}]*)\|?([^|}]*)\|?([^|}]*)\|?([^}]*)}{([^}]*)}/g.exec(e);)n.push(t[0]);return e.replaceAll(/[{}[\]()=>]|keyof|typeof|true|false/g,e=>n.some(t=>t.includes(e))?e:`\\color{#569cd6}{${e}}`)})(e)?.replaceAll(/^\s*\|\s*|\s*\|\s*$/gm,"").replaceAll(/\n/g,"<br/>").replaceAll(/\*/g,"\\*").replaceAll(/\|/g,"\\|").replaceAll(/(['"])((?:(?!\1).)*)\1/g,"\\color{#ce9178}{$1$2$1}")}function k(e){if(e)return e.replaceAll(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/g,"").replaceAll(/^@[a-z].+/gm,"").replaceAll(/(\n\s+)+/g,"<br />").replaceAll(/\n/g,"<br />").replaceAll(/(<br \/>)$/g,"")}let v=new WeakMap;export default function w(u,A){let w=[l(u)],B=v.get(w);if(B)return B;let z=c(A,u,i.Latest,!0,o.TS),F="";s(z,r=>{f(r)?F+=function(r){let l=r.name.text;Object.assign(h,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let o=b(r),i=y(o),c=k(o),s=j(o)?.split("|")||[],u=s.includes("comment"),f=s.includes("initial"),A=s.includes("optional"),v=s.includes("version"),w=s.includes("author"),B=c?`\\color{|4||0.45}{${l}}`:l,z=(function(e){let n=[];if(e.heritageClauses){for(let r of e.heritageClauses)if(r.token===t.SyntaxKind.ExtendsKeyword)for(let e of r.types)n.push(e.getText())}return n})(r)?.map(e=>`<n-tag color="#4c81db" css=".tag{gap:0px;}">${S(T(e))}</n-tag>`),F=[c,B,i&&`\\color{#52c11b|1||0.9}{${i}}`,z.length>0&&`<sub>\`extends\`</sub> ${z.join(" ")}`].filter(Boolean).join(" "),N=`## ${F}`,K=r.members.filter(e=>p(e)&&e.type?.kind!==a.NeverKeyword||d(e)),C=[];if(K.length>0){for(let e=0,t=K.length;e<t;e++){let t=K[e],n=S(T(d(t)?`(${t.parameters.map(e=>`${e.name.getText()}: ${e.type?.getText()||"any"}`).join(", ")}): ${t.type?.getText()||"any"}`:t.type?.getText()||"any"),!0),r=b(t),l=T(t.name.getText());l&&!l.startsWith("\\color")&&(d(t)||function(e){if(e.type){if(!$(e.type))return g(e.type);else for(let t of e.type.types)if(g(t))return!0}return!1}(t)||n?.includes("=>")?l=`\\color{#f9a913}{${l}}`:/^["'](.+)["']$/.test(l)||(l=`\\color{#4c81db}{${l}}`));let i=t.questionToken&&m(t.questionToken);C.push([l,!A&&`\\color{${i?"#f9a913":"#52c11b"}\\|\\|\\|0.9}{${i?"✘":"✔"}}`,!u&&T(k(r)),n,!f&&T(function(e){if(!e)return;let t=e.match(/@default\s+([^\n]+)/);return t?t[1].trim():void 0}(r)),!v&&T(y(r)),!w&&(x(r)||x(o)),function(e){if(!e)return;let t=e.match(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/);return t?t[1].trim():void 0}(r)])}let e=!1,t=!1,n=!1,r=!1;for(let l=0,o=C.length;l<o;l++){let o=C[l];!u&&o[2]&&(r=!0),!f&&o[4]&&(n=!0),!v&&o[5]&&(t=!0),!w&&o[6]&&(e=!0)}N+="\n";let l=["属性",!A&&"必要",r&&"说明","类型",n&&"默认值",t&&"版本",e&&"作者"].filter(Boolean).join("|");N+=`|${l}|`;let i=[":-",!A&&":-",r&&":-",":-",n&&":-",t&&":-",e&&":-"].filter(Boolean);N+="\n";let a=i.join("|");N+=`|${a}|`;for(let l=0,o=C.length;l<o;l++){let o=C[l];N+="\n";let i=[(o[7]?`<n-popover arrow="true" trigger="click" content=${JSON.stringify(`<n-md css=.n-md-body{margin-bottom:0;padding:0.5rem;background-color:transparent;backdrop-filter:none;box-shadow:none;}>${o[7]}</n-md>`)}><n-button size="small" type="primary" circle="true" style="margin-right:8px;">?</n-button></n-popover>`:"")+(o[0]||"-"),!A&&(o[1]||"-"),r&&(o[2]||"-"),o[3]||"-",n&&(o[4]||"-"),t&&(o[5]||"-"),e&&(o[6]||"-")].filter(Boolean).join("|");N+=`|${i}|`}N+="\n"}return N+"\n"}(r):t.isEnumDeclaration(r)&&(F+=function(r){let l=r.name.text,o=b(r),i=k(o),a=y(o);Object.assign(h,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let c=i?`\\color{|4||0.45}{${l}}`:l,s=[i,c,a&&`\\color{#52c11b|1||0.9}{${a}}`].filter(Boolean).join(" "),u=j(o)?.split("|")||[],f=u.includes("comment"),m=u.includes("version"),p=u.includes("author"),g=`## ${s}`;if(r.members.length>0){let e=[];for(let n=0,l=r.members.length;n<l;n++){let l=r.members[n],i=T(l.name.getText()),a=b(l),c=T(function(e){let n=e.initializer;if(n&&t.isStringLiteral(n))return` '${n.text}'`}(l)),s=T(y(a)),u=T(k(a));!i||i.startsWith("\\color")||/^["'](.+)["']$/.test(i)||(i=`\\color{#4c81db}{${i}}`),e.push([i,!f&&u,c,!m&&s,!p&&(x(a)||x(o))])}let n=!1,l=!1,i=!1;for(let t=0,r=e.length;t<r;t++){let r=e[t];!f&&r[1]&&(i=!0),!m&&r[3]&&(l=!0),!p&&r[4]&&(n=!0)}g+="\n";let a=["属性",i&&"说明","值",l&&"版本",n&&"作者"].filter(Boolean).join("|");g+=`|${a}|`;let c=[":-",i&&":-",":-",l&&":-",n&&":-"].filter(Boolean);g+="\n";let s=c.join("|");g+=`|${s}|`;for(let t=0,r=e.length;t<r;t++){let r=e[t];g+="\n";let o=[r[0]||"-",i&&(r[1]||"-"),r[2]||"-",l&&(r[3]||"-"),n&&(r[4]||"-")].filter(Boolean).join("|");g+=`|${o}|`}}return g+"\n\n"}(r))});let N=r(F);return v.set(w,N),N}
@@ -0,0 +1,3 @@
1
+ import ReactiveObject from '../commom/reactive-object.mjs';
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const scope_vm: ReactiveObject<VirtualModules>;
@@ -0,0 +1 @@
1
+ import{join as o}from"node:path";import{getAppScope as m}from"@moneko/mdx";import e from"../commom/has-pkg.mjs";import t from"../commom/reactive-object.mjs";import{CONFIG as r}from"../config.mjs";export const scope_vm=new t({components:{source:()=>{let t=!1,s=o(r.alias["@"],"./scope.tsx"),p=o(r.alias["@"],"./scope.ts");return e(s)?t=s:e(p)&&(t=p),t?m(t,"@/scope"):"export defatlu {}"}}});
@@ -0,0 +1,3 @@
1
+ import ReactiveObject from '../commom/reactive-object.mjs';
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const virtual_vm: ReactiveObject<VirtualModules>;
@@ -0,0 +1 @@
1
+ import{updateFileSync as t}from"@moneko/utils";import m from"../commom/reactive-object.mjs";import{CONFIG as o}from"../config.mjs";import{virtual_schema as r}from"../process-env.mjs";import e from"../utils/create-types.mjs";import{generateDeclaration as i}from"../utils/dts.mjs";import{node_modules as s,transformModule as l}from"../utils/index.mjs";export const virtual_vm=new m({});o.virtualModule&&t(s(`@types/$${r}/index.d.ts`),Object.keys(o.virtualModule).map(t=>{let m=l(o.virtualModule[t]);virtual_vm.setData(t,m);let s=`${r}:${t}`;return e(s,i(m,s))}).join("\n"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "4.0.0-bate.2",
3
+ "version": "4.0.0-bate.3",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",
@@ -13,6 +13,7 @@ import type {
13
13
  WebpackPluginInstance,
14
14
  SourceMapDevToolPlugin,
15
15
  RuleSetConditionAbsolute,
16
+ experiments,
16
17
  } from 'webpack';
17
18
 
18
19
  import type { CopyPluginOption } from '../lib/plugin/copy.mjs';
@@ -31,6 +32,7 @@ import type { ProxyConfig } from '../lib/dev/proxy.mjs';
31
32
  import type { OverrideResolverOption } from '../lib/plugin/override-resolve.mjs';
32
33
  import type { OptimizationSplitChunksOptions } from '../lib/options/split-chunk.mjs';
33
34
  import type { HtmlPluginOption } from '../lib/plugin/html-plugin.mjs';
35
+
34
36
  export interface VirtualModulePluginOption {
35
37
  [key: string]: string | object;
36
38
  }
@@ -1 +0,0 @@
1
- "use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return i}});const t=require("fs"),r=(e=require("../commom/log.mjs"))&&e.__esModule?e:{default:e},s={};function i(e){let i=this.resourcePath;if(i.endsWith(".d.ts"))return e;this.cacheable&&this.cacheable();try{let r=(0,t.statSync)(i).mtime.getTime();if(s[i]!==r){Object.assign(s,{[i]:r});let{comment:t,generateDoc:a,getCommentPath:c}=this.getOptions();t.setData(c(i),a(e,i))}}catch(e){(0,r.default)(e)}return e}
@@ -1,7 +0,0 @@
1
- import type { LoaderContext } from 'webpack';
2
- import type ReactiveObject from '../commom/reactive-object.mjs';
3
- export default function (this: LoaderContext<{
4
- comment: ReactiveObject<Record<string, string>>;
5
- generateDoc(content: string, path: string): string;
6
- getCommentPath(filepath: string): string;
7
- }>, value: string): string;
@@ -1,8 +0,0 @@
1
- import webpack from 'webpack';
2
- type VirtualModules = ConstructorParameters<typeof webpack.experiments.schemes.VirtualUrlPlugin>[0];
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;
8
- export {};
@@ -1 +0,0 @@
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)))}