@moneko/core 4.5.3-beta.0 → 4.5.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.
Files changed (50) hide show
  1. package/lib/bin/build.mjs +1 -1
  2. package/lib/bin/changelog.mjs +3 -3
  3. package/lib/bin/commit-lint.mjs +1 -1
  4. package/lib/bin/eslint.mjs +2 -2
  5. package/lib/bin/lessc.mjs +1 -1
  6. package/lib/bin/pin.mjs +1 -1
  7. package/lib/bin/pure-lint.mjs +1 -1
  8. package/lib/bin/stylelint.mjs +2 -2
  9. package/lib/bin/tsc.mjs +1 -1
  10. package/lib/bin/utils/bundle-app.mjs +1 -1
  11. package/lib/bin/utils/config.mjs +1 -1
  12. package/lib/bin/utils/convert-react.d.mts +1 -1
  13. package/lib/build-dev.mjs +2 -2
  14. package/lib/build.mjs +2 -2
  15. package/lib/commom/ca.mjs +1 -1
  16. package/lib/commom/corepack.mjs +1 -1
  17. package/lib/commom/paths.d.mts +0 -10
  18. package/lib/commom/paths.mjs +1 -1
  19. package/lib/commom/rule.d.mts +2 -25
  20. package/lib/commom/rule.mjs +1 -1
  21. package/lib/common.mjs +1 -1
  22. package/lib/config.mjs +1 -1
  23. package/lib/dev/mock.mjs +1 -1
  24. package/lib/dev/server.mjs +1 -1
  25. package/lib/dev.mjs +2 -2
  26. package/lib/index.d.mts +1 -1
  27. package/lib/index.mjs +1 -1
  28. package/lib/module.config.mjs +1 -1
  29. package/lib/options/modify-vars.mjs +1 -1
  30. package/lib/options/split-chunk.mjs +1 -1
  31. package/lib/plugin/copy.mjs +1 -1
  32. package/lib/plugin/exposes-declararion.mjs +1 -1
  33. package/lib/plugin/html-plugin.mjs +1 -1
  34. package/lib/plugin/manifest/index.mjs +1 -1
  35. package/lib/plugin/module-federation.mjs +1 -1
  36. package/lib/plugin/override-resolve.mjs +1 -1
  37. package/lib/utils/dts.mjs +1 -1
  38. package/lib/utils/index.mjs +1 -1
  39. package/lib/utils/seo.mjs +2 -2
  40. package/lib/vm/app.mjs +1 -1
  41. package/lib/vm/docs.mjs +1 -1
  42. package/lib/vm/dts.mjs +1 -1
  43. package/lib/vm/example.mjs +1 -1
  44. package/lib/vm/generate-doc.mjs +1 -1
  45. package/lib/vm/locales.mjs +2 -2
  46. package/lib/vm/scope.mjs +1 -1
  47. package/lib/vm/sw.mjs +1 -1
  48. package/lib/worker/eslint.mjs +1 -1
  49. package/lib/worker/stylelint.mjs +1 -1
  50. package/package.json +1 -1
