@moneko/core 3.49.0-beta.0 → 3.49.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,7 +1,7 @@
1
1
  import http, { IncomingMessage, ServerResponse } from 'node:http';
2
2
  import { StringDecoder } from 'node:string_decoder';
3
3
  import { URL } from 'node:url';
4
- import { directoryExists, print } from '@moneko/utils';
4
+ import { directoryExists, ink, print } from '@moneko/utils';
5
5
  import { watch } from 'chokidar';
6
6
  import { merge } from 'webpack-merge';
7
7
  import log from '../commom/log.mjs';
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 o}from"node:url";import{directoryExists as r,print as n}from"@moneko/utils";import{watch as a}from"chokidar";import{merge as c}from"webpack-merge";import i from"../commom/log.mjs";import s from"../commom/match-path.mjs";import l,{METHOD_COLOR as m}from"../commom/print-log.mjs";import d from"../commom/require.mjs";import{jsonSchema as p}from"./json-schema.mjs";function f(e,t,o){if(delete d.cache[t],o[t]){for(let r in o[t])Object.prototype.hasOwnProperty.call(o[t],r)&&(e[r]=null,delete e[r]);o[t]=null,delete o[t]}}export const yApiSchemaMock=(t,o)=>new Promise(r=>{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=p(t);void 0!==o?r(c(n,o)):r(n)}}catch(e){i(e)}})})});export const yApiMock=(t,r)=>new Promise((n,a)=>{let c=new o(r.host),s={hostname:c.hostname,port:c.port,path:t.url?.replace(new RegExp(r.pathRewrite),`/mock/${r.projectId}/`),method:t.method,headers:t.headers,query:Object.fromEntries(c.searchParams)},l=e.request(s,e=>{e.setEncoding("utf8");let t="";e.on("data",e=>{t+=e}),e.on("end",()=>{try{n(JSON.parse(t))}catch(e){i(e)}})});l.on("error",e=>{a(e.message)}),l.write(JSON.stringify(t.body)),l.end()});export const oldMock={};export let nextMock={};export function containMockUrl(e){return Object.keys(nextMock).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}export default(e=>{if(!r(e.directory))return;let c=!0;return a(e.directory).on("all",async function(e,t){if("string"==typeof t){switch(n("Updating mock...",!0),e){case"add":case"change":try{f(nextMock,t,oldMock);let e=d(t).default;oldMock[t]=e,nextMock=Object.assign(nextMock,e)}catch(e){i(e)}break;case"unlink":f(nextMock,t,oldMock)}c?c=!1:n("Mock update successful",!0)}}),(e,r)=>{if(r.writableEnded)return r;let n=new o(`http://localhost:3000${e.url}`),a=e.method||"GET",c=`${a} ${n.pathname}`,p=containMockUrl(c)||c,f=nextMock[p];if(f){if(l(a,n.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:m[a].fg,labelBackgroundColor:m[a].bg}),r.send=e=>r.end("string"==typeof e?e:JSON.stringify(e)),r.writeHead(200,{"Content-Type":e.headers["content-type"]}),"function"==typeof f){let o=s(p.split(" ")[1],n.pathname);return n.searchParams&&Object.assign(e,{query:Object.fromEntries(n.searchParams)}),o&&Object.assign(e,{params:o.params}),e.body=new Promise((o,r)=>{if(["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||""))return o(null);let n=e.headers["content-length"],a=e.headers["transfer-encoding"];if(!n&&!a)return o(null);let c=e.headers["content-type"]||"",s=[];e.on("data",e=>{s.push(e)}),e.on("end",()=>{let e=Buffer.concat(s);if(c.includes("application/json"))try{let r=new t("utf-8").write(e);o(JSON.parse(r))}catch(e){i(e)}else c.includes("application/octet-stream")||c.startsWith("image/")?o(e):c.includes("text/")?o(e.toString("utf-8")):c.includes("application/x-www-form-urlencoded")?o(d("querystring").parse(e.toString("utf-8"))):o(e)}),e.on("error",r)}),f(e,r),!0}return r.end("string"==typeof f?f:JSON.stringify(f)),!0}return!1}});
1
+ import e from"node:http";import{StringDecoder as t}from"node:string_decoder";import{URL as o}from"node:url";import{directoryExists as r,ink as n,print as a}from"@moneko/utils";import{watch as c}from"chokidar";import{merge as i}from"webpack-merge";import s from"../commom/log.mjs";import l from"../commom/match-path.mjs";import m,{METHOD_COLOR as d}from"../commom/print-log.mjs";import p from"../commom/require.mjs";import{jsonSchema as f}from"./json-schema.mjs";function u(e,t,o){if(delete p.cache[t],o[t]){for(let r in o[t])Object.prototype.hasOwnProperty.call(o[t],r)&&(e[r]=null,delete e[r]);o[t]=null,delete o[t]}}export const yApiSchemaMock=(t,o)=>new Promise(r=>{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!==o?r(i(n,o)):r(n)}}catch(e){s(e)}})})});export const yApiMock=(t,r)=>new Promise((n,a)=>{let c=new o(r.host),i={hostname:c.hostname,port:c.port,path:t.url?.replace(new RegExp(r.pathRewrite),`/mock/${r.projectId}/`),method:t.method,headers:t.headers,query:Object.fromEntries(c.searchParams)},l=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)}})});l.on("error",e=>{a(e.message)}),l.write(JSON.stringify(t.body)),l.end()});export const oldMock={};export let nextMock={};export function containMockUrl(e){return Object.keys(nextMock).find(t=>RegExp(`^${t.replace(/(:\w*)[^/]/g,"((?!/).)")}*$`).test(e))}export default(e=>{if(!r(e.directory))return;let i=!0;return c(e.directory).on("all",async function(e,t){if("string"==typeof t){switch(a(n("Updating mock...","245"),!0),e){case"add":case"change":try{u(nextMock,t,oldMock);let e=p(t).default;oldMock[t]=e,nextMock=Object.assign(nextMock,e)}catch(e){s(e)}break;case"unlink":u(nextMock,t,oldMock)}i?i=!1:a(n("Mock update successful","245"),!0)}}),(e,r)=>{if(r.writableEnded)return r;let n=new o(`http://localhost:3000${e.url}`),a=e.method||"GET",c=`${a} ${n.pathname}`,i=containMockUrl(c)||c,f=nextMock[i];if(f){if(m(a,n.pathname,{note:"MOCK",labelAlign:"center",labelLen:8,labelForegroundColor:d[a].fg,labelBackgroundColor:d[a].bg}),r.send=e=>r.end("string"==typeof e?e:JSON.stringify(e)),r.writeHead(200,{"Content-Type":e.headers["content-type"]}),"function"==typeof f){let o=l(i.split(" ")[1],n.pathname);return n.searchParams&&Object.assign(e,{query:Object.fromEntries(n.searchParams)}),o&&Object.assign(e,{params:o.params}),e.body=new Promise((o,r)=>{if(["GET","HEAD","OPTIONS"].includes(e.method?.toUpperCase()||""))return o(null);let n=e.headers["content-length"],a=e.headers["transfer-encoding"];if(!n&&!a)return o(null);let c=e.headers["content-type"]||"",i=[];e.on("data",e=>{i.push(e)}),e.on("end",()=>{let e=Buffer.concat(i);if(c.includes("application/json"))try{let r=new t("utf-8").write(e);o(JSON.parse(r))}catch(e){s(e)}else c.includes("application/octet-stream")||c.startsWith("image/")?o(e):c.includes("text/")?o(e.toString("utf-8")):c.includes("application/x-www-form-urlencoded")?o(p("querystring").parse(e.toString("utf-8"))):o(e)}),e.on("error",r)}),f(e,r),!0}return r.end("string"==typeof f?f:JSON.stringify(f)),!0}return!1}});
@@ -22,7 +22,7 @@ interface ServerOption {
22
22
  port: number;
23
23
  root_dir: string;
24
24
  fileSystem: FileSystem;
25
- onRequest?(req: IncomingMessage, res: HttpServerResponse): void;
25
+ onRequest?(req: IncomingMessage, res: HttpServerResponse): boolean | void;
26
26
  headers?: Record<string, string>;
27
27
  basename?: string;
28
28
  https?: CertOption | boolean;
@@ -1 +1 @@
1
- import{createServer as e}from"node:http";import{createServer as t}from"node:https";import{extname as o,join as r}from"node:path";import n from"../commom/mime.mjs";import i from"../commom/open.mjs";import s from"../commom/paths.mjs";import{CONFIG as a}from"../config.mjs";import m from"../dev/get-cert.mjs";import{setupProxy as c}from"../dev/proxy.mjs";import l from"./mock.mjs";let p={"Access-Control-Allow-Credentials":"true","Access-Control-Allow-Headers":"Authorization, Content-Type, Accept, X-Requested-With, Origin, DNT, User-Agent, Cache-Control, X-CSRF-Token, X-API-Key, X-Client-Version, X-Device-ID, Content-Language, Accept-Language, X-Custom-Header, X-Mx-ReqToken, Keep-Alive, If-Modified-Since","Access-Control-Allow-Methods":"GET, DELETE, HEAD, OPTIONS, POST, PUT, PATCH, PURGE, LINK, UNLINK, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, REPORT, SEARCH, CONNECT, TRACE","Access-Control-Allow-Origin":"*","Cache-Control":"no-store, no-cache, must-revalidate, proxy-revalidate",Pragma:"no-cache",Expires:"0"};async function d(d){let C=r(d.root_dir,"index.html"),h=l({directory:s.mockPath});function f(e,t,r){let i=e.headers["accept-encoding"],s=i?.includes("br"),a=`${r}.${s?"br":"gz"}`,m=d.fileSystem.existsSync(a);m&&t.setHeader("Content-Encoding",s?"br":"gzip");let c=d.fileSystem.createReadStream(m?a:r,{autoClose:!0});c.on("open",()=>{t.writeHead(200,Object.assign({},p,d.headers,{"Access-Control-Allow-Origin":e.headers.origin??"*","Content-Type":n[o(r)]||"application/octet-stream"}))}),c.on("error",e=>{switch(c.destroy(),e.code){case"ENOENT":t.writeHead(301,{Location:"/index.html"}),t.end();break;case"EACCES":t.writeHead(403,{"Content-Type":"text/plain"}),t.end(`Forbidden: ${e.message}`);break;default:t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Internal Server Error: ${e.message}`)}}),c.pipe(t)}async function u(e,t){if(d.onRequest&&d.onRequest(e,t),a.proxy&&await c(e,t,a.proxy),!(h&&h(e,t))&&!t.writableEnded){if("GET"===e.method){let o="/"===e.url?C:decodeURIComponent(r(d.root_dir,e.url.replace(d.basename??"/","/")));if(d.fileSystem.existsSync(o))return f(e,t,o)}if(e.headers.accept?.includes("text/html"))return f(e,t,C);t.writeHead(404,{"Content-Type":"text/plain"}),t.end("File Not Found")}}let A=d.https?t(await m(d.host,!0===d.https?{install:!0}:d.https),u):e(u);return A.listen(d.port),d.open&&i(`${d.https?"https:":"http:"}//${d.host}:${d.port}${"/"===d.basename?"":d.basename}`),A}export default d;
1
+ import{createServer as e}from"node:http";import{createServer as t}from"node:https";import{extname as o,join as r}from"node:path";import n from"../commom/mime.mjs";import i from"../commom/open.mjs";import s from"../commom/paths.mjs";import{CONFIG as a}from"../config.mjs";import m from"../dev/get-cert.mjs";import{setupProxy as c}from"../dev/proxy.mjs";import l from"./mock.mjs";let p={"Access-Control-Allow-Credentials":"true","Access-Control-Allow-Headers":"Authorization, Content-Type, Accept, X-Requested-With, Origin, DNT, User-Agent, Cache-Control, X-CSRF-Token, X-API-Key, X-Client-Version, X-Device-ID, Content-Language, Accept-Language, X-Custom-Header, X-Mx-ReqToken, Keep-Alive, If-Modified-Since","Access-Control-Allow-Methods":"GET, DELETE, HEAD, OPTIONS, POST, PUT, PATCH, PURGE, LINK, UNLINK, PROPFIND, PROPPATCH, MKCOL, COPY, MOVE, LOCK, UNLOCK, REPORT, SEARCH, CONNECT, TRACE","Access-Control-Allow-Origin":"*","Cache-Control":"no-store, no-cache, must-revalidate, proxy-revalidate",Pragma:"no-cache",Expires:"0"};async function d(d){let C=r(d.root_dir,"index.html"),h=l({directory:s.mockPath});function f(e,t,r){let i=e.headers["accept-encoding"],s=i?.includes("br"),a=`${r}.${s?"br":"gz"}`,m=d.fileSystem.existsSync(a);m&&t.setHeader("Content-Encoding",s?"br":"gzip");let c=d.fileSystem.createReadStream(m?a:r,{autoClose:!0});c.on("open",()=>{t.writeHead(200,Object.assign({},p,d.headers,{"Access-Control-Allow-Origin":e.headers.origin??"*","Content-Type":n[o(r)]||"application/octet-stream"}))}),c.on("error",e=>{switch(c.destroy(),e.code){case"ENOENT":t.writeHead(301,{Location:"/index.html"}),t.end();break;case"EACCES":t.writeHead(403,{"Content-Type":"text/plain"}),t.end(`Forbidden: ${e.message}`);break;default:t.writeHead(500,{"Content-Type":"text/plain"}),t.end(`Internal Server Error: ${e.message}`)}}),c.pipe(t)}async function u(e,t){if(!(d.onRequest&&d.onRequest(e,t))&&(a.proxy&&await c(e,t,a.proxy),!(h&&h(e,t))&&!t.writableEnded)){if("GET"===e.method){let o="/"===e.url?C:decodeURIComponent(r(d.root_dir,e.url.replace(d.basename??"/","/")));if(d.fileSystem.existsSync(o))return f(e,t,o)}if(e.headers.accept?.includes("text/html"))return f(e,t,C);t.writeHead(404,{"Content-Type":"text/plain"}),t.end("File Not Found")}}let A=d.https?t(await m(d.host,!0===d.https?{install:!0}:d.https),u):e(u);return A.listen(d.port),d.open&&i(`${d.https?"https:":"http:"}//${d.host}:${d.port}${"/"===d.basename?"":d.basename}`),A}export default d;
package/lib/dev.mjs CHANGED
@@ -1,2 +1,2 @@
1
1
  import{exec as e,spawn as t}from"node:child_process";import{watchFile as o}from"node:fs";import{join as r,relative as n}from"node:path";import i from"node:process";import{URL as s}from"node:url";import{ink as a,print as m,println as l,progressBar as p}from"@moneko/utils";import c from"webpack";import f from"webpack-hot-middleware";import{merge as h}from"webpack-merge";import{diffObject as u}from"./commom/diff-object.mjs";import d,{config_files as g}from"./commom/paths.mjs";import w from"./commom/sigint-exit.mjs";import{devLog as y,PORT as j}from"./dev/config.mjs";import $ from"./dev/generate-progress-html.mjs";import v from"./dev/server.mjs";import b from"./options/reslove.mjs";import{ESLintPlugin as C}from"./plugin/eslint.mjs";import{generateManifest as x}from"./plugin/manifest.mjs";import{StylelintPlugin as _}from"./plugin/stylelint.mjs";import{empty as P}from"./utils/index.mjs";import{commonConfig as S}from"./common.mjs";import{CONFIG as k,getConfig as H,PUBLICPATH as O}from"./config.mjs";import{outputFileSystem as T}from"./file-system.mjs";import B from"./module.config.mjs";import{isLibrary as I,isReact as q,refresh as E}from"./process-env.mjs";let G=!1,L="/____progress____",N={percentage:0,info:""},R="/__hmr__",U=new URLSearchParams({name:"client",path:R.substring(1),dynamicPublicPath:!0,timeout:2e3,reload:!E,quiet:!0,noInfo:!0,overlay:!1,autoConnect:!0}).toString(),F=h(S,{watchOptions:{stdin:!0,aggregateTimeout:300,ignored:/node_modules\/(?!(@app)\/)/},entry:{main:[`${b.hotMiddlewareClient}?${U}`]},module:B(!1),plugins:[new c.HotModuleReplacementPlugin,new c.WatchIgnorePlugin({paths:[/node_modules\/(?!(@app)\/)/,/\.d\.ts$/]}),new c.ProgressPlugin({handler(e,t,...o){let r=o.length?`[${t}] ${o.join(" ")}`:" ";G||(N.info=r,N.percentage=e,G=1===e);let n=k.bar;if(n){let t=n.name||"Build";n.quiet?i.stdout.write(`${r}
2
- `):(p(e||0,1,{msg:r,name:t,barColor:n.barColor,nameColor:n.nameColor,barBgColor:n.barBgColor,msgColor:n.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});if(q){let e=(await import("@pmmmwh/react-refresh-webpack-plugin")).default;F.plugins.push(new e({overlay:!1}))}function J(e){let t=e.join(","),o=[n(d.programPath,`${k.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return I&&o.push(n(d.programPath,`${k.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}k.eslint&&F.plugins.push(new C({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:J(["js","jsx","ts","tsx","json","html","vue"]),...k.eslint})),k.stylelint&&F.plugins.push(new _({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:J(["css","scss","sass","less","ts","tsx","js","jsx"]),...k.stylelint}));let M=c(F);M.outputFileSystem=T;let A=M.watch(M.options.watchOptions,y);M.hooks.done.tap("client-log",e=>{y(null,e)});let K=`${O}/${R}`.replace(/\/+/g,"/"),W=f(M,{log:!1,path:K,heartbeat:2e3}),z=!!k.manifest&&r(O,k.manifest.filename).replaceAll(/\\/g,"/"),D=await v({port:j,root_dir:M.options.output.path,fileSystem:M.outputFileSystem,headers:k.devServer.headers,https:k.devServer.https,host:k.devServer.host,open:k.devServer.open,basename:k.basename,onRequest(e,t){if(t.writableEnded)return;let o=new s(`${k.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if("GET"===e.method){if(z&&o.pathname===z){t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(x({})));return}if(o.pathname===L){t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(N));return}if(!G){t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end($(L,N));return}o.pathname===K&&"text/event-stream"===e.headers.accept&&W(e,t,P)}}});function Q(){i.exit(0)}D.on("close",()=>{A.close(P),W.close()});let V=await Promise.all(g.map(H)),X=h(V[0]||{},V[1]||{});g.forEach(function(t){o(t,async function(){let[o,r]=await Promise.all(g.map(H)),n=h(o||{},r||{}),s=u(X,n);1===Object.keys(s).length&&"proxy"in s?(m(a(`代理更新中...`,"yellow"),!0),m(a(`代理更新完成...`,"green"),!0),k.proxy=n.proxy,X.proxy=n.proxy,X=n):(X=n,l(a(`检测到工程配置${a(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),e(Y?`netstat -ano | findstr :${j}`:`lsof -i :${j} -t`,(e,t)=>{if(e){l(a(`查找端口 ${j} 时发生错误: ${e.message}`,"red")),l(a("请尝试手动重启程序","yellow"));return}let o=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),r=Y?o[0]?.split(/\s+/).pop()?.trim():o[0]?.trim();if(!r){l(a(`未找到占用端口 ${j} 的进程, 请尝试手动重启程序`,"yellow"));return}try{i.kill(Number(r),"SIGHUP")}catch(e){l(a(`终止进程 ${r} 时发生错误: ${e.message}`,"red"))}}))})});let Y="win32"===i.platform;i.on("SIGHUP",function(){D.close(P),function(){let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",Q)}()}),i.on("exit",function(){D.close(P)}),w(Q);
2
+ `):(p(e||0,1,{msg:r,name:t,barColor:n.barColor,nameColor:n.nameColor,barBgColor:n.barBgColor,msgColor:n.msgColor}),1===e&&i.stdout.write("\r\x1b[2K"))}}})]});if(q){let e=(await import("@pmmmwh/react-refresh-webpack-plugin")).default;F.plugins.push(new e({overlay:!1}))}function J(e){let t=e.join(","),o=[n(d.programPath,`${k.alias["@"]}/**/*.{${t}}`).replace(/\\/g,"/")];return I&&o.push(n(d.programPath,`${k.alias["@pkg"]}/**/*.{${t}}`).replace(/\\/g,"/")),o}k.eslint&&F.plugins.push(new C({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.eslintcache`,cacheStrategy:"metadata",files:J(["js","jsx","ts","tsx","json","html","vue"]),...k.eslint})),k.stylelint&&F.plugins.push(new _({fix:!0,cache:!0,cacheLocation:`${d.lintCachePath}/.stylelintcache`,files:J(["css","scss","sass","less","ts","tsx","js","jsx"]),...k.stylelint}));let M=c(F);M.outputFileSystem=T;let A=M.watch(M.options.watchOptions,y);M.hooks.done.tap("client-log",e=>{y(null,e)});let K=`${O}/${R}`.replace(/\/+/g,"/"),W=f(M,{log:!1,path:K,heartbeat:2e3}),z=!!k.manifest&&r(O,k.manifest.filename).replaceAll(/\\/g,"/"),D=await v({port:j,root_dir:M.options.output.path,fileSystem:M.outputFileSystem,headers:k.devServer.headers,https:k.devServer.https,host:k.devServer.host,open:k.devServer.open,basename:k.basename,onRequest(e,t){if(!t.writableEnded&&"GET"===e.method){let o=new s(`${k.devServer.https?"https":"http"}://${e.headers.host}${e.url}`);if(z&&o.pathname===z){t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(x({})));return}if(o.pathname===L){t.writeHead(200,{"Content-Type":"application/json; charset=utf-8","Cache-Control":"no-store"}),t.end(JSON.stringify(N));return}if(!G){t.writeHead(200,{"Content-Type":"text/html; charset=utf-8"}),t.end($(L,N));return}if(o.pathname===K&&"text/event-stream"===e.headers.accept)return W(e,t,P),!0}}});function Q(){i.exit(0)}D.on("close",()=>{A.close(P),W.close()});let V=await Promise.all(g.map(H)),X=h(V[0]||{},V[1]||{});g.forEach(function(t){o(t,async function(){let[o,r]=await Promise.all(g.map(H)),n=h(o||{},r||{}),s=u(X,n);1===Object.keys(s).length&&"proxy"in s?(m(a(`代理更新中...`,"yellow"),!0),m(a(`代理更新完成...`,"green"),!0),k.proxy=n.proxy,X.proxy=n.proxy,X=n):(X=n,l(a(`检测到工程配置${a(`[${t}]`,"blue")}变更, 程序即将重启...`,"yellow"),!0),e(Y?`netstat -ano | findstr :${j}`:`lsof -i :${j} -t`,(e,t)=>{if(e){l(a(`查找端口 ${j} 时发生错误: ${e.message}`,"red")),l(a("请尝试手动重启程序","yellow"));return}let o=t.trim().replace(/\r\n/g,"\n").split("\n").filter(Boolean),r=Y?o[0]?.split(/\s+/).pop()?.trim():o[0]?.trim();if(!r){l(a(`未找到占用端口 ${j} 的进程, 请尝试手动重启程序`,"yellow"));return}try{i.kill(Number(r),"SIGHUP")}catch(e){l(a(`终止进程 ${r} 时发生错误: ${e.message}`,"red"))}}))})});let Y="win32"===i.platform;i.on("SIGHUP",function(){D.close(P),function(){let e=t(i.argv[0],i.argv.slice(1),{detached:!1,stdio:"inherit"});e.unref(),e.on("close",Q)}()}),i.on("exit",function(){D.close(P)}),w(Q);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "3.49.0-beta.0",
3
+ "version": "3.49.0",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",
@@ -108,11 +108,11 @@
108
108
  "license": "MIT",
109
109
  "dependencies": {
110
110
  "@moneko/convert": "1.0.1",
111
- "@moneko/eslint": "1.6.2",
111
+ "@moneko/eslint": "1.7.0",
112
112
  "@moneko/mdx": "0.1.44",
113
113
  "@moneko/raw-import": "0.0.3",
114
114
  "@moneko/request": "1.6.2",
115
- "@moneko/stylelint": "1.4.3",
115
+ "@moneko/stylelint": "1.5.0",
116
116
  "@moneko/transform-imports": "0.6.1",
117
117
  "@moneko/utils": "0.3.3",
118
118
  "@swc/core": "1.6.13",