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

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 (51) hide show
  1. package/lib/bin/build-app.mjs +1 -1
  2. package/lib/bin/changelog.mjs +3 -3
  3. package/lib/bin/commit-lint.mjs +1 -1
  4. package/lib/bin/index.mjs +1 -1
  5. package/lib/bin/pin.mjs +1 -1
  6. package/lib/commom/corepack.mjs +1 -1
  7. package/lib/commom/css-in-js-minify.mjs +1 -1
  8. package/lib/commom/log.mjs +4 -4
  9. package/lib/commom/reactive-object.d.mts +2 -1
  10. package/lib/commom/reactive-object.mjs +1 -1
  11. package/lib/commom/read-json.d.mts +1 -0
  12. package/lib/commom/read-json.mjs +1 -0
  13. package/lib/commom/rule.d.mts +2 -0
  14. package/lib/commom/rule.mjs +1 -1
  15. package/lib/common.mjs +1 -1
  16. package/lib/dev/mock.d.mts +2 -4
  17. package/lib/dev/mock.mjs +1 -1
  18. package/lib/dev.mjs +2 -2
  19. package/lib/index.d.mts +1 -0
  20. package/lib/loader/css-in-js-minify.cjs +1 -1
  21. package/lib/loader/lightning-css.cjs +1 -1
  22. package/lib/loader/mdx.cjs +1 -1
  23. package/lib/loader/react-compiler.cjs +1 -1
  24. package/lib/loader/solid.cjs +1 -1
  25. package/lib/module.config.mjs +1 -1
  26. package/lib/options/md-to-html.mjs +1 -1
  27. package/lib/options/split-chunk.mjs +1 -1
  28. package/lib/plugin/css-module-dts.mjs +1 -1
  29. package/lib/plugin/virtual-module.d.mts +14 -0
  30. package/lib/plugin/virtual-module.mjs +1 -0
  31. package/lib/plugins.config.mjs +1 -1
  32. package/lib/process-env.d.mts +1 -1
  33. package/lib/process-env.mjs +1 -1
  34. package/lib/vm/app.d.mts +3 -0
  35. package/lib/vm/app.mjs +1 -0
  36. package/lib/vm/docs.d.mts +3 -2
  37. package/lib/vm/docs.mjs +1 -1
  38. package/lib/vm/example.d.mts +3 -2
  39. package/lib/vm/example.mjs +1 -1
  40. package/lib/vm/generate-doc.mjs +1 -1
  41. package/lib/vm/routes.mjs +1 -1
  42. package/lib/vm/scope.d.mts +3 -0
  43. package/lib/vm/scope.mjs +1 -0
  44. package/lib/vm/virtual.d.mts +3 -0
  45. package/lib/vm/virtual.mjs +1 -0
  46. package/package.json +5 -5
  47. package/typings/global.d.ts +2 -0
  48. package/lib/loader/ts-doc.cjs +0 -1
  49. package/lib/loader/ts-doc.d.cts +0 -7
  50. package/lib/vm/modules.d.mts +0 -8
  51. package/lib/vm/modules.mjs +0 -1