package/lib/bin/build.mjs CHANGED
@@ -1 +1 @@
1
- import{argv as o,exit as t}from"node:process";import{ink as e,println as s,removeDir as i}from"@moneko/utils";import{CUSTOMCONFIG as r,join as m}from"../commom/paths.mjs";import n from"../commom/setup-env.mjs";import{cwd as c,swcCachePath as l}from"./utils/config.mjs";import{getSwcOption as p}from"./utils/setup-swcrc.mjs";import{lesscCommonjs as d}from"./lessc.mjs";import a from"./tsc.mjs";export async function build(){let j=o[3],u=o[4],f=o.slice(5);j||(s(e(`type: 无效值 ${e(j,"245")}`,"red")),t(1));let x=!f.includes("no-docs"),y=!f.includes("no-lib"),_=!f.includes("no-es"),g=!f.includes("no-dts"),v=f.filter(o=>!["no-docs","no-es","no-lib"].includes(o));if(await n("production",j,u,v,!0,r),"library"===j){let o="solid"===u?await import("@moneko/convert/solid"):await import("@moneko/convert"),{CONFIG:t}=await import("../config.mjs"),e="swc"===t.dts,s=[y&&{type:"commonjs",dir:"lib",msg:"Convert to CommonJS"},_&&{type:"es6",dir:"es",msg:"Convert to ES Module"}].filter(Boolean);for(let r=0,n=s.length;r<n;r++){if(i(m(c,`./${s[r].dir}`)),"react"===u){let t=await p();"es6"===s[r].type&&(t.jsc.target="es2015"),t.jsc.experimental.emitIsolatedDts=g&&e,t.jsc.experimental.cacheRoot=l,t.module.type=s[r].type,o.convert({outDir:s[r].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:t})}else if("solid"===u){let e={jsxOptions:t.jsxDomExpressions,presetEnvOption:{modules:"commonjs"}};"es6"===s[r].type&&(e.presetEnvOption.modules=!1),o.convertSolid({outDir:s[r].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:e})}"commonjs"===s[r].type&&d(),g&&!e&&a(s[r].dir)}}if("library"!==j||x&&"library"===j)try{await import("../build.mjs")}catch(o){s(e(Error(o).message,"red")),t(1)}}
1
+ import{join as o}from"node:path";import{argv as t,exit as e}from"node:process";import{ink as s,println as i,removeDir as r}from"@moneko/utils";import{CUSTOMCONFIG as m}from"../commom/paths.mjs";import n from"../commom/setup-env.mjs";import{cwd as p,swcCachePath as c}from"./utils/config.mjs";import{getSwcOption as l}from"./utils/setup-swcrc.mjs";import{lesscCommonjs as d}from"./lessc.mjs";import a from"./tsc.mjs";export async function build(){let j=t[3],u=t[4],f=t.slice(5);j||(i(s(`type: 无效值 ${s(j,"245")}`,"red")),e(1));let x=!f.includes("no-docs"),y=!f.includes("no-lib"),_=!f.includes("no-es"),g=!f.includes("no-dts"),v=f.filter(o=>!["no-docs","no-es","no-lib"].includes(o));if(await n("production",j,u,v,!0,m),"library"===j){let t="solid"===u?await import("@moneko/convert/solid"):await import("@moneko/convert"),{CONFIG:e}=await import("../config.mjs"),s="swc"===e.dts,i=[y&&{type:"commonjs",dir:"lib",msg:"Convert to CommonJS"},_&&{type:"es6",dir:"es",msg:"Convert to ES Module"}].filter(Boolean);for(let m=0,n=i.length;m<n;m++){if(r(o(p,`./${i[m].dir}`)),"react"===u){let o=await l();"es6"===i[m].type&&(o.jsc.target="es2015"),o.jsc.experimental.emitIsolatedDts=g&&s,o.jsc.experimental.cacheRoot=c,o.module.type=i[m].type,t.convert({outDir:i[m].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:o})}else if("solid"===u){let o={jsxOptions:e.jsxDomExpressions,presetEnvOption:{modules:"commonjs"}};"es6"===i[m].type&&(o.presetEnvOption.modules=!1),t.convertSolid({outDir:i[m].dir,inputDir:"components",ignore:[/^.*\/__*__\//,/\.test\.(js|ts)x?$/,/\.DS_Store/,/\.mdx?$/,/^.*\/examples\//,/\.d\.(cj|mj|j|t|ct|mt)sx?$/],options:o})}"commonjs"===i[m].type&&d(),g&&!s&&a(i[m].dir)}}if("library"!==j||x&&"library"===j)try{await import("../build.mjs")}catch(o){i(s(Error(o).message,"red")),e(1)}}
@@ -1,4 +1,4 @@
1
- import{execSync as t}from"node:child_process";import{argv as e}from"node:process";import{updateFileSync as o}from"@moneko/utils";import r from"../commom/log.mjs";import{join as s}from"../commom/paths.mjs";import{cwd as i}from"./utils/config.mjs";let l={feat:"✨ Features",fix:"🐛 Bug Fixes",docs:"📚 Documentation",style:"💎 Styles",refactor:"📦 Code Refactoring",perf:"🚀 Performance Improvements",test:"🚨 Tests",build:"🛠 Builds",ci:"⚙️ Continuous Integrations",chore:"♻️ Chores",revert:"🗑 Reverts"};function a(e,o){var r=t(`git log ${e?`${e}..`:""}${o||""} --format="%H|%an|%ae|%ad|%s"`,{encoding:"utf-8"});let s=[];for(let t of r.trim().split("\n")){let[e,o,r,i,a]=t.split("|");if(a){let t=a.split(": "),m=l[t[0]];s.push({commitId:e,author:o,email:r,date:new Date(i).toLocaleString().replace(/\//g,"-"),message:m?t.slice(1).join(":"):a,type:m})}}return s}export default function m(){let l=e[3],m=["# Change log"];try{let e,o,r,s=t('git config --get remote.origin.url | sed "s/\\.git$//"').toString().trim().replace(/^git@([^:]+):(.+)$/,"https://$1/$2"),i=(e=t('git for-each-ref --sort="v:refname" --format "%(objectname) %(refname:short) %(creatordate:iso8601)" refs/tags',{encoding:"utf-8"}),o=[],(r=e.trim().split("\n")).forEach((t,e)=>{let[i,l,a]=t.split(" "),m=r[e-1]?.split(" ")[1],n=`## ${l}`;m&&(n=`## [${l}](${s}/compare/${m}...${l}) (${new Date(a).toLocaleDateString().replace(/\//g,"-")})`),o.push({commitId:i,tag:l,date:a,title:n,logs:{}})}),o);i.forEach((t,e)=>{if(e&&a(i[e-1].tag,t.tag).forEach(t=>{if(t.type){let o=i[e].logs[t.type]||[];o.push(`- ${t.message} ([${t.commitId.substring(0,7)}](${s}/commit/${t.commitId}))`),Object.assign(i[e].logs,{[t.type]:o})}}),e===i.length-1){let o=a(t.tag);o.length&&i.push({title:"## Last",logs:{}}),o.forEach(t=>{if(t.type){let o=i[e+1].logs[t.type]||[];o.push(`- ${t.message} ([${t.commitId.substring(0,7)}](${s}/commit/${t.commitId}))`),Object.assign(i[e+1].logs,{[t.type]:o})}})}}),i.reverse().forEach(t=>{for(let e in m.push(`
2
- ${t.title}`),t.logs)Object.prototype.hasOwnProperty.call(t.logs,e)&&(m.push(`
1
+ import{execSync as t}from"node:child_process";import{join as e}from"node:path";import{argv as o}from"node:process";import{updateFileSync as r}from"@moneko/utils";import s from"../commom/log.mjs";import{cwd as i}from"./utils/config.mjs";let l={feat:"✨ Features",fix:"🐛 Bug Fixes",docs:"📚 Documentation",style:"💎 Styles",refactor:"📦 Code Refactoring",perf:"🚀 Performance Improvements",test:"🚨 Tests",build:"🛠 Builds",ci:"⚙️ Continuous Integrations",chore:"♻️ Chores",revert:"🗑 Reverts"};function a(e,o){var r=t(`git log ${e?`${e}..`:""}${o||""} --format="%H|%an|%ae|%ad|%s"`,{encoding:"utf-8"});let s=[];for(let t of r.trim().split("\n")){let[e,o,r,i,a]=t.split("|");if(a){let t=a.split(": "),n=l[t[0]];s.push({commitId:e,author:o,email:r,date:new Date(i).toLocaleString().replace(/\//g,"-"),message:n?t.slice(1).join(":"):a,type:n})}}return s}export default function n(){let l=o[3],n=["# Change log"];try{let e,o,r,s=t('git config --get remote.origin.url | sed "s/\\.git$//"').toString().trim().replace(/^git@([^:]+):(.+)$/,"https://$1/$2"),i=(e=t('git for-each-ref --sort="v:refname" --format "%(objectname) %(refname:short) %(creatordate:iso8601)" refs/tags',{encoding:"utf-8"}),o=[],(r=e.trim().split("\n")).forEach((t,e)=>{let[i,l,a]=t.split(" "),n=r[e-1]?.split(" ")[1],m=`## ${l}`;n&&(m=`## [${l}](${s}/compare/${n}...${l}) (${new Date(a).toLocaleDateString().replace(/\//g,"-")})`),o.push({commitId:i,tag:l,date:a,title:m,logs:{}})}),o);i.forEach((t,e)=>{if(e&&a(i[e-1].tag,t.tag).forEach(t=>{if(t.type){let o=i[e].logs[t.type]||[];o.push(`- ${t.message} ([${t.commitId.substring(0,7)}](${s}/commit/${t.commitId}))`),Object.assign(i[e].logs,{[t.type]:o})}}),e===i.length-1){let o=a(t.tag);o.length&&i.push({title:"## Last",logs:{}}),o.forEach(t=>{if(t.type){let o=i[e+1].logs[t.type]||[];o.push(`- ${t.message} ([${t.commitId.substring(0,7)}](${s}/commit/${t.commitId}))`),Object.assign(i[e+1].logs,{[t.type]:o})}})}}),i.reverse().forEach(t=>{for(let e in n.push(`
2
+ ${t.title}`),t.logs)Object.prototype.hasOwnProperty.call(t.logs,e)&&(n.push(`
3
3
  ### ${e}
4
- `),t.logs[e].forEach(t=>m.push(t)))})}catch(t){m.push("\n当前分支尚无任何提交\n"),r(t)}o(s(i,l),m.join("\n"))}
4
+ `),t.logs[e].forEach(t=>n.push(t)))})}catch(t){n.push("\n当前分支尚无任何提交\n"),s(t)}r(e(i,l),n.join("\n"))}
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var e;let t,r,a,s,n,o;import{argv as l}from"node:process";import{ink as i,loadFileSync as c,println as m}from"@moneko/utils";import u from"../commom/log.mjs";import p,{join as d}from"../commom/paths.mjs";import{getConfigWithTypescript as b}from"../utils/index.mjs";function g(e){return/^[A-Z][a-z\d\s]*$/.test(e)}function h(e){return/^([A-Z][a-z\d]*\s*)+$/.test(e)}function f(e){return/^([A-Z][a-z\d]*)+$/.test(e)}function y(e){return e===e.toUpperCase()}(t=l[2]||d(p.programPath,".git","COMMIT_EDITMSG"))||(u("Commit message file path is required."),process.exit(1)),null===(r=c(t))&&(u("Commit message cannot be empty"),process.exit(1)),a=b(d(p.programPath,"commitlint.config.ts")).default,e=function(e,t){let r={...e};for(let e in t)Object.hasOwn(t,e)&&Object.assign(r,{[e]:t[e]});return r}({"body-leading-blank":[1,"always"],"body-max-line-length":[2,"always",200],"footer-leading-blank":[1,"always"],"footer-max-line-length":[2,"always",100],"header-max-length":[2,"always",100],"header-trim":[2,"always"],"subject-case":[2,"never",["sentence-case","start-case","pascal-case","upper-case"]],"subject-empty":[2,"never"],"subject-full-stop":[2,"never","."],"type-case":[2,"always","lower-case"],"type-empty":[2,"never"],"type-enum":[2,"always",[["build",["Modifies the build system or external dependencies.","修改构建系统或外部依赖"]],["chore",["Performs routine maintenance or tool changes unrelated to features or fixes.","执行与功能或修复无关的日常维护、工具更改"]],["ci",["Modifies continuous integration/deployment configuration or scripts.","修改持续集成/部署的配置或脚本(如 GitHub Actions、Travis CI)"]],["docs",["Updates documentation only.","仅修改文档(如 README、注释)"]],["feat",["Introduces a new feature.","添加新的功能或特性"]],["fix",["Addresses and resolves a bug in the code.","修复代码中的错误或 Bug"]],["perf",["Improves performance without altering functionality.","性能优化,且不影响功能的更改"]],["refactor",["Restructures code without fixing bugs or adding features.","重构代码,既不修复错误也不添加功能"]],["revert",["Reverts a previous commit.","撤销之前的某次提交"]],["style",["Adjusts code style or formatting without affecting logic.","修改代码的样式、格式,而不影响逻辑"]],["test",["Adds or modifies test cases.","添加或修改测试用例"]],["merge",["Merges branches.","合并分支"]]]]},a),s=function(e){let t=e.trim().split("\n"),r=t[0]||"",a=r.match(/^([a-zA-Z]+)(?:\([a-zA-Z0-9-]+\))?:\s*(.+)$/),s=a?a[1]:"",n=a?a[2]:r,o=1;for(;o<t.length&&""===t[o].trim();)o++;let l=t.length;for(let e=o,r=/^(BREAKING CHANGE|[A-Za-z-]+(?:\([A-Za-z-]+\))?:)/,a=t.length;e<a;e++)if(r.test(t[e])){l=e;break}return{header:r,type:s,subject:n,body:t.slice(o,l).join("\n"),footer:t.slice(l).join("\n"),raw:e,lines:t}}(r),n={valid:!0,errors:[],warnings:[]},Object.entries(e).forEach(e=>{let[t,r]=e,[a,o,...l]=r;if(0===a)return;let c=!0,m="";switch(t){case"body-leading-blank":c=!s.body||s.lines.length>1&&""===s.lines[1].trim(),m="body must have leading blank line";break;case"body-max-line-length":{let e=l[0]||100;c=s.body.split("\n").every(t=>t.length<=e),m=`body's lines must not be longer than ${e} characters`;break}case"footer-leading-blank":c=!s.footer||""===s.lines[s.lines.length-s.footer.split("\n").length-1].trim(),m="footer must have leading blank line";break;case"footer-max-line-length":{let e=l[0]||100;c=s.footer.split("\n").every(t=>t.length<=e),m=`footer's lines must not be longer than ${e} characters`;break}case"header-max-length":{let e=l[0]||100;c=s.header.length<=e,m=`header must not be longer than ${e} characters`;break}case"header-trim":c=s.header.trim()===s.header,m="header must not have leading or trailing whitespace";break;case"subject-case":{let e=l[0]||[],t=s.subject.trim(),r={"sentence-case":g,"start-case":h,"pascal-case":f,"upper-case":y};c=!e.some(e=>r[e]&&r[e](t)),m=`subject must not be in ${e.join(", ")}`;break}case"subject-empty":c=""!==s.subject.trim(),m="subject cannot be empty";break;case"subject-full-stop":{let e=l[0]||".";c=!s.subject.trim().endsWith(e),m=`subject must not end with ${e}`;break}case"type-case":"lower-case"==("always"===o?"lower-case":"upper-case")?(c=s.type===s.type.toLowerCase(),m="type must be lower-case"):(c=s.type===s.type.toUpperCase(),m="type must be upper-case");break;case"type-empty":c=""!==s.type,m="type cannot be empty";break;case"type-enum":{let e=l[0]||[],t=e.map(e=>e[0]);c=t.includes(s.type.toLowerCase());let r=Math.max(...t.map(e=>e.length));m=["type must be one of","",...e.map(e=>`${" ".repeat(4)}${e[0]}:${" ".repeat(r-e[0].length)} ${function(e,t=""){return Array.isArray(e)?e.map((e,r)=>r?`${t}${i(e,"245",{})}`:e).join("\n"):e}(e[1]," ".repeat(r+6))}`)].join("\n")}}if("never"===o&&(c=!0),!c){let e={level:a,message:m,name:t};2===a?(n.errors.push(e),n.valid=!1):1===a&&n.warnings.push(e)}}),(function(e){let t=[" ","⚠","✖"],r={green:"\x1b[32m",yellow:"\x1b[33m",red:"\x1b[31m",gray:"\x1b[90m",reset:"\x1b[0m",bold:"\x1b[1m"},{errors:a=[],warnings:s=[]}=e,n=[...a,...s].map(e=>{let a=r[2===e.level?"red":"yellow"]+t[e.level]+r.reset;return`${a} ${e.message} ${r.gray}[${e.name}]${r.reset}`}),o=a.length>0?"✖":s.length?"⚠":"✔",l=a.length>0?r.red:s.length?r.yellow:r.green,i=n.length>0;return[...n,i?"":null,`${l}${o}${r.reset} ${r.gray}${r.bold}found ${a.length} problems, ${s.length} warnings${r.reset}`,i?"":null].filter(e=>null!==e)})(o=n).forEach(e=>{m(e)}),process.exit(+!o.valid);
2
+ var e;let t,r,a,s,n,o;import{join as l}from"node:path";import{argv as i}from"node:process";import{ink as c,loadFileSync as m,println as u}from"@moneko/utils";import p from"../commom/log.mjs";import d from"../commom/paths.mjs";import{getConfigWithTypescript as b}from"../utils/index.mjs";function g(e){return/^[A-Z][a-z\d\s]*$/.test(e)}function h(e){return/^([A-Z][a-z\d]*\s*)+$/.test(e)}function f(e){return/^([A-Z][a-z\d]*)+$/.test(e)}function y(e){return e===e.toUpperCase()}(t=i[2]||l(d.programPath,".git","COMMIT_EDITMSG"))||(p("Commit message file path is required."),process.exit(1)),null===(r=m(t))&&(p("Commit message cannot be empty"),process.exit(1)),a=b(l(d.programPath,"commitlint.config.ts")).default,e=function(e,t){let r={...e};for(let e in t)Object.hasOwn(t,e)&&Object.assign(r,{[e]:t[e]});return r}({"body-leading-blank":[1,"always"],"body-max-line-length":[2,"always",200],"footer-leading-blank":[1,"always"],"footer-max-line-length":[2,"always",100],"header-max-length":[2,"always",100],"header-trim":[2,"always"],"subject-case":[2,"never",["sentence-case","start-case","pascal-case","upper-case"]],"subject-empty":[2,"never"],"subject-full-stop":[2,"never","."],"type-case":[2,"always","lower-case"],"type-empty":[2,"never"],"type-enum":[2,"always",[["build",["Modifies the build system or external dependencies.","修改构建系统或外部依赖"]],["chore",["Performs routine maintenance or tool changes unrelated to features or fixes.","执行与功能或修复无关的日常维护、工具更改"]],["ci",["Modifies continuous integration/deployment configuration or scripts.","修改持续集成/部署的配置或脚本(如 GitHub Actions、Travis CI)"]],["docs",["Updates documentation only.","仅修改文档(如 README、注释)"]],["feat",["Introduces a new feature.","添加新的功能或特性"]],["fix",["Addresses and resolves a bug in the code.","修复代码中的错误或 Bug"]],["perf",["Improves performance without altering functionality.","性能优化,且不影响功能的更改"]],["refactor",["Restructures code without fixing bugs or adding features.","重构代码,既不修复错误也不添加功能"]],["revert",["Reverts a previous commit.","撤销之前的某次提交"]],["style",["Adjusts code style or formatting without affecting logic.","修改代码的样式、格式,而不影响逻辑"]],["test",["Adds or modifies test cases.","添加或修改测试用例"]],["merge",["Merges branches.","合并分支"]]]]},a),s=function(e){let t=e.trim().split("\n"),r=t[0]||"",a=r.match(/^([a-zA-Z]+)(?:\([a-zA-Z0-9-]+\))?:\s*(.+)$/),s=a?a[1]:"",n=a?a[2]:r,o=1;for(;o<t.length&&""===t[o].trim();)o++;let l=t.length;for(let e=o,r=/^(BREAKING CHANGE|[A-Za-z-]+(?:\([A-Za-z-]+\))?:)/,a=t.length;e<a;e++)if(r.test(t[e])){l=e;break}return{header:r,type:s,subject:n,body:t.slice(o,l).join("\n"),footer:t.slice(l).join("\n"),raw:e,lines:t}}(r),n={valid:!0,errors:[],warnings:[]},Object.entries(e).forEach(e=>{let[t,r]=e,[a,o,...l]=r;if(0===a)return;let i=!0,m="";switch(t){case"body-leading-blank":i=!s.body||s.lines.length>1&&""===s.lines[1].trim(),m="body must have leading blank line";break;case"body-max-line-length":{let e=l[0]||100;i=s.body.split("\n").every(t=>t.length<=e),m=`body's lines must not be longer than ${e} characters`;break}case"footer-leading-blank":i=!s.footer||""===s.lines[s.lines.length-s.footer.split("\n").length-1].trim(),m="footer must have leading blank line";break;case"footer-max-line-length":{let e=l[0]||100;i=s.footer.split("\n").every(t=>t.length<=e),m=`footer's lines must not be longer than ${e} characters`;break}case"header-max-length":{let e=l[0]||100;i=s.header.length<=e,m=`header must not be longer than ${e} characters`;break}case"header-trim":i=s.header.trim()===s.header,m="header must not have leading or trailing whitespace";break;case"subject-case":{let e=l[0]||[],t=s.subject.trim(),r={"sentence-case":g,"start-case":h,"pascal-case":f,"upper-case":y};i=!e.some(e=>r[e]&&r[e](t)),m=`subject must not be in ${e.join(", ")}`;break}case"subject-empty":i=""!==s.subject.trim(),m="subject cannot be empty";break;case"subject-full-stop":{let e=l[0]||".";i=!s.subject.trim().endsWith(e),m=`subject must not end with ${e}`;break}case"type-case":"lower-case"==("always"===o?"lower-case":"upper-case")?(i=s.type===s.type.toLowerCase(),m="type must be lower-case"):(i=s.type===s.type.toUpperCase(),m="type must be upper-case");break;case"type-empty":i=""!==s.type,m="type cannot be empty";break;case"type-enum":{let e=l[0]||[],t=e.map(e=>e[0]);i=t.includes(s.type.toLowerCase());let r=Math.max(...t.map(e=>e.length));m=["type must be one of","",...e.map(e=>`${" ".repeat(4)}${e[0]}:${" ".repeat(r-e[0].length)} ${function(e,t=""){return Array.isArray(e)?e.map((e,r)=>r?`${t}${c(e,"245",{})}`:e).join("\n"):e}(e[1]," ".repeat(r+6))}`)].join("\n")}}if("never"===o&&(i=!0),!i){let e={level:a,message:m,name:t};2===a?(n.errors.push(e),n.valid=!1):1===a&&n.warnings.push(e)}}),(function(e){let t=[" ","⚠","✖"],r={green:"\x1b[32m",yellow:"\x1b[33m",red:"\x1b[31m",gray:"\x1b[90m",reset:"\x1b[0m",bold:"\x1b[1m"},{errors:a=[],warnings:s=[]}=e,n=[...a,...s].map(e=>{let a=r[2===e.level?"red":"yellow"]+t[e.level]+r.reset;return`${a} ${e.message} ${r.gray}[${e.name}]${r.reset}`}),o=a.length>0?"✖":s.length?"⚠":"✔",l=a.length>0?r.red:s.length?r.yellow:r.green,i=n.length>0;return[...n,i?"":null,`${l}${o}${r.reset} ${r.gray}${r.bold}found ${a.length} problems, ${s.length} warnings${r.reset}`,i?"":null].filter(e=>null!==e)})(o=n).forEach(e=>{u(e)}),process.exit(+!o.valid);
@@ -1,2 +1,2 @@
1
- import{argv as e,exit as o,stdout as t}from"node:process";import{ESLint as i}from"@moneko/eslint";import{ink as r,print as s}from"@moneko/utils";import{relative as a}from"../commom/paths.mjs";import{cachePath as c,cwd as l,parseBraced as m}from"./utils/config.mjs";export default async function n(){let n=r("eslint","cyan");s(`${n}: ${r("Runing...","yellow")}`,!0);let f=e[3],u=e.slice(4),p=u.includes("--fix"),w=new i({cache:!u.includes("--cache=false"),cacheLocation:`${c}/.eslintcache`,fix:p}),d=m(f).map(e=>a(l,e)),h=await w.lintFiles(d),$=await w.loadFormatter("stylish"),y=await $.format(h,{cwd:process.cwd(),rulesMeta:{}});p&&await i.outputFixes(h),y&&t.write(y);let x=h.some(e=>e.errorCount>0);s(`${n}: ${r(`✨ ${x?"Error":"Successfully"}!
2
- `,x?"red":"green")}`,!0),x&&o(1)}
1
+ import{relative as e}from"node:path";import{argv as o,exit as t,stdout as i}from"node:process";import{ESLint as r}from"@moneko/eslint";import{ink as a,print as s}from"@moneko/utils";import{cachePath as c,cwd as l,parseBraced as n}from"./utils/config.mjs";export default async function m(){let m=a("eslint","cyan");s(`${m}: ${a("Runing...","yellow")}`,!0);let f=o[3],u=o.slice(4),p=u.includes("--fix"),d=new r({cache:!u.includes("--cache=false"),cacheLocation:`${c}/.eslintcache`,fix:p}),w=n(f).map(o=>e(l,o)),h=await d.lintFiles(w),$=await d.loadFormatter("stylish"),y=await $.format(h,{cwd:process.cwd(),rulesMeta:{}});p&&await r.outputFixes(h),y&&i.write(y);let x=h.some(e=>e.errorCount>0);s(`${m}: ${a(`✨ ${x?"Error":"Successfully"}!
2
+ `,x?"red":"green")}`,!0),x&&t(1)}
package/lib/bin/lessc.mjs CHANGED
@@ -1 +1 @@
1
- import{exec as e}from"node:child_process";import{loadFile as s,saveFile as o,scanFolderSync as t}from"@moneko/utils";import{join as m}from"../commom/paths.mjs";import l from"../commom/require.mjs";import{runtimePath as r}from"./utils/config.mjs";let i="";function n(s){let o=m(l.resolve("less"),"../bin/lessc");return new Promise((t,m)=>{e(`${r} ${o} --js ${i} ${s} > ${s.replace(/\.less$/g,".css")}`,function(e){if(e)return m(e);t(!0)})})}let a=/\*?\.less/g;async function c(e){let t=await s(e);t&&a.test(t)&&await o(e,t.replace(a,".css"))}export async function lesscCommonjs(){let e=t("lib",["\\.less$"]),s=(await import("../options/modify-vars.mjs")).default;for(let e in s)Object.hasOwnProperty.call(s,e)&&(i+=`--modify-var="${e}=${s[e]}" `);Promise.allSettled(e.map(n)),e.length&&Promise.allSettled(t("lib",["\\.js$"]).map(c))}
1
+ import{exec as e}from"node:child_process";import{join as o}from"node:path";import{loadFile as s,saveFile as t,scanFolderSync as l}from"@moneko/utils";import r from"../commom/require.mjs";import{runtimePath as i}from"./utils/config.mjs";let m="";function n(s){let t=o(r.resolve("less"),"../bin/lessc");return new Promise((o,l)=>{e(`${i} ${t} --js ${m} ${s} > ${s.replace(/\.less$/g,".css")}`,function(e){if(e)return l(e);o(!0)})})}let a=/\*?\.less/g;async function c(e){let o=await s(e);o&&a.test(o)&&await t(e,o.replace(a,".css"))}export async function lesscCommonjs(){let e=l("lib",["\\.less$"]),o=(await import("../options/modify-vars.mjs")).default;for(let e in o)Object.hasOwnProperty.call(o,e)&&(m+=`--modify-var="${e}=${o[e]}" `);Promise.allSettled(e.map(n)),e.length&&Promise.allSettled(l("lib",["\\.js$"]).map(c))}
package/lib/bin/pin.mjs CHANGED
@@ -1 +1 @@
1
- import{spawn as e}from"node:child_process";import{ink as t,println as a,progressBar as n,updateFile as o}from"@moneko/utils";import{getPackageManager as r}from"../commom/package-manager.mjs";import l from"../commom/parse-args.mjs";import s,{relative as i}from"../commom/paths.mjs";import{readJson as m}from"../commom/read-json.mjs";import c from"../commom/require.mjs";let d=c.resolve(`${s.programPath}/package.json`);async function p(t){return new Promise(a=>{let n=e("npm",["view",t,"version"],{shell:!0}),o="";n.stdout.on("data",e=>{o+=e}),n.stderr.on("data",e=>{let t=e.toString().split("\n").filter(e=>e.includes("GET http")).map(e=>e.split(" - ")[0].trim());t.length&&(o+=`Err: ${t[0]}`.trim())}),n.on("close",async()=>{a(o.trim())})})}async function u(e,t){let a={...e};return n(t.done.length,t.total,{name:"Checking"}),await Promise.allSettled(Object.keys(a).map(async e=>{let o=await p(e);t.done.includes(e)||t.done.push(e),n(t.done.length,t.total,{name:"Checking",msg:`${t.done.length} / ${t.total}`}),a[e]=o})),a}let g={major:"red",minor:"yellow",patch:"cyan",equal:"white"};async function h(e,t,a,n){if(e[t]){var o;let r=await u(e[t],n),l=(o=e[t],Object.keys(r).filter(e=>{let t=$(o[e]);return o[e]!==`${t[0]}${r[e]}`}).map(e=>{var t,a;let n,l,s=$(o[e]),i=r[e].includes("Err:"),m=i?"red":g[t=s[1],a=r[e],n=t.split("."),l=a.split("."),n[0]!==l[0]?"major":n[1]!==l[1]?"minor":n[2]!==l[2]?"patch":"equal"];return{name:e,wanted:o[e],latest:`${s[0]}${r[e].replace("Err:","")}`,color:m,err:i?r[e]:void 0}}));l.length&&(a[t]=l)}}function f(e,t,a){return e.reduce((e,n)=>Math.max(e,t[n].reduce((e,t)=>Math.max(e,t[a]?.length??0),0)),0)}function $(e){let t=e.match(/^([^\d]*)(.*)$/);return t?[t[1],t[2]]:["",e]}async function y(){let e=l(process.argv),n=m(d),c={done:[],total:Object.keys({...n.peerDependencies||{},...n.optionalDependencies||{},...n.devDependencies||{},...n.dependencies||{}}).length},p={};if(a(""),await Promise.allSettled([h(n,"peerDependencies",p,c),h(n,"optionalDependencies",p,c),h(n,"devDependencies",p,c),h(n,"dependencies",p,c)]),a(""),Object.keys(p)?.length>0){let l=r(n.packageManager),m=Object.keys(p),c="".padEnd(3," ");a(""),a(t("⚡ Updates available for:","magenta",{bold:!0})),a("");let u=f(m,p,"name"),g=f(m,p,"latest"),h=f(m,p,"wanted");m.forEach(e=>{a(t(`${e}:`,"145")),p[e].forEach(o=>{a(`${t(o.name.padEnd(u," "),o.color,{bold:!0})}${c}${o.wanted.padStart(h," ")}${c}${t("→",o.color)}${c}${t(o.latest.padStart(g," "),o.color)}`),o.err||(n[e][o.name]=o.latest)}),a("")}),e["-u"]?(await o(d,JSON.stringify(n,null,2)),a(`✅ ${t(i(s.programPath,d),"yellow")} upgrade completed successfully.`),a(`⏳ Run ${t(`${l} install`,"blue")} to install new versions.`)):a(`⏳ Run ${t("mo pin -u","blue")} to upgrade package.json`)}else a(""),a("🎉 All dependencies match the latest package versions");a("")}export default y;
1
+ import{spawn as e}from"node:child_process";import{relative as t}from"node:path";import{ink as a,println as n,progressBar as o,updateFile as r}from"@moneko/utils";import{getPackageManager as l}from"../commom/package-manager.mjs";import s from"../commom/parse-args.mjs";import m from"../commom/paths.mjs";import{readJson as i}from"../commom/read-json.mjs";import c from"../commom/require.mjs";let p=c.resolve(`${m.programPath}/package.json`);async function d(t){return new Promise(a=>{let n=e("npm",["view",t,"version"],{shell:!0}),o="";n.stdout.on("data",e=>{o+=e}),n.stderr.on("data",e=>{let t=e.toString().split("\n").filter(e=>e.includes("GET http")).map(e=>e.split(" - ")[0].trim());t.length&&(o+=`Err: ${t[0]}`.trim())}),n.on("close",async()=>{a(o.trim())})})}async function u(e,t){let a={...e};return o(t.done.length,t.total,{name:"Checking"}),await Promise.allSettled(Object.keys(a).map(async e=>{let n=await d(e);t.done.includes(e)||t.done.push(e),o(t.done.length,t.total,{name:"Checking",msg:`${t.done.length} / ${t.total}`}),a[e]=n})),a}let h={major:"red",minor:"yellow",patch:"cyan",equal:"white"};async function g(e,t,a,n){if(e[t]){var o;let r=await u(e[t],n),l=(o=e[t],Object.keys(r).filter(e=>{let t=$(o[e]);return o[e]!==`${t[0]}${r[e]}`}).map(e=>{var t,a;let n,l,s=$(o[e]),m=r[e].includes("Err:"),i=m?"red":h[t=s[1],a=r[e],n=t.split("."),l=a.split("."),n[0]!==l[0]?"major":n[1]!==l[1]?"minor":n[2]!==l[2]?"patch":"equal"];return{name:e,wanted:o[e],latest:`${s[0]}${r[e].replace("Err:","")}`,color:i,err:m?r[e]:void 0}}));l.length&&(a[t]=l)}}function f(e,t,a){return e.reduce((e,n)=>Math.max(e,t[n].reduce((e,t)=>Math.max(e,t[a]?.length??0),0)),0)}function $(e){let t=e.match(/^([^\d]*)(.*)$/);return t?[t[1],t[2]]:["",e]}async function y(){let e=s(process.argv),o=i(p),c={done:[],total:Object.keys({...o.peerDependencies||{},...o.optionalDependencies||{},...o.devDependencies||{},...o.dependencies||{}}).length},d={};if(n(""),await Promise.allSettled([g(o,"peerDependencies",d,c),g(o,"optionalDependencies",d,c),g(o,"devDependencies",d,c),g(o,"dependencies",d,c)]),n(""),Object.keys(d)?.length>0){let s=l(o.packageManager),i=Object.keys(d),c="".padEnd(3," ");n(""),n(a("⚡ Updates available for:","magenta",{bold:!0})),n("");let u=f(i,d,"name"),h=f(i,d,"latest"),g=f(i,d,"wanted");i.forEach(e=>{n(a(`${e}:`,"145")),d[e].forEach(t=>{n(`${a(t.name.padEnd(u," "),t.color,{bold:!0})}${c}${t.wanted.padStart(g," ")}${c}${a("→",t.color)}${c}${a(t.latest.padStart(h," "),t.color)}`),t.err||(o[e][t.name]=t.latest)}),n("")}),e["-u"]?(await r(p,JSON.stringify(o,null,2)),n(`✅ ${a(t(m.programPath,p),"yellow")} upgrade completed successfully.`),n(`⏳ Run ${a(`${s} install`,"blue")} to install new versions.`)):n(`⏳ Run ${a("mo pin -u","blue")} to upgrade package.json`)}else n(""),n("🎉 All dependencies match the latest package versions");n("")}export default y;
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{spawnSync as t}from"node:child_process";import{argv as e,cwd as i,exit as o,stdout as r}from"node:process";import{ESLint as l}from"@moneko/eslint";import{stylelint as n}from"@moneko/stylelint";import{ink as a,loadFile as m,println as s}from"@moneko/utils";import c from"../commom/log.mjs";import d from"../commom/parse-args.mjs";import{join as f}from"../commom/paths.mjs";import u from"../commom/timer.mjs";let p=d(e.slice(2)),y=p.fix,w=p.cache||!0,h=f(i(),"node_modules/.cache"),j={ci:["diff","--name-only","HEAD^","HEAD"],commit:["diff","--cached","--name-only","--diff-filter=ACM"]},S=/.*(?<!\.d)\.(j|t|mj|mt|cj|ct)sx?$/i,$=/.*(?<!\.d)\.vue$/i,g=/.*(?<!\.d)\.(c|sc|sa|le)ss$/i,v=/\.min\.(j|t|mj|mt|cj|ct)sx?$/i,E=t("git",j[p.mode||"ci"]||j.ci).stdout.toString().trim().split("\n");async function L(){let t=a("ESLint","cyan");s(`${t}: ${a("runing...","yellow")}`,!0);try{u.start("ESLint");let t=E.filter(t=>!(t.endsWith("iconfont.js")||v.test(t))&&(S.test(t)||$.test(t)));if(0===t.length)return void u.end("ESLint");let e=new l({cache:w,cacheLocation:`${h}/.eslintcache`,fix:y}),i=await e.lintFiles(t),n=await e.loadFormatter("stylish"),a=await n.format(i,{cwd:process.cwd(),rulesMeta:{}});y&&await l.outputFixes(i),a&&r.write(a);let m=i.some(t=>t.errorCount>0);u.end("ESLint"),m&&o(1)}catch(t){c(t)}}let x=E.filter(t=>g.test(t)||$.test(t));async function k(){let t=a("Stylelint","cyan");if(s(`${t}: ${a("runing...","yellow")}`,!0),u.start("Stylelint"),0===x.length)return void u.end("Stylelint");let e=await Promise.allSettled(x.map(async t=>{let e=await m(t);if(e)return await n.lint({codeFilename:t,code:e,cache:w,cacheLocation:`${h}/.stylelintcache`,fix:y,formatter:"string"}).catch(c)})),i=!1;e.forEach(t=>{"fulfilled"===t.status?t.value&&(t.value.report&&r.write(t.value.report),t.value.errored&&(i=!!t.value.errored)):t.reason&&(r.write(t.reason),i=!1)}),u.end("Stylelint"),i&&o(1)}await Promise.allSettled([L(),k()]);
2
+ import{spawnSync as t}from"node:child_process";import{join as e}from"node:path";import{argv as i,cwd as o,exit as r,stdout as n}from"node:process";import{ESLint as l}from"@moneko/eslint";import{stylelint as a}from"@moneko/stylelint";import{ink as s,loadFile as m,println as c}from"@moneko/utils";import d from"../commom/log.mjs";import f from"../commom/parse-args.mjs";import u from"../commom/timer.mjs";let p=f(i.slice(2)),y=p.fix,w=p.cache||!0,h=e(o(),"node_modules/.cache"),S={ci:["diff","--name-only","HEAD^","HEAD"],commit:["diff","--cached","--name-only","--diff-filter=ACM"]},j=/.*(?<!\.d)\.(j|t|mj|mt|cj|ct)sx?$/i,$=/.*(?<!\.d)\.vue$/i,g=/.*(?<!\.d)\.(c|sc|sa|le)ss$/i,v=/\.min\.(j|t|mj|mt|cj|ct)sx?$/i,E=t("git",S[p.mode||"ci"]||S.ci).stdout.toString().trim().split("\n");async function L(){let t=s("ESLint","cyan");c(`${t}: ${s("runing...","yellow")}`,!0);try{u.start("ESLint");let t=E.filter(t=>!(t.endsWith("iconfont.js")||v.test(t))&&(j.test(t)||$.test(t)));if(0===t.length)return void u.end("ESLint");let e=new l({cache:w,cacheLocation:`${h}/.eslintcache`,fix:y}),i=await e.lintFiles(t),o=await e.loadFormatter("stylish"),a=await o.format(i,{cwd:process.cwd(),rulesMeta:{}});y&&await l.outputFixes(i),a&&n.write(a);let s=i.some(t=>t.errorCount>0);u.end("ESLint"),s&&r(1)}catch(t){d(t)}}let x=E.filter(t=>g.test(t)||$.test(t));async function k(){let t=s("Stylelint","cyan");if(c(`${t}: ${s("runing...","yellow")}`,!0),u.start("Stylelint"),0===x.length)return void u.end("Stylelint");let e=await Promise.allSettled(x.map(async t=>{let e=await m(t);if(e)return await a.lint({codeFilename:t,code:e,cache:w,cacheLocation:`${h}/.stylelintcache`,fix:y,formatter:"string"}).catch(d)})),i=!1;e.forEach(t=>{"fulfilled"===t.status?t.value&&(t.value.report&&n.write(t.value.report),t.value.errored&&(i=!!t.value.errored)):t.reason&&(n.write(t.reason),i=!1)}),u.end("Stylelint"),i&&r(1)}await Promise.allSettled([L(),k()]);
@@ -1,2 +1,2 @@
1
- import{argv as s,exit as e,stdout as t}from"node:process";import{stylelint as o}from"@moneko/stylelint";import{ink as r,print as i}from"@moneko/utils";import{relative as c}from"../commom/paths.mjs";import{cachePath as l,cwd as m,parseBraced as n}from"./utils/config.mjs";async function a(){let a=r("stylelint","cyan");i(`${a}: ${r("Runing...","yellow")}`,!0);let f=s[3],p=s.slice(4),u=p.includes("--fix"),y=await o.lint({files:n(f).map(s=>c(m,`${s}/**/*.{css,scss,sass,less,ts,tsx,js,jsx}`)),fix:u,cache:!p.includes("--cache=false"),cacheLocation:`${l}/.stylelintcache`,formatter:"string"}),$=y.errored;y.report&&t.write(y.report),i(`${a}: ${r(`✨ ${$?"Error":"Successfully"}!
2
- `,$?"red":"green")}`,!0),$&&e(1)}export default a;
1
+ import{relative as e}from"node:path";import{argv as s,exit as t,stdout as r}from"node:process";import{stylelint as o}from"@moneko/stylelint";import{ink as i,print as l}from"@moneko/utils";import{cachePath as c,cwd as n,parseBraced as a}from"./utils/config.mjs";async function m(){let m=i("stylelint","cyan");l(`${m}: ${i("Runing...","yellow")}`,!0);let f=s[3],p=s.slice(4),u=p.includes("--fix"),d=await o.lint({files:a(f).map(s=>e(n,`${s}/**/*.{css,scss,sass,less,ts,tsx,js,jsx}`).replace(/\\/g,"/")),fix:u,cache:!p.includes("--cache=false"),cacheLocation:`${c}/.stylelintcache`,formatter:"string"}),y=d.errored;d.report&&r.write(d.report),l(`${m}: ${i(`✨ ${y?"Error":"Successfully"}!
2
+ `,y?"red":"green")}`,!0),y&&t(1)}export default m;
package/lib/bin/tsc.mjs CHANGED
@@ -1 +1 @@
1
- import{stdout as e}from"node:process";import t from"typescript";import{join as i}from"../commom/paths.mjs";import{cwd as o}from"./utils/config.mjs";async function s(s){return new Promise(n=>{let r=t.parseJsonConfigFileContent({extends:i(o,"tsconfig.json"),compilerOptions:{outDir:s,declaration:!0,emitDeclarationOnly:!0,skipLibCheck:!0,skipDefaultLibCheck:!0,noEmitOnError:!1},include:[i(o,"components"),i(o,"typings")],exclude:[i(o,"components/**/examples/*"),i(o,"components/**/__tests__/*"),i(o,"components/**/__mocks__/*")]},t.sys,o);r.options.incremental&&(r.options.tsBuildInfoFile=r.options.tsBuildInfoFile??i(s,".tsbuildinfo"));let m=t.createProgram(r.fileNames,r.options),a=m.emit();t.getPreEmitDiagnostics(m).concat(a.diagnostics).forEach(i=>{if(e.write("\n"),i.file){let{line:o,character:s}=i.file.getLineAndCharacterOfPosition(i.start),n=t.flattenDiagnosticMessageText(i.messageText,"\n");e.write(`${i.file.fileName} (${o+1},${s+1}): ${n}`)}else e.write(t.flattenDiagnosticMessageText(i.messageText,"\n"))}),n(!0)})}export default s;
1
+ import{join as e}from"node:path";import{stdout as t}from"node:process";import i from"typescript";import{cwd as o}from"./utils/config.mjs";async function n(n){return new Promise(s=>{let r=i.parseJsonConfigFileContent({extends:e(o,"tsconfig.json"),compilerOptions:{outDir:n,declaration:!0,emitDeclarationOnly:!0,skipLibCheck:!0,skipDefaultLibCheck:!0,noEmitOnError:!1},include:[e(o,"components"),e(o,"typings")],exclude:[e(o,"components/**/examples/*"),e(o,"components/**/__tests__/*"),e(o,"components/**/__mocks__/*")]},i.sys,o);r.options.incremental&&(r.options.tsBuildInfoFile=r.options.tsBuildInfoFile??e(n,".tsbuildinfo"));let a=i.createProgram(r.fileNames,r.options),c=a.emit();i.getPreEmitDiagnostics(a).concat(c.diagnostics).forEach(e=>{if(t.write("\n"),e.file){let{line:o,character:n}=e.file.getLineAndCharacterOfPosition(e.start),s=i.flattenDiagnosticMessageText(e.messageText,"\n");t.write(`${e.file.fileName} (${o+1},${n+1}): ${s}`)}else t.write(i.flattenDiagnosticMessageText(e.messageText,"\n"))}),s(!0)})}export default n;
@@ -1 +1 @@
1
- import{execSync as o}from"node:child_process";import{renameSync as e}from"node:fs";import{bundleIpa as p,createDir as n,ink as t,print as a}from"@moneko/utils";import{join as r}from"../../commom/paths.mjs";import l from"../../commom/timer.mjs";export function bundleApk(p,i,u="-release"){a(t("正在编译 apk...","yellow"),!0),l.start(`bundle apk ${u}`),o(`flutter build apk -${u}`),l.end(`bundle apk ${u}`),n(i),e(r(p,`build/app/outputs/flutter-apk/app${u}.apk`),i),a(`✨ ${t("Apk 编译","cyan")}: ${t("完成","cyan")}`,!0)}export function bundleIOS(i,u,m="-release"){a(t("正在编译 ipa...","yellow"),!0),l.start(`bundle ipa ${m}`);let d=r(u,"Runner/Payload");o(`flutter build ios -${m} --no-codesign`),n(d),e(r(i,"build/ios/iphoneos/Runner.app"),d),p(r(u,"Runner"),u,m),l.end(`bundle ipa ${m}`),a(`✨ ${t("ipa 编译","cyan")}: ${t("完成","cyan")}`,!0)}
1
+ import{execSync as e}from"node:child_process";import{renameSync as o}from"node:fs";import{join as n}from"node:path";import{bundleIpa as p,createDir as t,ink as a,print as r}from"@moneko/utils";import l from"../../commom/timer.mjs";export function bundleApk(p,i,u="-release"){r(a("正在编译 apk...","yellow"),!0),l.start(`bundle apk ${u}`),e(`flutter build apk -${u}`),l.end(`bundle apk ${u}`),t(i),o(n(p,`build/app/outputs/flutter-apk/app${u}.apk`),i),r(`✨ ${a("Apk 编译","cyan")}: ${a("完成","cyan")}`,!0)}export function bundleIOS(i,u,d="-release"){r(a("正在编译 ipa...","yellow"),!0),l.start(`bundle ipa ${d}`);let m=n(u,"Runner/Payload");e(`flutter build ios -${d} --no-codesign`),t(m),o(n(i,"build/ios/iphoneos/Runner.app"),m),p(n(u,"Runner"),u,d),l.end(`bundle ipa ${d}`),r(`✨ ${a("ipa 编译","cyan")}: ${a("完成","cyan")}`,!0)}
@@ -1 +1 @@
1
- import{cwd as o,execPath as e,platform as t}from"node:process";import{dirname as c,join as n}from"../../commom/paths.mjs";let s="u">typeof Deno?"deno":"u">typeof Bun?"bun":"node",r=c(e);"win32"===t&&r.includes(" ")&&(r=`"${r}"`);export const runtimePath=n(r,s);export const corePkg="@moneko/core";export const cwd=o();export const cachePath=n(cwd,"node_modules/.cache");export const swcCachePath=n(cachePath,".swc");export function parseBraced(o){return o.startsWith("[")&&o.endsWith("]")?o.slice(1,-1).split(","):[o]}
1
+ import{dirname as e,join as o}from"node:path";import{cwd as t,execPath as c,platform as n}from"node:process";let r="u">typeof Deno?"deno":"u">typeof Bun?"bun":"node",s=e(c);"win32"===n&&s.includes(" ")&&(s=`"${s}"`);export const runtimePath=o(s,r);export const corePkg="@moneko/core";export const cwd=t();export const cachePath=o(cwd,"node_modules/.cache");export const swcCachePath=o(cachePath,".swc");export function parseBraced(e){return e.startsWith("[")&&e.endsWith("]")?e.slice(1,-1).split(","):[e]}
@@ -1,4 +1,4 @@
1
- // import { join, sep, extname, normalize } from '../../commom/paths.mjs';
1
+ // import { join, sep, extname, normalize } from 'node:path';
2
2
  // import { copyFile, ink, println, scanFolderSync, updateFile } from '@moneko/utils';
3
3
  // import { JsMinifyOptions, type Options, type Output, transformFile } from '@swc/core';
4
4
  // function getOutfilePath(outDir: string, file: string, outFileExtension?: string) {
package/lib/build-dev.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import o from"node:process";import{analyzeBundleSize as r,completedInfo as e,ink as t,println as m,progressBar as i}from"@moneko/utils";import a from"webpack";import n from"./commom/log.mjs";import s,{relative as l}from"./commom/paths.mjs";import{CONFIG as p}from"./config.mjs";import{createDevelopmentConfiguration as c}from"./create-development-configuration.mjs";let g=await c({});if(p.bar){let r=p.bar,e=r.name||"Build";g.plugins.push(new a.ProgressPlugin({handler(t,m,...a){let n=a.length?`[${m}] ${a.join(" ")}`:" ";r.quiet?o.stdout.write(`${n}
2
- `):(i(t||0,1,{msg:n,name:e,barColor:r.barColor,nameColor:r.nameColor,barBgColor:r.barBgColor,msgColor:r.msgColor}),1===t&&o.stdout.write("\r\x1b[2K"))}}))}let u=a(g);async function d(){let o=await new Promise((o,r)=>{u?.run((e,t)=>{e&&r(e),t?o(t):r(Error("编译过程中没有生成统计信息"))})});(o.hasErrors()||o.hasWarnings())&&function(o){let{warnings:r,errors:e}=o.compilation,i=[];r.forEach(o=>{o.message.includes("Conflicting order between css ./node_modules/")&&o.message.includes("monaco-editor")?i.push(o.message):m(t(o.message,"178"))}),i.length&&n(i.join("\n")),e.forEach(o=>{m(t(o.message,"red"))})}(o),await new Promise(i=>{o.compilation.compiler.cache.shutdown(a=>{a&&m(t(a.toString(),"red")),r(o.compilation.outputOptions.path,["\\.js$"]),e(~~((o.endTime-o.startTime)/10)/100,l(s.programPath,o.compilation.outputOptions.path)),i()})})}await d();
1
+ import{relative as o}from"node:path";import r from"node:process";import{analyzeBundleSize as e,completedInfo as t,ink as m,println as i,progressBar as a}from"@moneko/utils";import n from"webpack";import s from"./commom/log.mjs";import l from"./commom/paths.mjs";import{CONFIG as p}from"./config.mjs";import{createDevelopmentConfiguration as c}from"./create-development-configuration.mjs";let g=await c({});if(p.bar){let o=p.bar,e=o.name||"Build";g.plugins.push(new n.ProgressPlugin({handler(t,m,...i){let n=i.length?`[${m}] ${i.join(" ")}`:" ";o.quiet?r.stdout.write(`${n}
2
+ `):(a(t||0,1,{msg:n,name:e,barColor:o.barColor,nameColor:o.nameColor,barBgColor:o.barBgColor,msgColor:o.msgColor}),1===t&&r.stdout.write("\r\x1b[2K"))}}))}let u=n(g);async function d(){let r=await new Promise((o,r)=>{u?.run((e,t)=>{e&&r(e),t?o(t):r(Error("编译过程中没有生成统计信息"))})});(r.hasErrors()||r.hasWarnings())&&function(o){let{warnings:r,errors:e}=o.compilation,t=[];r.forEach(o=>{o.message.includes("Conflicting order between css ./node_modules/")&&o.message.includes("monaco-editor")?t.push(o.message):i(m(o.message,"178"))}),t.length&&s(t.join("\n")),e.forEach(o=>{i(m(o.message,"red"))})}(r),await new Promise(a=>{r.compilation.compiler.cache.shutdown(n=>{n&&i(m(n.toString(),"red")),e(r.compilation.outputOptions.path,["\\.js$"]),t(~~((r.endTime-r.startTime)/10)/100,o(l.programPath,r.compilation.outputOptions.path)),a()})})}await d();
package/lib/build.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import o from"node:process";import{analyzeBundleSize as r,completedInfo as m,ink as e,println as i,progressBar as t}from"@moneko/utils";import s from"webpack";import{merge as n}from"webpack-merge";import a from"./build/common.mjs";import l from"./commom/log.mjs";import p,{relative as u}from"./commom/paths.mjs";import{DonePlugin as g}from"./plugin/done.mjs";import c from"./utils/seo.mjs";import{CONFIG as d}from"./config.mjs";import f from"./module.config.mjs";let h=n(a,{module:f(!1),plugins:[]});if(d.done&&h.plugins.push(new g({done:d.done})),d.bar){let r=d.bar,m=r.name||"Build";h.plugins.push(new s.ProgressPlugin({handler(e,i,...s){let n=s.length?`[${i}] ${s.join(" ")}`:" ";r.quiet?o.stdout.write(`${n}
2
- `):(t(e||0,1,{msg:n,name:m,barColor:r.barColor,nameColor:r.nameColor,barBgColor:r.barBgColor,msgColor:r.msgColor}),1===e&&o.stdout.write("\r\x1b[2K"))}}))}let w=s(h);if(!w)throw Error("无法创建编译器");async function b(){let o=await new Promise((o,r)=>{w?.run((m,e)=>{m&&r(m),e?o(e):r(Error("编译过程中没有生成统计信息"))})});(o.hasErrors()||o.hasWarnings())&&function(o){let{warnings:r,errors:m}=o.compilation,t=[];r.forEach(o=>{o.message.includes("Conflicting order between css ./node_modules/")&&o.message.includes("monaco-editor")?t.push(o.message):i(e(o.message,"178"))}),t.length&&l(t.join("\n")),m.forEach(o=>{i(e(o.message,"red"))})}(o),await new Promise(t=>{o.compilation.compiler.cache.shutdown(s=>{s&&i(e(s.toString(),"red")),r(o.compilation.outputOptions.path,["\\.js$"]),m(~~((o.endTime-o.startTime)/10)/100,u(p.programPath,o.compilation.outputOptions.path)),t()})}),d.seo&&c()}await b();
1
+ import{relative as o}from"node:path";import r from"node:process";import{analyzeBundleSize as m,completedInfo as e,ink as t,println as i,progressBar as s}from"@moneko/utils";import n from"webpack";import{merge as a}from"webpack-merge";import l from"./build/common.mjs";import p from"./commom/log.mjs";import u from"./commom/paths.mjs";import{DonePlugin as g}from"./plugin/done.mjs";import c from"./utils/seo.mjs";import{CONFIG as d}from"./config.mjs";import f from"./module.config.mjs";let h=a(l,{module:f(!1),plugins:[]});if(d.done&&h.plugins.push(new g({done:d.done})),d.bar){let o=d.bar,m=o.name||"Build";h.plugins.push(new n.ProgressPlugin({handler(e,t,...i){let n=i.length?`[${t}] ${i.join(" ")}`:" ";o.quiet?r.stdout.write(`${n}
2
+ `):(s(e||0,1,{msg:n,name:m,barColor:o.barColor,nameColor:o.nameColor,barBgColor:o.barBgColor,msgColor:o.msgColor}),1===e&&r.stdout.write("\r\x1b[2K"))}}))}let w=n(h);if(!w)throw Error("无法创建编译器");async function b(){let r=await new Promise((o,r)=>{w?.run((m,e)=>{m&&r(m),e?o(e):r(Error("编译过程中没有生成统计信息"))})});(r.hasErrors()||r.hasWarnings())&&function(o){let{warnings:r,errors:m}=o.compilation,e=[];r.forEach(o=>{o.message.includes("Conflicting order between css ./node_modules/")&&o.message.includes("monaco-editor")?e.push(o.message):i(t(o.message,"178"))}),e.length&&p(e.join("\n")),m.forEach(o=>{i(t(o.message,"red"))})}(r),await new Promise(s=>{r.compilation.compiler.cache.shutdown(n=>{n&&i(t(n.toString(),"red")),m(r.compilation.outputOptions.path,["\\.js$"]),e(~~((r.endTime-r.startTime)/10)/100,o(u.programPath,r.compilation.outputOptions.path)),s()})}),d.seo&&c()}await b();
package/lib/commom/ca.mjs CHANGED
@@ -1 +1 @@
1
- import{exec as t}from"node:child_process";import{platform as e}from"node:process";import{promisify as r}from"node:util";import{fileExists as o,generateCert as i,loadFile as a,normalCertificateAuthority as l,println as n,saveFile as c}from"@moneko/utils";import s from"./log.mjs";import{getIPv4 as m}from"./net.mjs";import u,{join as f,relative as d}from"./paths.mjs";let p=r(t);export const CA_ORGANIZATION="Local Root Certificate Authority - Moneko";export async function isCertificateInstalled(t){try{if("darwin"===e){let{stdout:e}=await p(`security find-certificate -c "${t}" -a`);return e.length>0}if("win32"===e){let{stdout:e}=await p(`certutil -store -user Root | findstr /C:"${t}"`);return e.length>0}}catch(t){s(t)}return!1}function y(t,e,r){if(t&&!r.includes("already exists"))return void s(t)}export function installCA(r){return"darwin"===e?t(`sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "${r}"`,y):"win32"===e?t(`certutil -addstore -user "Root" "${r}"`,y):void n(`⚠️ 暂不支持自动安装 CA 的平台: ${e}`)}export async function setupCert(t="localhost",e=!0){let r=d(u.programPath,`${u.corePath}/cert/cert.pem`),n=d(u.programPath,`${u.corePath}/cert/key.pem`),s=!o(r)||!o(n);if(s){let t=l();await Promise.allSettled([c(r,t.cert),c(n,t.key)])}e&&(!await isCertificateInstalled("Local Root Certificate Authority - Moneko")||s)&&installCA(r);let p=f(u.CA_DIR,`${t}_cert.pem`),y=f(u.CA_DIR,`${t}_key.pem`);if(s||!o(p)||!o(y)){let e=await Promise.all([a(r),a(n)]),o=i(e[0],e[1],[...new Set([t,"localhost","127.0.0.1",m()].filter(Boolean))]);await Promise.allSettled([c(p,o.cert),c(y,o.key)])}let h=await Promise.all([a(p),a(y)]);return{cert:h[0],key:h[1]}}
1
+ import{exec as t}from"node:child_process";import{join as e,relative as r}from"node:path";import{platform as o}from"node:process";import{promisify as i}from"node:util";import{fileExists as a,generateCert as l,loadFile as n,normalCertificateAuthority as c,println as s,saveFile as m}from"@moneko/utils";import f from"./log.mjs";import{getIPv4 as u}from"./net.mjs";import d from"./paths.mjs";let p=i(t);export const CA_ORGANIZATION="Local Root Certificate Authority - Moneko";export async function isCertificateInstalled(t){try{if("darwin"===o){let{stdout:e}=await p(`security find-certificate -c "${t}" -a`);return e.length>0}if("win32"===o){let{stdout:e}=await p(`certutil -store -user Root | findstr /C:"${t}"`);return e.length>0}}catch(t){f(t)}return!1}function y(t,e,r){if(t&&!r.includes("already exists"))return void f(t)}export function installCA(e){return"darwin"===o?t(`sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" "${e}"`,y):"win32"===o?t(`certutil -addstore -user "Root" "${e}"`,y):void s(`⚠️ 暂不支持自动安装 CA 的平台: ${o}`)}export async function setupCert(t="localhost",o=!0){let i=r(d.programPath,`${d.corePath}/cert/cert.pem`),s=r(d.programPath,`${d.corePath}/cert/key.pem`),f=!a(i)||!a(s);if(f){let t=c();await Promise.allSettled([m(i,t.cert),m(s,t.key)])}o&&(!await isCertificateInstalled("Local Root Certificate Authority - Moneko")||f)&&installCA(i);let p=e(d.CA_DIR,`${t}_cert.pem`),y=e(d.CA_DIR,`${t}_key.pem`);if(f||!a(p)||!a(y)){let e=await Promise.all([n(i),n(s)]),r=l(e[0],e[1],[...new Set([t,"localhost","127.0.0.1",u()].filter(Boolean))]);await Promise.allSettled([m(p,r.cert),m(y,r.key)])}let h=await Promise.all([n(p),n(y)]);return{cert:h[0],key:h[1]}}
@@ -1 +1 @@
1
- import{spawn as e}from"node:child_process";import{execPath as r,platform as o,versions as a}from"node:process";import{ink as n,loadFile as p,println as t,saveFile as c}from"@moneko/utils";import{packageJson as i}from"../process-env.mjs";import m from"./log.mjs";import s,{dirname as l,join as g}from"./paths.mjs";let f=g(s.programPath,"package.json"),k=n("corepack","magenta"),d={stdio:"ignore",shell:!0};export function corepack(s){new Promise(a=>{if(i.packageManager){let n=e("corepack",["-v"],d);n.on("error",e=>{m(e),a(!1)}),n.on("exit",e=>{0!==e&&a(!1);let n=i.packageManager.split("@")[0],t="win32"===o?`${n}.cmd`:n;p(g(l(r),t)).then(e=>{a(e.includes("corepack"))}).catch(e=>{m(e),a(!1)})})}else a(!1)}).then(r=>{if(s){if(!i.packageManager){let e;i.packageManager=(e=Number(a.node.split(".")[0]))<16?"pnpm@7.33.7":e<18?"pnpm@8.15.9":"pnpm@10.14.0",c(f,JSON.stringify(i,null,2))}if(r)return;e("corepack",["enable"],d);return}r?t(`${k} is ${n("enabled","green")} ${n(`(${i.name})`,"245")}`):t(`${k} is ${n("disabled","yellow")} ${n(`(${i.name})`,"245")}`)}).catch(e=>{m(e)})}
1
+ import{spawn as e}from"node:child_process";import{dirname as r,join as o}from"node:path";import{execPath as a,platform as n,versions as p}from"node:process";import{ink as t,loadFile as m,println as i,saveFile as c}from"@moneko/utils";import{packageJson as s}from"../process-env.mjs";import l from"./log.mjs";import g from"./paths.mjs";let f=o(g.programPath,"package.json"),d=t("corepack","magenta"),k={stdio:"ignore",shell:!0};export function corepack(g){new Promise(p=>{if(s.packageManager){let t=e("corepack",["-v"],k);t.on("error",e=>{l(e),p(!1)}),t.on("exit",e=>{0!==e&&p(!1);let t=s.packageManager.split("@")[0],i="win32"===n?`${t}.cmd`:t;m(o(r(a),i)).then(e=>{p(e.includes("corepack"))}).catch(e=>{l(e),p(!1)})})}else p(!1)}).then(r=>{if(g){if(!s.packageManager){let e;s.packageManager=(e=Number(p.node.split(".")[0]))<16?"pnpm@7.33.7":e<18?"pnpm@8.15.9":"pnpm@10.14.0",c(f,JSON.stringify(s,null,2))}if(r)return;e("corepack",["enable"],k);return}r?i(`${d} is ${t("enabled","green")} ${t(`(${s.name})`,"245")}`):i(`${d} is ${t("disabled","yellow")} ${t(`(${s.name})`,"245")}`)}).catch(e=>{l(e)})}
@@ -1,13 +1,3 @@
1
- import path, { posix } from 'node:path';
2
- export declare function join(...segments: string[]): string;
3
- export declare const basename: typeof posix.basename;
4
- export declare const dirname: typeof posix.dirname;
5
- export declare const extname: typeof posix.extname;
6
- export declare const normalize: typeof posix.normalize;
7
- export declare const parse: typeof posix.parse;
8
- export declare const relative: typeof posix.relative;
9
- export declare const resolve: typeof posix.resolve;
10
- export declare const sep: typeof path.sep;
11
1
  /** 当前文件所在目录的绝对路径 */ export declare const __dirname: string;
12
2
  /** yarn 命令行参数对象,包含配置选项 */ export declare const yarnArgv: Record<string, string> & {
13
3
  config?: string;
@@ -1 +1 @@
1
- import{tmpdir as e}from"node:os";import o,{posix as t}from"node:path";import{argv as r,cwd as n,env as s}from"node:process";import{fileURLToPath as a,URL as c}from"node:url";import{fileExists as l}from"@moneko/utils";import i from"./parse-args.mjs";import{http as p}from"./rule.mjs";export function join(...e){let o=e[0];if(p.test(o)){let t=o;for(let o=1;o<e.length;o++)t=new c(e[o],t).href;return t}return t.join(...e)}export const basename=t.basename;export const dirname=t.dirname;export const extname=t.extname;export const normalize=t.normalize;export const parse=t.parse;export const relative=t.relative;export const resolve=t.resolve;export const sep=o.sep;let m=JSON.parse(s.npm_config_argv||'{"original":[]}').original;export const __dirname=a(new c("..",import.meta.url));export const yarnArgv={};for(let e=0,o=m.length;e<o;e++){let o=m[e].split("=");Object.assign(yarnArgv,{[o[0]]:o[1]||!0})}export const CUSTOMCONFIG=s.npm_config_config||yarnArgv.config||s.__args__config__||i(r.slice(2)).config;let g=n(),h=resolve(g,"node_modules");export const TMP_DIR=resolve(e(),"@moneko");let f={nodeModules:h,pnpmNodeModules:resolve(h,".pnpm/node_modules"),denoNodeModules:resolve(h,".deno"),corePath:__dirname,programPath:g,CA_DIR:resolve(TMP_DIR,".ca"),webpackCachePath:resolve(h,".cache"),lintCachePath:resolve(h,".cache"),httpCachePath:resolve(h,".cache/http"),swcCachePath:resolve(h,".cache/.swc"),configPath:resolve(g,"config/index.ts"),customConfigPath:resolve(g,`config/${CUSTOMCONFIG}.ts`),coveragePath:resolve(g,"coverage/clover.xml"),pagesPath:resolve(g,"src/pages"),componentsPath:resolve(g,"components"),mockPath:resolve(g,"mock")};export const config_files=[l(f.configPath)&&f.configPath,l(f.customConfigPath)&&f.customConfigPath].filter(Boolean);export const routeDir="library"===s.APPTYPE?f.componentsPath:f.pagesPath;export default f;
1
+ import{tmpdir as o}from"node:os";import{resolve as e}from"node:path";import{argv as t,cwd as n,env as a}from"node:process";import r from"node:url";import{fileExists as c}from"@moneko/utils";import i from"./parse-args.mjs";let s=JSON.parse(a.npm_config_argv||'{"original":[]}').original;export const __dirname=r.fileURLToPath(new URL("..",import.meta.url));export const yarnArgv={};for(let o=0,e=s.length;o<e;o++){let e=s[o].split("=");Object.assign(yarnArgv,{[e[0]]:e[1]||!0})}export const CUSTOMCONFIG=a.npm_config_config||yarnArgv.config||a.__args__config__||i(t.slice(2)).config;let m=n(),p=e(m,"node_modules");export const TMP_DIR=e(o(),"@moneko");let g={nodeModules:p,pnpmNodeModules:e(p,".pnpm/node_modules"),denoNodeModules:e(p,".deno"),corePath:__dirname,programPath:m,CA_DIR:e(TMP_DIR,".ca"),webpackCachePath:e(p,".cache"),lintCachePath:e(p,".cache"),httpCachePath:e(p,".cache/http"),swcCachePath:e(p,".cache/.swc"),configPath:e(m,"config/index.ts"),customConfigPath:e(m,`config/${CUSTOMCONFIG}.ts`),coveragePath:e(m,"coverage/clover.xml"),pagesPath:e(m,"src/pages"),componentsPath:e(m,"components"),mockPath:e(m,"mock")};export const config_files=[c(g.configPath)&&g.configPath,c(g.customConfigPath)&&g.customConfigPath].filter(Boolean);export const routeDir="library"===a.APPTYPE?g.componentsPath:g.pagesPath;export default g;
@@ -1,25 +1,2 @@
1
- export declare const js: RegExp;
2
- export declare const css: RegExp;
3
- export declare const less: RegExp;
4
- export declare const scss: RegExp;
5
- export declare const wasm: RegExp;
6
- export declare const txt: RegExp;
7
- export declare const image: RegExp;
8
- export declare const video: RegExp;
9
- export declare const font: RegExp;
10
- export declare const markdown: RegExp;
11
- export declare const tsdoc: RegExp;
12
- // 文件名不包含 .global. 的css、less、scss、sass都将开启cssModule
13
- export declare const css_module: RegExp;
14
- export declare const less_global: RegExp;
15
- export declare const sass_global: RegExp;
16
- export declare const node_modules_css_module: RegExp;
17
- export declare const node_modules: RegExp;
18
- export declare const __tests__: RegExp;
19
- /**
20
- * 提取函数字符串
21
- * @example
22
- * // () => import('pkg')
23
- * "rr(() => import('pkg'))rr".replace(Rule.extract_func, '$1')
24
- * */ export declare const extract_func: RegExp;
25
- export declare const http: RegExp;
1
+ declare const Rule: Record<string, RegExp>;
2
+ export default Rule;
@@ -1 +1 @@
1
- export const js=/\.(cj|mj|t|j)s(|x)$/i;export const css=/\.css$/i;export const less=/\.less$/i;export const scss=/\.(sa|sc)ss$/i;export const wasm=/\.wasm$/i;export const txt=/\.txt$/i;export const image=/\.(gif|png|jpe?g|webp|svg|ico)$/i;export const video=/\.(webm|mp4|ogv)$/i;export const font=/\.(woff2?|eot|ttf|otf)(\?.*)?$/i;export const markdown=/\.mdx?$/i;export const tsdoc=/^(?![._]).*(?<!\.test)\.(tsx?)$/;export const css_module=/(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i;export const less_global=/global\.less$/i;export const sass_global=/global\.(sc|sa)ss$/i;export const node_modules_css_module=/(^(?!.*node_modules))(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i;export const node_modules=/[\\/]node_modules[\\/]/;export const __tests__=/(.+)\/__tests__\/(.+)/;export const extract_func=/"rr\((.+?)\)rr"/g;export const http=/^https?:\/\//;
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,less_global:/global\.less$/i,sass_global:/global\.(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 e from"./commom/has-pkg.mjs";import t,{config_files as s,CUSTOMCONFIG as o,extname as a,join as n,resolve as i}from"./commom/paths.mjs";import*as r from"./commom/rule.mjs";import{OverrideResolverPlugin as l}from"./plugin/override-resolve.mjs";import{isObject as m,resolveProgram as c}from"./utils/index.mjs";import{CONFIG as p}from"./config.mjs";import u from"./plugins.config.mjs";import{app_schema as h,CACHE_NAME as d,isDev as f,isLibrary as g,packageJson as y,projectNameCamelCase as b}from"./process-env.mjs";export const outputConfig={path:c(g?"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:e=>{let t=a(e.filename||"").substring(1);return`assets/${t}/[hash][ext]`},library:{name:`${b}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${y.name}`,pathinfo:f,clean:!0,publicPath:p.publicPath,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"use-credentials",enabledWasmLoadingTypes:["fetch"],uniqueName:`${b}`};let j={main:[e(n(p.alias["@"],"service-worker")),`${h}:entry`].filter(Boolean)},v=[n(t.corePath,"./polyfills/public-path.mjs")];if(f&&p.refresh&&p.env.injectRemoteReactRefresh&&v.push(n(t.corePath,"./polyfills/inject-react-refresh.mjs")),p.polyfill&&v.push(n(t.corePath,"./polyfills/replace-children.mjs")),p.entry&&("string"==typeof p.entry?j={...j,main:[p.entry]}:Object.keys(p.entry)&&(j=Object.assign(j,p.entry))),"string"==typeof j.main?j.main=[...v,j.main]:Array.isArray(j.main)&&(j.main=[...v,...j.main]),p.output){if("string"==typeof p.output)outputConfig.path=p.output;else if(Object.keys(p.output)){let e=p.output,t={...outputConfig.library};Object.assign(outputConfig,e),"object"==typeof p.output&&e.library&&(outputConfig.library=Object.assign(t,e.library))}}let C={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:t.webpackCachePath,memoryCacheUnaffected:!0,name:d,version:`${y.version}`,buildDependencies:{config:s},maxMemoryGenerations:1};!1===p.cache?C=!1:m(p.cache)&&(C=Object.assign(C,p.cache));let k={},P={imports:!0,entries:!0,test:e=>{let s=e.nameForCondition();return!!(s&&(/^[a-z][a-z0-9]*:.+$/.test(s)||s?.startsWith(n(t.programPath,"src"))||s?.startsWith(n(t.programPath,"site"))||s?.startsWith(t.componentsPath)))}};p.lazyCompilation&&f&&"true"!==process.env.IS_BUILD?m(p.lazyCompilation)?Object.assign(k,P,p.lazyCompilation):Object.assign(k,P):k=!1;export const commonConfig={name:"client",target:"web",devtool:p.devtool,entry:j,mode:p.mode??"production",cache:C,snapshot:{immutablePaths:[t.pnpmNodeModules,t.denoNodeModules,r.node_modules],managedPaths:[t.pnpmNodeModules,t.denoNodeModules,r.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}},stats:"errors-only",infrastructureLogging:{level:"error"},externalsPresets:p.externalsPresets,plugins:u,node:{global:!1,__filename:!1,__dirname:!1},experiments:{asyncWebAssembly:!0,cacheUnaffected:!0,lazyCompilation:k,buildHttp:m(p.buildHttp)?{allowedUris:[],lockfileLocation:i(t.httpCachePath,"http.lock"),cacheLocation:i(t.httpCachePath,"data"),upgrade:!0,...p.buildHttp}:p.buildHttp,backCompat:!0,futureDefaults:!0,css:!0,outputModule:!1,deferImport:!0},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:p.alias,modules:[t.nodeModules,t.pnpmNodeModules,t.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:p.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:p.externals,output:outputConfig,recordsPath:p.recordsPath};p.overrideResolve&&commonConfig.resolve.plugins.push(new l(Object.assign({original:p.alias["@"],override:o&&c(o)},p.overrideResolve)));
1
+ import{extname as e,join as t,resolve as s}from"node:path";import o from"./commom/has-pkg.mjs";import a,{config_files as n,CUSTOMCONFIG as i}from"./commom/paths.mjs";import r from"./commom/rule.mjs";import{OverrideResolverPlugin as l}from"./plugin/override-resolve.mjs";import{isObject as m,resolveProgram as c}from"./utils/index.mjs";import{CONFIG as p}from"./config.mjs";import u from"./plugins.config.mjs";import{app_schema as h,CACHE_NAME as d,isDev as f,isLibrary as g,packageJson as y,projectNameCamelCase as b}from"./process-env.mjs";export const outputConfig={path:c(g?"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:`${b}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${y.name}`,pathinfo:f,clean:!0,publicPath:p.publicPath,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"use-credentials",enabledWasmLoadingTypes:["fetch"],uniqueName:`${b}`};let j={main:[o(t(p.alias["@"],"service-worker")),`${h}:entry`].filter(Boolean)},v=[t(a.corePath,"./polyfills/public-path.mjs")];if(f&&p.refresh&&p.env.injectRemoteReactRefresh&&v.push(t(a.corePath,"./polyfills/inject-react-refresh.mjs")),p.polyfill&&v.push(t(a.corePath,"./polyfills/replace-children.mjs")),p.entry&&("string"==typeof p.entry?j={...j,main:[p.entry]}:Object.keys(p.entry)&&(j=Object.assign(j,p.entry))),"string"==typeof j.main?j.main=[...v,j.main]:Array.isArray(j.main)&&(j.main=[...v,...j.main]),p.output){if("string"==typeof p.output)outputConfig.path=p.output;else if(Object.keys(p.output)){let e=p.output,t={...outputConfig.library};Object.assign(outputConfig,e),"object"==typeof p.output&&e.library&&(outputConfig.library=Object.assign(t,e.library))}}let C={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:a.webpackCachePath,memoryCacheUnaffected:!0,name:d,version:`${y.version}`,buildDependencies:{config:n},maxMemoryGenerations:1};!1===p.cache?C=!1:m(p.cache)&&(C=Object.assign(C,p.cache));let k={},P={imports:!0,entries:!0,test:e=>{let s=e.nameForCondition();return!!(s&&(/^[a-z][a-z0-9]*:.+$/.test(s)||s?.startsWith(t(a.programPath,"src"))||s?.startsWith(t(a.programPath,"site"))||s?.startsWith(a.componentsPath)))}};p.lazyCompilation&&f&&"true"!==process.env.IS_BUILD?m(p.lazyCompilation)?Object.assign(k,P,p.lazyCompilation):Object.assign(k,P):k=!1;export const commonConfig={name:"client",target:"web",devtool:p.devtool,entry:j,mode:p.mode??"production",cache:C,snapshot:{immutablePaths:[a.pnpmNodeModules,a.denoNodeModules,r.node_modules],managedPaths:[a.pnpmNodeModules,a.denoNodeModules,r.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}},stats:"errors-only",infrastructureLogging:{level:"error"},externalsPresets:p.externalsPresets,plugins:u,node:{global:!1,__filename:!1,__dirname:!1},experiments:{asyncWebAssembly:!0,cacheUnaffected:!0,lazyCompilation:k,buildHttp:m(p.buildHttp)?{allowedUris:[],lockfileLocation:s(a.httpCachePath,"http.lock"),cacheLocation:s(a.httpCachePath,"data"),upgrade:!0,...p.buildHttp}:p.buildHttp,backCompat:!0,futureDefaults:!0,css:!0,outputModule:!1,deferImport:!0},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:p.alias,modules:[a.nodeModules,a.pnpmNodeModules,a.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:p.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:p.externals,output:outputConfig,recordsPath:p.recordsPath};p.overrideResolve&&commonConfig.resolve.plugins.push(new l(Object.assign({original:p.alias["@"],override:i&&c(i)},p.overrideResolve)));
package/lib/config.mjs CHANGED
@@ -1 +1 @@
1
- import e from"node:process";import{merge as o}from"webpack-merge";import t,{CUSTOMCONFIG as a,join as n,relative as s}from"./commom/paths.mjs";import r from"./commom/setup-env.mjs";import i from"./options/jsx-dom-expressions.mjs";import l from"./options/split-chunk.mjs";import{getConfigWithTypescript as m,isFunction as p,node_modules as c,resolveProgram as u}from"./utils/index.mjs";import{initDts as d}from"./vm/dts.mjs";import{APPTYPE as f,FRAMEWORK as h,frameworkVersion as g,isCI as v,isDev as x,isLibrary as C,isMobile as P,isReact as j,jsxImportSource as b,mainDirectory as k,NODE_ENV as w,PACKAGENAME as O}from"./process-env.mjs";let I=[/(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(o){let t=m(o).default;return(p(t)?await t(e):t)??{}}let S=await r(w,f,h,[],"true"===e.env.IS_BUILD,a),[y,M]=await Promise.all([getConfig(t.configPath),getConfig(t.customConfigPath)]),z={mode:w,strict:!1,devtool:"true"!==e.env.IS_BUILD&&x?"eval-cheap-module-source-map":"cheap-module-source-map",seo:!1,bundleAnalyzer:!1,polyfill:!1,entry:{},minifier:{},sourceMap:{filename:"[file].map",publicPath:"",namespace:O,moduleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]",fallbackModuleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]"},env:S,basename:"/",publicPath:"auto",rem:{designSize:P?375:1920},fallbackCompPath:null,modifyVars:{},prefixCls:"n",alias:Object.assign({"@":u(k)},j&&g<18?{"react/package.json":c("react/package.json"),"react/jsx-runtime":c("react/jsx-runtime.js"),"react/jsx-dev-runtime":c("react/jsx-dev-runtime.js")}:{}),moduleRules:[],prefixJsLoader:[],cssModules:[],cssModuleDefinition:!0,importOnDemand:{},proxy:{},devServer:{host:"localhost",port:3e3,open:!0},htmlPluginOption:{title:O.toLocaleUpperCase(),favicon:s(t.programPath,`${t.corePath}/options/favicon.ico`)},copy:{},routerMode:"browser",fixBrowserRouter:!1,plugins:[],resolvePlugins:[],overrideResolve:!1,splitChunk:l,runtimeChunk:"single",moduleFederation:[],rulesInclude:{css:I,js:I,media:I,font:I,wasm:[]},mdx:{jsx:!1,development:x,jsxImportSource:b,providerImportSource:`@moneko/${h}/mdx`},jsxDomExpressions:i,bar:{name:"Client",nameColor:"68",msgColor:"242",barBgColor:"15",barColor:"69",quiet:v},normalizeCss:!0,externalsPresets:{},buildHttp:void 0,virtualModule:{},cssExtract:{},externals:["@swc/core"],lazyCompilation:!1,performance:!1,refresh:"solid"!==h,bundleId:"com.moneko.bid",bundles:[],stylelint:{},eslint:{lintDirtyModulesOnly:!1},minChunkSize:1e3,compression:!1,manifest:{filename:"site.webmanifest"},corepack:!0,reactJsxRuntime:"automatic"};C&&(z.alias=Object.assign(z.alias,{"@pkg":t.componentsPath,[O]:t.componentsPath}));let D=z;if((!1===(D=o(D,y,M)).devtool||!1===D.sourceMap)&&(D.sourceMap=!1,D.devtool=!1),"true"===e.env.CODESPACES&&(D.devServer.https=!1),!1===D.devServer.https&&"darwin"===e.platform&&(D.devServer.open=!1),D.htmlPluginOption&&(D.htmlPluginOption.tags||(D.htmlPluginOption.tags=[]),D.fixBrowserRouter&&D.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))"}),D.manifest)){let e=D.manifest.publicPath??D.publicPath??"/";D.htmlPluginOption.tags.push({href:n("auto"===e?"/":e,D.manifest.filename),tag:"link",rel:"manifest"})}export const CONFIG=D;export const PUBLICPATH="auto"===CONFIG.publicPath?"":CONFIG.publicPath;d(CONFIG);
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,{CUSTOMCONFIG as s}from"./commom/paths.mjs";import r from"./commom/setup-env.mjs";import i from"./options/jsx-dom-expressions.mjs";import l from"./options/split-chunk.mjs";import{getConfigWithTypescript as m,isFunction as p,node_modules as c,resolveProgram as u}from"./utils/index.mjs";import{initDts as d}from"./vm/dts.mjs";import{APPTYPE as f,FRAMEWORK as h,frameworkVersion as g,isCI as v,isDev as x,isLibrary as P,isMobile as C,isReact as b,jsxImportSource as j,mainDirectory as k,NODE_ENV as w,PACKAGENAME as O}from"./process-env.mjs";let I=[/(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=m(e).default;return(p(o)?await o(t):o)??{}}let S=await r(w,f,h,[],"true"===t.env.IS_BUILD,s),[y,M]=await Promise.all([getConfig(n.configPath),getConfig(n.customConfigPath)]),z={mode:w,strict:!1,devtool:"true"!==t.env.IS_BUILD&&x?"eval-cheap-module-source-map":"cheap-module-source-map",seo:!1,bundleAnalyzer:!1,polyfill:!1,entry:{},minifier:{},sourceMap:{filename:"[file].map",publicPath:"",namespace:O,moduleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]",fallbackModuleFilenameTemplate:"moneko://[namespace]/[resource-path]?[loaders]"},env:S,basename:"/",publicPath:"auto",rem:{designSize:C?375:1920},fallbackCompPath:null,modifyVars:{},prefixCls:"n",alias:Object.assign({"@":u(k)},b&&g<18?{"react/package.json":c("react/package.json"),"react/jsx-runtime":c("react/jsx-runtime.js"),"react/jsx-dev-runtime":c("react/jsx-dev-runtime.js")}:{}),moduleRules:[],prefixJsLoader:[],cssModules:[],cssModuleDefinition:!0,importOnDemand:{},proxy:{},devServer:{host:"localhost",port:3e3,open:!0},htmlPluginOption:{title:O.toLocaleUpperCase(),favicon:o(n.programPath,`${n.corePath}/options/favicon.ico`)},copy:{},routerMode:"browser",fixBrowserRouter:!1,plugins:[],resolvePlugins:[],overrideResolve:!1,splitChunk:l,runtimeChunk:"single",moduleFederation:[],rulesInclude:{css:I,js:I,media:I,font:I,wasm:[]},mdx:{jsx:!1,development:x,jsxImportSource:j,providerImportSource:`@moneko/${h}/mdx`},jsxDomExpressions:i,bar:{name:"Client",nameColor:"68",msgColor:"242",barBgColor:"15",barColor:"69",quiet:v},normalizeCss:!0,externalsPresets:{},buildHttp:void 0,virtualModule:{},cssExtract:{},externals:["@swc/core"],lazyCompilation:!1,performance:!1,refresh:"solid"!==h,bundleId:"com.moneko.bid",bundles:[],stylelint:{},eslint:{lintDirtyModulesOnly:!1},minChunkSize:1e3,compression:!1,manifest:{filename:"site.webmanifest"},corepack:!0,reactJsxRuntime:"automatic"};P&&(z.alias=Object.assign(z.alias,{"@pkg":n.componentsPath,[O]:n.componentsPath}));let D=z;(!1===(D=a(D,y,M)).devtool||!1===D.sourceMap)&&(D.sourceMap=!1,D.devtool=!1),"true"===t.env.CODESPACES&&(D.devServer.https=!1),!1===D.devServer.https&&"darwin"===t.platform&&(D.devServer.open=!1),D.htmlPluginOption&&(D.htmlPluginOption.tags||(D.htmlPluginOption.tags=[]),D.fixBrowserRouter&&D.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))"}),D.manifest&&(D.manifest.publicPath||(D.manifest.publicPath=D.basename),D.htmlPluginOption.tags.push({href:e(D.manifest.publicPath,D.manifest.filename).replaceAll(/\\/g,"/"),tag:"link",rel:"manifest"})));export const CONFIG=D;export const PUBLICPATH="auto"===CONFIG.publicPath?"":CONFIG.publicPath;d(CONFIG);
package/lib/dev/mock.mjs CHANGED
@@ -1 +1 @@
1
- import{watch as e}from"node:fs";import t from"node:http";import{StringDecoder as r}from"node:string_decoder";import{URL as o}from"node:url";import{directoryExists as n,ink as a,print as i,scanFolderSync as c}from"@moneko/utils";import{merge as s}from"webpack-merge";import m from"../commom/log.mjs";import d from"../commom/match-path.mjs";import l,{join as p}from"../commom/paths.mjs";import u,{METHOD_COLOR as f}from"../commom/print-log.mjs";import h from"../commom/require.mjs";import g from"../commom/sigint-exit.mjs";import{jsonSchema as y}from"./json-schema.mjs";function b(e){return!["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||"")}export function cacheBody(e){if(!e._bodyCached&&b(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){m(e)}}}function k(e,t){try{let o=Buffer.concat(e);if(t.includes("application/json")){let e=new r("utf-8").write(o);return JSON.parse(e)}if(t.includes("application/octet-stream")||t.startsWith("image/"));else if(t.includes("text/"))return o.toString("utf-8");else if(t.includes("application/x-www-form-urlencoded"))return Object.fromEntries(new URLSearchParams(o.toString("utf8")));return o}catch(e){return m(e),null}}async function j(e){return new Promise(t=>{if(!b(e))return void t(null);let r=e.headers["content-type"]||"",o=e.headers["content-length"],n=e.headers["transfer-encoding"],a=[];void 0!==e._dataChunks?t(k(e._dataChunks,r)):o||n?(e.on("data",e=>{a.push(e)}),e.on("end",()=>{t(k(a,r))}),e.on("error",e=>{t(null),m(e)})):t(null)})}export const yApiSchemaMock=(e,r)=>new Promise(o=>{t.get(`${e.host}/api/interface/get?id=${e.id}&token=${e.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=y(t);void 0!==r?o(s(n,r)):o(n)}}catch(e){m(e)}})})});export const yApiMock=(e,r)=>new Promise((n,a)=>{let i=new o(r.host),c={hostname:i.hostname,port:i.port,path:e.url?.replace(new RegExp(r.pathRewrite),`/mock/${r.projectId}/`),method:e.method,headers:e.headers,query:Object.fromEntries(i.searchParams)},s=t.request(c,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{n(JSON.parse(t))}catch(e){m(e)}})});s.on("error",e=>{a(e.message)}),s.write(JSON.stringify(e.body)),s.end()});let w=()=>{if(!n(l.mockPath)){O={};return}let e={},t=c(l.mockPath,["\\.(t|j)s$"]);i(a("Updating mock...","245"),!0),t.forEach(t=>{try{Object.assign(e,h(t).default)}catch(e){m(e)}}),i(a("Mock update successful","245"),!0),O=e},O={};w();export function containMockUrl(e){return Object.keys(O).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}function E(e,t){if(t.writableEnded)return t;let r=new o(`http://localhost:3000${e.url}`),n=e.method||"GET",a=`${n} ${r.pathname}`,i=containMockUrl(a)||a,c=O[i];if(c){if(u(n,r.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:f[n].fg,labelBackgroundColor:f[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 c){let o=d(i.split(" ")[1],r.pathname);r.searchParams&&Object.assign(e,{query:Object.fromEntries(r.searchParams)}),o&&Object.assign(e,{params:o.params}),e.body=j(e);try{c(e,t)}catch(e){m(e)}return!0}return t.end("string"==typeof c?c:JSON.stringify(c)),!0}return!1}export default(()=>{if(!n(l.mockPath))return;let t=e(l.mockPath,(e,t)=>{if(t){let e=p(l.mockPath,t);delete h.cache[e]}w()});return g(()=>{t.close()}),E});
1
+ import{watch as e}from"node:fs";import t from"node:http";import{join as r}from"node:path";import{StringDecoder as o}from"node:string_decoder";import{URL as n}from"node:url";import{directoryExists as a,ink as i,print as c,scanFolderSync as s}from"@moneko/utils";import{merge as m}from"webpack-merge";import d from"../commom/log.mjs";import l from"../commom/match-path.mjs";import p from"../commom/paths.mjs";import u,{METHOD_COLOR as f}from"../commom/print-log.mjs";import h from"../commom/require.mjs";import g from"../commom/sigint-exit.mjs";import{jsonSchema as y}from"./json-schema.mjs";function b(e){return!["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||"")}export function cacheBody(e){if(!e._bodyCached&&b(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){d(e)}}}function k(e,t){try{let r=Buffer.concat(e);if(t.includes("application/json")){let e=new o("utf-8").write(r);return JSON.parse(e)}if(t.includes("application/octet-stream")||t.startsWith("image/"));else if(t.includes("text/"))return r.toString("utf-8");else if(t.includes("application/x-www-form-urlencoded"))return Object.fromEntries(new URLSearchParams(r.toString("utf8")));return r}catch(e){return d(e),null}}async function j(e){return new Promise(t=>{if(!b(e))return void t(null);let r=e.headers["content-type"]||"",o=e.headers["content-length"],n=e.headers["transfer-encoding"],a=[];void 0!==e._dataChunks?t(k(e._dataChunks,r)):o||n?(e.on("data",e=>{a.push(e)}),e.on("end",()=>{t(k(a,r))}),e.on("error",e=>{t(null),d(e)})):t(null)})}export const yApiSchemaMock=(e,r)=>new Promise(o=>{t.get(`${e.host}/api/interface/get?id=${e.id}&token=${e.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=y(t);void 0!==r?o(m(n,r)):o(n)}}catch(e){d(e)}})})});export const yApiMock=(e,r)=>new Promise((o,a)=>{let i=new n(r.host),c={hostname:i.hostname,port:i.port,path:e.url?.replace(new RegExp(r.pathRewrite),`/mock/${r.projectId}/`),method:e.method,headers:e.headers,query:Object.fromEntries(i.searchParams)},s=t.request(c,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{o(JSON.parse(t))}catch(e){d(e)}})});s.on("error",e=>{a(e.message)}),s.write(JSON.stringify(e.body)),s.end()});let w=()=>{if(!a(p.mockPath)){O={};return}let e={},t=s(p.mockPath,["\\.(t|j)s$"]);c(i("Updating mock...","245"),!0),t.forEach(t=>{try{Object.assign(e,h(t).default)}catch(e){d(e)}}),c(i("Mock update successful","245"),!0),O=e},O={};w();export function containMockUrl(e){return Object.keys(O).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}function E(e,t){if(t.writableEnded)return t;let r=new n(`http://localhost:3000${e.url}`),o=e.method||"GET",a=`${o} ${r.pathname}`,i=containMockUrl(a)||a,c=O[i];if(c){if(u(o,r.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:f[o].fg,labelBackgroundColor:f[o].bg}),t.send=e=>t.end("string"==typeof e?e:JSON.stringify(e)),t.writeHead(200,{"Content-Type":e.headers["content-type"]}),"function"==typeof c){let o=l(i.split(" ")[1],r.pathname);r.searchParams&&Object.assign(e,{query:Object.fromEntries(r.searchParams)}),o&&Object.assign(e,{params:o.params}),e.body=j(e);try{c(e,t)}catch(e){d(e)}return!0}return t.end("string"==typeof c?c:JSON.stringify(c)),!0}return!1}export default(()=>{if(!a(p.mockPath))return;let t=e(p.mockPath,(e,t)=>{if(t){let e=r(p.mockPath,t);delete h.cache[e]}w()});return g(()=>{t.close()}),E});
@@ -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{env as r}from"node:process";import{ink as n,println as i}from"@moneko/utils";import{CA_ORGANIZATION as s,isCertificateInstalled as a}from"../commom/ca.mjs";import m from"../commom/mime.mjs";import l from"../commom/open.mjs";import{extname as p,join as c,sep as d}from"../commom/paths.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=c(y.root_dir,"index.html"),g=u();function w(e,t,o){let r=e.headers["accept-encoding"],n=r?.includes("br"),i=`${o}.${n?"br":"gz"}`,s=y.fileSystem.existsSync(i);s&&t.setHeader("Content-Encoding",n?"br":"gzip");let a=y.fileSystem.createReadStream(s?i:o,{autoClose:!0});a.on("open",()=>{t.writeHead(200,Object.assign({},E,y.headers,{"Access-Control-Allow-Origin":e.headers.origin??"*","Content-Type":m[p(o)]||"application/octet-stream"}))}),a.on("error",e=>{switch(a.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}`)}}),a.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(c(y.root_dir,e.url.replace(y.basename??"/","/")))).split("?")[0];if(y.fileSystem.existsSync(o))return w(e,t,o)}if(e.headers.accept?.includes("text/html"))return w(e,t,T.split("?")[0]);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 a(s)&&"darwin"===o()){let e=r.npm_execpath?.split(d).pop()?.split(".").shift()||"npm",t=r.npm_lifecycle_event??"start",o=`> sudo ${e} ${t}`;i(n("⚠️ 未检测到本地 SSL 证书,请通过以下命令重启项目以安装证书: ","yellow")),i(n(o,"yellow")),i("")}return y.open&&l(`${y.https?"https:":"http:"}//${y.host}:${y.port}${"/"===y.basename?"":y.basename}`),x}export default y;
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??"/","/")))).split("?")[0];if(y.fileSystem.existsSync(o))return w(e,t,o)}if(e.headers.accept?.includes("text/html"))return w(e,t,T.split("?")[0]);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 r from"node:process";import{URL as i}from"node:url";import{ink as s,print as n,println as a,progressBar as m}from"@moneko/utils";import l from"webpack";import p from"webpack-hot-middleware";import{merge as c}from"webpack-merge";import{diffObject as f}from"./commom/diff-object.mjs";import h,{config_files as u,relative as d}from"./commom/paths.mjs";import*as 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 l.WatchIgnorePlugin({paths:[g.node_modules,/\.d\.ts$/]}),new l.ProgressPlugin({handler(e,t,...o){let i=o.length?`[${t}] ${o.join(" ")}`:" ";I||(T.info=i,T.percentage=e,I=1===e);let s=P.bar;if(s){let t=s.name||"Build";s.quiet?r.stdout.write(`${i}
2
- `):(m(e||0,1,{msg:i,name:t,barColor:s.barColor,nameColor:s.nameColor,barBgColor:s.barBgColor,msgColor:s.msgColor}),1===e&&r.stdout.write("\r\x1b[2K"))}}})]});function U(e){let t=e.join(","),o=[d(h.programPath,`${P.alias["@"]}/**/*.{${t}}`)];return B&&o.push(d(h.programPath,`${P.alias["@pkg"]}/**/*.{${t}}`)),o}P.eslint&&L.plugins.push(new x({fix:!0,cache:!0,cacheLocation:`${h.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:`${h.lintCachePath}/.stylelintcache`,files:U(["css","scss","sass","less","ts","tsx","js","jsx"]),...P.stylelint}));let F=l(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=p(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 i(`${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(){r.exit(0)}K.on("close",()=>{N.close(_),J.close()});let W=await Promise.all(u.map(S)),z=c(W[0]||{},W[1]||{});u.forEach(function(t){o(t,async function(){var o;let[i,m]=await Promise.all(u.map(S)),l=c(i||{},m||{}),p=f(z,l);1===Object.keys(p).length&&"proxy"in p?(n(s("代理更新中...","yellow"),!0),n(s("代理更新完成...","green"),!0),P.proxy=l.proxy,z.proxy=l.proxy,z=l):(z=l,a(s(`检测到工程配置${s(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),o=$,e(A?`netstat -ano | findstr :${o}`:`lsof -i :${o} -t`,(e,t)=>{if(e){a(s(`查找端口 ${o} 时发生错误: ${e.message}`,"red")),a(s("请尝试手动重启程序","yellow"));return}let i=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),n=A?i[0]?.split(/\s+/).pop()?.trim():i[0]?.trim();if(!n)return void a(s(`未找到占用端口 ${o} 的进程, 请尝试手动重启程序`,"yellow"));try{r.kill(Number(n),"SIGHUP")}catch(e){a(s(`终止进程 ${n} 时发生错误: ${e.message}`,"red"))}}))})});let A="win32"===r.platform;r.on("SIGHUP",function(){let e;K.close(),(e=t(r.argv[0],r.argv.slice(1),{detached:!1,stdio:"inherit"})).unref(),e.on("close",M)}),r.on("exit",function(){K.close()}),w(M);
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(){let e;K.close(),(e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"})).unref(),e.on("close",M)}),i.on("exit",function(){K.close()}),w(M);
package/lib/index.d.mts CHANGED
@@ -8,7 +8,7 @@ export { default as parseArgs } from './commom/parse-args.mjs';
8
8
  export { CUSTOMCONFIG, default as paths, routeDir, yarnArgv } from './commom/paths.mjs';
9
9
  export { default as printLog } from './commom/print-log.mjs';
10
10
  export { default as require } from './commom/require.mjs';
11
- export * as Rule from './commom/rule.mjs';
11
+ export { default as Rule } from './commom/rule.mjs';
12
12
  export { default as timer } from './commom/timer.mjs';
13
13
  export { type MockConfiguration, type ProxyFuncType, type RequestFormData, yApiMock, type YApiOption, type YApiOptionBySchema, yApiSchemaMock } from './dev/mock.mjs';
14
14
  export type { ProxyConfig } from './dev/proxy.mjs';
package/lib/index.mjs CHANGED
@@ -1 +1 @@
1
- export{default as hasPkg}from"./commom/has-pkg.mjs";export{getIPv4,getPort}from"./commom/net.mjs";export{default as open}from"./commom/open.mjs";export{default as parseArgs}from"./commom/parse-args.mjs";export{CUSTOMCONFIG,default as paths,routeDir,yarnArgv}from"./commom/paths.mjs";export{default as printLog}from"./commom/print-log.mjs";export{default as require}from"./commom/require.mjs";export*as Rule from"./commom/rule.mjs";export{default as timer}from"./commom/timer.mjs";export{yApiMock,yApiSchemaMock}from"./dev/mock.mjs";export{default as jsxDomExpressions}from"./options/jsx-dom-expressions.mjs";export{default as splitChunk}from"./options/split-chunk.mjs";export{HtmlPlugin}from"./plugin/html-plugin.mjs";export*from"./plugin/manifest/index.mjs";export{APPTYPE,coreName,FRAMEWORK,isCI,isDev,isLibrary,isMicro,mainDirectory,packageJson,PACKAGENAME}from"./process-env.mjs";export{digest,md5,node_modules,resolveProgram,toCamelCase}from"./utils/index.mjs";export*from"@moneko/mdx";export*from"@moneko/utils";import o from"webpack";export{o as webpack};
1
+ export{default as hasPkg}from"./commom/has-pkg.mjs";export{getIPv4,getPort}from"./commom/net.mjs";export{default as open}from"./commom/open.mjs";export{default as parseArgs}from"./commom/parse-args.mjs";export{CUSTOMCONFIG,default as paths,routeDir,yarnArgv}from"./commom/paths.mjs";export{default as printLog}from"./commom/print-log.mjs";export{default as require}from"./commom/require.mjs";export{default as Rule}from"./commom/rule.mjs";export{default as timer}from"./commom/timer.mjs";export{yApiMock,yApiSchemaMock}from"./dev/mock.mjs";export{default as jsxDomExpressions}from"./options/jsx-dom-expressions.mjs";export{default as splitChunk}from"./options/split-chunk.mjs";export{HtmlPlugin}from"./plugin/html-plugin.mjs";export*from"./plugin/manifest/index.mjs";export{APPTYPE,coreName,FRAMEWORK,isCI,isDev,isLibrary,isMicro,mainDirectory,packageJson,PACKAGENAME}from"./process-env.mjs";export{digest,md5,node_modules,resolveProgram,toCamelCase}from"./utils/index.mjs";export*from"@moneko/mdx";export*from"@moneko/utils";import o from"webpack";export{o as webpack};
@@ -1 +1 @@
1
- let e;import s,{CUSTOMCONFIG as o,join as t,sep as r}from"./commom/paths.mjs";import a from"./commom/require.mjs";import*as l from"./commom/rule.mjs";import n from"./options/modify-vars.mjs";import i 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 y}from"./config.mjs";import{app_schema as h,FRAMEWORK as j,isDev as g,virtual_schema as x}from"./process-env.mjs";let v={loader:t(s.corePath,"/loader/lightning-css.cjs"),options:{sourceMap:!!y.sourceMap,targets:c(),rem:!!y.rem,importLoaders:2}},w={loader:i.lessLoader,options:{sourceMap:!!y.sourceMap,lessOptions:{modifyVars:n,javascriptEnabled:!0}}},P=new Map,L=["components","example","mock","site","src","server"].map(d);function M(e){return new Promise(o=>{o([...L,s.corePath,...y.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(P.has(e))return P.get(e);try{let s,o=a.resolve(e).split(r),t=o.lastIndexOf("node_modules");return s=-1!==t?o.slice(0,t).join(r):o.join(r),P.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${r}package.json`).replace(`${r}package.json`,"");P.set(e,[s])}catch{P.set(e,[p(e),p(`.pnpm/${e}`)])}return P.get(e)}}(e):e).flat()||[]])})}o&&L.push(d(o)),y.overrideResolve&&y.overrideResolve.override&&L.push(y.overrideResolve.override);let _=await Promise.all([M("css"),M("js"),M("media"),M("wasm"),M("font")]),C=_[0],I=_[1],O=_[2],b=_[3],N=_[4];i.sassLoader&&(e={loader:i.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let $=f.library?.type==="umd"&&!1===y.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:l.wasm,type:"webassembly/async",include:b},{test:l.txt,type:"asset/source"},{test:l.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:O},{test:l.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:O},{test:l.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:N}],B=y.prefixJsLoader.filter(Boolean)||[];"react"===j&&y.reactCompiler&&B.unshift({loader:t(s.corePath,"/loader/react-compiler.cjs"),options:{panicThreshold:g?void 0:"NONE",...y.reactCompiler}}),y.cssInJs&&"object"==typeof y.cssInJs.minify&&B.unshift({loader:t(s.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},y.cssInJs.minify)});export default(o=>{let r={react:{loader:i.swcLoader,options:m(o)},solid:{loader:t(s.corePath,"/loader/solid.cjs"),options:{jsxOptions:y.jsxDomExpressions,refresh:y.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:y.noParse,rules:[{oneOf:[...k,{test:l.js,use:[...B,r].filter(Boolean),include:I},...y.cssModules.map(e=>({test:s=>l.node_modules_css_module.test(s)&&s.includes(e),use:[v],type:"css/module"})),{test:l.css,use:[v],type:"css/auto",include:C},e&&{test:l.sass_global,use:[v,e],type:"css/auto",include:C},e&&{test:l.scss,use:[v,e],type:"css/module",include:C},{test:l.less_global,use:[v,w],type:"css/auto",include:C},{test:l.less,use:[v,w],type:"css/module",include:C},{test:l.markdown,use:[...B,{loader:t(s.corePath,"/loader/mdx.cjs"),options:y.mdx}].filter(Boolean),exclude:[l.node_modules,e=>e.startsWith(`${h}:`)||e.startsWith(`${x}:`)]}].filter(Boolean)},...y.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 l from"./commom/rule.mjs";import n from"./options/modify-vars.mjs";import i 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 g,virtual_schema as x}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:i.lessLoader,options:{sourceMap:!!h.sourceMap,lessOptions:{modifyVars:n,javascriptEnabled:!0}}},P=new Map,L=["components","example","mock","site","src","server"].map(d);function M(e){return new Promise(s=>{s([...L,t.corePath,...h.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(P.has(e))return P.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),P.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");P.set(e,[s])}catch{P.set(e,[p(e),p(`.pnpm/${e}`)])}return P.get(e)}}(e):e).flat()||[]])})}r&&L.push(d(r)),h.overrideResolve&&h.overrideResolve.override&&L.push(h.overrideResolve.override);let _=await Promise.all([M("css"),M("js"),M("media"),M("wasm"),M("font")]),C=_[0],I=_[1],O=_[2],b=_[3],N=_[4];i.sassLoader&&(e={loader:i.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:l.wasm,type:"webassembly/async",include:b},{test:l.txt,type:"asset/source"},{test:l.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:O},{test:l.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:O},{test:l.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:{panicThreshold:g?void 0:"NONE",...h.reactCompiler}}),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:i.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:l.js,use:[...B,r].filter(Boolean),include:I},...h.cssModules.map(e=>({test:s=>l.node_modules_css_module.test(s)&&s.includes(e),use:[v],type:"css/module"})),{test:l.css,use:[v],type:"css/auto",include:C},e&&{test:l.sass_global,use:[v,e],type:"css/auto",include:C},e&&{test:l.scss,use:[v,e],type:"css/module",include:C},{test:l.less_global,use:[v,w],type:"css/auto",include:C},{test:l.less,use:[v,w],type:"css/module",include:C},{test:l.markdown,use:[...B,{loader:s(t.corePath,"/loader/mdx.cjs"),options:h.mdx}].filter(Boolean),exclude:[l.node_modules,e=>e.startsWith(`${y}:`)||e.startsWith(`${x}:`)]}].filter(Boolean)},...h.moduleRules].filter(Boolean)}});
@@ -1 +1 @@
1
- import o from"../commom/has-pkg.mjs";import{join as e}from"../commom/paths.mjs";import i from"../commom/require.mjs";import{CONFIG as m}from"../config.mjs";let t=m.prefixCls||"n",r=m.htmlPluginOption?.favicon||"favicon.ico",s={"@prefix-cls":t,"@iconfont-css-prefix":`${t}-icon`,"@favicon":JSON.stringify(e(m.basename,r))},n={},a=o("antd/dist/default-theme.js");a&&Object.assign(n,{...i(a)},{"@ant-prefix":t,hack:`true;@import (optional, reference) "${i.resolve("antd/lib/style/color/colorPalette.less")}";`}),Object.assign(s,n,m.modifyVars);export default s;
1
+ import e from"../commom/has-pkg.mjs";import o from"../commom/require.mjs";import{CONFIG as i}from"../config.mjs";let t=i.prefixCls||"n",r=i.htmlPluginOption?.favicon||"favicon.ico",s={"@prefix-cls":t,"@iconfont-css-prefix":`${t}-icon`,"@favicon":JSON.stringify(`${i.basename}/${r}`.replaceAll(/\\/g,"/"))},m={},n=e("antd/dist/default-theme.js");n&&Object.assign(m,{...o(n)},{"@ant-prefix":t,hack:`true;@import (optional, reference) "${o.resolve("antd/lib/style/color/colorPalette.less")}";`}),Object.assign(s,m,i.modifyVars);export default s;
@@ -1 +1 @@
1
- let e;import*as n from"../commom/rule.mjs";let i=(e={priority:-10,reuseExistingChunk:!0},function(n){return{...e,test:n}}),o={chunks:"all",minChunks:1,minSize:2e4,maxSize:25e4,enforceSizeThreshold:5e4,maxAsyncRequests:30,maxInitialRequests:30,minRemainingSize:0,hidePathInfo:!0,cacheGroups:{json:{type:"json"},CHANGELOG:i(/CHANGELOG\.md/),site:i(/site/),vendors:{test:n.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 o;
1
+ let e;import n from"../commom/rule.mjs";let i=(e={priority:-10,reuseExistingChunk:!0},function(n){return{...e,test:n}}),o={chunks:"all",minChunks:1,minSize:2e4,maxSize:25e4,enforceSizeThreshold:5e4,maxAsyncRequests:30,maxInitialRequests:30,minRemainingSize:0,hidePathInfo:!0,cacheGroups:{json:{type:"json"},CHANGELOG:i(/CHANGELOG\.md/),site:i(/site/),vendors:{test:n.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 o;
@@ -1 +1 @@
1
- import{statSync as e}from"node:fs";import{loadFileRaw as t,scanFolderSync as s}from"@moneko/utils";import i from"webpack";import o from"../commom/log.mjs";import{resolve as l}from"../commom/paths.mjs";let a="CopyPlugin",m=i.sources.RawSource;export class CopyPlugin{constructor(e){this.cacheFiles=[],this.fileTimestamps=new Map,this.baseFiles=new Set(e.files?.map(e=>l(e))||[]),this.dirs=new Set(e.dirs||[])}getFiles(){let e=new Set(this.baseFiles);for(let t of this.dirs)s(t,["\\.*"]).forEach(t=>e.add(t));let t={deleted:[],files:[...e]};for(let s of new Set(this.cacheFiles))e.has(s)||t.deleted.push(s);return this.cacheFiles=t.files,t}hasFileChanged(t){try{let s=e(t).mtimeMs,i=this.fileTimestamps.get(t)||0;return this.fileTimestamps.set(t,s),s>i}catch(e){return o(e),!0}}apply(e){e.hooks.thisCompilation.tap({name:a,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},e=>{let s=e.getCache(a);e.hooks.processAssets.tapPromise(a,async()=>{let i=this.getFiles();await Promise.allSettled(i.files.map(async i=>{let o=this.hasFileChanged(i),l=s.getItemCache(i,null),a=await l.getPromise();if(a&&!o)return void e.emitAsset(i,a.source);let r=await t(i);if(null!==r){let t=new m(Buffer.from(r));await l.storePromise({source:t,timestamp:this.fileTimestamps.get(i)}),e.emitAsset(i,t)}})),i.deleted.forEach(t=>{e.deleteAsset(t),this.fileTimestamps.delete(t)})})})}}
1
+ import{statSync as e}from"node:fs";import{resolve as t}from"node:path";import{loadFileRaw as s,scanFolderSync as i}from"@moneko/utils";import l from"webpack";import o from"../commom/log.mjs";let a="CopyPlugin",r=l.sources.RawSource;export class CopyPlugin{constructor(e){this.cacheFiles=[],this.fileTimestamps=new Map,this.baseFiles=new Set(e.files?.map(e=>t(e))||[]),this.dirs=new Set(e.dirs||[])}getFiles(){let e=new Set(this.baseFiles);for(let t of this.dirs)i(t,["\\.*"]).forEach(t=>e.add(t));let t={deleted:[],files:[...e]};for(let s of new Set(this.cacheFiles))e.has(s)||t.deleted.push(s);return this.cacheFiles=t.files,t}hasFileChanged(t){try{let s=e(t).mtimeMs,i=this.fileTimestamps.get(t)||0;return this.fileTimestamps.set(t,s),s>i}catch(e){return o(e),!0}}apply(e){e.hooks.thisCompilation.tap({name:a,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},e=>{let t=e.getCache(a);e.hooks.processAssets.tapPromise(a,async()=>{let i=this.getFiles();await Promise.allSettled(i.files.map(async i=>{let l=this.hasFileChanged(i),o=t.getItemCache(i,null),a=await o.getPromise();if(a&&!l)return void e.emitAsset(i,a.source);let m=await s(i);if(null!==m){let t=new r(Buffer.from(m));await o.storePromise({source:t,timestamp:this.fileTimestamps.get(i)}),e.emitAsset(i,t)}})),i.deleted.forEach(t=>{e.deleteAsset(t),this.fileTimestamps.delete(t)})})})}}
@@ -1 +1 @@
1
- import{fileURLToPath as e}from"node:url";import{Worker as t}from"node:worker_threads";import{fileExists as s,loadFile as o}from"@moneko/utils";import i from"webpack";import{join as r,parse as a,resolve as n,sep as m}from"../commom/paths.mjs";import{module_federation_schema as p}from"../process-env.mjs";import l from"../utils/create-types.mjs";export class ModuleFederationExposesDeclarationPlugin{constructor(s){this.name="ModuleFederationExposesDeclarationPlugin",this.assetName="module-federation.d.ts",this.dts="",this.option=s,this.worker=new t(e(new URL("../worker/dts.mjs",import.meta.url))),this.worker.setMaxListeners(0),this.worker.postMessage({options:{compilerOptions:{isolatedModules:!1,outFile:this.assetName,verbatimModuleSyntax:!1},include:[...Object.values(s.exposes),"typings/**/*.d.ts"]}}),this.worker.once("message",e=>{this.dts=e,this.worker.terminate()})}apply(e){let{exposes:t}=this.option,h=Object.keys(t).map(e=>{let s=e.replace(/\.tsx?$/i,"");return{key:e,name:s,path:n(`types/${this.option.name}/${s}.d.ts`),originPath:t[e]}});e.hooks.thisCompilation.tap({name:this.name,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},e=>{e.hooks.processAssets.tapPromise(this.name,async()=>{let t=h.map(async e=>{if(s(e.originPath)){let t=a(e.originPath),s=`export * from '${a(t.dir).name}/${t.name}'`;if("public-path"===t.name){let t=await o(e.originPath.replace(/\.mjs$/,".d.mts"));t&&(s=t)}return[l(r(this.option.name,e.name),s),l(r(p,this.option.name,e.name).replace(m,":"),s)].join("\n")}return""}),n=await Promise.all(t);n.unshift(this.dts),e.emitAsset("module-federation.d.ts",new i.sources.RawSource(n.join("\n")),{javascriptModule:!1})})})}}
1
+ import{join as e,parse as t,resolve as o,sep as s}from"node:path";import{fileURLToPath as i}from"node:url";import{Worker as r}from"node:worker_threads";import{fileExists as a,loadFile as n}from"@moneko/utils";import m from"webpack";import{module_federation_schema as p}from"../process-env.mjs";import l from"../utils/create-types.mjs";export class ModuleFederationExposesDeclarationPlugin{constructor(e){this.name="ModuleFederationExposesDeclarationPlugin",this.assetName="module-federation.d.ts",this.dts="",this.option=e,this.worker=new r(i(new URL("../worker/dts.mjs",import.meta.url))),this.worker.setMaxListeners(0),this.worker.postMessage({options:{compilerOptions:{isolatedModules:!1,outFile:this.assetName,verbatimModuleSyntax:!1},include:[...Object.values(e.exposes),"typings/**/*.d.ts"]}}),this.worker.once("message",e=>{this.dts=e,this.worker.terminate()})}apply(i){let{exposes:r}=this.option,h=Object.keys(r).map(e=>{let t=e.replace(/\.tsx?$/i,"");return{key:e,name:t,path:o(`types/${this.option.name}/${t}.d.ts`),originPath:r[e]}});i.hooks.thisCompilation.tap({name:this.name,stage:i.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},o=>{o.hooks.processAssets.tapPromise(this.name,async()=>{let i=h.map(async o=>{if(a(o.originPath)){let i=t(o.originPath),r=`export * from '${t(i.dir).name}/${i.name}'`;if("public-path"===i.name){let e=await n(o.originPath.replace(/\.mjs$/,".d.mts"));e&&(r=e)}return[l(e(this.option.name,o.name),r),l(e(p,this.option.name,o.name).replace(s,":"),r)].join("\n")}return""}),r=await Promise.all(i);r.unshift(this.dts),o.emitAsset("module-federation.d.ts",new m.sources.RawSource(r.join("\n")),{javascriptModule:!1})})})}}
@@ -1 +1 @@
1
- import{existsSync as t,readFileSync as e}from"node:fs";import s from"webpack";import{basename as i,join as n,resolve as o}from"../commom/paths.mjs";export class HtmlPlugin{constructor(t={}){this.AddEntry=/(?:.*\/)?main\.[a-zA-Z0-9]+\.bundle\.js$/,this.faviconPath="",this.name="HtmlPlugin",this.cachedMetaTags=null,this.cachedCustomTags=null,this.options={title:"WebApp",filename:"index.html",inject:"head",...t}}getPublicPath(t){if("string"==typeof this.options.publicPath)return this.options.publicPath;let e=t.getAssetPath(t.outputOptions.publicPath,{hash:t.hash}),s="auto"===e?"/":e;return s.length&&!s.endsWith("/")&&(s+="/"),s}apply(a){a.hooks.compilation.tap(this.name,h=>{h.hooks.processAssets.tap({name:this.name,stage:s.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{let r;if(this.options.favicon){let r=o(a.context,this.options.favicon);if(t(r)){let t=i(this.options.favicon),o=e(r);h.emitAsset(t,new s.sources.RawSource(o),{javascriptModule:!1});let a=this.getPublicPath(h);this.faviconPath=n(a,t)}else h.warnings.push(new s.WebpackError(`Favicon file ${r} does not exist`))}if(r=this.options.templateContent?this.options.templateContent(this.options):this.options.template?e(o(a.context,this.options.template),{encoding:"utf-8"}):this.generateDefaultTemplate(),this.options.inject){let t=this.getAssets(h);r=this.injectAssets(r,t,this.options.inject)}let l="function"==typeof this.options.filename?this.options.filename("index"):this.options.filename||"index.html";h.emitAsset(l,new s.sources.RawSource(r),{javascriptModule:!1})})})}generateDefaultTemplate(){let t=this.generateMetaTags();return`<!DOCTYPE html><html><head><meta charset="utf-8">${t}<title>${this.options.title}</title><link rel="icon" type="image/x-icon" href="${this.faviconPath}"></head><body><div id="root"></div></body></html>`}generateMetaTags(){if(null!==this.cachedMetaTags)return this.cachedMetaTags;if(!this.options.meta)return this.cachedMetaTags="","";let t=Object.entries(this.options.meta).map(([t,e])=>{if("string"==typeof e)return`<meta name="${t}" content="${e}">`;if(void 0===e)return"";let s=Object.entries(e).map(([t,e])=>`${t}="${e}"`).join(" ");return`<meta ${s}>`}).join("");return this.cachedMetaTags=t,t}generateCustomTags(){if(null!==this.cachedCustomTags)return this.cachedCustomTags;let t={head:"",body:""};if(!this.options.tags)return this.cachedCustomTags=t,t;let e=[],s=[];return this.options.tags.forEach(t=>{let{tag:i="script",textContent:n="",inject:o=this.options.inject,...a}=t,h=Object.entries(a).filter(([,t])=>null!=t).map(([t,e])=>!0===e?t:`${t}="${e}"`).join(" "),r=`<${i} ${h}>${n}</${i}>`;"head"===o?e.push(r):s.push(r)}),t.head=e.join(""),t.body=s.join(""),this.cachedCustomTags=t,t}getAssets(t){let e={js:[],css:[]},s=["import-scripts","require","async-node"],i=this.getPublicPath(t);for(let o of t.entrypoints.values())for(let t of o.chunks){let o=t.getEntryOptions(),a=o?.chunkLoading;if(!(o?.asyncChunks||a&&s.includes(a)))for(let s of t.files)s.endsWith(".js")?e.js.push(n(i,s)):s.endsWith(".css")&&e.css.push(n(i,s))}return e}injectAssets(t,e,s){let i=e.css.length?e.css.map(t=>`<link href="${t}" rel="stylesheet" />`).join(""):"",n=e.js.length?e.js.map(t=>`<script defer ${this.AddEntry.test(t)?'entry="true" ':""}src="${t}"></script>`).join(""):"",o=this.generateCustomTags(),a=t.split("</head>");if(2===a.length){let[t,e]=a,h=e.split("</body>");return"head"===s?`${t}${i}${n}${o.head}</head>${h[0]}${o.body}</body>${h[1]||""}`:`${t}${o.head}</head>${h[0]}${i}${n}${o.body}</body>${h[1]||""}`}return t}}
1
+ import{existsSync as t,readFileSync as e}from"node:fs";import{basename as s,posix as i,resolve as n}from"node:path";import{URL as o}from"node:url";import a from"webpack";function h(...t){let e=t[0];if(/^https?:\/\//.test(e)){let s=e;for(let e=1;e<t.length;e++)s=new o(t[e],s).href;return s}return i.join(...t)}export class HtmlPlugin{constructor(t={}){this.AddEntry=/(?:.*\/)?main\.[a-zA-Z0-9]+\.bundle\.js$/,this.faviconPath="",this.name="HtmlPlugin",this.cachedMetaTags=null,this.cachedCustomTags=null,this.options={title:"WebApp",filename:"index.html",inject:"head",...t}}getPublicPath(t){if("string"==typeof this.options.publicPath)return this.options.publicPath;let e=t.getAssetPath(t.outputOptions.publicPath,{hash:t.hash}),s="auto"===e?"/":e;return s.length&&!s.endsWith("/")&&(s+="/"),s}apply(i){i.hooks.compilation.tap(this.name,o=>{o.hooks.processAssets.tap({name:this.name,stage:a.Compilation.PROCESS_ASSETS_STAGE_ADDITIONAL},()=>{let r;if(this.options.favicon){let r=n(i.context,this.options.favicon);if(t(r)){let t=s(this.options.favicon),i=e(r);o.emitAsset(t,new a.sources.RawSource(i),{javascriptModule:!1});let n=this.getPublicPath(o);this.faviconPath=h(n,t)}else o.warnings.push(new a.WebpackError(`Favicon file ${r} does not exist`))}if(r=this.options.templateContent?this.options.templateContent(this.options):this.options.template?e(n(i.context,this.options.template),{encoding:"utf-8"}):this.generateDefaultTemplate(),this.options.inject){let t=this.getAssets(o);r=this.injectAssets(r,t,this.options.inject)}let l="function"==typeof this.options.filename?this.options.filename("index"):this.options.filename||"index.html";o.emitAsset(l,new a.sources.RawSource(r),{javascriptModule:!1})})})}generateDefaultTemplate(){let t=this.generateMetaTags();return`<!DOCTYPE html><html><head><meta charset="utf-8">${t}<title>${this.options.title}</title><link rel="icon" type="image/x-icon" href="${this.faviconPath}"></head><body><div id="root"></div></body></html>`}generateMetaTags(){if(null!==this.cachedMetaTags)return this.cachedMetaTags;if(!this.options.meta)return this.cachedMetaTags="","";let t=Object.entries(this.options.meta).map(([t,e])=>{if("string"==typeof e)return`<meta name="${t}" content="${e}">`;if(void 0===e)return"";let s=Object.entries(e).map(([t,e])=>`${t}="${e}"`).join(" ");return`<meta ${s}>`}).join("");return this.cachedMetaTags=t,t}generateCustomTags(){if(null!==this.cachedCustomTags)return this.cachedCustomTags;let t={head:"",body:""};if(!this.options.tags)return this.cachedCustomTags=t,t;let e=[],s=[];return this.options.tags.forEach(t=>{let{tag:i="script",textContent:n="",inject:o=this.options.inject,...a}=t,h=Object.entries(a).filter(([,t])=>null!=t).map(([t,e])=>!0===e?t:`${t}="${e}"`).join(" "),r=`<${i} ${h}>${n}</${i}>`;"head"===o?e.push(r):s.push(r)}),t.head=e.join(""),t.body=s.join(""),this.cachedCustomTags=t,t}getAssets(t){let e={js:[],css:[]},s=["import-scripts","require","async-node"],i=this.getPublicPath(t);for(let n of t.entrypoints.values())for(let t of n.chunks){let n=t.getEntryOptions(),o=n?.chunkLoading;if(!(n?.asyncChunks||o&&s.includes(o)))for(let s of t.files)s.endsWith(".js")?e.js.push(h(i,s)):s.endsWith(".css")&&e.css.push(h(i,s))}return e}injectAssets(t,e,s){let i=e.css.length?e.css.map(t=>`<link href="${t}" rel="stylesheet" />`).join(""):"",n=e.js.length?e.js.map(t=>`<script defer ${this.AddEntry.test(t)?'entry="true" ':""}src="${t}"></script>`).join(""):"",o=this.generateCustomTags(),a=t.split("</head>");if(2===a.length){let[t,e]=a,h=e.split("</body>");return"head"===s?`${t}${i}${n}${o.head}</head>${h[0]}${o.body}</body>${h[1]||""}`:`${t}${o.head}</head>${h[0]}${i}${n}${o.body}</body>${h[1]||""}`}return t}}
@@ -1 +1 @@
1
- import{existsSync as s,readFileSync as t}from"node:fs";import e from"webpack";import{basename as i,join as o,resolve as r}from"../../commom/paths.mjs";import{isDev as a,packageJson as n}from"../../process-env.mjs";export*from"./types.mjs";let{PROCESS_ASSETS_STAGE_SUMMARIZE:c,PROCESS_ASSETS_STAGE_REPORT:p}=e.Compilation;export class ManifestPlugin{constructor(s){this.name="ManifestPlugin",this.options={filename:"site.webmanifest",resourcesFilename:"app-resource.json",name:n.name,description:n.description,scope:"/",display:"standalone",background_color:"#fff",icons:[{src:"https://h5static.dewucdn.com/node-common/718d5e10-576d-8b14-b0b1-e4c58c3b3f40.webp",type:"image/webp",sizes:"512x512"}]},this.options={...this.options,...s}}getPublicPath(s){if(this.options.publicPath)return this.options.publicPath;let t=s.getAssetPath(s.outputOptions.publicPath,{hash:s.hash}),e="auto"===t?"/":t;return e.length&&!e.endsWith("/")&&(e+="/"),e}addAsset(a,n,c){if(!c)return;let p=this.getPublicPath(n);return c.map(c=>{let l={...c};if(l.src&&!l.src.startsWith("http")){let c=r(a.context,l.src);if(s(c)){let s=i(l.src),r=t(c);n.emitAsset(s,new e.sources.RawSource(r),{javascriptModule:!1}),l.src=o(p,s)}else n.warnings.push(new e.WebpackError(`Asset file ${c} does not exist`))}return l})}apply(s){let t=this.name,{filename:e,resourcesFilename:i,start_url:o,icons:r,screenshots:l,...h}=this.options;s.hooks.thisCompilation.tap(t,m=>{m.hooks.processAssets.tap({name:t,stage:a?c:p},()=>{let t={...h,start_url:o??this.getPublicPath(m),screenshots:this.addAsset(s,m,l),icons:this.addAsset(s,m,r),version:`${n.version}(${a?"Dev":m.fullHash})`};if(m.emitAsset(e,new s.webpack.sources.RawSource(JSON.stringify(t)),{javascriptModule:!1}),i){let t=[];if(a)for(let[,s]of m.entrypoints)s.getFiles().forEach(s=>{t.includes(s)||t.push(s)});else t=m.getAssets().map(s=>s.name);m.emitAsset(i,new s.webpack.sources.RawSource(JSON.stringify(t)),{javascriptModule:!0})}})})}}
1
+ import{existsSync as s,readFileSync as t}from"node:fs";import{basename as e,join as i,resolve as o}from"node:path";import r from"webpack";import{isDev as n,packageJson as a}from"../../process-env.mjs";export*from"./types.mjs";let{PROCESS_ASSETS_STAGE_SUMMARIZE:p,PROCESS_ASSETS_STAGE_REPORT:c}=r.Compilation;export class ManifestPlugin{constructor(s){this.name="ManifestPlugin",this.options={filename:"site.webmanifest",resourcesFilename:"app-resource.json",name:a.name,description:a.description,scope:"/",display:"standalone",background_color:"#fff",icons:[{src:"https://h5static.dewucdn.com/node-common/718d5e10-576d-8b14-b0b1-e4c58c3b3f40.webp",type:"image/webp",sizes:"512x512"}]},this.options={...this.options,...s}}getPublicPath(s){if(this.options.publicPath)return this.options.publicPath;let t=s.getAssetPath(s.outputOptions.publicPath,{hash:s.hash}),e="auto"===t?"/":t;return e.length&&!e.endsWith("/")&&(e+="/"),e}addAsset(n,a,p){if(!p)return;let c=this.getPublicPath(a);return p.map(p=>{let l={...p};if(l.src&&!l.src.startsWith("http")){let p=o(n.context,l.src);if(s(p)){let s=e(l.src),o=t(p);a.emitAsset(s,new r.sources.RawSource(o),{javascriptModule:!1}),l.src=i(c,s)}else a.warnings.push(new r.WebpackError(`Asset file ${p} does not exist`))}return l})}apply(s){let t=this.name,{filename:e,resourcesFilename:i,start_url:o,icons:r,screenshots:l,...h}=this.options;s.hooks.thisCompilation.tap(t,u=>{u.hooks.processAssets.tap({name:t,stage:n?p:c},()=>{let t={...h,start_url:o??this.getPublicPath(u),screenshots:this.addAsset(s,u,l),icons:this.addAsset(s,u,r),version:`${a.version}(${n?"Dev":u.fullHash})`};if(u.emitAsset(e,new s.webpack.sources.RawSource(JSON.stringify(t)),{javascriptModule:!1}),i){let t=[];if(n)for(let[,s]of u.entrypoints)s.getFiles().forEach(s=>{t.includes(s)||t.push(s)});else t=u.getAssets().map(s=>s.name);u.emitAsset(i,new s.webpack.sources.RawSource(JSON.stringify(t)),{javascriptModule:!0})}})})}}
@@ -1 +1 @@
1
- import e from"webpack";import t from"../commom/module-resolve.mjs";import r,{join as o,parse as s,relative as m,sep as a}from"../commom/paths.mjs";import{CONFIG as l}from"../config.mjs";import n from"../utils/fetch-module-federation-dts.mjs";import{resolveProgram as i}from"../utils/index.mjs";import{mf_vm as p}from"../vm/mf.mjs";import{ModuleFederationExposesDeclarationPlugin as f}from"./exposes-declararion.mjs";import{ExternalRemotesPlugin as h}from"./external-remotes.mjs";let u=e.NormalModuleReplacementPlugin,c=e.container.ModuleFederationPlugin,d={},$=[];function x(e,t){let o=e.replaceAll(a,"/").replace(/\.tsx?$/i,""),m=s(t);p.setData(o,{type:".tsx",source:()=>{if(t.startsWith(r.nodeModules)){let e=t.substring(r.nodeModules.length).split("node_modules").pop()?.replaceAll(a,"/").replace(/^\//,"");return`export * from '${e}';`}return t.startsWith(l.alias["@"])?`export * from '@/${s(m.dir).name}/${m.name}'`:"export {};"}})}let y=l.moduleFederation?.map(e=>{let s={},a={},l={};if(Array.isArray(e.remotes))for(let t=0,r=e.remotes.length;t<r;t++){let r=e.remotes[t],o=r.alias||r.name,s=r.filename||"remote_entry.js";if(a[o]=`${r.name}@${r.host}/${s}`,Array.isArray(r.library))for(let e=0,t=r.library.length;e<t;e++)d[r.library[e]]=`${o}/${r.library[e]}`;n(r.host,r.name)}if(Array.isArray(e.exposes)){e.exposes.length>0&&!e.exposes.find(e=>"public-path"===e)&&e.exposes.push({name:"public-path",path:`./${m(r.programPath,o(r.corePath,"./polyfills/public-path.mjs"))}`});for(let r=0,o=e.exposes.length;r<o;r++){let o=e.exposes[r];if("string"==typeof o){let r=o.startsWith(".");s[`./${o}`]=t(r?i(o):o),r&&(l[o]=s[`./${o}`],x(`${e.name}/${o}`,l[o]))}else if("[object Object]"===Object.prototype.toString.call(o)){let r=o.path.startsWith(".");s[`./${o.name}`]=t(r?i(o.path):o.path),r&&(l[`./${o.name}`]=s[`./${o.name}`],x(`${e.name}/${o.name}`,l[`./${o.name}`]))}}e.exposes?.length&&$.push(new f({exposes:l,name:e.name}))}return new c({filename:"remote_entry.js",...e,remotes:a,exposes:s})});y.length>0&&(y.push(new h),y.push(new u(/(.*)/,e=>{d[e.request]&&(e.request=d[e.request])})),$.forEach(e=>y.push(e))),l.env.injectRemoteReactRefresh=Object.keys(d).includes("react-dom");export default y;
1
+ import{join as e,parse as t,relative as r,sep as o}from"node:path";import s from"webpack";import m from"../commom/module-resolve.mjs";import a from"../commom/paths.mjs";import{CONFIG as l}from"../config.mjs";import n from"../utils/fetch-module-federation-dts.mjs";import{resolveProgram as p}from"../utils/index.mjs";import{mf_vm as i}from"../vm/mf.mjs";import{ModuleFederationExposesDeclarationPlugin as f}from"./exposes-declararion.mjs";import{ExternalRemotesPlugin as h}from"./external-remotes.mjs";let u=s.NormalModuleReplacementPlugin,c=s.container.ModuleFederationPlugin,d={},$=[];function x(e,r){let s=e.replaceAll(o,"/").replace(/\.tsx?$/i,""),m=t(r);i.setData(s,{type:".tsx",source:()=>{if(r.startsWith(a.nodeModules)){let e=r.substring(a.nodeModules.length).split("node_modules").pop()?.replaceAll(o,"/").replace(/^\//,"");return`export * from '${e}';`}return r.startsWith(l.alias["@"])?`export * from '@/${t(m.dir).name}/${m.name}'`:"export {};"}})}let y=l.moduleFederation?.map(t=>{let o={},s={},l={};if(Array.isArray(t.remotes))for(let e=0,r=t.remotes.length;e<r;e++){let r=t.remotes[e],o=r.alias||r.name,m=r.filename||"remote_entry.js";if(s[o]=`${r.name}@${r.host}/${m}`,Array.isArray(r.library))for(let e=0,t=r.library.length;e<t;e++)d[r.library[e]]=`${o}/${r.library[e]}`;n(r.host,r.name)}if(Array.isArray(t.exposes)){t.exposes.length>0&&!t.exposes.find(e=>"public-path"===e)&&t.exposes.push({name:"public-path",path:`./${r(a.programPath,e(a.corePath,"./polyfills/public-path.mjs"))}`});for(let e=0,r=t.exposes.length;e<r;e++){let r=t.exposes[e];if("string"==typeof r){let e=r.startsWith(".");o[`./${r}`]=m(e?p(r):r),e&&(l[r]=o[`./${r}`],x(`${t.name}/${r}`,l[r]))}else if("[object Object]"===Object.prototype.toString.call(r)){let e=r.path.startsWith(".");o[`./${r.name}`]=m(e?p(r.path):r.path),e&&(l[`./${r.name}`]=o[`./${r.name}`],x(`${t.name}/${r.name}`,l[`./${r.name}`]))}}t.exposes?.length&&$.push(new f({exposes:l,name:t.name}))}return new c({filename:"remote_entry.js",...t,remotes:s,exposes:o})});y.length>0&&(y.push(new h),y.push(new u(/(.*)/,e=>{d[e.request]&&(e.request=d[e.request])})),$.forEach(e=>y.push(e))),l.env.injectRemoteReactRefresh=Object.keys(d).includes("react-dom");export default y;
@@ -1 +1 @@
1
- import{fileExists as e}from"@moneko/utils";import t,{relative as r}from"../commom/paths.mjs";let o="OverrideResolverPlugin";export class OverrideResolverPlugin{constructor(e){this.options=e}apply(i){let s=i.ensureHook("resolved"),{override:a,original:l}=this.options;if(a&&l){let n=`./${r(t.programPath,l)}`,p=`./${r(t.programPath,a)}`;i.getHook("existing-file").tapAsync(o,(t,r,h)=>{let m=t.request||t.path;if(m&&m.startsWith(l)&&t.relativePath){let u=m.replace(l,a);if(e(u)){let e=t.relativePath.replace(n,p);return Object.assign(t,{path:u,relativePath:e,__innerRequest_relativePath:e,__innerRequest:e}),i.doResolve(s,t,`${o} 使用目标模块${a}`,r,h)}}return h()})}}}
1
+ import{relative as e}from"node:path";import{fileExists as t}from"@moneko/utils";import r from"../commom/paths.mjs";let o="OverrideResolverPlugin";export class OverrideResolverPlugin{constructor(e){this.options=e}apply(i){let s=i.ensureHook("resolved"),{override:a,original:l}=this.options;if(a&&l){let n=`./${e(r.programPath,l)}`,p=`./${e(r.programPath,a)}`;i.getHook("existing-file").tapAsync(o,(e,r,h)=>{let m=e.request||e.path;if(m&&m.startsWith(l)&&e.relativePath){let u=m.replace(l,a);if(t(u)){let t=e.relativePath.replace(n,p);return Object.assign(e,{path:u,relativePath:t,__innerRequest_relativePath:t,__innerRequest:t}),i.doResolve(s,e,`${o} 使用目标模块${a}`,r,h)}}return h()})}}}
package/lib/utils/dts.mjs CHANGED
@@ -1 +1 @@
1
- import e from"typescript";import*as t from"../commom/rule.mjs";let i={declaration:!0,emitDeclarationOnly:!0,target:e.ScriptTarget.ESNext,skipLibCheck:!0,checkJs:!1,skipDefaultLibCheck:!0,noResolve:!0,types:[],noEmitOnError:!1,noImplicitAny:!1,noImplicitThis:!1,noImplicitReturns:!1,noUnusedLocals:!1,noUnusedParameters:!1,noFallthroughCasesInSwitch:!1,strictNullChecks:!1,strictFunctionTypes:!1,strictBindCallApply:!1,strictPropertyInitialization:!1,strict:!1};export function extractMfModules(t){let i=e.createSourceFile("temp.ts",t,e.ScriptTarget.Latest,!0),r=[];return!function t(i){if(e.isModuleDeclaration(i)){let e=i.name.text;if(e.startsWith("mf:")){let t=e.substring(3);r.push(t)}}e.forEachChild(i,t)}(i),r}export function generateDeclaration(r,a){let s=(t.js.test(a)?a:`${a}.ts`).replace(/^\.+/,""),n="";return e.createProgram([s],i,{getSourceFile:t=>{if(t===s)return e.createSourceFile(t,r,i.target)},writeFile:(e,t)=>{e.endsWith(".d.ts")&&(n=t)},getDefaultLibFileName:()=>"lib.d.ts",getCurrentDirectory:()=>"",getCanonicalFileName:e=>e,useCaseSensitiveFileNames:()=>!0,getNewLine:()=>"\n",fileExists:()=>!0,readFile:()=>"",directoryExists:()=>!0,getDirectories:()=>[]}).emit(),n}export function getExportKeys(t,i){let r=new Set;for(let a of e.createSourceFile(i,t,e.ScriptTarget.Latest,!0).statements)if(e.isExportDeclaration(a)){if(a.exportClause&&e.isNamedExports(a.exportClause))for(let e of a.exportClause.elements)r.add(e.name.text)}else if(e.isExportAssignment(a))r.add("default");else if((e.isVariableStatement(a)||e.isFunctionDeclaration(a)||e.isClassDeclaration(a))&&a.modifiers?.some(t=>t.kind===e.SyntaxKind.ExportKeyword)){if(e.isFunctionDeclaration(a)||e.isClassDeclaration(a))a.name&&r.add(a.name.text);else if(e.isVariableStatement(a))for(let t of a.declarationList.declarations)e.isIdentifier(t.name)&&r.add(t.name.text)}return Array.from(r)}
1
+ import e from"typescript";import t from"../commom/rule.mjs";let i={declaration:!0,emitDeclarationOnly:!0,target:e.ScriptTarget.ESNext,skipLibCheck:!0,checkJs:!1,skipDefaultLibCheck:!0,noResolve:!0,types:[],noEmitOnError:!1,noImplicitAny:!1,noImplicitThis:!1,noImplicitReturns:!1,noUnusedLocals:!1,noUnusedParameters:!1,noFallthroughCasesInSwitch:!1,strictNullChecks:!1,strictFunctionTypes:!1,strictBindCallApply:!1,strictPropertyInitialization:!1,strict:!1};export function extractMfModules(t){let i=e.createSourceFile("temp.ts",t,e.ScriptTarget.Latest,!0),r=[];return!function t(i){if(e.isModuleDeclaration(i)){let e=i.name.text;if(e.startsWith("mf:")){let t=e.substring(3);r.push(t)}}e.forEachChild(i,t)}(i),r}export function generateDeclaration(r,a){let s=(t.js.test(a)?a:`${a}.ts`).replace(/^\.+/,""),n="";return e.createProgram([s],i,{getSourceFile:t=>{if(t===s)return e.createSourceFile(t,r,i.target)},writeFile:(e,t)=>{e.endsWith(".d.ts")&&(n=t)},getDefaultLibFileName:()=>"lib.d.ts",getCurrentDirectory:()=>"",getCanonicalFileName:e=>e,useCaseSensitiveFileNames:()=>!0,getNewLine:()=>"\n",fileExists:()=>!0,readFile:()=>"",directoryExists:()=>!0,getDirectories:()=>[]}).emit(),n}export function getExportKeys(t,i){let r=new Set;for(let a of e.createSourceFile(i,t,e.ScriptTarget.Latest,!0).statements)if(e.isExportDeclaration(a)){if(a.exportClause&&e.isNamedExports(a.exportClause))for(let e of a.exportClause.elements)r.add(e.name.text)}else if(e.isExportAssignment(a))r.add("default");else if((e.isVariableStatement(a)||e.isFunctionDeclaration(a)||e.isClassDeclaration(a))&&a.modifiers?.some(t=>t.kind===e.SyntaxKind.ExportKeyword)){if(e.isFunctionDeclaration(a)||e.isClassDeclaration(a))a.name&&r.add(a.name.text);else if(e.isVariableStatement(a))for(let t of a.declarationList.declarations)e.isIdentifier(t.name)&&r.add(t.name.text)}return Array.from(r)}
@@ -1 +1 @@
1
- import{createHash as e,createHmac as t}from"node:crypto";import{fileExists as o}from"@moneko/utils";import r,{resolve as n}from"../commom/paths.mjs";import c from"../commom/require.mjs";export function toCamelCase(e){return e.replace(/-./g,e=>e.charAt(1).toUpperCase())}export function convertToCamelCase(e){return e.toLowerCase().replace(/^@/,"").replace(/\//g,"-").replace(/-(\w)/g,(e,t)=>t?t.toUpperCase():"").replace(/^./,e=>e.toUpperCase()).replace(/Ui$/,"UI")}export function resolveProgram(e){return n(r.programPath,`./${e}`)}export function node_modules(e){return n(r.nodeModules,`./${e}`)}export function isObject(e){let t=typeof e;return null!==e&&("object"===t||"function"===t)}export function isFunction(e){return["[object Function]","[object AsyncFunction]","[object GeneratorFunction]"].includes(Object.prototype.toString.call(e))}export function transformModule(e){let t="";if("string"==typeof e)t=e;else for(let[o,r]of Object.entries(e))t+=`export const ${o} = ${isFunction(r)?r:JSON.stringify(r)};`;return t}export function empty(){}export function digest(e,o){return t(o?.algorithm??"sha1",o?.secret??"mo").update(e).digest(o?.encoding??"hex")}export function md5(t,o="hex"){return e("md5").update(t).digest(o)}export function getConfigWithTypescript(e,t){return o(e)?(delete c.cache[e],c(e)):t??{}}
1
+ import{createHash as e,createHmac as t}from"node:crypto";import{resolve as o}from"node:path";import{fileExists as r}from"@moneko/utils";import n from"../commom/paths.mjs";import c from"../commom/require.mjs";export function toCamelCase(e){return e.replace(/-./g,e=>e.charAt(1).toUpperCase())}export function convertToCamelCase(e){return e.toLowerCase().replace(/^@/,"").replace(/\//g,"-").replace(/-(\w)/g,(e,t)=>t?t.toUpperCase():"").replace(/^./,e=>e.toUpperCase()).replace(/Ui$/,"UI")}export function resolveProgram(e){return o(n.programPath,`./${e}`)}export function node_modules(e){return o(n.nodeModules,`./${e}`)}export function isObject(e){let t=typeof e;return null!==e&&("object"===t||"function"===t)}export function isFunction(e){return["[object Function]","[object AsyncFunction]","[object GeneratorFunction]"].includes(Object.prototype.toString.call(e))}export function transformModule(e){let t="";if("string"==typeof e)t=e;else for(let[o,r]of Object.entries(e))t+=`export const ${o} = ${isFunction(r)?r:JSON.stringify(r)};`;return t}export function empty(){}export function digest(e,o){return t(o?.algorithm??"sha1",o?.secret??"mo").update(e).digest(o?.encoding??"hex")}export function md5(t,o="hex"){return e("md5").update(t).digest(o)}export function getConfigWithTypescript(e,t){return r(e)?(delete c.cache[e],c(e)):t??{}}
package/lib/utils/seo.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import{scanRouter as o,sitemap as m}from"@moneko/mdx";import{saveFileSync as t}from"@moneko/utils";import{join as r,routeDir as e}from"../commom/paths.mjs";import{outputConfig as i}from"../common.mjs";import{CONFIG as s}from"../config.mjs";import{isLibrary as p}from"../process-env.mjs";import{resolveProgram as n}from"./index.mjs";export default function(){let{domain:f,jekyll:a,path:l}=s.seo||{},j=l&&n(l)||i?.path;if(!f||!j)return;let x=`https://${f}${s.basename}`;t(r(j,"CNAME"),f),t(r(j,"robots.txt"),`User-agent: *
1
+ import{join as o}from"node:path";import{scanRouter as m,sitemap as t}from"@moneko/mdx";import{saveFileSync as r}from"@moneko/utils";import{routeDir as e}from"../commom/paths.mjs";import{outputConfig as i}from"../common.mjs";import{CONFIG as p}from"../config.mjs";import{isLibrary as s}from"../process-env.mjs";import{resolveProgram as n}from"./index.mjs";export default function(){let{domain:f,jekyll:a,path:l}=p.seo||{},j=l&&n(l)||i?.path;if(!f||!j)return;let x=`https://${f}${p.basename}`;r(o(j,"CNAME"),f),r(o(j,"robots.txt"),`User-agent: *
2
2
  Allow: /
3
3
 
4
- Sitemap: ${x}/sitemap.txt`),t(r(j,"sitemap.txt"),[x,...m(e,x,o(e,p))].join("\n")),a||t(r(j,".nojekyll"),"")};
4
+ Sitemap: ${x}/sitemap.txt`),r(o(j,"sitemap.txt"),[x,...t(e,x,m(e,s))].join("\n")),a||r(o(j,".nojekyll"),"")};
package/lib/vm/app.mjs CHANGED
@@ -1 +1 @@
1
- import{getAppEntry as e,getAppFallback as r,getAppMergeRouter as o,getAppNormalizeCss as m,getAppPrefixRouter as t,getAppRem as s,getAppSuspense as a}from"@moneko/mdx";import p,{join as n,routeDir as i}from"../commom/paths.mjs";import c from"../commom/reactive-object.mjs";import{readJson as f}from"../commom/read-json.mjs";import{CONFIG as l}from"../config.mjs";import d from"../plugin/module-federation.mjs";import{app_schema as u,APPTYPE as j,FRAMEWORK as x,framework as y,frameworkVersionStr as g,SSR as h}from"../process-env.mjs";import k from"../utils/create-types.mjs";import{generateDeclaration as v}from"../utils/dts.mjs";import{convertToCamelCase as C,transformModule as b}from"../utils/index.mjs";import{getEnvDts as D,vm_dts as w}from"./dts.mjs";import{generateLocales as z}from"./locales.mjs";import M from"./render-app.mjs";import{getRouter as P}from"./routes.mjs";export const app_vm=new c({env:{type:".ts",source:()=>{let e=`${u}:env`,r=D(b(l.env));return w.setData(e,k(e,v(r,e))),r}},info:e=>{let r=n(p.programPath,"package.json"),o=f(r),m=b({...o,projectName:C(o.name),ssr:h,base:l.basename,type:j,routerMode:l.routerMode,prefixCls:l.prefixCls,theme:l.theme,frameworkVersion:g,framework:y}),t=`${u}:info`;return e?.addDependency(r),w.setData(t,k(t,v(m,t))),m},render:{type:".tsx",source:()=>"react"===x?M:""},entry:()=>e(n(l.alias["@"],"./index.ts"),!!d.length,!!l.rem,!!l.normalizeCss,j,x),fallback:()=>r(l.fallbackCompPath),"merge-router":()=>o(),"prefix-router":()=>t(),suspense:{type:".tsx",source:()=>a(j,x)},routes:e=>(e.addContextDependency(i),P()),locals:e=>{let r=n(l.alias["@"],"./locales");return e.addContextDependency(r),z()},normalize:{type:".css",source:()=>m()},rem:()=>s(l.rem?.designSize||1680)});
1
+ import{join as e}from"node:path";import{getAppEntry as r,getAppFallback as o,getAppMergeRouter as m,getAppNormalizeCss as t,getAppPrefixRouter as s,getAppRem as a,getAppSuspense as p}from"@moneko/mdx";import n,{routeDir as i}from"../commom/paths.mjs";import f from"../commom/reactive-object.mjs";import{readJson as c}from"../commom/read-json.mjs";import{CONFIG as l}from"../config.mjs";import d from"../plugin/module-federation.mjs";import{app_schema as u,APPTYPE as j,FRAMEWORK as x,framework as y,frameworkVersionStr as g,SSR as h}from"../process-env.mjs";import k from"../utils/create-types.mjs";import{generateDeclaration as v}from"../utils/dts.mjs";import{convertToCamelCase as C,transformModule as b}from"../utils/index.mjs";import{getEnvDts as D,vm_dts as w}from"./dts.mjs";import{generateLocales as z}from"./locales.mjs";import M from"./render-app.mjs";import{getRouter as P}from"./routes.mjs";export const app_vm=new f({env:{type:".ts",source:()=>{let e=`${u}:env`,r=D(b(l.env));return w.setData(e,k(e,v(r,e))),r}},info:r=>{let o=e(n.programPath,"package.json"),m=c(o),t=b({...m,projectName:C(m.name),ssr:h,base:l.basename,type:j,routerMode:l.routerMode,prefixCls:l.prefixCls,theme:l.theme,frameworkVersion:g,framework:y}),s=`${u}:info`;return r?.addDependency(o),w.setData(s,k(s,v(t,s))),t},render:{type:".tsx",source:()=>"react"===x?M:""},entry:()=>r(e(l.alias["@"],"./index.ts"),!!d.length,!!l.rem,!!l.normalizeCss,j,x),fallback:()=>o(l.fallbackCompPath),"merge-router":()=>m(),"prefix-router":()=>s(),suspense:{type:".tsx",source:()=>p(j,x)},routes:e=>(e.addContextDependency(i),P()),locals:r=>{let o=e(l.alias["@"],"./locales");return r.addContextDependency(o),z()},normalize:{type:".css",source:()=>t()},rem:()=>a(l.rem?.designSize||1680)});
package/lib/vm/docs.mjs CHANGED
@@ -1 +1 @@
1
- let e;import{loadFile as t,scanFolderSync as o}from"@moneko/utils";import r,{join as m,sep as n}from"../commom/paths.mjs";import s from"../commom/reactive-object.mjs";import*as c from"../commom/rule.mjs";import{CONFIG as a}from"../config.mjs";import{app_schema as p,docs_schema as l,FRAMEWORK as i,framework as d,isLibrary as u,isReact as f,isSolid as $}from"../process-env.mjs";import g from"./coverage.mjs";import{generatorExample as h}from"./example.mjs";import x from"./generate-doc.mjs";let j={react:"createElement",solid:"createComponent"}[i],v=()=>u?o(a.alias["@pkg"],["\\.tsx?$"]).filter(e=>!/(^|\/)\.[^\\/\\.]|\.test\./i.test(e)).map(e=>{let o=getCommentPath(e),r=o.replace(`${l}:`,"");return docs_vm.has(r)||docs_vm.setData(r,{type:".txt",source:async o=>{let r=await t(e);return o.addDependency(e),x(r,e)}}),o}):[];export const docs_vm=new s({coverage:{source:e=>(e.addDependency(r.coveragePath),g(r.coveragePath))},docs:{source:async e=>{e.addContextDependency(r.componentsPath);let t=v();return getDocs(t)}},example:{source:e=>(e.addContextDependency(r.componentsPath),h())}});export const getCommentPath=(e=a.alias["@pkg"]?.length,t=>m(`${l}:comment`,t.substring(e)));export const getDocs=e=>{let t=`import { ${j}${$?",Dynamic":""} } from "${d}${$?"/web":""}";import SuspenseComp from "${p}:suspense";function call_then(res) {return {default: ${f?"() =>":""}${j}(${$?"Dynamic":"'div'"}, {${$?"innerHTML: res.default, component: 'div', class: 'n-md-box' ":"dangerouslySetInnerHTML: {__html:res.default}, className: 'n-md-box'"} })};}`,o={};e.forEach(e=>{let t=e.replace(/docs:comment[/\\]/,"").split(n),r=t.pop(),m=t.join("/");o[m]||(o[m]={}),o[m][r]=`rr(() => ${j}(SuspenseComp, { comp: () => import(/* webpackChunkName: '${e}' */ '${e}').then(call_then)}))rr`});let r={};for(let e in o)Object.hasOwn(o,e)&&(r[e]=Object.values(o[e]));return`${t}export default ${JSON.stringify(r).replace(c.extract_func,"$1")}`};v();
1
+ let e;import{join as t,sep as o}from"node:path";import{loadFile as r,scanFolderSync as m}from"@moneko/utils";import n from"../commom/paths.mjs";import s from"../commom/reactive-object.mjs";import c from"../commom/rule.mjs";import{CONFIG as a}from"../config.mjs";import{app_schema as p,docs_schema as l,FRAMEWORK as i,framework as d,isLibrary as u,isReact as f,isSolid as $}from"../process-env.mjs";import g from"./coverage.mjs";import{generatorExample as h}from"./example.mjs";import x from"./generate-doc.mjs";let j={react:"createElement",solid:"createComponent"}[i],v=()=>u?m(a.alias["@pkg"],["\\.tsx?$"]).filter(e=>!/(^|\/)\.[^\\/\\.]|\.test\./i.test(e)).map(e=>{let t=getCommentPath(e),o=t.replace(`${l}:`,"");return docs_vm.has(o)||docs_vm.setData(o,{type:".txt",source:async t=>{let o=await r(e);return t.addDependency(e),x(o,e)}}),t}):[];export const docs_vm=new s({coverage:{source:e=>(e.addDependency(n.coveragePath),g(n.coveragePath))},docs:{source:async e=>{e.addContextDependency(n.componentsPath);let t=v();return getDocs(t)}},example:{source:e=>(e.addContextDependency(n.componentsPath),h())}});export const getCommentPath=(e=a.alias["@pkg"]?.length,o=>t(`${l}:comment`,o.substring(e)).replace(/\\/g,"/"));export const getDocs=e=>{let t=`import { ${j}${$?",Dynamic":""} } from "${d}${$?"/web":""}";import SuspenseComp from "${p}:suspense";function call_then(res) {return {default: ${f?"() =>":""}${j}(${$?"Dynamic":"'div'"}, {${$?"innerHTML: res.default, component: 'div', class: 'n-md-box' ":"dangerouslySetInnerHTML: {__html:res.default}, className: 'n-md-box'"} })};}`,r={};e.forEach(e=>{let t=e.replace(/docs:comment[/\\]/,"").split(o),m=t.pop(),n=t.join("/");r[n]||(r[n]={}),r[n][m]=`rr(() => ${j}(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`${t}export default ${JSON.stringify(m).replace(c.extract_func,"$1")}`};v();
package/lib/vm/dts.mjs CHANGED
@@ -1 +1 @@
1
- import{loadFileSync as e,updateFile as t,updateFileSync as o}from"@moneko/utils";import r,{join as s}from"../commom/paths.mjs";import n from"../commom/reactive-object.mjs";import{readJson as m}from"../commom/read-json.mjs";import{app_schema as a,APPTYPE as i,CACHE_NAME as p,FRAMEWORK as d,framework as l,frameworkVersionStr as c,packageJson as v,service_worker_schema as f,SSR as u,virtual_schema as j}from"../process-env.mjs";import $ from"../utils/create-types.mjs";import{generateDeclaration as y}from"../utils/dts.mjs";import{convertToCamelCase as g,transformModule as h}from"../utils/index.mjs";export const dts_path=s(r.nodeModules,"@types",p,"index.d.ts");export const vm_dts=new n({});export function getEnvDts(e){return`${e};declare global {import AppEnv from '${a}:env';type ImportMetaEnv = Readonly<typeof AppEnv>;interface ImportMeta {readonly env: ImportMetaEnv;}namespace NodeJS {interface ProcessEnv extends ImportMetaEnv {readonly [key: string]: string | number | boolean | undefined;}}}`}vm_dts.on("change",()=>{let e=Object.values(vm_dts.data).join("\n");t(dts_path,e)});export function initDts(t){let n=$(`${a}:env`,y(getEnvDts(h(t.env)),`${a}:env`));vm_dts.setData(`${a}:env`,n);let M=$(`${a}:info`,y(h({...m(s(r.programPath,"package.json")),projectName:g(v.name),ssr:u,type:i,frameworkVersion:c,framework:l,base:t.basename,routerMode:t.routerMode,prefixCls:t.prefixCls,theme:t.theme}),`${a}:info`));vm_dts.setData(`${a}:info`,M),vm_dts.setData(`${f}:precaching`,$(`${f}:precaching`,e(s(r.corePath,"./service-worker/precaching.d.ts"))||"")),t.virtualModule&&Object.keys(t.virtualModule).map(e=>{let o=h(t.virtualModule[e]),r=`${j}:${e}`;vm_dts.setData(r,$(r,y(o,r)))});let x=t.moduleFederation?.flatMap(e=>Array.isArray(e.remotes)?e.remotes.map(e=>e.name):[]).filter(Boolean);o(dts_path,Object.values(vm_dts.data).join("\n")),o(s(r.nodeModules,"@moneko/init.d.json"),JSON.stringify({extends:`@moneko/${d}/base`,compilerOptions:{types:[`@moneko/${d}/env.d.ts`,`@types/${p}/index.d.ts`,...x.map(e=>`@types/${p}/${e}.d.ts`)]}}))}
1
+ import{join as e}from"node:path";import{loadFileSync as t,updateFile as o,updateFileSync as r}from"@moneko/utils";import s from"../commom/paths.mjs";import n from"../commom/reactive-object.mjs";import{readJson as m}from"../commom/read-json.mjs";import{app_schema as a,APPTYPE as i,CACHE_NAME as p,FRAMEWORK as d,framework as l,frameworkVersionStr as c,packageJson as v,service_worker_schema as f,SSR as u,virtual_schema as j}from"../process-env.mjs";import $ from"../utils/create-types.mjs";import{generateDeclaration as y}from"../utils/dts.mjs";import{convertToCamelCase as h,transformModule as g}from"../utils/index.mjs";export const dts_path=e(s.nodeModules,"@types",p,"index.d.ts");export const vm_dts=new n({});export function getEnvDts(e){return`${e};declare global {import AppEnv from '${a}:env';type ImportMetaEnv = Readonly<typeof AppEnv>;interface ImportMeta {readonly env: ImportMetaEnv;}namespace NodeJS {interface ProcessEnv extends ImportMetaEnv {readonly [key: string]: string | number | boolean | undefined;}}}`}vm_dts.on("change",()=>{let e=Object.values(vm_dts.data).join("\n");o(dts_path,e)});export function initDts(o){let n=$(`${a}:env`,y(getEnvDts(g(o.env)),`${a}:env`));vm_dts.setData(`${a}:env`,n);let M=$(`${a}:info`,y(g({...m(e(s.programPath,"package.json")),projectName:h(v.name),ssr:u,type:i,frameworkVersion:c,framework:l,base:o.basename,routerMode:o.routerMode,prefixCls:o.prefixCls,theme:o.theme}),`${a}:info`));vm_dts.setData(`${a}:info`,M),vm_dts.setData(`${f}:precaching`,$(`${f}:precaching`,t(e(s.corePath,"./service-worker/precaching.d.ts"))||"")),o.virtualModule&&Object.keys(o.virtualModule).map(e=>{let t=g(o.virtualModule[e]),r=`${j}:${e}`;vm_dts.setData(r,$(r,y(t,r)))});let x=o.moduleFederation?.flatMap(e=>Array.isArray(e.remotes)?e.remotes.map(e=>e.name):[]).filter(Boolean);r(dts_path,Object.values(vm_dts.data).join("\n")),r(e(s.nodeModules,"@moneko/init.d.json"),JSON.stringify({extends:`@moneko/${d}/base`,compilerOptions:{types:[`@moneko/${d}/env.d.ts`,`@types/${p}/index.d.ts`,...x.map(e=>`@types/${p}/${e}.d.ts`)]}}))}
@@ -1 +1 @@
1
- import{generateExample as e}from"@moneko/mdx";import t,{join as o}from"../commom/paths.mjs";import m from"../commom/reactive-object.mjs";import*as r from"../commom/rule.mjs";import{CONFIG as a}from"../config.mjs";import{example_schema as n,isLibrary as p}from"../process-env.mjs";export const example_vm=new m({});let s=new m({});export function generatorExample(){if(!p)return"export default {}";let m=p&&!1!==a.htmlPluginOption?JSON.parse(e(t.componentsPath,`${n}:`,"6")):{},c={};for(let e in m){if(!Object.hasOwn(m,e))continue;s.setData(e,m[e]);let r=e.replace(`${n}:`,"");example_vm.has(r)||example_vm.setData(r,{source:m=>(m.addContextDependency(o(t.componentsPath,r)),s.getData(e))}),Object.assign(c,{[e]:`rr(() => import('${e}'))rr`})}return`export default ${JSON.stringify(c).replace(r.extract_func,"$1")}`}generatorExample();
1
+ import{join as e}from"node:path";import{generateExample as t}from"@moneko/mdx";import o from"../commom/paths.mjs";import m from"../commom/reactive-object.mjs";import r from"../commom/rule.mjs";import{CONFIG as n}from"../config.mjs";import{example_schema as a,isLibrary as p}from"../process-env.mjs";export const example_vm=new m({});let c=new m({});export function generatorExample(){if(!p)return"export default {}";let m=p&&!1!==n.htmlPluginOption?JSON.parse(t(o.componentsPath,`${a}:`,"6")):{},i={};for(let t in m){if(!Object.hasOwn(m,t))continue;c.setData(t,m[t]);let r=t.replace(`${a}:`,"");example_vm.has(r)||example_vm.setData(r,{source:m=>(m.addContextDependency(e(o.componentsPath,r)),c.getData(t))}),Object.assign(i,{[t]:`rr(() => import('${t}'))rr`})}return`export default ${JSON.stringify(i).replace(r.extract_func,"$1")}`}generatorExample();
@@ -1 +1 @@
1
- import e from"typescript";import{dirname as t}from"../commom/paths.mjs";import{CONFIG as n}from"../config.mjs";import r from"../options/md-to-html.mjs";import{digest as l}from"../utils/index.mjs";let o=e.ScriptKind,i=e.ScriptTarget,a=e.SyntaxKind,c=e.createSourceFile,s=e.forEachChild,u=e.getLeadingCommentRanges,f=e.isInterfaceDeclaration,m=e.isQuestionToken,p=e.isPropertySignature,g=e.isFunctionTypeNode,$=e.isUnionTypeNode,d=e.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 Map;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]:t(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(t){let n=[];if(t.heritageClauses){for(let r of t.heritageClauses)if(r.token===e.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):e.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]:t(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 t=[];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(t){let n=t.initializer;if(n&&e.isStringLiteral(n))return` '${n.text}'`}(l)),s=T(y(a)),u=T(k(a));!i||i.startsWith("\\color")||/^["'](.+)["']$/.test(i)||(i=`\\color{#4c81db}{${i}}`),t.push([i,!f&&u,c,!m&&s,!p&&(x(a)||x(o))])}let n=!1,l=!1,i=!1;for(let e=0,r=t.length;e<r;e++){let r=t[e];!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 e=0,r=t.length;e<r;e++){let r=t[e];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}
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{digest 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 Map;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}
@@ -1,2 +1,2 @@
1
- import{directoryExists as e,scanFolderSync as t}from"@moneko/utils";import a from"../commom/log.mjs";import{basename as o,join as l}from"../commom/paths.mjs";import r from"../commom/require.mjs";import{CONFIG as n}from"../config.mjs";import{FRAMEWORK as s}from"../process-env.mjs";export function generateLocales(){let c=l(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;'}[s];function u(e,t){return`${g[s]}
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(e(c)&&!1!==n.htmlPluginOption){let e={};t(c,[".ts$"]).filter(e=>!/^\..*|\.d\.ts$/.test(e)).forEach(t=>{let l=o(t).replace(/\.[^.]+$/,"");try{delete r.cache[t],Object.assign(e,{[l]:r(t).default})}catch(t){Object.assign(e,{[l]:{}}),a(t)}});let l=[],n={};for(let t in e){if(!Object.hasOwn(e,t))continue;let{language:a=t,title:o=a,icon:r,translation:s={}}=e[t];l.push({language:a,title:o,icon:r}),n[a]={language:a,title:o,icon:r,translation:s}}return u(l,n)}return u([],{})}
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([],{})}
package/lib/vm/scope.mjs CHANGED
@@ -1 +1 @@
1
- import{getAppScope as o}from"@moneko/mdx";import m from"../commom/has-pkg.mjs";import{join as s}from"../commom/paths.mjs";import r from"../commom/reactive-object.mjs";import{CONFIG as t}from"../config.mjs";export const scope_vm=new r({components:{source:()=>{let r=s(t.alias["@"],"./scope.tsx"),e=s(t.alias["@"],"./scope.ts");return!m(r)&&m(e)&&(r=e),o(r,"@/scope")}}});
1
+ import{join as o}from"node:path";import{getAppScope as m}from"@moneko/mdx";import e from"../commom/has-pkg.mjs";import r from"../commom/reactive-object.mjs";import{CONFIG as s}from"../config.mjs";export const scope_vm=new r({components:{source:()=>{let r=o(s.alias["@"],"./scope.tsx"),t=o(s.alias["@"],"./scope.ts");return!e(r)&&e(t)&&(r=t),m(r,"@/scope")}}});
package/lib/vm/sw.mjs CHANGED
@@ -1 +1 @@
1
- import{loadFileSync as o}from"@moneko/utils";import m,{join as r}from"../commom/paths.mjs";import e from"../commom/reactive-object.mjs";export const sw_vm=new e({precaching:{type:".ts",source:()=>o(r(m.corePath,"./service-worker/precaching.js"))||""}});
1
+ import{join as o}from"node:path";import{loadFileSync as r}from"@moneko/utils";import e from"../commom/reactive-object.mjs";import{paths as m}from"../index.mjs";export const sw_vm=new e({precaching:{type:".ts",source:()=>r(o(m.corePath,"./service-worker/precaching.js"))||""}});
@@ -1 +1 @@
1
- let a,e;import{parentPort as t}from"node:worker_threads";import{ESLint as r}from"@moneko/eslint";import o,{relative as s,sep as i}from"../commom/paths.mjs";if(!t)throw Error("This file must be run as a worker");t?.setMaxListeners(0),t.on("message",async({options:c})=>{try{a||(a=new r({cache:c.cache,cacheLocation:c.cacheLocation,cacheStrategy:c.cacheStrategy,fix:c.fix}),e=await a.loadFormatter("stylish"));let m=c.files.map(a=>(c.lintDirtyModulesOnly?s(o.programPath,a):a).replaceAll(i,"/")),l=await a.lintFiles(m),n=[],h=[];c.fix&&await r.outputFixes(l),l.forEach(a=>{a.errorCount?h.push(a):a.warningCount&&n.push(a)});let p=await Promise.all([e.format(n,{cwd:o.programPath,rulesMeta:{}}),e.format(h,{cwd:o.programPath,rulesMeta:{}})]);t.postMessage(p.map(a=>a.replace(/[^\r\n]*(\r?\n)*$/,"")))}catch{t.postMessage(["",""])}});
1
+ let a,t;import{relative as e}from"node:path";import{parentPort as r}from"node:worker_threads";import{ESLint as o}from"@moneko/eslint";import s from"../commom/paths.mjs";if(!r)throw Error("This file must be run as a worker");r?.setMaxListeners(0),r.on("message",async({options:i})=>{try{a||(a=new o({cache:i.cache,cacheLocation:i.cacheLocation,cacheStrategy:i.cacheStrategy,fix:i.fix}),t=await a.loadFormatter("stylish"));let m=i.files.map(a=>(i.lintDirtyModulesOnly?e(s.programPath,a):a).replace(/\\/g,"/")),c=await a.lintFiles(m),n=[],h=[];i.fix&&await o.outputFixes(c),c.forEach(a=>{a.errorCount?h.push(a):a.warningCount&&n.push(a)});let l=await Promise.all([t.format(n,{cwd:s.programPath,rulesMeta:{}}),t.format(h,{cwd:s.programPath,rulesMeta:{}})]);r.postMessage(l.map(a=>a.replace(/[^\r\n]*(\r?\n)*$/,"")))}catch{r.postMessage(["",""])}});
@@ -1 +1 @@
1
- import{parentPort as e}from"node:worker_threads";import{stylelint as r}from"@moneko/stylelint";import{sep as t}from"../commom/paths.mjs";if(!e)throw Error("This file must be run as a worker");let s=await r.formatters.string;e?.setMaxListeners(0),e.on("message",async({options:a})=>{try{let i=await r.lint({cache:a.cache,cacheLocation:a.cacheLocation,fix:a.fix,files:a.files.map(e=>e.replaceAll(t,"/")),quietDeprecationWarnings:a.quietDeprecationWarnings,quiet:a.quiet});delete i.output;let n=[],o=[];i.results.forEach(e=>{if(!e.ignored&&(e.errored||e.parseErrors.length||e.invalidOptionWarnings.length||e.deprecations.length)){let r=[],t=[];e.warnings.forEach(e=>{"error"===e.severity?r.push(e):"warning"===e.severity&&t.push(e)}),r.length>0&&n.push({...e,warnings:r}),t.length>0&&o.push({...e,warnings:t})}});let l=[s(o,i),s(n,i)];e.postMessage(l.map(e=>e.replace(/[^\r\n]*(\r?\n)*$/,"")))}catch{e.postMessage(["",""])}});
1
+ import{parentPort as e}from"node:worker_threads";import{stylelint as r}from"@moneko/stylelint";if(!e)throw Error("This file must be run as a worker");let t=await r.formatters.string;e?.setMaxListeners(0),e.on("message",async({options:a})=>{try{let i=await r.lint({cache:a.cache,cacheLocation:a.cacheLocation,fix:a.fix,files:a.files.map(e=>e.replace(/\\/g,"/")),quietDeprecationWarnings:a.quietDeprecationWarnings,quiet:a.quiet});delete i.output;let n=[],s=[];i.results.forEach(e=>{if(!e.ignored&&(e.errored||e.parseErrors.length||e.invalidOptionWarnings.length||e.deprecations.length)){let r=[],t=[];e.warnings.forEach(e=>{"error"===e.severity?r.push(e):"warning"===e.severity&&t.push(e)}),r.length>0&&n.push({...e,warnings:r}),t.length>0&&s.push({...e,warnings:t})}});let o=[t(s,i),t(n,i)];e.postMessage(o.map(e=>e.replace(/[^\r\n]*(\r?\n)*$/,"")))}catch{e.postMessage(["",""])}});
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "4.5.3-beta.0",
3
+ "version": "4.5.3",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",