@@ -1 +1 @@
1
- import{execSync as e}from"node:child_process";import{existsSync as i,readdirSync as n,statSync as o}from"node:fs";import r from"node:path";import{argv as s,env as t,exit as l}from"node:process";import{buildPlist as a,buildXml as d,createDir as c,ink as p,jsonToYaml as m,loadFileSync as u,parsePlist as f,parseXml as y,parseYaml as S,print as $,println as b,removeDir as j,saveFile as _,saveFileSync as g}from"@moneko/utils";import{bundleApk as w,bundleIOS as k}from"./utils/bundle-app.mjs";import{cwd as O}from"./utils/config.mjs";import{__dirname as A}from"./file.mjs";export function copyFileSync(e,i){let n=u(e);if(null!==n){let s=i;o(i).isDirectory()&&(s=r.join(i,r.basename(e))),g(s,n)}}export function copyFolderRecursiveSync(e,i,s){let t=i;s&&(t=r.join(i,r.basename(e))),o(e).isDirectory()&&n(e).forEach(function(i){let n=r.join(e,i);o(n).isDirectory()?copyFolderRecursiveSync(n,t,!0):copyFileSync(n,t)})}export default async function N(){s.slice(3).forEach(e=>{let[i,n]=e.replace(/^--/,"").split("=");t[`__args__${i}__`]=n});let{CONFIG:g}=await import("../config.mjs"),N=g.bundleId;N||(b(p("请配置 bundleId","red")),l(1)),/(^com\.)([a-zA-Z_][a-zA-Z0-9_]*[.])*([a-zA-Z_][a-zA-Z0-9_]*)$/.test(N)&&3===N.split(".").length||(b(p("软件包名不合法","red")),l(1));let h=g.bundles;h&&0!==h.length||(b(p("请配置 bundles (打包类型)","red")),l(1));let E=N.split(".").splice(-1,1).join(""),R=r.join(O,"/dist"),T=`flutter create -t app --org ${N} -i swift -a kotlin ${E}`,V=r.join(O,`/${E}`),v=r.join(V,"assets/web/");e(T,{encoding:"utf-8"}),c(v),$(p("正在注册资产...","yellow"),!0),copyFolderRecursiveSync(R,v);let x=r.join(V,"pubspec.yaml"),I=JSON.parse(await S(x)||"{}"),J=[],D=(e,i="assets/web")=>{let r=n(e);!function n(s){s!=r.length&&(o(`${e}/${r[s]}`).isDirectory()&&(J.push(`${i}/${r[s]}/`),D(`${e}/${r[s]}`,`${i}/${r[s]}`)),n(s+1))}(0)};if(D(R),I.dependencies.webview_flutter_plus="^0.2.3",I.flutter.assets=["assets/web/",...J],_(x,await m(JSON.stringify(I))),$(`${p("注册资产","cyan")}: ${p("完成","cyan")}`,!0),h.includes("apk -release")||h.includes("apk -debug")){$(p("正在配置安卓权限...","yellow"),!0);let e=r.join(V,"android/app/src/main/AndroidManifest.xml"),i=JSON.parse(y(e));i.manifest.application.$["android:usesCleartextTraffic"]="true",i.manifest["uses-permission"]=[{$:{"android:name":"android.permission.INTERNET"}},{$:{"android:name":"android.permission.ACCESS_NETWORK_STATE"}},{$:{"android:name":"android.permission.WAKE_LOCK"}}],_(e,d(JSON.stringify(i)));let n=r.join(V,"android/app/build.gradle"),o=u(n)||"",s="minSdkVersion flutter.minSdkVersion";if(o?.includes(s))o=o.replace(s,"minSdkVersion 20");else{let e=o.indexOf("minSdkVersion "),i=o.substring(e,e+16);o=o.replace(i,"minSdkVersion 20")}let t="compileSdkVersion flutter.compileSdkVersion";o.includes(t)&&(o=o.replace(t,"compileSdkVersion 32")),_(n,o),$(`${p("安卓权限配置","cyan")}: ${p("完成","cyan")}`,!0)}if(h.includes("ios -release")||h.includes("ios -debug")){$(p("开始配置IOS权限","yellow"),!0);let e=r.join(V,"ios/Runner/Info.plist"),i=Object.assign(JSON.parse(await f(e)),{NSAppTransportSecurity:{NSAllowsArbitraryLoads:!0},"io.flutter.embedded_views_preview":!0});_(e,await a(JSON.stringify(i))),$(`${p("IOS权限配置","cyan")}: ${p("完成","cyan")}`,!0)}_(r.join(V,"lib/main.dart"),u(r.join(A,"./conf/bootstrap"))||"");let F=r.join(O,"./bundle/");c(F),setTimeout(()=>{h.forEach(e=>{let i=e.split(" ");"apk"===i[0]&&w(V,F,i[1]),"ios"===i[0]&&k(V,F,i[1])}),j(V),i(r.join(F,"Runner"))&&j(r.join(F,"Runner")),$(`✨ ${p("Done","green")}`,!0),l(0)},1e3)}
1
+ import{execSync as e}from"node:child_process";import{existsSync as i,readdirSync as n,statSync as o}from"node:fs";import r from"node:path";import{argv as s,env as t,exit as l}from"node:process";import{buildPlist as a,buildXml as d,createDir as c,ink as p,jsonToYaml as m,loadFileSync as u,parsePlist as f,parseXml as y,parseYaml as S,print as $,println as b,removeDir as j,saveFile as _,saveFileSync as g}from"@moneko/utils";import{bundleApk as w,bundleIOS as k}from"./utils/bundle-app.mjs";import{cwd as O}from"./utils/config.mjs";import{__dirname as A}from"./file.mjs";export function copyFileSync(e,i){let n=u(e);if(null!==n){let s=i;o(i).isDirectory()&&(s=r.join(i,r.basename(e))),g(s,n)}}export function copyFolderRecursiveSync(e,i,s){let t=i;s&&(t=r.join(i,r.basename(e))),o(e).isDirectory()&&n(e).forEach(function(i){let n=r.join(e,i);o(n).isDirectory()?copyFolderRecursiveSync(n,t,!0):copyFileSync(n,t)})}export default async function N(){s.slice(3).forEach(e=>{let[i,n]=e.replace(/^--/,"").split("=");t[`__args__${i}__`]=n});let{CONFIG:g}=await import("../config.mjs"),N=g.bundleId;N||(b(p("请配置 bundleId","red")),l(1)),/(^com\.)([a-zA-Z_][a-zA-Z0-9_]*[.])*([a-zA-Z_][a-zA-Z0-9_]*)$/.test(N)&&3===N.split(".").length||(b(p("软件包名不合法","red")),l(1));let h=g.bundles;h&&0!==h.length||(b(p("请配置 bundles (打包类型)","red")),l(1));let E=N.split(".").splice(-1,1).join(""),R=r.join(O,"/dist"),T=`flutter create -t app --org ${N} -i swift -a kotlin ${E}`,V=r.join(O,`/${E}`),v=r.join(V,"assets/web/");e(T,{encoding:"utf-8"}),c(v),$(p("正在注册资产...","yellow"),!0),copyFolderRecursiveSync(R,v);let x=r.join(V,"pubspec.yaml"),I=JSON.parse(await S(x)||"{}"),J=[],D=(e,i="assets/web")=>{let r=n(e);!function n(s){s==r.length||(o(`${e}/${r[s]}`).isDirectory()&&(J.push(`${i}/${r[s]}/`),D(`${e}/${r[s]}`,`${i}/${r[s]}`)),n(s+1))}(0)};if(D(R),I.dependencies.webview_flutter_plus="^0.2.3",I.flutter.assets=["assets/web/",...J],_(x,await m(JSON.stringify(I))),$(`${p("注册资产","cyan")}: ${p("完成","cyan")}`,!0),h.includes("apk -release")||h.includes("apk -debug")){$(p("正在配置安卓权限...","yellow"),!0);let e=r.join(V,"android/app/src/main/AndroidManifest.xml"),i=JSON.parse(y(e));i.manifest.application.$["android:usesCleartextTraffic"]="true",i.manifest["uses-permission"]=[{$:{"android:name":"android.permission.INTERNET"}},{$:{"android:name":"android.permission.ACCESS_NETWORK_STATE"}},{$:{"android:name":"android.permission.WAKE_LOCK"}}],_(e,d(JSON.stringify(i)));let n=r.join(V,"android/app/build.gradle"),o=u(n)||"",s="minSdkVersion flutter.minSdkVersion";if(o?.includes(s))o=o.replace(s,"minSdkVersion 20");else{let e=o.indexOf("minSdkVersion "),i=o.substring(e,e+16);o=o.replace(i,"minSdkVersion 20")}let t="compileSdkVersion flutter.compileSdkVersion";o.includes(t)&&(o=o.replace(t,"compileSdkVersion 32")),_(n,o),$(`${p("安卓权限配置","cyan")}: ${p("完成","cyan")}`,!0)}if(h.includes("ios -release")||h.includes("ios -debug")){$(p("开始配置IOS权限","yellow"),!0);let e=r.join(V,"ios/Runner/Info.plist"),i=Object.assign(JSON.parse(await f(e)),{NSAppTransportSecurity:{NSAllowsArbitraryLoads:!0},"io.flutter.embedded_views_preview":!0});_(e,await a(JSON.stringify(i))),$(`${p("IOS权限配置","cyan")}: ${p("完成","cyan")}`,!0)}_(r.join(V,"lib/main.dart"),u(r.join(A,"./conf/bootstrap"))||"");let F=r.join(O,"./bundle/");c(F),setTimeout(()=>{h.forEach(e=>{let i=e.split(" ");"apk"===i[0]&&w(V,F,i[1]),"ios"===i[0]&&k(V,F,i[1])}),j(V),i(r.join(F,"Runner"))&&j(r.join(F,"Runner")),$(`✨ ${p("Done","green")}`,!0),l(0)},1e3)}
@@ -1,4 +1,4 @@
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 n(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,n]=t.split("|");if(n){let t=n.split(": "),a=l[t[0]];s.push({commitId:e,author:o,email:r,date:new Date(i).toLocaleString().replace(/\//g,"-"),message:a?t.slice(1).join(":"):n,type:a})}}return s}export default function a(){let l=o[3],a=["# Change log"];try{let e=t('git config --get remote.origin.url | sed "s/\\.git$//"').toString().trim().replace(/^git@([^:]+):(.+)$/,"https://$1/$2"),o=function(e){let o=t('git for-each-ref --sort="v:refname" --format "%(objectname) %(refname:short) %(creatordate:iso8601)" refs/tags',{encoding:"utf-8"}),r=[],s=o.trim().split("\n");return s.forEach((t,o)=>{let[i,l,n]=t.split(" "),a=s[o-1]?.split(" ")[1],m=`## ${l}`;a&&(m=`## [${l}](${e}/compare/${a}...${l}) (${new Date(n).toLocaleDateString().replace(/\//g,"-")})`),r.push({commitId:i,tag:l,date:n,title:m,logs:{}})}),r}(e);o.forEach((t,r)=>{if(r&&n(o[r-1].tag,t.tag).forEach(t=>{if(t.type){let s=o[r].logs[t.type]||[];s.push(`- ${t.message} ([${t.commitId.substring(0,7)}](${e}/commit/${t.commitId}))`),Object.assign(o[r].logs,{[t.type]:s})}}),r===o.length-1){let s=n(t.tag);s.length&&o.push({title:"## Last",logs:{}}),s.forEach(t=>{if(t.type){let s=o[r+1].logs[t.type]||[];s.push(`- ${t.message} ([${t.commitId.substring(0,7)}](${e}/commit/${t.commitId}))`),Object.assign(o[r+1].logs,{[t.type]:s})}})}}),o.reverse().forEach(t=>{for(let e in a.push(`
2
- ${t.title}`),t.logs)Object.prototype.hasOwnProperty.call(t.logs,e)&&(a.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=>a.push(t)))})}catch(t){a.push("\n当前分支尚无任何提交\n"),s(t)}r(e(i,l),a.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
- import{join as e}from"node:path";import{argv as t}from"node:process";import{ink as r,loadFileSync as a,println as n}from"@moneko/utils";import s from"../commom/log.mjs";import o from"../commom/paths.mjs";import{getConfigWithTypescript as l}from"../utils/index.mjs";function i(e){return/^[A-Z][a-z\d\s]*$/.test(e)}function c(e){return/^([A-Z][a-z\d]*\s*)+$/.test(e)}function m(e){return/^([A-Z][a-z\d]*)+$/.test(e)}function u(e){return e===e.toUpperCase()}let p=t[2]||e(o.programPath,".git","COMMIT_EDITMSG");p||(s("Commit message file path is required."),process.exit(1));let d=a(p);null===d&&(s("Commit message cannot be empty"),process.exit(1));let b=function(e,t){let a=function(e){let t=e.trim().split("\n"),r=t[0]||"",a=r.match(/^([a-zA-Z]+)(?:\([a-zA-Z0-9-]+\))?:\s*(.+)$/),n=a?a[1]:"",s=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:n,subject:s,body:t.slice(o,l).join("\n"),footer:t.slice(l).join("\n"),raw:e,lines:t}}(e),n={valid:!0,errors:[],warnings:[]};return Object.entries(t).forEach(e=>{let[t,s]=e,[o,l,...p]=s;if(0===o)return;let d=!0,b="";switch(t){case"body-leading-blank":d=!a.body||a.lines.length>1&&""===a.lines[1].trim(),b="body must have leading blank line";break;case"body-max-line-length":{let e=p[0]||100;d=a.body.split("\n").every(t=>t.length<=e),b=`body's lines must not be longer than ${e} characters`;break}case"footer-leading-blank":d=!a.footer||""===a.lines[a.lines.length-a.footer.split("\n").length-1].trim(),b="footer must have leading blank line";break;case"footer-max-line-length":{let e=p[0]||100;d=a.footer.split("\n").every(t=>t.length<=e),b=`footer's lines must not be longer than ${e} characters`;break}case"header-max-length":{let e=p[0]||100;d=a.header.length<=e,b=`header must not be longer than ${e} characters`;break}case"header-trim":d=a.header.trim()===a.header,b="header must not have leading or trailing whitespace";break;case"subject-case":{let e=p[0]||[],t=a.subject.trim(),r={"sentence-case":i,"start-case":c,"pascal-case":m,"upper-case":u};d=!e.some(e=>r[e]&&r[e](t)),b=`subject must not be in ${e.join(", ")}`;break}case"subject-empty":d=""!==a.subject.trim(),b="subject cannot be empty";break;case"subject-full-stop":{let e=p[0]||".";d=!a.subject.trim().endsWith(e),b=`subject must not end with ${e}`;break}case"type-case":"lower-case"==("always"===l?"lower-case":"upper-case")?(d=a.type===a.type.toLowerCase(),b="type must be lower-case"):(d=a.type===a.type.toUpperCase(),b="type must be upper-case");break;case"type-empty":d=""!==a.type,b="type cannot be empty";break;case"type-enum":{let e=p[0]||[],t=e.map(e=>e[0]);d=t.includes(a.type.toLowerCase());let n=Math.max(...t.map(e=>e.length));b=["type must be one of","",...e.map(e=>`${" ".repeat(4)}${e[0]}:${" ".repeat(n-e[0].length)} ${function(e,t=""){return Array.isArray(e)?e.map((e,a)=>a?`${t}${r(e,"245",{})}`:e).join("\n"):e}(e[1]," ".repeat(n+6))}`)].join("\n")}}if("never"===l&&(d=!0),!d){let e={level:o,message:b,name:t};2===o?(n.errors.push(e),n.valid=!1):1===o&&n.warnings.push(e)}}),n}(d,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.","合并分支"]]]]},l(e(o.programPath,"commitlint.config.ts")).default));(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:n=[]}=e,s=[...a,...n].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?"✖":n.length?"⚠":"✔",l=a.length>0?r.red:n.length?r.yellow:r.green,i=s.length>0;return[...s,i?"":null,`${l}${o}${r.reset} ${r.gray}${r.bold}found ${a.length} problems, ${n.length} warnings${r.reset}`,i?"":null].filter(e=>null!==e)})(b).forEach(e=>{n(e)}),process.exit(+!b.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);
package/lib/bin/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{argv as a,exit as e}from"node:process";import{ink as t,println as i}from"@moneko/utils";import s from"../commom/require.mjs";import r from"../commom/sigint-exit.mjs";import{corePkg as m}from"./utils/config.mjs";switch(a[2]){case"-v":case"--version":i(`${t(m,"blue")}: ${s(`${m}/package.json`).version}`,!0);break;case"start":(await import("./start.mjs")).default();break;case"build":(await import("./build.mjs")).build();break;case"build-dev":(await import("./build-dev.mjs")).build();break;case"eslint":(await import("./eslint.mjs")).default();break;case"stylelint":(await import("./stylelint.mjs")).default();break;case"githooks":(await import("./git-hooks.mjs")).default();break;case"buildApp":(await import("./build-app.mjs")).default();break;case"changelog":(await import("./changelog.mjs")).default();break;case"server":(await import("./server.mjs")).default();break;case"pin":(await import("./pin.mjs")).default();break;case"setup":(await import("./setup.mjs")).default();break;default:(await import("./help.mjs")).default()}r(()=>{e(0)});
2
+ import{argv as a,exit as e}from"node:process";import{ink as t,println as i}from"@moneko/utils";import{readJson as s}from"../commom/read-json.mjs";import r from"../commom/sigint-exit.mjs";import{corePkg as m}from"./utils/config.mjs";switch(a[2]){case"-v":case"--version":i(`${t(m,"blue")}: ${s(`${m}/package.json`).version}`,!0);break;case"start":(await import("./start.mjs")).default();break;case"build":(await import("./build.mjs")).build();break;case"build-dev":(await import("./build-dev.mjs")).build();break;case"eslint":(await import("./eslint.mjs")).default();break;case"stylelint":(await import("./stylelint.mjs")).default();break;case"githooks":(await import("./git-hooks.mjs")).default();break;case"buildApp":(await import("./build-app.mjs")).default();break;case"changelog":(await import("./changelog.mjs")).default();break;case"server":(await import("./server.mjs")).default();break;case"pin":(await import("./pin.mjs")).default();break;case"setup":(await import("./setup.mjs")).default();break;default:(await import("./help.mjs")).default()}r(()=>{e(0)});
package/lib/bin/pin.mjs CHANGED
@@ -1 +1 @@
1
- import{spawn as e}from"node:child_process";import{relative as t}from"node:path";import{fileExists as n,ink as a,println as r,progressBar as o,updateFile as l}from"@moneko/utils";import s from"../commom/parse-args.mjs";import c from"../commom/paths.mjs";import i from"../commom/require.mjs";let p=i.resolve(`${process.cwd()}/package.json`);async function m(t){return new Promise(n=>{let a=e("npm",["view",t,"version"],{shell:!0}),r="";a.stdout.on("data",e=>{r+=e}),a.stderr.on("data",e=>{let t=e.toString().split("\n").filter(e=>e.includes("GET http")).map(e=>e.split(" - ")[0].trim());t.length&&(r+=`Err: ${t[0]}`.trim())}),a.on("close",async()=>{n(r.trim())})})}async function d(e,t){let n={...e};return o(t.done.length,t.total,{name:"Checking"}),await Promise.allSettled(Object.keys(n).map(async e=>{let a=await m(e);t.done.includes(e)||t.done.push(e),o(t.done.length,t.total,{name:"Checking",msg:`${t.done.length} / ${t.total}`}),n[e]=a})),n}let u={major:"red",minor:"yellow",patch:"cyan",equal:"white"};async function h(e,t,n,a){if(e[t]){var r;let o=await d(e[t],a),l=(r=e[t],Object.keys(o).filter(e=>{let t=$(r[e]);return r[e]!==`${t[0]}${o[e]}`}).map(e=>{let t=$(r[e]),n=o[e].includes("Err:"),a=n?"red":u[function(e,t){let n=e.split("."),a=t.split(".");return n[0]!==a[0]?"major":n[1]!==a[1]?"minor":n[2]!==a[2]?"patch":"equal"}(t[1],o[e])];return{name:e,wanted:r[e],latest:`${t[0]}${o[e].replace("Err:","")}`,color:a,err:n?o[e]:void 0}}));l.length&&(n[t]=l)}}function g(e,t,n){return e.reduce((e,a)=>Math.max(e,t[a].reduce((e,t)=>Math.max(e,t[n]?.length??0),0)),0)}function $(e){let t=e.match(/^([^\d]*)(.*)$/);return t?[t[1],t[2]]:["",e]}async function f(){let e=s(process.argv),o=(delete i.cache[p],i(p)),m={done:[],total:Object.keys({...o.peerDependencies||{},...o.optionalDependencies||{},...o.devDependencies||{},...o.dependencies||{}}).length},d={};if(r(""),await Promise.allSettled([h(o,"peerDependencies",d,m),h(o,"optionalDependencies",d,m),h(o,"devDependencies",d,m),h(o,"dependencies",d,m)]),r(""),Object.keys(d)?.length>0){var u;let s=(u=o.packageManager)?u.split("@")[0]:n(`${c.programPath}/pnpm-lock.yaml`)?"pnpm":n(`${c.programPath}/yarn.lock`)?"yarn":n(`${c.programPath}/bun.lockb`)?"bun":n(`${c.programPath}/deno.lock`)?"deno":"npm",i=Object.keys(d),m="".padEnd(3," ");r(""),r(a("⚡ Updates available for:","magenta",{bold:!0})),r("");let h=g(i,d,"name"),$=g(i,d,"latest"),f=g(i,d,"wanted");i.forEach(e=>{r(a(`${e}:`,"145")),d[e].forEach(t=>{r(`${a(t.name.padEnd(h," "),t.color,{bold:!0})}${m}${t.wanted.padStart(f," ")}${m}${a("→",t.color)}${m}${a(t.latest.padStart($," "),t.color)}`),t.err||(o[e][t.name]=t.latest)}),r("")}),e["-u"]?(await l(p,JSON.stringify(o,null,2)),r(`✅ ${a(t(c.programPath,p),"yellow")} upgrade completed successfully.`),r(`⏳ Run ${a(`${s} install`,"blue")} to install new versions.`)):r(`⏳ Run ${a("mo pin -u","blue")} to upgrade package.json`)}else r(""),r("🎉 All dependencies match the latest package versions");r("")}export default f;
1
+ import{spawn as e}from"node:child_process";import{relative as t}from"node:path";import{fileExists as a,ink as n,println as r,progressBar as o,updateFile as l}from"@moneko/utils";import s from"../commom/parse-args.mjs";import m from"../commom/paths.mjs";import{readJson as i}from"../commom/read-json.mjs";import p from"../commom/require.mjs";let c=p.resolve(`${m.programPath}/package.json`);async function d(t){return new Promise(a=>{let n=e("npm",["view",t,"version"],{shell:!0}),r="";n.stdout.on("data",e=>{r+=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&&(r+=`Err: ${t[0]}`.trim())}),n.on("close",async()=>{a(r.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 r;let o=await u(e[t],n),l=(r=e[t],Object.keys(o).filter(e=>{let t=f(r[e]);return r[e]!==`${t[0]}${o[e]}`}).map(e=>{var t,a;let n,l,s=f(r[e]),m=o[e].includes("Err:"),i=m?"red":h[t=s[1],a=o[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:r[e],latest:`${s[0]}${o[e].replace("Err:","")}`,color:i,err:m?o[e]:void 0}}));l.length&&(a[t]=l)}}function $(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 f(e){let t=e.match(/^([^\d]*)(.*)$/);return t?[t[1],t[2]]:["",e]}async function y(){let e=s(process.argv),o=i(c),p={done:[],total:Object.keys({...o.peerDependencies||{},...o.optionalDependencies||{},...o.devDependencies||{},...o.dependencies||{}}).length},d={};if(r(""),await Promise.allSettled([g(o,"peerDependencies",d,p),g(o,"optionalDependencies",d,p),g(o,"devDependencies",d,p),g(o,"dependencies",d,p)]),r(""),Object.keys(d)?.length>0){var u;let s=(u=o.packageManager)?u.split("@")[0]:a(`${m.programPath}/pnpm-lock.yaml`)?"pnpm":a(`${m.programPath}/yarn.lock`)?"yarn":a(`${m.programPath}/bun.lockb`)?"bun":a(`${m.programPath}/deno.lock`)?"deno":"npm",i=Object.keys(d),p="".padEnd(3," ");r(""),r(n("⚡ Updates available for:","magenta",{bold:!0})),r("");let h=$(i,d,"name"),g=$(i,d,"latest"),f=$(i,d,"wanted");i.forEach(e=>{r(n(`${e}:`,"145")),d[e].forEach(t=>{r(`${n(t.name.padEnd(h," "),t.color,{bold:!0})}${p}${t.wanted.padStart(f," ")}${p}${n("→",t.color)}${p}${n(t.latest.padStart(g," "),t.color)}`),t.err||(o[e][t.name]=t.latest)}),r("")}),e["-u"]?(await l(c,JSON.stringify(o,null,2)),r(`✅ ${n(t(m.programPath,c),"yellow")} upgrade completed successfully.`),r(`⏳ Run ${n(`${s} install`,"blue")} to install new versions.`)):r(`⏳ Run ${n("mo pin -u","blue")} to upgrade package.json`)}else r(""),r("🎉 All dependencies match the latest package versions");r("")}export default y;
@@ -1 +1 @@
1
- import{spawn as e}from"node:child_process";import{dirname as r,join as n}from"node:path";import{execPath as o,platform as a,versions as p}from"node:process";import{ink as c,loadFile as t,loadFileSync as i,println as m,saveFile as s}from"@moneko/utils";import l from"./log.mjs";let g=`${process.cwd()}/package.json`,d=JSON.parse(i(g)),f=c("corepack","magenta"),k={stdio:"ignore",shell:!0};export function corepack(i){new Promise(p=>{if(d.packageManager){let c=e("corepack",["-v"],k);c.on("error",e=>{l(e),p(!1)}),c.on("exit",e=>{0!==e&&p(!1);let c=d.packageManager.split("@")[0],i="win32"===a?`${c}.cmd`:c;t(n(r(o),i)).then(e=>{p(e.includes("corepack"))}).catch(e=>{l(e),p(!1)})})}else p(!1)}).then(r=>{if(i){if(d.packageManager||(d.packageManager=function(){let e=Number(p.node.split(".")[0]);return e<16?"pnpm@7.33.7":e<18?"pnpm@8.15.9":"pnpm@10.14.0"}(),s(g,JSON.stringify(d,null,2))),r)return;e("corepack",["enable"],k);return}r?m(`${f} is ${c("enabled","green")} ${c(`(${d.name})`,"245")}`):m(`${f} is ${c("disabled","yellow")} ${c(`(${d.name})`,"245")}`)}).catch(e=>{l(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 +1 @@
1
- import{parse as e,print as t}from"@swc/core";import{compile as r}from"stylis";import n from"./log.mjs";function a(e){return{type:"iTemplateElement",span:{start:0,end:0,ctxt:0},tail:!1,cooked:e,raw:e}}function i(e,t){if("Identifier"===e.tag.type&&t.includes(e.tag.value)){let t=e.template,n=function e(t){return t.map(t=>{switch(t.type){case"import":case"decl":return t.value;case"comm":return"/"===t.props&&t.value.includes("@")?t.value:"";case"rule":return`${t.value.replace(/&\f/g,"&")}{${e(t.children)}}`;default:return`${t.value}{${e(t.children)}}`}}).join("")}(function e(t,r){for(let n=0;n<t.length;n++){let a=t[n],i=a.parent,l=a.children;i?!function(e){var t;return"rule"===e.type&&e.parent&&(t=e.parent,e.line===t.line&&e.column===t.column)}(a)&&i.children.push(a):r.push(a),Array.isArray(l)&&(a.children=[],e(l,r))}return r}(r(function(e){let t=e.quasis.map(e=>e.cooked);return t.reduce((e,r,n)=>(e.push(r),n!==t.length-1&&e.push(`xxx${n}:xxx`),e),[]).join("").trim()}(t)),[])),i=function(e,t){let r=function(e){let t,r=/xxx(\d+):xxx/gm,n=[];for(;null!==(t=r.exec(e));)n.push({value:t[0],p1:parseInt(t[1],10),index:t.index});return n}(e);if(0===r.length)return""===e?[]:[a(e)];let n=[],i=[],l=0;return r.forEach(({value:s,p1:p,index:o},u)=>{let c=e.substring(l,o);l=l+c.length+s.length,c||0!==u?n.push(a(c)):n.push(a("")),i.push(t[p]),u===r.length-1&&n.push(a(e.substring(o+s.length)))}),i.reduce((e,t,r)=>e.concat([t],n[r+1]),[n[0]]).filter(e=>""!==e.raw)}(n,t.expressions);if(n.length>1){let e=[],r=[];i.forEach((t,n)=>{"iTemplateElement"===t.type?e.push({...t,type:"TemplateElement",tail:n===i.length-1}):r.push(t)}),t.quasis=e,t.expressions=r}}}export async function cssInJsMinify(r,a){let{moduleName:l,allowFuncs:s}=a||{};try{let n=await e(r,{syntax:"ecmascript"}),a=[];return n.body.forEach(e=>{"ImportDeclaration"===e.type&&e.source.value===l&&e.specifiers.forEach(e=>{"ImportSpecifier"===e.type&&(e.imported&&s.includes(e.imported.value)?a.push(e.local.value):s.includes(e.local.value)&&a.push(e.local.value))})}),n.body.forEach(e=>{if("ExportDeclaration"===e.type||"ExpressionStatement"===e.type){let t="declaration"in e?e.declaration:e.expression;t&&"CallExpression"===t.type&&t.arguments.forEach(e=>{e.expression&&"TaggedTemplateExpression"===e.expression.type&&i(e.expression,a)}),t&&"VariableDeclaration"===t.type&&t.declarations.forEach(e=>{e.init?.type==="TaggedTemplateExpression"&&i(e.init,a)})}else"CallExpression"===e.type&&e.arguments.forEach(e=>{e.expression&&"TaggedTemplateExpression"===e.expression.type&&i(e.expression,a)})}),await t(n)}catch(e){return n(e),{code:r,map:void 0}}}
1
+ import{parse as e,print as t}from"@swc/core";import{compile as r}from"stylis";import n from"./log.mjs";function a(e){return{type:"iTemplateElement",span:{start:0,end:0,ctxt:0},tail:!1,cooked:e,raw:e}}function i(e,t){if("Identifier"===e.tag.type&&t.includes(e.tag.value)){let t,n=e.template,i=function e(t){return t.map(t=>{switch(t.type){case"import":case"decl":return t.value;case"comm":return"/"===t.props&&t.value.includes("@")?t.value:"";case"rule":return`${t.value.replace(/&\f/g,"&")}{${e(t.children)}}`;default:return`${t.value}{${e(t.children)}}`}}).join("")}(function e(t,r){for(let n=0;n<t.length;n++){let a=t[n],i=a.parent,l=a.children;i?!function(e){var t;return"rule"===e.type&&e.parent&&(t=e.parent,e.line===t.line&&e.column===t.column)}(a)&&i.children.push(a):r.push(a),Array.isArray(l)&&(a.children=[],e(l,r))}return r}(r((t=n.quasis.map(e=>e.cooked)).reduce((e,r,n)=>(e.push(r),n!==t.length-1&&e.push(`xxx${n}:xxx`),e),[]).join("").trim()),[])),l=function(e,t){let r=function(e){let t,r=/xxx(\d+):xxx/gm,n=[];for(;null!==(t=r.exec(e));)n.push({value:t[0],p1:parseInt(t[1],10),index:t.index});return n}(e);if(0===r.length)return""===e?[]:[a(e)];let n=[],i=[],l=0;return r.forEach(({value:s,p1:p,index:o},u)=>{let c=e.substring(l,o);l=l+c.length+s.length,c||0!==u?n.push(a(c)):n.push(a("")),i.push(t[p]),u===r.length-1&&n.push(a(e.substring(o+s.length)))}),i.reduce((e,t,r)=>e.concat([t],n[r+1]),[n[0]]).filter(e=>""!==e.raw)}(i,n.expressions);if(i.length>1){let e=[],t=[];l.forEach((r,n)=>{"iTemplateElement"===r.type?e.push({...r,type:"TemplateElement",tail:n===l.length-1}):t.push(r)}),n.quasis=e,n.expressions=t}}}export async function cssInJsMinify(r,a){let{moduleName:l,allowFuncs:s}=a||{};try{let n=await e(r,{syntax:"ecmascript"}),a=[];return n.body.forEach(e=>{"ImportDeclaration"===e.type&&e.source.value===l&&e.specifiers.forEach(e=>{"ImportSpecifier"===e.type&&(e.imported&&s.includes(e.imported.value)?a.push(e.local.value):s.includes(e.local.value)&&a.push(e.local.value))})}),n.body.forEach(e=>{if("ExportDeclaration"===e.type||"ExpressionStatement"===e.type){let t="declaration"in e?e.declaration:e.expression;t&&"CallExpression"===t.type&&t.arguments.forEach(e=>{e.expression&&"TaggedTemplateExpression"===e.expression.type&&i(e.expression,a)}),t&&"VariableDeclaration"===t.type&&t.declarations.forEach(e=>{e.init?.type==="TaggedTemplateExpression"&&i(e.init,a)})}else"CallExpression"===e.type&&e.arguments.forEach(e=>{e.expression&&"TaggedTemplateExpression"===e.expression.type&&i(e.expression,a)})}),await t(n)}catch(e){return n(e),{code:r,map:void 0}}}
@@ -1,4 +1,4 @@
1
- import{hrtime as t}from"node:process";import{appendToFileSync as e}from"@moneko/utils";let r=new Date,n=t();async function a(a){let o=function(){let e=t(n),a=e[0],o=e[1],g=new Date(r.getTime()+1e3*a+Math.floor(o/1e6)),i=g.getFullYear(),$=String(g.getMonth()+1).padStart(2,"0"),s=String(g.getDate()).padStart(2,"0"),S=String(g.getHours()).padStart(2,"0"),l=String(g.getMinutes()).padStart(2,"0"),p=String(g.getSeconds()).padStart(2,"0"),d=String(Math.floor(o%1e6/1e3)).padStart(3,"0"),u=String(o%1e3).padStart(3,"0");return`${i}-${$}-${s}T${S}_${l}_${p}.${d}${u}`}(),g=(a instanceof Error?`${a.message}
2
- ${a.stack||""}`:String(a)).split("\n"),i=`[${o}] ${g[0]}`,$=" ".repeat(`[${o}] `.length),s=g.slice(1).map(t=>`${$}${t}`).join("\n"),S=`${i}${s?`
3
- ${s}`:""}
4
- `;e(`logs/${o.substring(0,16)}.log`,S)}export default a;
1
+ import{hrtime as t}from"node:process";import{appendToFileSync as e}from"@moneko/utils";let r=new Date,a=t();async function n(n){let o,g,i,$,s,S,p,l,d,m,c,f,u=(g=(o=t(a))[0],i=o[1],s=($=new Date(r.getTime()+1e3*g+Math.floor(i/1e6))).getFullYear(),S=String($.getMonth()+1).padStart(2,"0"),p=String($.getDate()).padStart(2,"0"),l=String($.getHours()).padStart(2,"0"),d=String($.getMinutes()).padStart(2,"0"),m=String($.getSeconds()).padStart(2,"0"),c=String(Math.floor(i%1e6/1e3)).padStart(3,"0"),f=String(i%1e3).padStart(3,"0"),`${s}-${S}-${p}T${l}_${d}_${m}.${c}${f}`),h=(n instanceof Error?`${n.message}
2
+ ${n.stack||""}`:String(n)).split("\n"),M=`[${u}] ${h[0]}`,D=" ".repeat(`[${u}] `.length),k=h.slice(1).map(t=>`${D}${t}`).join("\n"),w=`${M}${k?`
3
+ ${k}`:""}
4
+ `;e(`logs/${u.substring(0,16)}.log`,w)}export default n;
@@ -1,7 +1,8 @@
1
1
  import EventEmitter from 'node:events';
2
- declare class ReactiveObject<T extends object = Record<string, string | undefined>> extends EventEmitter {
2
+ declare class ReactiveObject<T extends object = Record<string, unknown | undefined>> extends EventEmitter {
3
3
  readonly data: T;
4
4
  constructor(props?: T);
5
+ has(key: keyof T): boolean;
5
6
  setData(key: keyof T, value: T[keyof T]): void;
6
7
  getData(key: keyof T): T[keyof T];
7
8
  removeData(key: keyof T): void;
@@ -1 +1 @@
1
- import t from"node:events";class e extends t{constructor(t={}){super(),this.data=t,this.setMaxListeners(0)}setData(t,e){this.data[t]!==e&&(this.data[t]=e,this.emit("change",t,e))}getData(t){return this.data[t]}removeData(t){Object.prototype.hasOwnProperty.call(this.data,t)&&(delete this.data[t],this.emit("change",t,null))}[Symbol.iterator](){let t=Object.keys(this.data),e=0;return{next:()=>{if(e<t.length){let a=t[e++];return{value:[a,this.data[a]],done:!1}}return{value:void 0,done:!0}}}}}export default e;
1
+ import t from"node:events";class e extends t{constructor(t={}){super(),this.data=t,this.setMaxListeners(0)}has(t){return t in this.data}setData(t,e){this.data[t]!==e&&(this.data[t]=e,this.emit("change",t,e))}getData(t){return this.data[t]}removeData(t){Object.prototype.hasOwnProperty.call(this.data,t)&&(delete this.data[t],this.emit("change",t,null))}[Symbol.iterator](){let t=Object.keys(this.data),e=0;return{next:()=>{if(e<t.length){let a=t[e++];return{value:[a,this.data[a]],done:!1}}return{value:void 0,done:!0}}}}}export default e;
@@ -0,0 +1 @@
1
+ export declare function readJson<T = typeof import('package.json')>(path: string, normal?: T): T;
@@ -0,0 +1 @@
1
+ import{loadFileSync as r}from"@moneko/utils";import o from"./log.mjs";export function readJson(t,e){let m=e??{};try{let o=r(t)?.trim();o&&(m=JSON.parse(o))}catch(r){o(r)}return m}
@@ -11,6 +11,8 @@ declare const Rule: {
11
11
  markdown: RegExp;
12
12
  tsdoc: RegExp;
13
13
  css_module: RegExp;
14
+ less_global: RegExp;
15
+ sass_global: RegExp;
14
16
  node_modules_css_module: RegExp;
15
17
  node_modules: RegExp;
16
18
  __tests__: RegExp;
@@ -1 +1 @@
1
- export default{js:/\.(cj|mj|t|j)s(|x)$/i,css:/\.css$/i,less:/\.less$/i,scss:/\.(sa|sc)ss$/i,wasm:/\.wasm$/i,txt:/\.txt$/i,image:/\.(gif|png|jpe?g|webp|svg|ico)$/i,video:/\.(webm|mp4|ogv)$/i,font:/\.(woff2?|eot|ttf|otf)(\?.*)?$/i,markdown:/\.mdx?$/i,tsdoc:/^(?![._]).*(?<!\.test)\.(tsx?)$/,css_module:/(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,node_modules_css_module:/(^(?!.*node_modules))(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,node_modules:/[\\/]node_modules[\\/]/,__tests__:/(.+)\/__tests__\/(.+)/,extract_func:/"rr\((.+?)\)rr"/g};
1
+ export default{js:/\.(cj|mj|t|j)s(|x)$/i,css:/\.css$/i,less:/\.less$/i,scss:/\.(sa|sc)ss$/i,wasm:/\.wasm$/i,txt:/\.txt$/i,image:/\.(gif|png|jpe?g|webp|svg|ico)$/i,video:/\.(webm|mp4|ogv)$/i,font:/\.(woff2?|eot|ttf|otf)(\?.*)?$/i,markdown:/\.mdx?$/i,tsdoc:/^(?![._]).*(?<!\.test)\.(tsx?)$/,css_module:/(.*(?<!\.?global\.(le|c|sc|sa)ss)$)/i,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{extname as e,join as t,resolve as o}from"node:path";import{argv as s}from"node:process";import a,{config_files as n,CUSTOMCONFIG as i,TMP_DIR as r}from"./commom/paths.mjs";import l from"./commom/rule.mjs";import{OverrideResolverPlugin as m}from"./plugin/override-resolve.mjs";import{isObject as c,md5 as p,resolveProgram as u}from"./utils/index.mjs";import h from"./vm/info.mjs";import{CONFIG as d}from"./config.mjs";import f from"./plugins.config.mjs";import{app_schema as g,docs_schema as y,isCI as b,isDev as j,isLibrary as v,NODE_ENV as C,packageJson as P}from"./process-env.mjs";export const outputConfig={path:u(v?"docs":"dist"),filename:e=>e.filename?.includes(".worker")?"worker/[name].js":"js/[name].[contenthash].bundle.js",chunkFilename:"js/[contenthash].chunk.js",cssFilename:"style/[contenthash].css",cssChunkFilename:"style/[contenthash].chunk.css",assetModuleFilename:t=>{let o=e(t.filename||"").substring(1);return`assets/${o}/[hash][ext]`},library:{name:`${h.projectName}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${P.name}`,pathinfo:j,clean:!0,publicPath:d.publicPath,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"use-credentials",enabledWasmLoadingTypes:["fetch"],uniqueName:`${h.projectName}`};let k={main:[`${g}:entry`]},x=[t(a.corePath,"./polyfills/public-path.mjs")];if(j&&x.push(`${g}:mock`),j&&d.refresh&&d.env.injectRemoteReactRefresh&&x.push(t(a.corePath,"./polyfills/inject-react-refresh.mjs")),d.polyfill&&x.push(t(a.corePath,"./polyfills/replace-children.mjs")),d.entry&&("string"==typeof d.entry?k={...k,main:[d.entry]}:Object.keys(d.entry)&&(k=Object.assign(k,d.entry))),"string"==typeof k.main?k.main=[...x,k.main]:Array.isArray(k.main)&&(k.main=[...x,...k.main]),d.output){if("string"==typeof d.output)outputConfig.path=d.output;else if(Object.keys(d.output)){let e=d.output,t={...outputConfig.library};Object.assign(outputConfig,e),"object"==typeof d.output&&e.library&&(outputConfig.library=Object.assign(t,e.library))}}let M={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:a.webpackCachePath,memoryCacheUnaffected:!j,name:p(`${i}-${C}-${s[2]}`),version:`${P.version}`,buildDependencies:{config:n},maxMemoryGenerations:1};!1===d.cache?M=!1:c(d.cache)&&(M=Object.assign(M,d.cache)),b&&(void 0===d.cache||d.cache&&!d.cache.cacheDirectory)&&(M.cacheDirectory=o(r,P.name));let $={},w={imports:!0,entries:!0,test:e=>{let t=e.nameForCondition();return!!(t&&(t.includes(`${y}:example`)||t.includes(`${y}:comment`)||t.startsWith(a.pagesPath)||t.startsWith(a.componentsPath)))}};d.lazyCompilation&&j&&"true"!==process.env.IS_BUILD?c(d.lazyCompilation)?Object.assign($,w,d.lazyCompilation):Object.assign($,w):$=!1;export const commonConfig={name:"client",target:"web",devtool:d.devtool,entry:k,mode:d.mode??"production",stats:"errors-only",cache:M,snapshot:{immutablePaths:[a.pnpmNodeModules,a.denoNodeModules,l.node_modules],managedPaths:[a.pnpmNodeModules,a.denoNodeModules,l.node_modules],resolveBuildDependencies:{timestamp:!0,hash:!0},resolve:{timestamp:!0,hash:!0},module:{timestamp:!0,hash:!0},buildDependencies:{timestamp:!0,hash:!0},contextModule:{timestamp:!0,hash:!0}},infrastructureLogging:{level:"error"},externalsPresets:d.externalsPresets,plugins:f,node:{global:!1,__filename:!1,__dirname:!1},experiments:{asyncWebAssembly:!0,cacheUnaffected:!j,lazyCompilation:$,buildHttp:c(d.buildHttp)?{allowedUris:[],lockfileLocation:o(a.httpCachePath,"http.lock"),cacheLocation:o(a.httpCachePath,"data"),upgrade:!0,...d.buildHttp}:d.buildHttp,backCompat:!0,futureDefaults:!0,css:!0,outputModule:!1},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:d.alias,modules:[a.nodeModules,a.pnpmNodeModules,a.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:d.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:d.externals,output:outputConfig,recordsPath:d.recordsPath?t(a.programPath,d.recordsPath):t(a.webpackCachePath,"records.json")};d.overrideResolve&&commonConfig.resolve.plugins.push(new m(Object.assign({original:d.alias["@"],override:i&&u(i)},d.overrideResolve)));
1
+ import{extname as e,join as t,resolve as o}from"node:path";import{argv as s}from"node:process";import a,{config_files as n,CUSTOMCONFIG as i,TMP_DIR as r}from"./commom/paths.mjs";import l from"./commom/rule.mjs";import{OverrideResolverPlugin as m}from"./plugin/override-resolve.mjs";import{isObject as c,md5 as p,resolveProgram as u}from"./utils/index.mjs";import d from"./vm/info.mjs";import{CONFIG as h}from"./config.mjs";import f from"./plugins.config.mjs";import{app_schema as y,docs_schema as g,isCI as b,isDev as j,isLibrary as v,NODE_ENV as C,packageJson as P}from"./process-env.mjs";export const outputConfig={path:u(v?"docs":"dist"),filename:e=>e.filename?.includes(".worker")?"worker/[name].js":"js/[name].[contenthash].bundle.js",chunkFilename:"js/[contenthash].chunk.js",cssFilename:"style/[contenthash].css",cssChunkFilename:"style/[contenthash].chunk.css",assetModuleFilename:t=>{let o=e(t.filename||"").substring(1);return`assets/${o}/[hash][ext]`},library:{name:`${d.projectName}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${P.name}`,pathinfo:j,clean:!0,publicPath:h.publicPath,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"use-credentials",enabledWasmLoadingTypes:["fetch"],uniqueName:`${d.projectName}`};let k={main:[`${y}:entry`]},x=[t(a.corePath,"./polyfills/public-path.mjs")];if(j&&h.refresh&&h.env.injectRemoteReactRefresh&&x.push(t(a.corePath,"./polyfills/inject-react-refresh.mjs")),h.polyfill&&x.push(t(a.corePath,"./polyfills/replace-children.mjs")),h.entry&&("string"==typeof h.entry?k={...k,main:[h.entry]}:Object.keys(h.entry)&&(k=Object.assign(k,h.entry))),"string"==typeof k.main?k.main=[...x,k.main]:Array.isArray(k.main)&&(k.main=[...x,...k.main]),h.output){if("string"==typeof h.output)outputConfig.path=h.output;else if(Object.keys(h.output)){let e=h.output,t={...outputConfig.library};Object.assign(outputConfig,e),"object"==typeof h.output&&e.library&&(outputConfig.library=Object.assign(t,e.library))}}let M={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:a.webpackCachePath,memoryCacheUnaffected:!j,name:p(`${i}-${C}-${s[2]}`),version:`${P.version}`,buildDependencies:{config:n},maxMemoryGenerations:1};!1===h.cache?M=!1:c(h.cache)&&(M=Object.assign(M,h.cache)),b&&(void 0===h.cache||h.cache&&!h.cache.cacheDirectory)&&(M.cacheDirectory=o(r,P.name));let O={},$={imports:!0,entries:!0,test:e=>{let t=e.nameForCondition();return!!(t&&(t.includes(`${g}:example`)||t.includes(`${g}:comment`)||t.startsWith(a.pagesPath)||t.startsWith(a.componentsPath)))}};h.lazyCompilation&&j&&"true"!==process.env.IS_BUILD?c(h.lazyCompilation)?Object.assign(O,$,h.lazyCompilation):Object.assign(O,$):O=!1;export const commonConfig={name:"client",target:"web",devtool:h.devtool,entry:k,mode:h.mode??"production",cache:M,snapshot:{immutablePaths:[a.pnpmNodeModules,a.denoNodeModules,l.node_modules],managedPaths:[a.pnpmNodeModules,a.denoNodeModules,l.node_modules],resolveBuildDependencies:{timestamp:!0,hash:!0},resolve:{timestamp:!0,hash:!0},module:{timestamp:!0,hash:!0},buildDependencies:{timestamp:!0,hash:!0},contextModule:{timestamp:!0,hash:!0}},stats:"errors-only",infrastructureLogging:{level:"error"},externalsPresets:h.externalsPresets,plugins:f,node:{global:!1,__filename:!1,__dirname:!1},experiments:{asyncWebAssembly:!0,cacheUnaffected:!j,lazyCompilation:O,buildHttp:c(h.buildHttp)?{allowedUris:[],lockfileLocation:o(a.httpCachePath,"http.lock"),cacheLocation:o(a.httpCachePath,"data"),upgrade:!0,...h.buildHttp}:h.buildHttp,backCompat:!0,futureDefaults:!0,css:!0,outputModule:!1},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:h.alias,modules:[a.nodeModules,a.pnpmNodeModules,a.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:h.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:h.externals,output:outputConfig,recordsPath:h.recordsPath};h.overrideResolve&&commonConfig.resolve.plugins.push(new m(Object.assign({original:h.alias["@"],override:i&&u(i)},h.overrideResolve)));
@@ -53,12 +53,10 @@ export type YApiOption = {
53
53
  * @returns {Promise} data
54
54
  */
55
55
  export declare const yApiMock: (req: RequestFormData, yapi: YApiOption) => Promise<Any>;
56
- export declare const updateMocks: () => {} | undefined;
57
- export declare let mocks: MockConfiguration;
58
56
  export declare function containMockUrl(url: string): string | undefined;
59
- declare const setupMock: () => ((req: RequestFormData, res: ServerResponse<IncomingMessage> & {
57
+ declare const setupMock: () => (req: RequestFormData, res: ServerResponse<IncomingMessage> & {
60
58
  req: IncomingMessage;
61
59
  }) => boolean | (http.ServerResponse<http.IncomingMessage> & {
62
60
  req: IncomingMessage;
63
- })) | undefined;
61
+ });
64
62
  export default setupMock;
package/lib/dev/mock.mjs CHANGED
@@ -1 +1 @@
1
- import e from"node:http";import{StringDecoder as t}from"node:string_decoder";import{URL as r}from"node:url";import{directoryExists as o,ink as n,print as a,scanFolderSync as c}from"@moneko/utils";import{merge as i}from"webpack-merge";import s from"../commom/log.mjs";import m from"../commom/match-path.mjs";import d from"../commom/paths.mjs";import l,{METHOD_COLOR as p}from"../commom/print-log.mjs";import u from"../commom/require.mjs";import{jsonSchema as f}from"./json-schema.mjs";function h(e){return!["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||"")}export function cacheBody(e){if(!e._bodyCached&&h(e)&&!e.readableEnded){e._bodyCached=!0;try{let t=[],r=e.on.bind(e),o=e.emit.bind(e),n=!1;e.on=function(e,o){return"data"!==e||n||(n=!0,r("data",e=>{t.push(e)})),r(e,o)};let a=!1;e.emit=function(r,...n){return"end"===r&&!a&&(a=!0,t.length>0&&(e._dataChunks=t)),o.call(this,r,...n)}}catch(e){s(e)}}}function g(e,r){try{let o=Buffer.concat(e);if(r.includes("application/json")){let e=new t("utf-8").write(o);return JSON.parse(e)}if(r.includes("application/octet-stream")||r.startsWith("image/"));else if(r.includes("text/"))return o.toString("utf-8");else if(r.includes("application/x-www-form-urlencoded"))return Object.fromEntries(new URLSearchParams(o.toString("utf8")));return o}catch(e){return s(e),null}}async function y(e){return new Promise(t=>{if(!h(e))return void t(null);let r=e.headers["content-type"]||"",o=e.headers["content-length"],n=e.headers["transfer-encoding"],a=[];return void 0!==e._dataChunks?void t(g(e._dataChunks,r)):o||n?void(e.on("data",e=>{a.push(e)}),e.on("end",()=>{t(g(a,r))}),e.on("error",e=>{t(null),s(e)})):void t(null)})}export const yApiSchemaMock=(t,r)=>new Promise(o=>{e.get(`${t.host}/api/interface/get?id=${t.id}&token=${t.token}`,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{let e=JSON.parse(t);if(e?.data?.res_body_is_json_schema){let t=JSON.parse(e.data.res_body),n=f(t);void 0!==r?o(i(n,r)):o(n)}}catch(e){s(e)}})})});export const yApiMock=(t,o)=>new Promise((n,a)=>{let c=new r(o.host),i={hostname:c.hostname,port:c.port,path:t.url?.replace(new RegExp(o.pathRewrite),`/mock/${o.projectId}/`),method:t.method,headers:t.headers,query:Object.fromEntries(c.searchParams)},m=e.request(i,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{n(JSON.parse(t))}catch(e){s(e)}})});m.on("error",e=>{a(e.message)}),m.write(JSON.stringify(t.body)),m.end()});export const updateMocks=()=>{if(!o(d.mockPath))return{};let e={},t=c(d.mockPath,["\\.(t|j)s$"]);a(n("Updating mock...","245"),!0),t.forEach(t=>{try{delete u.cache[t],e[t]=u(t).default}catch(e){s(e)}}),a(n("Mock update successful","245"),!0),mocks=e};export let mocks={};export function containMockUrl(e){return Object.keys(mocks).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}export default(()=>{if(o(d.mockPath))return updateMocks(),(e,t)=>{if(t.writableEnded)return t;let o=new r(`http://localhost:3000${e.url}`),n=e.method||"GET",a=`${n} ${o.pathname}`,c=containMockUrl(a)||a,i=mocks[c];if(i){if(l(n,o.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:p[n].fg,labelBackgroundColor:p[n].bg}),t.send=e=>t.end("string"==typeof e?e:JSON.stringify(e)),t.writeHead(200,{"Content-Type":e.headers["content-type"]}),"function"==typeof i){let r=m(c.split(" ")[1],o.pathname);o.searchParams&&Object.assign(e,{query:Object.fromEntries(o.searchParams)}),r&&Object.assign(e,{params:r.params}),e.body=y(e);try{i(e,t)}catch(e){s(e)}return!0}return t.end("string"==typeof i?i:JSON.stringify(i)),!0}return!1}});
1
+ 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 s,scanFolderSync as c}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 f,{METHOD_COLOR as u}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),s={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)},c=t.request(s,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{o(JSON.parse(t))}catch(e){d(e)}})});c.on("error",e=>{a(e.message)}),c.write(JSON.stringify(e.body)),c.end()});let w=()=>{if(!a(p.mockPath)){O={};return}let e={},t=c(p.mockPath,["\\.(t|j)s$"]);s(i("Updating mock...","245"),!0),t.forEach(t=>{try{Object.assign(e,h(t).default)}catch(e){d(e)}}),s(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))}export default(()=>(g(e(p.mockPath,(e,t)=>{if(t){let e=r(p.mockPath,t);delete h.cache[e]}w()}).close),(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,s=O[i];if(s){if(f(o,r.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:u[o].fg,labelBackgroundColor:u[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 s){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{s(e,t)}catch(e){d(e)}return!0}return t.end("string"==typeof s?s:JSON.stringify(s)),!0}return!1}));
package/lib/dev.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{exec as e,spawn as t}from"node:child_process";import{watchFile as o}from"node:fs";import{relative as r}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as n,print as a,println as m,progressBar as l}from"@moneko/utils";import p from"webpack";import c from"webpack-hot-middleware";import{merge as f}from"webpack-merge";import{diffObject as h}from"./commom/diff-object.mjs";import d,{config_files as u}from"./commom/paths.mjs";import g from"./commom/rule.mjs";import w from"./commom/sigint-exit.mjs";import{devLog as y,PORT as $}from"./dev/config.mjs";import j from"./dev/generate-progress-html.mjs";import v from"./dev/server.mjs";import b from"./options/reslove.mjs";import{ESLintPlugin as x}from"./plugin/eslint.mjs";import{StylelintPlugin as C}from"./plugin/stylelint.mjs";import{empty as _}from"./utils/index.mjs";import{CONFIG as P,getConfig as S}from"./config.mjs";import{createDevelopmentConfiguration as k}from"./create-development-configuration.mjs";import{outputFileSystem as E}from"./file-system.mjs";import{isLibrary as B,refresh as H}from"./process-env.mjs";let I=!1,O="/____progress____",T={percentage:0,info:""},q="/__hmr__",G=new URLSearchParams({name:"client",path:q.substring(1),dynamicPublicPath:!0,timeout:2e3,reload:!H,quiet:!0,noInfo:!0,overlay:!1,autoConnect:!0}).toString(),L=await k({watchOptions:{stdin:!0,aggregateTimeout:300,ignored:g.node_modules},entry:{main:[`${b.hotMiddlewareClient}?${G}`]},plugins:[new p.WatchIgnorePlugin({paths:[g.node_modules,/\.d\.ts$/]}),new p.ProgressPlugin({handler(e,t,...o){let r=o.length?`[${t}] ${o.join(" ")}`:" ";I||(T.info=r,T.percentage=e,I=1===e);let s=P.bar;if(s){let t=s.name||"Build";s.quiet?i.stdout.write(`${r}
2
- `):(l(e||0,1,{msg:r,name:t,barColor:s.barColor,nameColor:s.nameColor,barBgColor:s.barBgColor,msgColor:s.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});function U(e){let t=e.join(","),o=[r(d.programPath,`${P.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return B&&o.push(r(d.programPath,`${P.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}P.eslint&&L.plugins.push(new x({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:U(["js","jsx","ts","tsx","json","html","vue"]),...P.eslint})),P.stylelint&&L.plugins.push(new C({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:U(["css","scss","sass","less","ts","tsx","js","jsx"]),...P.stylelint}));let F=p(L);if(!F)throw Error("无法创建编译器");F.outputFileSystem=E;let N=F.watch(F.options.watchOptions,y);if(!N)throw Error("无法创建监视器");F.hooks.done.tap("client-log",e=>{y(null,e)});let R=`${P.basename}/${q}`.replace(/\/+/g,"/"),J=c(F,{log:!1,path:R,heartbeat:2e3}),K=await v({port:$,root_dir:F.options.output.path,fileSystem:F.outputFileSystem,headers:P.devServer.headers,https:P.devServer.https,host:P.devServer.host,open:P.devServer.open,basename:P.basename,onRequest(e,t){if(!t.writableEnded){if("GET"===e.method){let o=new s(`${P.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if(o.pathname===O)return t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(T)),!0;if(!I)return t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end(j(O,T)),!0;if(o.pathname===R&&"text/event-stream"===e.headers.accept)return J(e,t,_),!0}return!1}}});function M(){i.exit(0)}K.on("close",()=>{N.close(_),J.close()});let W=await Promise.all(u.map(S)),z=f(W[0]||{},W[1]||{});u.forEach(function(t){o(t,async function(){var o;let[r,s]=await Promise.all(u.map(S)),l=f(r||{},s||{}),p=h(z,l);1===Object.keys(p).length&&"proxy"in p?(a(n(`代理更新中...`,"yellow"),!0),a(n(`代理更新完成...`,"green"),!0),P.proxy=l.proxy,z.proxy=l.proxy,z=l):(z=l,m(n(`检测到工程配置${n(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),o=$,e(A?`netstat -ano | findstr :${o}`:`lsof -i :${o} -t`,(e,t)=>{if(e){m(n(`查找端口 ${o} 时发生错误: ${e.message}`,"red")),m(n("请尝试手动重启程序","yellow"));return}let r=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),s=A?r[0]?.split(/\s+/).pop()?.trim():r[0]?.trim();if(!s)return void m(n(`未找到占用端口 ${o} 的进程, 请尝试手动重启程序`,"yellow"));try{i.kill(Number(s),"SIGHUP")}catch(e){m(n(`终止进程 ${s} 时发生错误: ${e.message}`,"red"))}}))})});let A="win32"===i.platform;i.on("SIGHUP",function(){K.close(_);let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",M)}),i.on("exit",function(){K.close(_)}),w(M);
1
+ import{exec as e,spawn as t}from"node:child_process";import{watchFile as o}from"node:fs";import{relative as r}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as n,print as a,println as m,progressBar as l}from"@moneko/utils";import p from"webpack";import c from"webpack-hot-middleware";import{merge as h}from"webpack-merge";import{diffObject as f}from"./commom/diff-object.mjs";import d,{config_files as u}from"./commom/paths.mjs";import g from"./commom/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:{hmr:`${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=h(W[0]||{},W[1]||{});u.forEach(function(t){o(t,async function(){var o;let[r,s]=await Promise.all(u.map(S)),l=h(r||{},s||{}),p=f(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
@@ -19,6 +19,7 @@ export type { CompressionPluginOptions } from './plugin/compression.mjs';
19
19
  export type { HtmlMeta, HtmlPluginOption } from './plugin/html-plugin.mjs';
20
20
  export * from './plugin/manifest/index.mjs';
21
21
  export type { OverrideResolverOption } from './plugin/override-resolve.mjs';
22
+ export type { VirtualModules } from './plugin/virtual-module.mjs';
22
23
  export { APPTYPE, coreName, FRAMEWORK, isCI, isDev, isLibrary, isMicro, mainDirectory, packageJson, PACKAGENAME, } from './process-env.mjs';
23
24
  export { type AlgorithmIdentifier, digest, md5, node_modules, resolveProgram, toCamelCase, } from './utils/index.mjs';
24
25
  export * from '@moneko/mdx';
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return t}});const e=require("node:path"),s=new(require("node:worker_threads")).Worker((0,e.join)(__dirname,"../worker/css-in-js-minify.mjs"));async function t(e){this.cacheable&&this.cacheable(),(this._compiler?.options.mode!=="development"||"true"===process.env.IS_BUILD)&&this._compiler?.hooks.done.tap("css-in-js-minify-loader",()=>{s.terminate()});let t=this.async(),r=this.getOptions(),o=this.resourcePath;s.postMessage({options:r,code:e,filename:o}),s.addListener("message",function e(r){o===r[0]&&(t(r[1],r[2]),s.removeListener("message",e))})}s.setMaxListeners(0);
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return t}});let e=require("node:path"),s=new(require("node:worker_threads")).Worker((0,e.join)(__dirname,"../worker/css-in-js-minify.mjs"));async function t(e){this.cacheable&&this.cacheable(),(this._compiler?.options.mode!=="development"||"true"===process.env.IS_BUILD)&&this._compiler?.hooks.done.tap("css-in-js-minify-loader",()=>{s.terminate()});let t=this.async(),r=this.getOptions(),i=this.resourcePath;s.postMessage({options:r,code:e,filename:i}),s.addListener("message",function e(r){i===r[0]&&(t(r[1],r[2]),s.removeListener("message",e))})}s.setMaxListeners(0);
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return r}});const e=require("lightningcss"),t=new TextEncoder,n={Declaration:{custom(e){if("content"===e.name&&1===e.value.length){let t=e.value[0];if("token"===t.type&&"string"===t.value.type)return[{property:e.name,raw:JSON.stringify(t.value.value.replace(/[\u4e00-\u9faF]/g,function(e){return`\\${e.charCodeAt(0).toString(16)}`}))}]}}}};async function r(r,i){let a=this.async();this.cacheable&&this.cacheable();let{visitor:o,rem:u,...s}=this.getOptions();try{u&&!n.Length&&(n.Length=function(e){if("px"===e.unit)return{unit:"rem",value:e.value/16}});let c=(0,e.transform)({filename:this.resourcePath,code:t.encode(r),minify:!0,visitor:{...n,...o},cssModules:!1,sourceMap:this.sourceMap,inputSourceMap:this.sourceMap&&i?JSON.stringify(i):void 0,analyzeDependencies:!1,drafts:{customMedia:!0},include:1,errorRecovery:!1,unusedSymbols:[],...s});a(null,c.code,c.map&&JSON.parse(c.map.toString()))}catch(e){a(e),log(e)}}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return n}});let e=require("lightningcss"),t=new TextEncoder,r={Declaration:{custom(e){if("content"===e.name&&1===e.value.length){let t=e.value[0];if("token"===t.type&&"string"===t.value.type)return[{property:e.name,raw:JSON.stringify(t.value.value.replace(/[\u4e00-\u9faF]/g,function(e){return`\\${e.charCodeAt(0).toString(16)}`}))}]}}}};async function n(n,i){let a=this.async();this.cacheable&&this.cacheable();let{visitor:u,rem:o,...s}=this.getOptions();try{o&&!r.Length&&(r.Length=function(e){if("px"===e.unit)return{unit:"rem",value:e.value/16}});let c=(0,e.transform)({filename:this.resourcePath,code:t.encode(n),minify:!0,visitor:{...r,...u},cssModules:!1,sourceMap:this.sourceMap,inputSourceMap:this.sourceMap&&i?JSON.stringify(i):void 0,analyzeDependencies:!1,drafts:{customMedia:!0},include:1,errorRecovery:!1,unusedSymbols:[],...s});a(null,c.code,c.map&&JSON.parse(c.map.toString()))}catch(e){a(e),log(e)}}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return t}});const e=require("@moneko/mdx");async function t(t){let c=this.async();this.cacheable&&this.cacheable(),(0,e.mdx)({value:t,filepath:this.resourcePath,...this.getOptions()}).then(e=>{c(null,e.code)}).catch(e=>{c(e,t)})}
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return t}});let e=require("@moneko/mdx");async function t(t){let c=this.async();this.cacheable&&this.cacheable(),(0,e.mdx)({value:t,filepath:this.resourcePath,...this.getOptions()}).then(e=>{c(null,e.code)}).catch(e=>{c(e,t)})}
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=exports,t={get custom(){return i},get default(){return c}};for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:Object.getOwnPropertyDescriptor(t,r).get});const s=require("node:path"),o=new(require("node:worker_threads")).Worker((0,s.join)(__dirname,"../worker/react-compiler.mjs"));function n(e,t){let r=this.resourcePath,s=this.getOptions();if(r.endsWith(".d.ts")||r.endsWith(".json")||!("annotation"===s.compilationMode?e.includes("use memo")||e.includes("use forget"):e.includes("react")||r.endsWith(".tsx")||r.endsWith(".jsx")))return e;let n=this.async();(this._compiler?.options.mode!=="development"||"true"===process.env.IS_BUILD)&&this._compiler?.hooks.done.tap("react-compiler-loader",()=>{o.terminate()}),this.cacheable&&this.cacheable(),o.postMessage({sourceCode:e,filename:r,inputSourceMap:t,options:s}),o.addListener("message",function e(t){r===t[0]&&(n(t[1],t[2],t[3]),o.removeListener("message",e))})}function i(e,t){return n.bind(this,e,t)}o.setMaxListeners(0);const c=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=exports,t={get custom(){return i},get default(){return a}};for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:Object.getOwnPropertyDescriptor(t,r).get});let s=require("node:path"),o=new(require("node:worker_threads")).Worker((0,s.join)(__dirname,"../worker/react-compiler.mjs"));function n(e,t){let r=this.resourcePath,s=this.getOptions();if(r.endsWith(".d.ts")||r.endsWith(".json")||!("annotation"===s.compilationMode?e.includes("use memo")||e.includes("use forget"):e.includes("react")||r.endsWith(".tsx")||r.endsWith(".jsx")))return e;let n=this.async();(this._compiler?.options.mode!=="development"||"true"===process.env.IS_BUILD)&&this._compiler?.hooks.done.tap("react-compiler-loader",()=>{o.terminate()}),this.cacheable&&this.cacheable(),o.postMessage({sourceCode:e,filename:r,inputSourceMap:t,options:s}),o.addListener("message",function e(t){r===t[0]&&(n(t[1],t[2],t[3]),o.removeListener("message",e))})}function i(e,t){return n.bind(this,e,t)}o.setMaxListeners(0);let a=n;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=exports,t={get custom(){return i},get default(){return a}};for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:Object.getOwnPropertyDescriptor(t,r).get});const s=require("node:path"),o=new(require("node:worker_threads")).Worker((0,s.join)(__dirname,"../worker/solid.mjs"));async function n(e,t){this.cacheable&&this.cacheable(),(this._compiler?.options.mode!=="development"||"true"===process.env.IS_BUILD)&&this._compiler?.hooks.done.tap("solid-loader",()=>{o.terminate()});let r=this.async(),s=this.getOptions(),n=this.resourcePath;o.postMessage({...s,sourceCode:e,filename:n,inputSourceMap:t}),o.addListener("message",function e(t){n===t[0]&&(r(t[1],t[2],t[3]),o.removeListener("message",e))})}function i(e,t){return n.bind(this,e,t)}o.setMaxListeners(0);const a=n;
1
+ "use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=exports,t={get custom(){return n},get default(){return a}};for(var r in t)Object.defineProperty(e,r,{enumerable:!0,get:Object.getOwnPropertyDescriptor(t,r).get});let s=require("node:path"),o=new(require("node:worker_threads")).Worker((0,s.join)(__dirname,"../worker/solid.mjs"));async function i(e,t){this.cacheable&&this.cacheable(),(this._compiler?.options.mode!=="development"||"true"===process.env.IS_BUILD)&&this._compiler?.hooks.done.tap("solid-loader",()=>{o.terminate()});let r=this.async(),s=this.getOptions(),i=this.resourcePath;o.postMessage({...s,sourceCode:e,filename:i,inputSourceMap:t}),o.addListener("message",function e(t){i===t[0]&&(r(t[1],t[2],t[3]),o.removeListener("message",e))})}function n(e,t){return i.bind(this,e,t)}o.setMaxListeners(0);let a=i;
@@ -1 +1 @@
1
- let e;import{join as s,sep as o}from"node:path";import t,{CUSTOMCONFIG as r}from"./commom/paths.mjs";import a from"./commom/require.mjs";import n from"./commom/rule.mjs";import i from"./options/modify-vars.mjs";import l from"./options/reslove.mjs";import m from"./options/swcrc.mjs";import{getLightningCssTargets as c}from"./polyfills/targets.mjs";import{node_modules as p,resolveProgram as d}from"./utils/index.mjs";import u from"./utils/svg-to-data-uri.mjs";import{comment as f,getCommentPath as h}from"./vm/docs.mjs";import y from"./vm/generate-doc.mjs";import{outputConfig as j}from"./common.mjs";import{CONFIG as g}from"./config.mjs";import{app_schema as v,FRAMEWORK as x,isDev as w,isLibrary as P,virtual_schema as _}from"./process-env.mjs";let L={loader:s(t.corePath,"/loader/lightning-css.cjs"),options:{sourceMap:!!g.sourceMap,targets:c(),rem:!!g.rem,importLoaders:2}},M={loader:l.lessLoader,options:{sourceMap:!!g.sourceMap,lessOptions:{modifyVars:i,javascriptEnabled:!0}}},I=new Map,O=["components","example","mock","site","src","server"].map(d);function C(e){return new Promise(s=>{s([...O,t.corePath,...g.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(I.has(e))return I.get(e);try{let s,t=a.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),I.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");I.set(e,[s])}catch{I.set(e,[p(e),p(`.pnpm/${e}`)])}return I.get(e)}}(e):e).flat()||[]])})}r&&O.push(d(r)),g.overrideResolve&&g.overrideResolve.override&&O.push(g.overrideResolve.override);let $=await Promise.all([C("css"),C("js"),C("media"),C("wasm"),C("font")]),b=$[0],N=$[1],W=$[2],k=$[3],B=$[4];l.sassLoader&&(e={loader:l.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let E=P&&w&&"true"!==process.env.IS_BUILD&&{test:n.tsdoc,include:g.alias["@pkg"],exclude:[n.node_modules,n.__tests__,e=>e.startsWith(`${v}:`)||e.startsWith(`${_}:`)],enforce:"pre",loader:s(t.corePath,"/loader/ts-doc.cjs"),options:{comment:f,generateDoc:y,getCommentPath:h}},J=j.library?.type==="umd"&&!1===g.htmlPluginOption,R=[{resourceQuery:/raw/i,type:"asset/source"},{resourceQuery:/url/i,type:"asset/resource",generator:{filename(e){let s=e.filename;return s&&s.toLocaleLowerCase().endsWith("wasm?url")?"wasm/[hash][ext]":"assets/[hash][ext]"}}},{test:n.wasm,type:"webassembly/async",include:k},{test:n.txt,type:"asset/source"},{test:n.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:J?()=>!0:{maxSize:4096}},generator:{filename:e=>e.filename?.toLocaleLowerCase().endsWith(".svg")?"assets/svg/[hash][ext]":"assets/images/[hash][ext]",dataUrl:(e,s)=>s.filename.toLocaleLowerCase().endsWith(".svg")?u(e.toString()):e},include:W},{test:n.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:W},{test:n.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:B}],S=g.prefixJsLoader.filter(Boolean)||[];"react"===x&&g.reactCompiler&&S.unshift({loader:s(t.corePath,"/loader/react-compiler.cjs"),options:{...g.reactCompiler,panicThreshold:w?void 0:"NONE"}}),g.cssInJs&&"object"==typeof g.cssInJs.minify&&S.unshift({loader:s(t.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},g.cssInJs.minify)});export default(o=>{let r={react:{loader:l.swcLoader,options:m(o)},solid:{loader:s(t.corePath,"/loader/solid.cjs"),options:{jsxOptions:g.jsxDomExpressions,refresh:g.refresh}}}[x];return{generator:{"css/auto":{exportsOnly:!1,exportsConvention:"camel-case-only",localIdentName:"[uniqueName]_[id]_[local]",esModule:!0},"css/module":{exportsOnly:!1,exportsConvention:"camel-case-only",localIdentName:"[uniqueName]_[id]_[local]",esModule:!0}},parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0},css:{import:!0,namedExports:!0,url:!0},json:{exportsDepth:1}},noParse:g.noParse,rules:[!1!==g.htmlPluginOption&&E,{oneOf:[...R,{test:n.js,use:[...S,r].filter(Boolean),include:N,extractSourceMap:!0},...g.cssModules.map(e=>({test:s=>n.node_modules_css_module.test(s)&&s.includes(e),use:[L],type:"css/module"})),{test:n.css,use:[L],type:"css/auto",include:b},e&&{test:n.scss,use:[L,e],type:"css/auto",include:b},{test:n.less,use:[L,M],type:"css/auto",include:b},{test:n.markdown,use:[...S,{loader:s(t.corePath,"/loader/mdx.cjs"),options:g.mdx}].filter(Boolean),exclude:[n.node_modules,e=>e.startsWith(`${v}:`)||e.startsWith(`${_}:`)]}].filter(Boolean)},...g.moduleRules].filter(Boolean)}});
1
+ let e;import{join as s,sep as o}from"node:path";import t,{CUSTOMCONFIG as r}from"./commom/paths.mjs";import a from"./commom/require.mjs";import 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}}},M=new Map,P=["components","example","mock","site","src","server"].map(d);function L(e){return new Promise(s=>{s([...P,t.corePath,...h.rulesInclude?.[e]?.map(e=>"string"==typeof e?function(e){if(M.has(e))return M.get(e);try{let s,t=a.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),M.set(e,[s]),[s]}catch{try{let s=a.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");M.set(e,[s])}catch{M.set(e,[p(e),p(`.pnpm/${e}`)])}return M.get(e)}}(e):e).flat()||[]])})}r&&P.push(d(r)),h.overrideResolve&&h.overrideResolve.override&&P.push(h.overrideResolve.override);let _=await Promise.all([L("css"),L("js"),L("media"),L("wasm"),L("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:{...h.reactCompiler,panicThreshold:g?void 0:"NONE"}}),h.cssInJs&&"object"==typeof h.cssInJs.minify&&B.unshift({loader:s(t.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},h.cssInJs.minify)});export default(o=>{let r={react:{loader: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,extractSourceMap:!0},...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 e from"marked-completed";let r=!0;export default function(t){if(r){r=!1;let t=new e.Renderer;t.code=(e,r)=>"treeview"===r?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${JSON.stringify(["copy"])}" language="${r}" line-number="true">${encodeURIComponent(e)}</n-code>`,t.image=(e,r,t)=>`<n-img lazy="true" role="img" src="${e}" alt="${t}" ${r?`title="${r}"`:""}></n-img>`,e.use({langToolbar:["copy"],headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0,renderer:t})}return e.parse(t)}
1
+ import e from"marked-completed";let r=!0;export default function(t){if(r){let t;r=!1,(t=new e.Renderer).code=(e,r)=>"treeview"===r?`<n-tree data="${e}" />`:`<n-code class="n-code" toolbar="${JSON.stringify(["copy"])}" language="${r}" line-number="true">${encodeURIComponent(e)}</n-code>`,t.image=(e,r,t)=>`<n-img lazy="true" role="img" src="${e}" alt="${t}" ${r?`title="${r}"`:""}></n-img>`,e.use({langToolbar:["copy"],headerPrefix:"# ",breaks:!0,pedantic:!1,smartLists:!0,smartypants:!0,xhtml:!0,renderer:t})}return e.parse(t)}
@@ -1 +1 @@
1
- import e from"../commom/rule.mjs";let n=function(){let e={priority:-10,reuseExistingChunk:!0};return function(n){return{...e,test:n}}}(),i={chunks:"all",minChunks:1,minSize:2e4,maxSize:25e4,enforceSizeThreshold:5e4,maxAsyncRequests:30,maxInitialRequests:30,minRemainingSize:0,hidePathInfo:!0,cacheGroups:{json:{type:"json"},CHANGELOG:n(/CHANGELOG\.md/),site:n(/site/),vendors:{test:e.node_modules,priority:-10,reuseExistingChunk:!0},"monaco-editor":{test:/[\\/]node_modules[\\/]monaco-editor/,name:"monaco-editor",chunks:"all"},common:{minChunks:2,priority:-20,reuseExistingChunk:!0}}};export default i;
1
+ 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{saveFileSync as s}from"@moneko/utils";import{toCamelCase as e}from"../utils/index.mjs";export class CssModuleDtsPlugin{apply(o){o.hooks.compilation.tap(this.name,o=>{o.hooks.succeedModule.tap(this.name,o=>{if(o.buildMeta?.isCSSModule){let t=o.dependencies.map(s=>"name"in s?`export const ${e(s.name)}: string;`:"").join("\n");s(`${o.resource}.d.ts`,t)}})})}constructor(){this.name="CssModuleDtsPlugin"}}
1
+ import{updateFile as e}from"@moneko/utils";import{toCamelCase as o}from"../utils/index.mjs";export class CssModuleDtsPlugin{apply(s){s.hooks.compilation.tap(this.name,s=>{s.hooks.succeedModule.tap(this.name,s=>{if(s.buildMeta?.isCSSModule){let t=[...new Set(s.dependencies.map(e=>"name"in e?`${e.name}`:""))].filter(Boolean).map(e=>`export const ${o(e)}: string;`).join("\n");e(`${s.resource}.d.ts`,t)}})})}constructor(){this.name="CssModuleDtsPlugin"}}
@@ -0,0 +1,14 @@
1
+ import { type Compiler, type experiments } from 'webpack';
2
+ import type ReactiveObject from '../commom/reactive-object.mjs';
3
+ type VirtualModule = ConstructorParameters<typeof experiments.schemes.VirtualUrlPlugin>[0];
4
+ export interface VirtualModules extends VirtualModule {
5
+ [key: string]: VirtualModules[keyof VirtualModules];
6
+ }
7
+ export declare class VirtualModulePlugin {
8
+ private vm;
9
+ private modules;
10
+ private schema;
11
+ constructor(modules: ReactiveObject<VirtualModules>, schema: string);
12
+ apply(compiler: Compiler): void;
13
+ }
14
+ export {};
@@ -0,0 +1 @@
1
+ import e from"webpack";let s=e.experiments.schemes.VirtualUrlPlugin;export class VirtualModulePlugin{constructor(e,t){this.modules=e,this.schema=t,this.vm=new s(this.modules.data,this.schema)}apply(e){this.vm.apply(e),this.modules.on("change",(e,s)=>{var t,i;this.vm.modules=Object.assign(this.vm.modules,(t={[e]:s},i=this.schema,Object.keys(t).reduce((e,s)=>{var o,r,m;return e[r=s,m=i,`${m}:${r}`]="string"==typeof(o=t[s])?{type:"",source:()=>o}:"function"==typeof o?{type:"",source:o}:o,e},{})))})}}
@@ -1 +1 @@
1
- import e from"webpack";import{CompressionPlugin as t}from"./plugin/compression.mjs";import{CopyPlugin as i}from"./plugin/copy.mjs";import{CssModuleDtsPlugin as o}from"./plugin/css-module-dts.mjs";import{HtmlPlugin as n}from"./plugin/html-plugin.mjs";import{ManifestPlugin as r}from"./plugin/manifest/index.mjs";import p from"./plugin/module-federation.mjs";import{app_vm as s,docs_vm as l,example_vm as a,scope_vm as m,virtual_vm as c}from"./vm/modules.mjs";import{CONFIG as h}from"./config.mjs";import{app_schema as u,docs_schema as g,example_schema as f,isLibrary as d,packageJson as w,scope_schema as j,virtual_schema as b}from"./process-env.mjs";let y="object"==typeof h.compression?h.compression:{},v=e.experiments.schemes.VirtualUrlPlugin,x=[...p,new v(s,u),d&&new v(l,g),d&&new v(a,f),d&&new v(m,j),h.virtualModule&&new v(c,b),new i(h.copy),new e.DefinePlugin({"process.env":JSON.stringify(h.env)}),new e.IgnorePlugin({resourceRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),new o,...h.plugins].filter(Boolean);if(h.compression&&x.push(new t({algorithm:h.devServer.https?"brotli":"gzip",test:/\.(js|css|html|svg|ttf|woff|woff2|png|jpg|jpeg)$/,...y})),h.manifest&&x.push(new r(h.manifest)),h.htmlPluginOption){let e={charset:"UTF-8","X-UA-Compatible":{"http-equiv":"X-UA-Compatible",content:"IE=edge,Chrome=1"},HandheldFriendly:"true",MobileOptimized:"320","screen-orientation":"portrait","x5-orientation":"portrait",browsermode:"application","x5-page-mode":"app","msapplication-tap-highlight":"no","mobile-web-app-capable":"yes",renderer:"webkit",description:w.description,keywords:Array.isArray(w.keywords)?w.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};h.seo&&(e.relCanonical={rel:"canonical",href:`https://${h.seo.domain}${h.basename}`}),h.htmlPluginOption.meta&&Object.assign(e,h.htmlPluginOption.meta),x.push(new n({...h.htmlPluginOption,meta:e}))}if(h.fixBrowserRouter){let e=h.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,i=h.fixBrowserRouter.pathSegmentsToKeep??e;x.push(new n({filename:h.fixBrowserRouter.path??t,inject:!1,templateContent:()=>`<html lang="en"><head><title>Redirect</title><script>const pathKeep = ${i};const l = window.location;l.replace(l.protocol + '//' + l.hostname + (l.port ? ':' + l.port : '') + l.pathname.split('/').slice(0, 1 + pathKeep).join('/') + '/?/' + l.pathname.slice(1).split('/').slice(pathKeep).join('/').replace(/&/g, '~and~') + (l.search ? '&' + l.search.slice(1).replace(/&/g, '~and~') : '') + l.hash);</script></head><body></body></html>`}))}h.sourceMap&&x.push(new e.SourceMapDevToolPlugin(h.sourceMap));export default x;
1
+ import e from"webpack";import{CompressionPlugin as t}from"./plugin/compression.mjs";import{CopyPlugin as o}from"./plugin/copy.mjs";import{CssModuleDtsPlugin as i}from"./plugin/css-module-dts.mjs";import{HtmlPlugin as r}from"./plugin/html-plugin.mjs";import{ManifestPlugin as p}from"./plugin/manifest/index.mjs";import n from"./plugin/module-federation.mjs";import{VirtualModulePlugin as s}from"./plugin/virtual-module.mjs";import{app_vm as l}from"./vm/app.mjs";import{docs_vm as m}from"./vm/docs.mjs";import{example_vm as a}from"./vm/example.mjs";import{scope_vm as c}from"./vm/scope.mjs";import{virtual_vm as h}from"./vm/virtual.mjs";import{CONFIG as f}from"./config.mjs";import{app_schema as u,docs_schema as g,example_schema as d,isLibrary as w,packageJson as j,scope_schema as v,virtual_schema as b}from"./process-env.mjs";let y="object"==typeof f.compression?f.compression:{},x=[...n,new s(l,u),w&&new s(m,g),w&&new s(a,d),w&&new s(c,v),f.virtualModule&&new s(h,b),new o(f.copy),new e.DefinePlugin({"process.env":JSON.stringify(f.env)}),new e.IgnorePlugin({resourceRegExp:/\.d\.tsx?$/,contextRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),new i,...f.plugins].filter(Boolean);if(f.compression&&x.push(new t({algorithm:f.devServer.https?"brotli":"gzip",test:/\.(js|css|html|svg|ttf|woff|woff2|png|jpg|jpeg)$/,...y})),f.manifest&&x.push(new p(f.manifest)),f.htmlPluginOption){let e={charset:"UTF-8","X-UA-Compatible":{"http-equiv":"X-UA-Compatible",content:"IE=edge,Chrome=1"},HandheldFriendly:"true",MobileOptimized:"320","screen-orientation":"portrait","x5-orientation":"portrait",browsermode:"application","x5-page-mode":"app","msapplication-tap-highlight":"no","mobile-web-app-capable":"yes",renderer:"webkit",description:j.description,keywords:Array.isArray(j.keywords)?j.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};f.seo&&(e.relCanonical={rel:"canonical",href:`https://${f.seo.domain}${f.basename}`}),f.htmlPluginOption.meta&&Object.assign(e,f.htmlPluginOption.meta),x.push(new r({...f.htmlPluginOption,meta:e}))}if(f.fixBrowserRouter){let e=f.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,o=f.fixBrowserRouter.pathSegmentsToKeep??e;x.push(new r({filename:f.fixBrowserRouter.path??t,inject:!1,templateContent:()=>`<html lang="en"><head><title>Redirect</title><script>const pathKeep = ${o};const l = window.location;l.replace(l.protocol + '//' + l.hostname + (l.port ? ':' + l.port : '') + l.pathname.split('/').slice(0, 1 + pathKeep).join('/') + '/?/' + l.pathname.slice(1).split('/').slice(pathKeep).join('/').replace(/&/g, '~and~') + (l.search ? '&' + l.search.slice(1).replace(/&/g, '~and~') : '') + l.hash);</script></head><body></body></html>`}))}f.sourceMap&&x.push(new e.SourceMapDevToolPlugin(f.sourceMap));export default x;
@@ -20,7 +20,7 @@ export declare const jsxImportSource: string;
20
20
  export declare const framework: 'react' | 'solid-js';
21
21
  export declare const frameworkVersionStr: string;
22
22
  export declare const frameworkVersion: number;
23
- export declare const packageJson: typeof import('package.json');
23
+ export declare const packageJson: any;
24
24
  /** 应用名称 */
25
25
  export declare const PACKAGENAME: string;
26
26
  /** core 包名 */
@@ -1 +1 @@
1
- import o from"node:process";import e from"./commom/has-pkg.mjs";import r from"./commom/is-ci-environment.mjs";import s from"./commom/require.mjs";export const IS_WINDOW="win32"===o.platform;export const APPTYPE=o.env.APPTYPE;export const FRAMEWORK=o.env.FRAMEWORK;export const NODE_ENV=o.env.NODE_ENV;export const isLibrary="library"===APPTYPE;export const isMicro="micro"===APPTYPE;export const isMobile="mobile"===APPTYPE;export const isReact="react"===FRAMEWORK;export const isSolid="solid"===FRAMEWORK;export const SSR="true"===o.env.SSR;export const app_schema="app";export const virtual_schema="vm";export const docs_schema="docs";export const example_schema="example";export const scope_schema="scope";export const mainDirectory=isLibrary?"site":"src";export const jsxImportSource={react:"react",solid:"solid-js/h"}[FRAMEWORK];export const framework={react:"react",solid:"solid-js"}[FRAMEWORK];export const frameworkVersionStr=framework?s(`${framework}/package.json`).version:19;export const frameworkVersion=parseFloat(frameworkVersionStr);export const packageJson=s(`${o.cwd()}/package.json`);delete packageJson.scripts;export const PACKAGENAME=packageJson.name;export const coreName="@moneko/core";export const isDev="development"===NODE_ENV;export const refresh=!!(isDev&&(e("solid-refresh")||e("react-refresh")));export const isCI=r();
1
+ import o from"node:process";import e from"./commom/has-pkg.mjs";import r from"./commom/is-ci-environment.mjs";import{readJson as s}from"./commom/read-json.mjs";export const IS_WINDOW="win32"===o.platform;export const APPTYPE=o.env.APPTYPE;export const FRAMEWORK=o.env.FRAMEWORK;export const NODE_ENV=o.env.NODE_ENV;export const isLibrary="library"===APPTYPE;export const isMicro="micro"===APPTYPE;export const isMobile="mobile"===APPTYPE;export const isReact="react"===FRAMEWORK;export const isSolid="solid"===FRAMEWORK;export const SSR="true"===o.env.SSR;export const app_schema="app";export const virtual_schema="vm";export const docs_schema="docs";export const example_schema="example";export const scope_schema="scope";export const mainDirectory=isLibrary?"site":"src";export const jsxImportSource={react:"react",solid:"solid-js/h"}[FRAMEWORK];export const framework={react:"react",solid:"solid-js"}[FRAMEWORK];export const frameworkVersionStr=framework?s(`${framework}/package.json`).version:19;export const frameworkVersion=parseFloat(frameworkVersionStr);export const packageJson=s(`${o.cwd()}/package.json`);delete packageJson.scripts;export const PACKAGENAME=packageJson.name;export const coreName="@moneko/core";export const isDev="development"===NODE_ENV;export const refresh=!!(isDev&&(e("solid-refresh")||e("react-refresh")));export const isCI=r();
@@ -0,0 +1,3 @@
1
+ import ReactiveObject from '../commom/reactive-object.mjs';
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const app_vm: ReactiveObject<VirtualModules>;
package/lib/vm/app.mjs ADDED
@@ -0,0 +1 @@
1
+ import{join as e}from"node:path";import{getAppEntry as t,getAppFallback as o,getAppMergeRouter as r,getAppNormalizeCss as s,getAppPrefixRouter as m,getAppRem as n,getAppSuspense as a}from"@moneko/mdx";import{updateFileSync as p}from"@moneko/utils";import i,{routeDir as c}from"../commom/paths.mjs";import l from"../commom/reactive-object.mjs";import{readJson as u}from"../commom/read-json.mjs";import{CONFIG as f}from"../config.mjs";import d from"../plugin/module-federation.mjs";import{app_schema as j,APPTYPE as x,FRAMEWORK as y}from"../process-env.mjs";import g from"../utils/create-types.mjs";import{generateDeclaration as v}from"../utils/dts.mjs";import{node_modules as D,transformModule as h}from"../utils/index.mjs";import k from"./info.mjs";import{generateLocales as $}from"./locales.mjs";import b from"./render-app.mjs";import{getRouter as C}from"./routes.mjs";let z=new l({});z.on("change",()=>{p(D(`@types/$${j}/index.d.ts`),Object.values(z.data).join("\n"))});export const app_vm=new l({env:{source:()=>{let e=`${j}:env`,t=h(f.env);return z.setData(e,g(e,v(t,e))),t}},info:{source:t=>{let o=e(i.programPath,"package.json"),r=h({...u(o),...k}),s=`${j}:info`;return t.addDependency(o),z.setData(s,g(s,v(r,s))),r}},render:{type:".tsx",source:()=>"react"===y?b:""},entry:{type:".tsx",source:()=>{let o=`${j}:entry`,r=t(e(f.alias["@"],"./index.ts"),!!d.length,!!f.rem,!!f.normalizeCss,x,y);return z.setData(o,g(o,v(r,o))),r}},fallback:{type:".tsx",source:()=>{let e=`${j}:fallback`,t=o(f.fallbackCompPath);return z.setData(e,g(e,v(t,e))),t}},"merge-router":{type:".tsx",source:()=>r()},"prefix-router":{type:".tsx",source:()=>m()},suspense:{type:".tsx",source:()=>a(x,y)},routes:{type:".tsx",source:e=>(e.addContextDependency(c),C())},locals:{type:".tsx",source:t=>{let o=e(f.alias["@"],"./locales");return t.addContextDependency(o),$()}},normalize:{type:".css",source:()=>s()},rem:{source:()=>n(f.rem?.designSize||1680)}});
package/lib/vm/docs.d.mts CHANGED
@@ -1,4 +1,5 @@
1
1
  import ReactiveObject from '../commom/reactive-object.mjs';
2
- export declare const comment: ReactiveObject<Record<string, string>>;
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const docs_vm: ReactiveObject<VirtualModules>;
3
4
  export declare const getCommentPath: (file: string) => string;
4
- export declare const getDocs: () => string;
5
+ export declare const getDocs: (comments: string[]) => string;
package/lib/vm/docs.mjs CHANGED
@@ -1 +1 @@
1
- import{sep as e}from"node:path";import t from"../commom/reactive-object.mjs";import o from"../commom/rule.mjs";import{CONFIG as r}from"../config.mjs";import{app_schema as n,docs_schema as m,FRAMEWORK as c,framework as s,isLibrary as p,isReact as a,isSolid as l}from"../process-env.mjs";let i={react:"createElement",solid:"createComponent"}[c];export const comment=new t({});export const getCommentPath=function(){let e=/\/(.+?)\.tsx?$/,t=`${m}:comment/$1.txt`,o=r.alias["@pkg"]?.length;return r=>r.substring(o).replace(/\\/g,"/").replace(e,t)}();export const getDocs=()=>{let t=`import { ${i}${l?",Dynamic":""} } from "${s}${l?"/web":""}";import SuspenseComp from "${n}:suspense";function call_then(res) {return {default: ${a?"() =>":""}${i}(${l?"Dynamic":"'div'"}, {${l?"innerHTML: res.default, component: 'div', class: 'n-md-box' ":"dangerouslySetInnerHTML: {__html:res.default}, className: 'n-md-box'"} })};}`,r={};Object.keys(comment.data).forEach(t=>{let o=t.replace(/docs:comment[/\\]/,"").split(e),n=o.pop(),m=o.join("/");r[m]||(r[m]={}),r[m][n]=`rr(() => ${i}(SuspenseComp, { comp: () => import(/* webpackChunkName: '${t}' */ '${t}').then(call_then)}))rr`});let m={};for(let e in r)Object.prototype.hasOwnProperty.call(r,e)&&(m[e]=Object.values(r[e]));return`${t}export default ${JSON.stringify(m).replace(o.extract_func,"$1")}`};p&&!1!==r.htmlPluginOption&&comment.on("change",()=>{getDocs()});
1
+ 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();
@@ -1,3 +1,4 @@
1
1
  import ReactiveObject from '../commom/reactive-object.mjs';
2
- export declare const examples: ReactiveObject<Record<string, string>>;
3
- export declare function generatorExample(): void;
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const example_vm: ReactiveObject<VirtualModules>;
4
+ export declare function generatorExample(): string;
@@ -1 +1 @@
1
- import{generateExample as o}from"@moneko/mdx";import m from"../commom/paths.mjs";import t from"../commom/reactive-object.mjs";import{CONFIG as e}from"../config.mjs";import{example_schema as r,isLibrary as n}from"../process-env.mjs";function p(){return n&&!1!==e.htmlPluginOption?JSON.parse(o(m.componentsPath,`${r}:`,"6")):{}}export const examples=new t(p());export function generatorExample(){let o=p();for(let m in o)Object.hasOwn(o,m)&&examples.setData(m,o[m])}
1
+ import{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{dirname as e}from"node:path";import t from"typescript";import{CONFIG as n}from"../config.mjs";import r from"../options/md-to-html.mjs";let l=t.ScriptKind,o=t.ScriptTarget,i=t.SyntaxKind,a=t.createSourceFile,c=t.forEachChild,s=t.getLeadingCommentRanges,u=t.isInterfaceDeclaration,f=t.isQuestionToken,m=t.isPropertySignature,p=t.isFunctionTypeNode,g=t.isUnionTypeNode,$=t.isMethodSignature,d={};function h(e){let t=s(e.getSourceFile().text,e.pos);if(t){let n=e.getSourceFile().text.slice(t[0].pos,t[0].end).match(/\/\*\*([\s\S]*?)\*\//);if(n)return n[1].replaceAll(/^\s*\* ?/gm,"").replace(/\s+$/,"").trim()}}function b(e){if(!e)return;let t=e.match(/@since\s+([^\n]+)/);return t?t[1].trim():void 0}function y(e){if(!e)return;let t=e.match(/@author (\w+)\s*(?:<([^>]+)>)?/);if(t&&t.length>0){let e=t[1].trim(),n=t[2]?.trim(),r=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(n);return n?r&&(n=`mailto:${n}`):n=`https://github.com/${e}`,`[![${e}-alt](https://avatars.githubusercontent.com/${e}?s=64)${e}](${n})`}}function x(e){if(!e)return;let t=e.match(/@ignore\s+([^\n]+)/);return t?t[1].trim():void 0}let A=/(?<!['"])(unknown|any|void|bigint|object|undefined|null|boolean|number|string|symbol)(?!['"])/g;function j(e,t){if(!e)return;let r=e.replaceAll(/\b([A-Z][a-zA-Z0-9]*)\b/g,e=>{if(d[e]){let r=`/${[n.basename,d[e]].join("/").split("/").filter(Boolean).join("/")}`;return t?`[\\color{#009688}{${e}}](${r})`:`[${e}](${r})`}return t?`\\color{#009688}{${e}}`:e});return t&&(r=r.replaceAll(A,e=>`\\color{#009688}{${e}}`)),r}function S(e){if(e)return(function(e){let t;if(!e)return;let n=[];for(;t=/\\color{([^|}]*)\|?([^|}]*)\|?([^|}]*)\|?([^}]*)}{([^}]*)}/g.exec(e);)n.push(t[0]);return e.replaceAll(/[{}[\]()=>]|keyof|typeof|true|false/g,e=>n.some(t=>t.includes(e))?e:`\\color{#569cd6}{${e}}`)})(e)?.replaceAll(/^\s*\|\s*|\s*\|\s*$/gm,"").replaceAll(/\n/g,"<br/>").replaceAll(/\*/g,"\\*").replaceAll(/\|/g,"\\|").replaceAll(/(['"])((?:(?!\1).)*)\1/g,"\\color{#ce9178}{$1$2$1}")}function T(e){if(e)return e.replaceAll(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/g,"").replaceAll(/^@[a-z].+/gm,"").replaceAll(/(\n\s+)+/g,"<br />").replaceAll(/\n/g,"<br />").replaceAll(/(<br \/>)$/g,"")}export default function k(s,A){let k=a(A,s,o.Latest,!0,l.TS),v="";return c(k,r=>{u(r)?v+=function(r){let l=r.name.text;Object.assign(d,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let o=h(r),a=b(o),c=T(o),s=x(o)?.split("|")||[],u=s.includes("comment"),A=s.includes("initial"),k=s.includes("optional"),v=s.includes("version"),w=s.includes("author"),B=c?`\\color{|4||0.45}{${l}}`:l,z=(function(e){let n=[];if(e.heritageClauses){for(let r of e.heritageClauses)if(r.token===t.SyntaxKind.ExtendsKeyword)for(let e of r.types)n.push(e.getText())}return n})(r)?.map(e=>`<n-tag color="#4c81db" css=".tag{gap:0px;}">${j(S(e))}</n-tag>`),F=[c,B,a&&`\\color{#52c11b|1||0.9}{${a}}`,z.length>0&&`<sub>\`extends\`</sub> ${z.join(" ")}`].filter(Boolean).join(" "),N=`## ${F}`,K=r.members.filter(e=>m(e)&&e.type?.kind!==i.NeverKeyword||$(e)),C=[];if(K.length>0){for(let e=0,t=K.length;e<t;e++){let t=K[e],n=j(S($(t)?`(${t.parameters.map(e=>`${e.name.getText()}: ${e.type?.getText()||"any"}`).join(", ")}): ${t.type?.getText()||"any"}`:t.type?.getText()||"any"),!0),r=h(t),l=S(t.name.getText());l&&!l.startsWith("\\color")&&($(t)||function(e){if(e.type){if(!g(e.type))return p(e.type);else for(let t of e.type.types)if(p(t))return!0}return!1}(t)||n?.includes("=>")?l=`\\color{#f9a913}{${l}}`:/^["'](.+)["']$/.test(l)||(l=`\\color{#4c81db}{${l}}`));let i=t.questionToken&&f(t.questionToken);C.push([l,!k&&`\\color{${i?"#f9a913":"#52c11b"}\\|\\|\\|0.9}{${i?"✘":"✔"}}`,!u&&S(T(r)),n,!A&&S(function(e){if(!e)return;let t=e.match(/@default\s+([^\n]+)/);return t?t[1].trim():void 0}(r)),!v&&S(b(r)),!w&&(y(r)||y(o)),function(e){if(!e)return;let t=e.match(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/);return t?t[1].trim():void 0}(r)])}let e=!1,t=!1,n=!1,r=!1;for(let l=0,o=C.length;l<o;l++){let o=C[l];!u&&o[2]&&(r=!0),!A&&o[4]&&(n=!0),!v&&o[5]&&(t=!0),!w&&o[6]&&(e=!0)}N+="\n";let l=["属性",!k&&"必要",r&&"说明","类型",n&&"默认值",t&&"版本",e&&"作者"].filter(Boolean).join("|");N+=`|${l}|`;let i=[":-",!k&&":-",r&&":-",":-",n&&":-",t&&":-",e&&":-"].filter(Boolean);N+="\n";let a=i.join("|");N+=`|${a}|`;for(let l=0,o=C.length;l<o;l++){let o=C[l];N+="\n";let i=[(o[7]?`<n-popover arrow="true" trigger="click" content=${JSON.stringify(`<n-md css=.n-md-body{margin-bottom:0;padding:0.5rem;background-color:transparent;backdrop-filter:none;box-shadow:none;}>${o[7]}</n-md>`)}><n-button size="small" type="primary" circle="true" style="margin-right:8px;">?</n-button></n-popover>`:"")+(o[0]||"-"),!k&&(o[1]||"-"),r&&(o[2]||"-"),o[3]||"-",n&&(o[4]||"-"),t&&(o[5]||"-"),e&&(o[6]||"-")].filter(Boolean).join("|");N+=`|${i}|`}N+="\n"}return N+"\n"}(r):t.isEnumDeclaration(r)&&(v+=function(r){let l=r.name.text,o=h(r),i=T(o),a=b(o);Object.assign(d,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let c=i?`\\color{|4||0.45}{${l}}`:l,s=[i,c,a&&`\\color{#52c11b|1||0.9}{${a}}`].filter(Boolean).join(" "),u=x(o)?.split("|")||[],f=u.includes("comment"),m=u.includes("version"),p=u.includes("author"),g=`## ${s}`;if(r.members.length>0){let e=[];for(let n=0,l=r.members.length;n<l;n++){let l=r.members[n],i=S(l.name.getText()),a=h(l),c=S(function(e){let n=e.initializer;if(n&&t.isStringLiteral(n))return` '${n.text}'`}(l)),s=S(b(a)),u=S(T(a));!i||i.startsWith("\\color")||/^["'](.+)["']$/.test(i)||(i=`\\color{#4c81db}{${i}}`),e.push([i,!f&&u,c,!m&&s,!p&&(y(a)||y(o))])}let n=!1,l=!1,i=!1;for(let t=0,r=e.length;t<r;t++){let r=e[t];!f&&r[1]&&(i=!0),!m&&r[3]&&(l=!0),!p&&r[4]&&(n=!0)}g+="\n";let a=["属性",i&&"说明","值",l&&"版本",n&&"作者"].filter(Boolean).join("|");g+=`|${a}|`;let c=[":-",i&&":-",":-",l&&":-",n&&":-"].filter(Boolean);g+="\n";let s=c.join("|");g+=`|${s}|`;for(let t=0,r=e.length;t<r;t++){let r=e[t];g+="\n";let o=[r[0]||"-",i&&(r[1]||"-"),r[2]||"-",l&&(r[3]||"-"),n&&(r[4]||"-")].filter(Boolean).join("|");g+=`|${o}|`}}return g+"\n\n"}(r))}),r(v)}
1
+ import{dirname as e}from"node:path";import t from"typescript";import{CONFIG as n}from"../config.mjs";import r from"../options/md-to-html.mjs";let l=t.ScriptKind,o=t.ScriptTarget,i=t.SyntaxKind,a=t.createSourceFile,c=t.forEachChild,s=t.getLeadingCommentRanges,u=t.isInterfaceDeclaration,f=t.isQuestionToken,p=t.isPropertySignature,m=t.isFunctionTypeNode,g=t.isUnionTypeNode,$=t.isMethodSignature,d={};function h(e){let t=s(e.getSourceFile().text,e.pos);if(t){let n=e.getSourceFile().text.slice(t[0].pos,t[0].end).match(/\/\*\*([\s\S]*?)\*\//);if(n)return n[1].replaceAll(/^\s*\* ?/gm,"").replace(/\s+$/,"").trim()}}function b(e){if(!e)return;let t=e.match(/@since\s+([^\n]+)/);return t?t[1].trim():void 0}function y(e){if(!e)return;let t=e.match(/@author (\w+)\s*(?:<([^>]+)>)?/);if(t&&t.length>0){let e=t[1].trim(),n=t[2]?.trim(),r=/^[\w-]+(\.[\w-]+)*@[\w-]+(\.[\w-]+)+$/.test(n);return n?r&&(n=`mailto:${n}`):n=`https://github.com/${e}`,`[![${e}-alt](https://avatars.githubusercontent.com/${e}?s=64)${e}](${n})`}}function x(e){if(!e)return;let t=e.match(/@ignore\s+([^\n]+)/);return t?t[1].trim():void 0}let A=/(?<!['"])(unknown|any|void|bigint|object|undefined|null|boolean|number|string|symbol)(?!['"])/g;function j(e,t){if(!e)return;let r=e.replaceAll(/\b([A-Z][a-zA-Z0-9]*)\b/g,e=>{if(d[e]){let r=`/${[n.basename,d[e]].join("/").split("/").filter(Boolean).join("/")}`;return t?`[\\color{#009688}{${e}}](${r})`:`[${e}](${r})`}return t?`\\color{#009688}{${e}}`:e});return t&&(r=r.replaceAll(A,e=>`\\color{#009688}{${e}}`)),r}function S(e){if(e)return(function(e){let t;if(!e)return;let n=[];for(;t=/\\color{([^|}]*)\|?([^|}]*)\|?([^|}]*)\|?([^}]*)}{([^}]*)}/g.exec(e);)n.push(t[0]);return e.replaceAll(/[{}[\]()=>]|keyof|typeof|true|false/g,e=>n.some(t=>t.includes(e))?e:`\\color{#569cd6}{${e}}`)})(e)?.replaceAll(/^\s*\|\s*|\s*\|\s*$/gm,"").replaceAll(/\n/g,"<br/>").replaceAll(/\*/g,"\\*").replaceAll(/\|/g,"\\|").replaceAll(/(['"])((?:(?!\1).)*)\1/g,"\\color{#ce9178}{$1$2$1}")}function T(e){if(e)return e.replaceAll(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/g,"").replaceAll(/^@[a-z].+/gm,"").replaceAll(/(\n\s+)+/g,"<br />").replaceAll(/\n/g,"<br />").replaceAll(/(<br \/>)$/g,"")}let k=new WeakMap;export default function v(s,A){let v=[s],w=k.get(v);if(w)return w;let B=a(A,s,o.Latest,!0,l.TS),z="";c(B,r=>{u(r)?z+=function(r){let l=r.name.text;Object.assign(d,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let o=h(r),a=b(o),c=T(o),s=x(o)?.split("|")||[],u=s.includes("comment"),A=s.includes("initial"),k=s.includes("optional"),v=s.includes("version"),w=s.includes("author"),B=c?`\\color{|4||0.45}{${l}}`:l,z=(function(e){let n=[];if(e.heritageClauses){for(let r of e.heritageClauses)if(r.token===t.SyntaxKind.ExtendsKeyword)for(let e of r.types)n.push(e.getText())}return n})(r)?.map(e=>`<n-tag color="#4c81db" css=".tag{gap:0px;}">${j(S(e))}</n-tag>`),F=[c,B,a&&`\\color{#52c11b|1||0.9}{${a}}`,z.length>0&&`<sub>\`extends\`</sub> ${z.join(" ")}`].filter(Boolean).join(" "),N=`## ${F}`,K=r.members.filter(e=>p(e)&&e.type?.kind!==i.NeverKeyword||$(e)),C=[];if(K.length>0){for(let e=0,t=K.length;e<t;e++){let t=K[e],n=j(S($(t)?`(${t.parameters.map(e=>`${e.name.getText()}: ${e.type?.getText()||"any"}`).join(", ")}): ${t.type?.getText()||"any"}`:t.type?.getText()||"any"),!0),r=h(t),l=S(t.name.getText());l&&!l.startsWith("\\color")&&($(t)||function(e){if(e.type){if(!g(e.type))return m(e.type);else for(let t of e.type.types)if(m(t))return!0}return!1}(t)||n?.includes("=>")?l=`\\color{#f9a913}{${l}}`:/^["'](.+)["']$/.test(l)||(l=`\\color{#4c81db}{${l}}`));let i=t.questionToken&&f(t.questionToken);C.push([l,!k&&`\\color{${i?"#f9a913":"#52c11b"}\\|\\|\\|0.9}{${i?"✘":"✔"}}`,!u&&S(T(r)),n,!A&&S(function(e){if(!e)return;let t=e.match(/@default\s+([^\n]+)/);return t?t[1].trim():void 0}(r)),!v&&S(b(r)),!w&&(y(r)||y(o)),function(e){if(!e)return;let t=e.match(/@example\s*([\s\S]*?)(?=@[a-zA-Z]|\n*$)/);return t?t[1].trim():void 0}(r)])}let e=!1,t=!1,n=!1,r=!1;for(let l=0,o=C.length;l<o;l++){let o=C[l];!u&&o[2]&&(r=!0),!A&&o[4]&&(n=!0),!v&&o[5]&&(t=!0),!w&&o[6]&&(e=!0)}N+="\n";let l=["属性",!k&&"必要",r&&"说明","类型",n&&"默认值",t&&"版本",e&&"作者"].filter(Boolean).join("|");N+=`|${l}|`;let i=[":-",!k&&":-",r&&":-",":-",n&&":-",t&&":-",e&&":-"].filter(Boolean);N+="\n";let a=i.join("|");N+=`|${a}|`;for(let l=0,o=C.length;l<o;l++){let o=C[l];N+="\n";let i=[(o[7]?`<n-popover arrow="true" trigger="click" content=${JSON.stringify(`<n-md css=.n-md-body{margin-bottom:0;padding:0.5rem;background-color:transparent;backdrop-filter:none;box-shadow:none;}>${o[7]}</n-md>`)}><n-button size="small" type="primary" circle="true" style="margin-right:8px;">?</n-button></n-popover>`:"")+(o[0]||"-"),!k&&(o[1]||"-"),r&&(o[2]||"-"),o[3]||"-",n&&(o[4]||"-"),t&&(o[5]||"-"),e&&(o[6]||"-")].filter(Boolean).join("|");N+=`|${i}|`}N+="\n"}return N+"\n"}(r):t.isEnumDeclaration(r)&&(z+=function(r){let l=r.name.text,o=h(r),i=T(o),a=b(o);Object.assign(d,{[r.name.text]:e(r.getSourceFile().fileName).replace(n.alias["@pkg"],"")});let c=i?`\\color{|4||0.45}{${l}}`:l,s=[i,c,a&&`\\color{#52c11b|1||0.9}{${a}}`].filter(Boolean).join(" "),u=x(o)?.split("|")||[],f=u.includes("comment"),p=u.includes("version"),m=u.includes("author"),g=`## ${s}`;if(r.members.length>0){let e=[];for(let n=0,l=r.members.length;n<l;n++){let l=r.members[n],i=S(l.name.getText()),a=h(l),c=S(function(e){let n=e.initializer;if(n&&t.isStringLiteral(n))return` '${n.text}'`}(l)),s=S(b(a)),u=S(T(a));!i||i.startsWith("\\color")||/^["'](.+)["']$/.test(i)||(i=`\\color{#4c81db}{${i}}`),e.push([i,!f&&u,c,!p&&s,!m&&(y(a)||y(o))])}let n=!1,l=!1,i=!1;for(let t=0,r=e.length;t<r;t++){let r=e[t];!f&&r[1]&&(i=!0),!p&&r[3]&&(l=!0),!m&&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 F=r(z);return k.set(v,F),F}
package/lib/vm/routes.mjs CHANGED
@@ -1 +1 @@
1
- import{generateRouter as o}from"@moneko/mdx";import{routeDir as m}from"../commom/paths.mjs";import{CONFIG as r}from"../config.mjs";import{FRAMEWORK as t,isLibrary as e}from"../process-env.mjs";let i=e?"@pkg":"@/pages";export function getRouter(){return!1===r.htmlPluginOption?"":o(m,`${r.alias["@"]}/router/index.ts`,t,i,e,"6")}
1
+ import{generateRouter as o}from"@moneko/mdx";import{routeDir as m}from"../commom/paths.mjs";import{CONFIG as r}from"../config.mjs";import{FRAMEWORK as t,isLibrary as e}from"../process-env.mjs";export function getRouter(){return!1===r.htmlPluginOption?"":o(m,`${r.alias["@"]}/router/index.ts`,t,e?"@pkg":"@/pages",e,"6")}
@@ -0,0 +1,3 @@
1
+ import ReactiveObject from '../commom/reactive-object.mjs';
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const scope_vm: ReactiveObject<VirtualModules>;
@@ -0,0 +1 @@
1
+ import{join as o}from"node:path";import{getAppScope as m}from"@moneko/mdx";import e from"../commom/has-pkg.mjs";import t from"../commom/reactive-object.mjs";import{CONFIG as r}from"../config.mjs";export const scope_vm=new t({components:{source:()=>{let t=!1,s=o(r.alias["@"],"./scope.tsx"),p=o(r.alias["@"],"./scope.ts");return e(s)?t=s:e(p)&&(t=p),t?m(t,"@/scope"):"export defatlu {}"}}});
@@ -0,0 +1,3 @@
1
+ import ReactiveObject from '../commom/reactive-object.mjs';
2
+ import type { VirtualModules } from '../plugin/virtual-module.mjs';
3
+ export declare const virtual_vm: ReactiveObject<VirtualModules>;
@@ -0,0 +1 @@
1
+ import{updateFileSync as t}from"@moneko/utils";import m from"../commom/reactive-object.mjs";import{CONFIG as o}from"../config.mjs";import{virtual_schema as r}from"../process-env.mjs";import e from"../utils/create-types.mjs";import{generateDeclaration as i}from"../utils/dts.mjs";import{node_modules as s,transformModule as l}from"../utils/index.mjs";export const virtual_vm=new m({});o.virtualModule&&t(s(`@types/$${r}/index.d.ts`),Object.keys(o.virtualModule).map(t=>{let m=l(o.virtualModule[t]);virtual_vm.setData(t,m);let s=`${r}:${t}`;return e(s,i(m,s))}).join("\n"));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "4.0.0-bate.2",
3
+ "version": "4.0.0-bate.4",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",
@@ -128,15 +128,15 @@
128
128
  "homepage": "https://monako97.github.io/neko-ui/@moneko/config",
129
129
  "license": "MIT",
130
130
  "dependencies": {
131
- "@moneko/convert": "1.1.3",
131
+ "@moneko/convert": "1.1.4",
132
132
  "@moneko/eslint": "1.9.14",
133
133
  "@moneko/mdx": "1.0.2",
134
- "@moneko/raw-import": "1.1.1",
134
+ "@moneko/raw-import": "1.2.0",
135
135
  "@moneko/request": "1.6.2",
136
136
  "@moneko/stylelint": "1.6.0",
137
- "@moneko/transform-imports": "1.2.1",
137
+ "@moneko/transform-imports": "1.3.0",
138
138
  "@moneko/utils": "0.3.3",
139
- "@swc/core": "1.13.5",
139
+ "@swc/core": "1.15.1",
140
140
  "browserslist": "4.27.0",
141
141
  "core-js": "3.46.0",
142
142
  "core-js-compat": "3.46.0",
@@ -13,6 +13,7 @@ import type {
13
13
  WebpackPluginInstance,
14
14
  SourceMapDevToolPlugin,
15
15
  RuleSetConditionAbsolute,
16
+ experiments,
16
17
  } from 'webpack';
17
18
 
18
19
  import type { CopyPluginOption } from '../lib/plugin/copy.mjs';
@@ -31,6 +32,7 @@ import type { ProxyConfig } from '../lib/dev/proxy.mjs';
31
32
  import type { OverrideResolverOption } from '../lib/plugin/override-resolve.mjs';
32
33
  import type { OptimizationSplitChunksOptions } from '../lib/options/split-chunk.mjs';
33
34
  import type { HtmlPluginOption } from '../lib/plugin/html-plugin.mjs';
35
+
34
36
  export interface VirtualModulePluginOption {
35
37
  [key: string]: string | object;
36
38
  }
@@ -1 +0,0 @@
1
- "use strict";var e;Object.defineProperty(exports,"__esModule",{value:!0}),Object.defineProperty(exports,"default",{enumerable:!0,get:function(){return i}});const t=require("fs"),r=(e=require("../commom/log.mjs"))&&e.__esModule?e:{default:e},s={};function i(e){let i=this.resourcePath;if(i.endsWith(".d.ts"))return e;this.cacheable&&this.cacheable();try{let r=(0,t.statSync)(i).mtime.getTime();if(s[i]!==r){Object.assign(s,{[i]:r});let{comment:t,generateDoc:a,getCommentPath:c}=this.getOptions();t.setData(c(i),a(e,i))}}catch(e){(0,r.default)(e)}return e}
@@ -1,7 +0,0 @@
1
- import type { LoaderContext } from 'webpack';
2
- import type ReactiveObject from '../commom/reactive-object.mjs';
3
- export default function (this: LoaderContext<{
4
- comment: ReactiveObject<Record<string, string>>;
5
- generateDoc(content: string, path: string): string;
6
- getCommentPath(filepath: string): string;
7
- }>, value: string): string;
@@ -1,8 +0,0 @@
1
- import webpack from 'webpack';
2
- type VirtualModules = ConstructorParameters<typeof webpack.experiments.schemes.VirtualUrlPlugin>[0];
3
- export declare const app_vm: VirtualModules;
4
- export declare const docs_vm: VirtualModules;
5
- export declare const example_vm: VirtualModules;
6
- export declare const scope_vm: VirtualModules;
7
- export declare const virtual_vm: VirtualModules;
8
- export {};
@@ -1 +0,0 @@
1
- import{join as e}from"node:path";import{getAppEntry as o,getAppFallback as t,getAppMergeRouter as r,getAppNormalizeCss as m,getAppPrefixRouter as s,getAppRem as a,getAppScope as c,getAppSuspense as n}from"@moneko/mdx";import{updateFileSync as p}from"@moneko/utils";import l from"../commom/has-pkg.mjs";import i,{routeDir as d}from"../commom/paths.mjs";import u from"../commom/reactive-object.mjs";import f from"../commom/require.mjs";import v from"../commom/rule.mjs";import{CONFIG as x}from"../config.mjs";import{updateMocks as j}from"../dev/mock.mjs";import g from"../plugin/module-federation.mjs";import{app_schema as y,APPTYPE as D,docs_schema as h,example_schema as $,FRAMEWORK as _,isLibrary as k,virtual_schema as b}from"../process-env.mjs";import C from"../utils/create-types.mjs";import{generateDeclaration as O}from"../utils/dts.mjs";import{md5 as P,node_modules as z,transformModule as w}from"../utils/index.mjs";import M from"./coverage.mjs";import{comment as S,getDocs as q}from"./docs.mjs";import{examples as E,generatorExample as J}from"./example.mjs";import N from"./info.mjs";import{generateLocales as A}from"./locales.mjs";import B from"./render-app.mjs";import{getRouter as F}from"./routes.mjs";let G=new u({});G.on("change",()=>{p(z(`@types/$${y}/index.d.ts`),Object.values(G.data).join("\n"))});export const app_vm={mock:{source:e=>(e.addContextDependency(i.mockPath),j(),"export default null;")},env:{source:()=>{let e=`${y}:env`,o=w(x.env);return G.setData(e,C(e,O(o,e))),o}},info:{source:o=>{let t=`${y}:info`,r=e(i.programPath,"package.json");o.addDependency(r),delete f.cache[r];let m=w({...f(r),...N});return G.setData(t,C(t,O(m,t))),m}},render:{type:".tsx",source:()=>"react"===_?B:""},entry:{type:".tsx",source:()=>{let t=`${y}:entry`,r=o(e(x.alias["@"],"./index.ts"),!!g.length,!!x.rem,!!x.normalizeCss,D,_);return G.setData(t,C(t,O(r,t))),r}},fallback:{source:()=>{let e=`${y}:fallback`,o=t(x.fallbackCompPath);return G.setData(e,C(e,O(o,e))),o}},"merge-router":r(),"prefix-router":s(),suspense:{type:".tsx",source:()=>n(D,_)},routes:{source:e=>(e.addContextDependency(d),F())},locals:{source:o=>{let t=e(x.alias["@"],"./locales");return o.addContextDependency(t),A()}}};x.normalizeCss&&(app_vm.normalize={type:".css",source:m}),x.rem&&(app_vm.rem=a(x.rem?.designSize||1680));export const docs_vm={};export const example_vm={};export const scope_vm={};if(k){for(let o of(scope_vm.components={source:()=>{let o=!1,t=e(x.alias["@"],"./scope.tsx"),r=e(x.alias["@"],"./scope.ts");return l(t)?o=t:l(r)&&(o=r),o?c(o,"@/scope"):"export defatlu {}"}},docs_vm.coverage={source:e=>(e.addDependency(i.coveragePath),M(i.coveragePath))},docs_vm.docs={source:()=>q()},docs_vm.example={source:e=>{e.addContextDependency(i.componentsPath),J();let o={};return Object.keys(E.data).forEach(e=>{Object.assign(o,{[e]:`rr(() => import('${e}'))rr`})}),`export default ${JSON.stringify(o).replace(v.extract_func,"$1")}`}},S))docs_vm[o[0].replace(`${h}:`,"")]={type:".txt",source:()=>S.getData(o[0]),version:()=>P(S.getData(o[0]))};for(let e of(E.on("change",e=>{example_vm[e.replace(`${$}:`,"")]={source:o=>(o.addDependency(e),E.getData(e))}}),E))example_vm[e[0].replace(`${$}:`,"")]={source:()=>E.getData(e[0]),version:()=>P(E.getData(e[0]))}}export const virtual_vm={};let H=new u({});for(let e in H.on("change",()=>{p(z(`@types/$${b}/index.d.ts`),Object.values(H.data).join("\n"))}),x.virtualModule){if(!Object.hasOwn(x.virtualModule,e))continue;let o=w(x.virtualModule[e]);virtual_vm[e]=o;let t=`${b}:${e}`;H.setData(t,C(t,O(o,t)))}