@moneko/core 3.36.3 → 3.37.1

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.
@@ -3,9 +3,11 @@ import { spawnSync, type SpawnSyncReturns } from 'node:child_process';
3
3
  import { join } from 'node:path';
4
4
  import { argv } from 'node:process';
5
5
  import { ESLint } from '@moneko/eslint';
6
- import { stylelint as Stylelint } from '@moneko/stylelint';
7
- import { loadFile } from '@moneko/utils';
6
+ import { LinterResult, stylelint as Stylelint } from '@moneko/stylelint';
7
+ import { ink, loadFile, println } from '@moneko/utils';
8
+ import log from '../commom/log.mjs';
8
9
  import parseArgs from '../commom/parse-args.mjs';
10
+ import timer from '../commom/timer.mjs';
9
11
  type Args = {
10
12
  fix?: boolean;
11
13
  cache?: boolean;
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import{spawnSync as t}from"node:child_process";import{join as e}from"node:path";import{argv as o}from"node:process";import{ESLint as i}from"@moneko/eslint";import{stylelint as n}from"@moneko/stylelint";import{loadFile as r}from"@moneko/utils";import s from"../commom/parse-args.mjs";let l=s(o.slice(2)),c=l.fix,a=l.cache||!0,m=e(process.cwd(),"node_modules/.cache"),d={ci:["diff","--name-only","HEAD^","HEAD"],commit:["diff","--cached","--name-only","--diff-filter=ACMR"]},f=/.*(?<!\.d)\.(j|t|mj|mt|cj|ct)sx?$/,p=/.*(?<!\.d)\.vue$/,u=/.*(?<!\.d)\.(c|sc|sa|le)ss$/,h=t("git",d[l.mode||"ci"]||d.ci).stdout.toString().trim().split("\n");async function y(){console.log("ESLint runing...");try{console.time("ESLint");let t=h.filter(t=>f.test(t)||p.test(t));if(0===t.length){console.timeEnd("ESLint");return}let e=new i({cache:a,cacheLocation:`${m}/.eslintcache`,fix:c}),o=await e.lintFiles(t),n=await e.loadFormatter("stylish"),r=await n.format(o);c&&await i.outputFixes(o),r&&process.stdout.write(r);let s=o.some(t=>t.errorCount>0);console.timeEnd("ESLint"),s&&process.exit(1)}catch(t){console.error(t)}}let w=h.filter(t=>u.test(t)||p.test(t));async function g(){if(console.log("Stylelint runing..."),console.time("Stylelint"),0===w.length){console.timeEnd("Stylelint");return}let t=await Promise.all(w.map(async t=>{let e=await r(t);return await n.lint({codeFilename:t,code:e,cache:a,cacheLocation:`${m}/.stylelintcache`,fix:c,formatter:"string"}).catch(console.log)})),e=!1;t.forEach(t=>{t&&(t.report&&process.stdout.write(t.report),t.errored&&(e=!!t.errored))}),console.timeEnd("Stylelint"),e&&process.exit(1)}await Promise.all([y(),g()]);
2
+ import{spawnSync as t}from"node:child_process";import{join as e}from"node:path";import{argv as o}from"node:process";import{ESLint as i}from"@moneko/eslint";import{stylelint as r}from"@moneko/stylelint";import{ink as n,loadFile as s,println as l}from"@moneko/utils";import m from"../commom/log.mjs";import a from"../commom/parse-args.mjs";import c from"../commom/timer.mjs";let d=a(o.slice(2)),f=d.fix,p=d.cache||!0,y=e(process.cwd(),"node_modules/.cache"),u={ci:["diff","--name-only","HEAD^","HEAD"],commit:["diff","--cached","--name-only","--diff-filter=ACMR"]},h=/.*(?<!\.d)\.(j|t|mj|mt|cj|ct)sx?$/,w=/.*(?<!\.d)\.vue$/,g=/.*(?<!\.d)\.(c|sc|sa|le)ss$/,S=t("git",u[d.mode||"ci"]||u.ci).stdout.toString().trim().split("\n");async function $(){let t=n("ESLint","cyan");l(`${t}: ${n("runing...","yellow")}`,!0);try{c.start("ESLint");let t=S.filter(t=>h.test(t)||w.test(t));if(0===t.length){c.end("ESLint");return}let e=new i({cache:p,cacheLocation:`${y}/.eslintcache`,fix:f}),o=await e.lintFiles(t),r=await e.loadFormatter("stylish"),n=await r.format(o);f&&await i.outputFixes(o),n&&process.stdout.write(n);let s=o.some(t=>t.errorCount>0);c.end("ESLint"),s&&process.exit(1)}catch(t){m(t)}}let E=S.filter(t=>g.test(t)||w.test(t));async function j(){let t=n("Stylelint","cyan");if(l(`${t}: ${n("runing...","yellow")}`,!0),c.start("Stylelint"),0===E.length){c.end("Stylelint");return}let e=await Promise.all(E.map(async t=>{let e=await s(t);return await r.lint({codeFilename:t,code:e,cache:p,cacheLocation:`${y}/.stylelintcache`,fix:f,formatter:"string"}).catch(m)})),o=!1;e.forEach(t=>{t&&(t.report&&process.stdout.write(t.report),t.errored&&(o=!!t.errored))}),c.end("Stylelint"),o&&process.exit(1)}await Promise.all([$(),j()]);
@@ -2,5 +2,6 @@ import { execSync } from 'node:child_process';
2
2
  import { renameSync } from 'node:fs';
3
3
  import { join } from 'node:path';
4
4
  import { bundleIpa, createDir, ink, print } from '@moneko/utils';
5
+ import timer from '../../commom/timer.mjs';
5
6
  export declare function bundleApk(outputPath: string, outputBundleDir: string, type?: string);
6
7
  export declare function bundleIOS(outputPath: string, outputBundleDir: string, type?: string);
@@ -1 +1 @@
1
- import{execSync as e}from"node:child_process";import{renameSync as o}from"node:fs";import{join as n}from"node:path";import{bundleIpa as p,createDir as l,ink as i,print as t}from"@moneko/utils";export function bundleApk(p,a,u="-release"){t(i("正在编译 apk...","yellow"),!0),console.time(`bundle apk ${u}`),e(`flutter build apk -${u}`),console.timeEnd(`bundle apk ${u}`),l(a),o(n(p,`build/app/outputs/flutter-apk/app${u}.apk`),a),t(`✨ ${i("Apk 编译","cyan")}: ${i("完成","cyan")}`,!0)}export function bundleIOS(a,u,r="-release"){t(i("正在编译 ipa...","yellow"),!0),console.time(`bundle ipa ${r}`);let d=n(u,"Runner/Payload");e(`flutter build ios -${r} --no-codesign`),l(d),o(n(a,"build/ios/iphoneos/Runner.app"),d),p(n(u,"Runner"),u,r),console.timeEnd(`bundle ipa ${r}`),t(`✨ ${i("ipa 编译","cyan")}: ${i("完成","cyan")}`,!0)}
1
+ import{execSync as e}from"node:child_process";import{renameSync as o}from"node:fs";import{join as n}from"node:path";import{bundleIpa as p,createDir as t,ink as a,print as r}from"@moneko/utils";import l from"../../commom/timer.mjs";export function bundleApk(p,i,u="-release"){r(a("正在编译 apk...","yellow"),!0),l.start(`bundle apk ${u}`),e(`flutter build apk -${u}`),l.end(`bundle apk ${u}`),t(i),o(n(p,`build/app/outputs/flutter-apk/app${u}.apk`),i),r(`✨ ${a("Apk 编译","cyan")}: ${a("完成","cyan")}`,!0)}export function bundleIOS(i,u,d="-release"){r(a("正在编译 ipa...","yellow"),!0),l.start(`bundle ipa ${d}`);let m=n(u,"Runner/Payload");e(`flutter build ios -${d} --no-codesign`),t(m),o(n(i,"build/ios/iphoneos/Runner.app"),m),p(n(u,"Runner"),u,d),l.end(`bundle ipa ${d}`),r(`✨ ${a("ipa 编译","cyan")}: ${a("完成","cyan")}`,!0)}
@@ -1 +1 @@
1
- import e from"mini-css-extract-plugin";import i from"webpack";import{merge as n}from"webpack-merge";import{commonConfig as m}from"../common.mjs";import{CONFIG as r}from"../config.mjs";import{LightningCssMinifyPlugin as t}from"../plugin/lightningcss-plugin.mjs";import l from"../plugin/swc-minify-plugin.mjs";import{getLightningCssTargets as s}from"../polyfills/targets.mjs";let o=[];r.minifier&&(o.push(new l(r.minifier)),o.push(new t({targets:s()})));let p={maxAssetSize:256e3,maxEntrypointSize:256e3,assetFilter:e=>!e.endsWith(".map")&&!e.endsWith("ce28377f3a428346.js"),...r.performance},u=n(m,{performance:r.performance&&p,plugins:[new e({filename:"style/[name].bundle.css",chunkFilename:"style/[name].chunk.css",ignoreOrder:!0})],optimization:{splitChunks:r.splitChunk,runtimeChunk:r.runtimeChunk,chunkIds:"deterministic",moduleIds:"deterministic",concatenateModules:!0,emitOnErrors:!1,removeAvailableModules:!0,removeEmptyChunks:!0,mergeDuplicateChunks:!0,minimize:!0,minimizer:o}});if(r.splitChunk&&u.plugins?.push(new i.optimize.MinChunkSizePlugin({minChunkSize:51200})),r.bundleAnalyzer){let e=(await import("webpack-bundle-analyzer")).BundleAnalyzerPlugin;u.plugins?.push(new e({analyzerMode:"static",reportFilename:"report.html",openAnalyzer:!1,defaultSizes:"gzip",logLevel:"silent",...r.bundleAnalyzer}))}export default u;
1
+ import e from"mini-css-extract-plugin";import i from"webpack";import{merge as n}from"webpack-merge";import{commonConfig as t}from"../common.mjs";import{CONFIG as m}from"../config.mjs";import{LightningCssMinifyPlugin as r}from"../plugin/lightningcss-plugin.mjs";import s from"../plugin/swc-minify-plugin.mjs";import{getLightningCssTargets as l}from"../polyfills/targets.mjs";let o=[];m.minifier&&(o.push(new s(m.minifier)),o.push(new r({targets:l()})));let p={maxAssetSize:256e3,maxEntrypointSize:256e3,assetFilter:e=>!e.endsWith(".map")&&!e.endsWith("ce28377f3a428346.js"),...m.performance},a=n(t,{performance:m.performance&&p,plugins:[new e({filename:"style/[contenthash].css",chunkFilename:"style/[contenthash].css",ignoreOrder:!0})],optimization:{splitChunks:m.splitChunk,runtimeChunk:m.runtimeChunk,chunkIds:"deterministic",moduleIds:"deterministic",concatenateModules:!0,emitOnErrors:!1,removeAvailableModules:!0,removeEmptyChunks:!0,mergeDuplicateChunks:!0,minimize:!0,minimizer:o}});if(m.splitChunk&&a.plugins?.push(new i.optimize.MinChunkSizePlugin({minChunkSize:51200})),m.bundleAnalyzer){let e=(await import("webpack-bundle-analyzer")).BundleAnalyzerPlugin;a.plugins?.push(new e({analyzerMode:"static",reportFilename:"report.html",openAnalyzer:!1,defaultSizes:"gzip",logLevel:"silent",...m.bundleAnalyzer}))}export default a;
@@ -2,5 +2,5 @@ import { appendToFile } from '@moneko/utils';
2
2
  declare const startDate: Date;
3
3
  declare const startHrTime: [number, number];
4
4
  declare function getCurrentTime(): string;
5
- declare function log(message: unknown): void;
5
+ declare function log(message: Error | string): void;
6
6
  export default log;
@@ -1,3 +1,4 @@
1
- import{appendToFile as t}from"@moneko/utils";let e=new Date,r=process.hrtime();export default function(n){let a=function(){let t=process.hrtime(r),n=t[0],a=t[1],i=new Date(e.getTime()+1e3*n+Math.floor(a/1e6)),g=i.getFullYear(),o=String(i.getMonth()+1).padStart(2,"0"),$=String(i.getDate()).padStart(2,"0"),S=String(i.getHours()).padStart(2,"0"),l=String(i.getMinutes()).padStart(2,"0"),p=String(i.getSeconds()).padStart(2,"0"),s=String(Math.floor(a%1e6/1e3)).padStart(3,"0"),d=String(a%1e3).padStart(3,"0");return`${g}-${o}-${$} ${S}:${l}:${p}.${s}${d}`}(),i=String(n).split("\n"),g=`[${a}] ${i[0]}`,o=" ".repeat(`[${a}] `.length),$=i.slice(1).map(t=>`${o}${t}`).join("\n"),S=`${g}${$?`
1
+ import{appendToFile as t}from"@moneko/utils";let e=new Date,r=process.hrtime();export default function(a){let n=function(){let t=process.hrtime(r),a=t[0],n=t[1],i=new Date(e.getTime()+1e3*a+Math.floor(n/1e6)),o=i.getFullYear(),g=String(i.getMonth()+1).padStart(2,"0"),$=String(i.getDate()).padStart(2,"0"),s=String(i.getHours()).padStart(2,"0"),S=String(i.getMinutes()).padStart(2,"0"),l=String(i.getSeconds()).padStart(2,"0"),p=String(Math.floor(n%1e6/1e3)).padStart(3,"0"),d=String(n%1e3).padStart(3,"0");return`${o}-${g}-${$} ${s}:${S}:${l}.${p}${d}`}(),i=(a instanceof Error?`${a.message}
2
+ ${a.stack||""}`:String(a)).split("\n"),o=`[${n}] ${i[0]}`,g=" ".repeat(`[${n}] `.length),$=i.slice(1).map(t=>`${g}${t}`).join("\n"),s=`${o}${$?`
2
3
  ${$}`:""}
3
- `;t(`logs/${a.substring(0,16)}.log`,S)}
4
+ `;t(`logs/${n.substring(0,16)}.log`,s)}
@@ -0,0 +1,12 @@
1
+ import { hrtime } from 'node:process';
2
+ import { ink, println } from '@moneko/utils';
3
+ interface Timer {
4
+ start(label: string): void;
5
+ end(label: string): {
6
+ nanoseconds: bigint;
7
+ milliseconds: number;
8
+ };
9
+ }
10
+ declare const timers: Map<string, bigint>;
11
+ declare const timer: Timer;
12
+ export default timer;
@@ -0,0 +1 @@
1
+ import{hrtime as e}from"node:process";import{ink as t,println as r}from"@moneko/utils";let o=new Map;export default{start(t){o.set(t,e.bigint())},end(i){let l=o.get(i);if(!l)throw Error(`No timer found for label: ${i}`);let n=e.bigint()-l,m=Number(n)/1e6;return o.delete(i),r(`⚡ ${t(i,"cyan",{bold:!0})}: ${t(`${m} ms`,"90")}`,!0),{nanoseconds:n,milliseconds:m}}};
package/lib/common.mjs CHANGED
@@ -1 +1 @@
1
- import{extname as e,join as t,resolve as o}from"node:path";import s,{config_files as n,CUSTOMCONFIG as a}from"./commom/paths.mjs";import i from"./commom/require.mjs";import r from"./plugin/override-resolve.mjs";import{isObject as l,node_modules as m,resolveProgram as p}from"./utils/index.mjs";import{exampleModuleName as c}from"./vm/example.mjs";import u from"./vm/info.mjs";import{CONFIG as h,PUBLICPATH as f}from"./config.mjs";import d from"./plugins.config.mjs";import{isDev as g,isLibrary as b,NODE_ENV as y,packageJson as j}from"./process-env.mjs";export const outputConfig={path:p(b?"docs":"dist"),filename:"js/[name].[contenthash].bundle.js",chunkFilename:"js/[name].[contenthash].chunk.js",assetModuleFilename:t=>{let o=e(t.filename||"").substring(1);return`assets/${o}/[name][hash][ext]`},library:{name:`${u.projectName}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${j.name}`,pathinfo:g,clean:!0,publicPath:f,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"anonymous",enabledWasmLoadingTypes:["fetch"],hotUpdateChunkFilename:"[id].[fullhash].hot.js",hotUpdateMainFilename:"[runtime].[fullhash].hot.json"};let v={main:[m("@app/entry")]};if(h.polyfill&&v.main.unshift(t(s.corePath,"./polyfills/replace-children.mjs")),g&&h.refresh&&h.env.injectRemoteReactRefresh&&v.main.unshift(i.resolve("@moneko/react/lib/injectRemoteReactRefresh.js")),h.entry&&("string"==typeof h.entry?v={main:[h.entry]}:Object.keys(h.entry)&&(v=Object.assign(v,h.entry))),"string"==typeof v.main&&(v.main=[v.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 C={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:s.webpackCachePath,memoryCacheUnaffected:!0,name:`.${[a,y].filter(Boolean).join("-")}`,version:`${j.version}`,buildDependencies:{config:n}};!1===h.cache?C=!1:l(h.cache)&&(C=Object.assign(C,h.cache));export const commonConfig={name:"client",target:"web",devtool:h.devtool,entry:v,mode:g?"development":"production",stats:"errors-only",cache:C,snapshot:{immutablePaths:[/node_modules\/(?!(@app|@moneko)\/)/],managedPaths:[/^@app\/.+/,/^@moneko\/.+/],buildDependencies:{timestamp:!0,hash:!0}},infrastructureLogging:{level:"error"},externalsPresets:h.externalsPresets,plugins:d,node:{global:!1,__filename:!1,__dirname:!1},experiments:{topLevelAwait:!0,asyncWebAssembly:!0,cacheUnaffected:!0,layers:!0,lazyCompilation:h.lazyCompilation&&g&&{imports:!0,entries:!0,test:e=>{let t=e.nameForCondition();return!!(t&&(t.startsWith(m(c))||t.startsWith(m("@app/comment"))||t.startsWith(s.pagesPath)||t.startsWith(s.componentsPath)))}},buildHttp:l(h.buildHttp)?{allowedUris:[],lockfileLocation:o(s.httpCachePath,"http.lock"),cacheLocation:o(s.httpCachePath,"data"),upgrade:!0,...h.buildHttp}:h.buildHttp,backCompat:!0,futureDefaults:!0,css:!1,outputModule:!1},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:h.alias,modules:[s.nodeModules,s.pnpmNodeModules,s.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:h.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:h.externals,output:outputConfig};h.overrideResolve&&commonConfig.resolve.plugins.push(new r(Object.assign({original:h.alias["@"],override:a&&p(a)},h.overrideResolve)));
1
+ import{extname as e,join as t,resolve as o}from"node:path";import s,{config_files as n,CUSTOMCONFIG as a}from"./commom/paths.mjs";import i from"./commom/require.mjs";import r from"./plugin/override-resolve.mjs";import{isObject as l,node_modules as m,resolveProgram as p}from"./utils/index.mjs";import{exampleModuleName as c}from"./vm/example.mjs";import u from"./vm/info.mjs";import{CONFIG as h,PUBLICPATH as f}from"./config.mjs";import d from"./plugins.config.mjs";import{isDev as g,isLibrary as b,NODE_ENV as y,packageJson as j}from"./process-env.mjs";export const outputConfig={path:p(b?"docs":"dist"),filename:"js/[name].[contenthash].bundle.js",chunkFilename:"js/[contenthash].chunk.js",assetModuleFilename:t=>{let o=e(t.filename||"").substring(1);return`assets/${o}/[hash][ext]`},library:{name:`${u.projectName}`,type:"umd",umdNamedDefine:!0},globalObject:"self",chunkLoadingGlobal:`webpackJsonp_${j.name}`,pathinfo:g,clean:!0,publicPath:f,asyncChunks:!0,charset:!0,iife:!0,crossOriginLoading:"anonymous",enabledWasmLoadingTypes:["fetch"],hotUpdateChunkFilename:"[id].[fullhash].hot.js",hotUpdateMainFilename:"[runtime].[fullhash].hot.json"};let v={main:[m("@app/entry")]};if(h.polyfill&&v.main.unshift(t(s.corePath,"./polyfills/replace-children.mjs")),g&&h.refresh&&h.env.injectRemoteReactRefresh&&v.main.unshift(i.resolve("@moneko/react/lib/injectRemoteReactRefresh.js")),h.entry&&("string"==typeof h.entry?v={main:[h.entry]}:Object.keys(h.entry)&&(v=Object.assign(v,h.entry))),"string"==typeof v.main&&(v.main=[v.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 C={type:"filesystem",allowCollectingMemory:!0,cacheDirectory:s.webpackCachePath,memoryCacheUnaffected:!0,name:`.${[a,y].filter(Boolean).join("-")}`,version:`${j.version}`,buildDependencies:{config:n}};!1===h.cache?C=!1:l(h.cache)&&(C=Object.assign(C,h.cache));export const commonConfig={name:"client",target:"web",devtool:h.devtool,entry:v,mode:g?"development":"production",stats:"errors-only",cache:C,snapshot:{immutablePaths:[/node_modules\/(?!(@app|@moneko)\/)/],managedPaths:[/^@app\/.+/,/^@moneko\/.+/],buildDependencies:{timestamp:!0,hash:!0}},infrastructureLogging:{level:"error"},externalsPresets:h.externalsPresets,plugins:d,node:{global:!1,__filename:!1,__dirname:!1},experiments:{topLevelAwait:!0,asyncWebAssembly:!0,cacheUnaffected:!0,layers:!0,lazyCompilation:h.lazyCompilation&&g&&{imports:!0,entries:!0,test:e=>{let t=e.nameForCondition();return!!(t&&(t.startsWith(m(c))||t.startsWith(m("@app/comment"))||t.startsWith(s.pagesPath)||t.startsWith(s.componentsPath)))}},buildHttp:l(h.buildHttp)?{allowedUris:[],lockfileLocation:o(s.httpCachePath,"http.lock"),cacheLocation:o(s.httpCachePath,"data"),upgrade:!0,...h.buildHttp}:h.buildHttp,backCompat:!0,futureDefaults:!0,css:!1,outputModule:!1},resolve:{extensions:[".mts",".mjs",".ts",".tsx",".js",".jsx",".json",".wasm"],alias:h.alias,modules:[s.nodeModules,s.pnpmNodeModules,s.denoNodeModules],mainFields:["browser","module","main"],mainFiles:["index"],plugins:h.resolvePlugins,preferAbsolute:!0,cache:!0,fallback:{}},externals:h.externals,output:outputConfig};h.overrideResolve&&commonConfig.resolve.plugins.push(new r(Object.assign({original:h.alias["@"],override:a&&p(a)},h.overrideResolve)));
package/lib/index.d.mts CHANGED
@@ -4,6 +4,7 @@ export { getIPv4, getPort } from './commom/net.mjs';
4
4
  export { CUSTOMCONFIG, default as paths, routeDir, yarnArgv } from './commom/paths.mjs';
5
5
  export { default as require } from './commom/require.mjs';
6
6
  export { default as Rule } from './commom/rule.mjs';
7
+ export { default as timer } from './commom/timer.mjs';
7
8
  export { type MockConfiguration, type ProxyFuncType, type RequestFormData, yApiMock, type YApiOption, type YApiOptionBySchema, yApiSchemaMock } from './dev/mock.mjs';
8
9
  export type { ProxyConfig } from './dev/proxy.mjs';
9
10
  export type { CssInJsMinifyOption } from './loader/css-in-js-minify.cjs';
package/lib/index.mjs CHANGED
@@ -1 +1 @@
1
- export{default as hasPkg}from"./commom/has-pkg.mjs";export{getIPv4,getPort}from"./commom/net.mjs";export{CUSTOMCONFIG,default as paths,routeDir,yarnArgv}from"./commom/paths.mjs";export{default as require}from"./commom/require.mjs";export{default as Rule}from"./commom/rule.mjs";export{yApiMock,yApiSchemaMock}from"./dev/mock.mjs";export{default as jsxDomExpressions}from"./options/jsx-dom-expressions.mjs";export{default as splitChunk}from"./options/split-chunk.mjs";export{APPTYPE,coreName,FRAMEWORK,isCI,isDev,isLibrary,isMicro,mainDirectory,packageJson,PACKAGENAME}from"./process-env.mjs";export{resolveProgram,toCamelCase}from"./utils/index.mjs";
1
+ export{default as hasPkg}from"./commom/has-pkg.mjs";export{getIPv4,getPort}from"./commom/net.mjs";export{CUSTOMCONFIG,default as paths,routeDir,yarnArgv}from"./commom/paths.mjs";export{default as require}from"./commom/require.mjs";export{default as Rule}from"./commom/rule.mjs";export{default as timer}from"./commom/timer.mjs";export{yApiMock,yApiSchemaMock}from"./dev/mock.mjs";export{default as jsxDomExpressions}from"./options/jsx-dom-expressions.mjs";export{default as splitChunk}from"./options/split-chunk.mjs";export{APPTYPE,coreName,FRAMEWORK,isCI,isDev,isLibrary,isMicro,mainDirectory,packageJson,PACKAGENAME}from"./process-env.mjs";export{resolveProgram,toCamelCase}from"./utils/index.mjs";
@@ -1,2 +1,2 @@
1
- let e;import{join as s,sep as o}from"node:path";import{saveFileSync as t}from"@moneko/utils";import r,{CUSTOMCONFIG as a}from"./commom/paths.mjs";import n from"./commom/reactive-object.mjs";import m from"./commom/require.mjs";import i from"./commom/rule.mjs";import l from"./options/css-extract.mjs";import c from"./options/modify-vars.mjs";import d from"./options/reslove.mjs";import p from"./options/swcrc.mjs";import{getLightningCssTargets as u}from"./polyfills/targets.mjs";import{node_modules as f,resolveProgram as h,toCamelCase as j}from"./utils/index.mjs";import y from"./utils/svg-to-data-uri.mjs";import{comment as g,getCommentPath as v}from"./vm/docs.mjs";import x from"./vm/generate-doc.mjs";import{outputConfig as w}from"./common.mjs";import{CONFIG as P}from"./config.mjs";import{FRAMEWORK as L,isDev as k,isLibrary as M}from"./process-env.mjs";let _={loader:s(r.corePath,"/loader/lightning-css/loader.cjs"),options:{sourceMap:!!P.sourceMap,targets:u(),rem:!!P.rem,esModule:!0,modules:{auto(e){if(e){if(e.endsWith(".css")&&!e.endsWith("module.css"))return!1;for(let s=0,o=I.length;s<o;s++)if(e.includes(I[s]))return i.css_module.test(e)}return i.node_modules_css_module.test(e)},localIdentName:"[name][hash]_[local]",namedExport:!0,exportLocalsConvention:"dashesOnly",exportOnlyLocals:!1,getJSON:P.cssModuleDefinition?function(e){q.setData(`${e.resourcePath}.d.ts`,`${e.exports.map(({name:e,value:s})=>`export const ${j(e)}: '${s}';`).join("\n")}
2
- `)}:void 0},importLoaders:2}},O={loader:d.lessLoader,options:{sourceMap:!!P.sourceMap,lessOptions:{modifyVars:c,javascriptEnabled:!0}}},b=new Map;function C(e){if(b.has(e))return b.get(e);try{let s;let t=m.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),b.set(e,[s]),[s]}catch{try{let s=m.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");b.set(e,[s])}catch{b.set(e,[f(e),f(`.pnpm/${e}`)])}return b.get(e)}}let I=[...P.cssModules,`@moneko/${L}`,"neko-ui"].map(C).flat(),$=["components","example","mock","site","src","server"].map(h);function B(e){return new Promise(s=>{s([...$,r.corePath,...P.rulesInclude?.[e]?.map(C).flat()||[]])})}a&&$.push(h(a)),P.overrideResolve&&P.overrideResolve.override&&$.push(P.overrideResolve.override);let J=await Promise.all([B("css"),B("js"),B("media"),B("wasm"),B("font")]),W=J[0],R=J[1],N=J[2],S=J[3],z=J[4];d.sassLoader&&(e={loader:d.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let D=M&&k&&{test:i.tsdoc,include:P.alias["@pkg"],exclude:[/node_modules\/(?!(@app|@moneko)).+/,i.__tests__],enforce:"pre",loader:s(r.corePath,"/loader/ts-doc.cjs"),options:{comment:g,generateDoc:x,getCommentPath:v}},E=w.library?.type==="umd"&&!1===P.htmlPluginOption,Q=[{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/[name][hash][ext]":"assets/[name][hash][ext]"}}},{test:i.wasm,type:"webassembly/async",include:S},{test:i.txt,type:"asset/source"},{test:i.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:E?()=>!0:{maxSize:4096}},generator:{filename:e=>e.filename?.toLocaleLowerCase().endsWith(".svg")?"assets/svg/[name][hash][ext]":"assets/images/[name][hash][ext]",dataUrl:(e,s)=>s.filename.toLocaleLowerCase().endsWith(".svg")?y(e.toString()):e},include:N},{test:i.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[name][hash][ext]"},include:N},{test:i.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[name][hash][ext]"},include:z}],U=P.prefixJsLoader.filter(Boolean)||[];switch(L){case"react":P.reactCompiler&&U.unshift({loader:s(r.corePath,"/loader/react-compiler.cjs"),options:P.reactCompiler});break;case"solid":P.refresh=!1}P.cssInJs&&"object"==typeof P.cssInJs.minify&&U.unshift({loader:s(r.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},P.cssInJs.minify)});let q=new n({});q.on("change",(e,s)=>{t(e,s)});export default(o=>{let t={loader:d.swcLoader,options:p(o)};return{parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0}},noParse:P.noParse,rules:[!1!==P.htmlPluginOption&&D,{oneOf:[...Q,{test:i.js,use:[...U,t].filter(Boolean),include:R},{test:i.css,use:[l,_],include:W},e&&{test:i.scss,use:[l,_,e],include:W},{test:i.less,use:[l,_,O],include:W},{test:i.markdown,use:[...U,{loader:s(r.corePath,"/loader/mdx.cjs"),options:P.mdx}].filter(Boolean),exclude:[/node_modules\/(?!(@app|@moneko)).+/]}].filter(Boolean)},...P.moduleRules].filter(Boolean)}});
1
+ let e;import{join as s,sep as o}from"node:path";import{saveFileSync as t}from"@moneko/utils";import r,{CUSTOMCONFIG as a}from"./commom/paths.mjs";import n from"./commom/reactive-object.mjs";import i from"./commom/require.mjs";import m from"./commom/rule.mjs";import l from"./options/css-extract.mjs";import c from"./options/modify-vars.mjs";import d from"./options/reslove.mjs";import p from"./options/swcrc.mjs";import{getLightningCssTargets as u}from"./polyfills/targets.mjs";import{node_modules as f,resolveProgram as h,toCamelCase as j}from"./utils/index.mjs";import y from"./utils/svg-to-data-uri.mjs";import{comment as g,getCommentPath as v}from"./vm/docs.mjs";import x from"./vm/generate-doc.mjs";import{outputConfig as w}from"./common.mjs";import{CONFIG as P}from"./config.mjs";import{FRAMEWORK as L,isDev as k,isLibrary as M}from"./process-env.mjs";let _={loader:s(r.corePath,"/loader/lightning-css/loader.cjs"),options:{sourceMap:!!P.sourceMap,targets:u(),rem:!!P.rem,esModule:!0,modules:{auto(e){if(e){if(e.endsWith(".css")&&!e.endsWith("module.css"))return!1;for(let s=0,o=I.length;s<o;s++)if(e.includes(I[s]))return m.css_module.test(e)}return m.node_modules_css_module.test(e)},localIdentName:"[hash]_[local]",namedExport:!0,exportLocalsConvention:"dashesOnly",exportOnlyLocals:!1,getJSON:P.cssModuleDefinition?function(e){q.setData(`${e.resourcePath}.d.ts`,`${e.exports.map(({name:e,value:s})=>`export const ${j(e)}: '${s}';`).join("\n")}
2
+ `)}:void 0},importLoaders:2}},O={loader:d.lessLoader,options:{sourceMap:!!P.sourceMap,lessOptions:{modifyVars:c,javascriptEnabled:!0}}},b=new Map;function C(e){if(b.has(e))return b.get(e);try{let s;let t=i.resolve(e).split(o),r=t.lastIndexOf("node_modules");return s=-1!==r?t.slice(0,r).join(o):t.join(o),b.set(e,[s]),[s]}catch{try{let s=i.resolve(`${e}${o}package.json`).replace(`${o}package.json`,"");b.set(e,[s])}catch{b.set(e,[f(e),f(`.pnpm/${e}`)])}return b.get(e)}}let I=[...P.cssModules,`@moneko/${L}`,"neko-ui"].map(C).flat(),$=["components","example","mock","site","src","server"].map(h);function B(e){return new Promise(s=>{s([...$,r.corePath,...P.rulesInclude?.[e]?.map(C).flat()||[]])})}a&&$.push(h(a)),P.overrideResolve&&P.overrideResolve.override&&$.push(P.overrideResolve.override);let J=await Promise.all([B("css"),B("js"),B("media"),B("wasm"),B("font")]),W=J[0],R=J[1],N=J[2],S=J[3],z=J[4];d.sassLoader&&(e={loader:d.sassLoader,options:{implementation:await import("sass"),sassOptions:{}}});let D=M&&k&&{test:m.tsdoc,include:P.alias["@pkg"],exclude:[/node_modules\/(?!(@app|@moneko)).+/,m.__tests__],enforce:"pre",loader:s(r.corePath,"/loader/ts-doc.cjs"),options:{comment:g,generateDoc:x,getCommentPath:v}},E=w.library?.type==="umd"&&!1===P.htmlPluginOption,Q=[{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:m.wasm,type:"webassembly/async",include:S},{test:m.txt,type:"asset/source"},{test:m.image,type:"asset",dependency:{not:["url"]},parser:{dataUrlCondition:E?()=>!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")?y(e.toString()):e},include:N},{test:m.video,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/video/[hash][ext]"},include:N},{test:m.font,type:"asset",dependency:{not:["url"]},generator:{filename:"assets/fonts/[hash][ext]"},include:z}],U=P.prefixJsLoader.filter(Boolean)||[];switch(L){case"react":P.reactCompiler&&U.unshift({loader:s(r.corePath,"/loader/react-compiler.cjs"),options:P.reactCompiler});break;case"solid":P.refresh=!1}P.cssInJs&&"object"==typeof P.cssInJs.minify&&U.unshift({loader:s(r.corePath,"/loader/css-in-js-minify.cjs"),options:Object.assign({moduleName:"@moneko/css",allowFuncs:["css","injectGlobal"]},P.cssInJs.minify)});let q=new n({});q.on("change",(e,s)=>{t(e,s)});export default(o=>{let t={loader:d.swcLoader,options:p(o)};return{parser:{javascript:{commonjsMagicComments:!0,dynamicImportMode:"lazy",dynamicImportPrefetch:!1,dynamicImportPreload:!1,importMeta:!0,importMetaContext:!0}},noParse:P.noParse,rules:[!1!==P.htmlPluginOption&&D,{oneOf:[...Q,{test:m.js,use:[...U,t].filter(Boolean),include:R},{test:m.css,use:[l,_],include:W},e&&{test:m.scss,use:[l,_,e],include:W},{test:m.less,use:[l,_,O],include:W},{test:m.markdown,use:[...U,{loader:s(r.corePath,"/loader/mdx.cjs"),options:P.mdx}].filter(Boolean),exclude:[/node_modules\/(?!(@app|@moneko)).+/]}].filter(Boolean)},...P.moduleRules].filter(Boolean)}});
@@ -0,0 +1,17 @@
1
+ import { compression } from '@moneko/utils';
2
+ import { type AssetInfo, type Compilation, type Compiler, type sources, type WebpackError } from 'webpack';
3
+ type Source = sources.Source;
4
+ interface CompressionPluginOptions {
5
+ test: RegExp;
6
+ algorithm: 'gzip' | 'deflate' | 'brotliCompress';
7
+ filename: string;
8
+ }
9
+ declare class CompressionPlugin {
10
+ private name: string;
11
+ private options: CompressionPluginOptions;
12
+ constructor(options: CompressionPluginOptions);
13
+ private runCompressionAlgorithm(input: Buffer): Buffer;
14
+ async compress(compiler: Compiler, compilation: Compilation, assets: Record<string, Source>);
15
+ apply(compiler: Compiler);
16
+ }
17
+ export default CompressionPlugin;
@@ -0,0 +1 @@
1
+ import{compression as e}from"@moneko/utils";export default class{constructor(e){this.name="compression-plugin";let{test:s,algorithm:t="gzip",filename:o="[path][base].gz"}=e||{};this.options={test:s,algorithm:t,filename:o}}runCompressionAlgorithm(s){return Buffer.from(e(Buffer.isBuffer(s)?Array.from(s):s,this.options.algorithm))}async compress(e,s,t){let o=s.getCache(this.name),{RawSource:i}=e.webpack.sources;await Promise.all(Object.keys(t).map(async t=>{let r;let a="gzip"===this.options.algorithm?"gzipped":`${this.options.algorithm}ed`,{info:m,source:p}=s.getAsset(t);if(m.compressed||!e.webpack.ModuleFilenameHelpers.matchObject.bind(void 0,this.options)(t)||m.related&&m.related[a])return!1;let n=o.getItemCache(JSON.stringify({name:t,algorithm:this.options.algorithm}),o.getLazyHashedEtag(p)),l=await n.getPromise()||{};if(!l.source){if("function"==typeof p.buffer)r=p.buffer();else{let e=p.source();r=Buffer.isBuffer(e)?e:Buffer.from(e)}if(!l.compressed&&r)try{l.compressed=this.runCompressionAlgorithm(r)}catch(e){s.errors.push(e);return}l.compressed&&(l.source=new i(l.compressed)),await n.storePromise(l)}let c=s.getPath(this.options.filename,{filename:t}),f={compressed:!0};m.immutable&&/(\[name]|\[base]|\[file])/.test(this.options.filename)&&(f.immutable=!0),s.updateAsset(t,p,{related:{[a]:c}}),s.emitAsset(c,l.source,f)}))}apply(e){let s=this.constructor.name;e.hooks.thisCompilation.tap(s,t=>{t.hooks.processAssets.tapPromise({name:s,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_TRANSFER,additionalAssets:!0},s=>this.compress(e,t,s))})}}
@@ -1,6 +1,8 @@
1
+ import { statSync } from 'node:fs';
1
2
  import { resolve } from 'node:path';
2
3
  import { loadFileRaw, scanFolderSync } from '@moneko/utils';
3
- import webpack, { type Compiler } from 'webpack';
4
+ import webpack, { type Compiler, type sources } from 'webpack';
5
+ import log from '../commom/log.mjs';
4
6
  export interface CopyPluginOption {
5
7
  files?: string[];
6
8
  dirs?: string[];
@@ -11,7 +13,9 @@ export declare class CopyPlugin {
11
13
  private readonly baseFiles: Set<string>;
12
14
  private readonly dirs: Set<string>;
13
15
  private cacheFiles: string[];
16
+ private fileTimestamps: Map<string, number>;
14
17
  constructor(option: CopyPluginOption);
15
18
  private getFiles();
19
+ private hasFileChanged(filePath: string): boolean;
16
20
  apply(compiler: Compiler);
17
21
  }
@@ -1 +1 @@
1
- import{resolve as e}from"node:path";import{loadFileRaw as s,scanFolderSync as t}from"@moneko/utils";import i from"webpack";let o="CopyPlugin",l=i.sources.RawSource;export class CopyPlugin{constructor(s){this.cacheFiles=[],this.baseFiles=new Set(s.files?.map(s=>e(s))||[]),this.dirs=new Set(s.dirs||[])}getFiles(){let e=new Set(this.baseFiles);for(let s of this.dirs)t(s,["\\.*"]).forEach(s=>e.add(s));let s={deleted:[],files:[...e]};for(let t of new Set(this.cacheFiles))e.has(t)||s.deleted.push(t);return this.cacheFiles=s.files,s}apply(e){e.hooks.thisCompilation.tap({name:o,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},e=>{e.hooks.processAssets.tapPromise(o,async()=>{let t=this.getFiles();(await Promise.all(t.files.map(e=>s(e)))).forEach((s,i)=>{null!==s&&e.emitAsset(t.files[i],new l(Buffer.from(s)))}),t.deleted.forEach(s=>{e.deleteAsset(s)})})})}}
1
+ import{statSync as e}from"node:fs";import{resolve as t}from"node:path";import{loadFileRaw as s,scanFolderSync as i}from"@moneko/utils";import a from"webpack";import l from"../commom/log.mjs";let o="CopyPlugin",m=a.sources.RawSource;export class CopyPlugin{constructor(e){this.cacheFiles=[],this.fileTimestamps=new Map,this.baseFiles=new Set(e.files?.map(e=>t(e))||[]),this.dirs=new Set(e.dirs||[])}getFiles(){let e=new Set(this.baseFiles);for(let t of this.dirs)i(t,["\\.*"]).forEach(t=>e.add(t));let t={deleted:[],files:[...e]};for(let s of new Set(this.cacheFiles))e.has(s)||t.deleted.push(s);return this.cacheFiles=t.files,t}hasFileChanged(t){try{let s=e(t).mtimeMs,i=this.fileTimestamps.get(t)||0;return this.fileTimestamps.set(t,s),s>i}catch(e){return l(e),!0}}apply(e){e.hooks.thisCompilation.tap({name:o,stage:e.webpack.Compilation.PROCESS_ASSETS_STAGE_ADDITIONS},e=>{let t=e.getCache(o);e.hooks.processAssets.tapPromise(o,async()=>{let i=this.getFiles();await Promise.all(i.files.map(async i=>{let a=this.hasFileChanged(i),l=t.getItemCache(i,null),o=await l.getPromise();if(o&&!a){e.emitAsset(i,o.source);return}let r=await s(i);if(null!==r){let t=new m(Buffer.from(r));await l.storePromise({source:t,timestamp:this.fileTimestamps.get(i)}),e.emitAsset(i,t)}})),i.deleted.forEach(t=>{e.deleteAsset(t),this.fileTimestamps.delete(t)})})})}}
@@ -17,6 +17,11 @@ interface MinifyPluginOpts {
17
17
  exclude?: Filter | Filter[];
18
18
  targets?: Targets;
19
19
  }
20
+ interface CacheItem {
21
+ source: sources.Source;
22
+ map?: string | object | Buffer;
23
+ minimized: boolean;
24
+ }
20
25
  export declare class LightningCssMinifyPlugin {
21
26
  private readonly options: Omit<MinifyPluginOpts, 'implementation'>;
22
27
  private readonly transform: Implementation['transform'];
@@ -1 +1 @@
1
- import{Buffer as s}from"node:buffer";import{transform as t}from"lightningcss";import i from"webpack";let o=new TextEncoder,e=i.sources.RawSource,n=i.sources.SourceMapSource,r=i.ModuleFilenameHelpers.matchObject,a="lightning-css-minify",m=/\.(c|le|sc|sa)ss(?:\?.*)?$/i;export class LightningCssMinifyPlugin{constructor(s={}){let{implementation:i,...o}=s;if(i&&"function"!=typeof i.transform)throw TypeError(`[LightningCssMinifyPlugin]: implementation.transform must be an 'lightningcss' transform function. Received ${typeof i.transform}`);this.transform=i?.transform??t,this.options=o}apply(s){let t=JSON.stringify({name:a,version:"0.0.1",options:this.options});s.hooks.compilation.tap(a,s=>{s.hooks.chunkHash.tap(a,(s,i)=>i.update(t)),s.hooks.processAssets.tapPromise({name:a,stage:i.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE,additionalAssets:!0},async()=>await this.transformAssets(s)),s.hooks.statsPrinter.tap(a,s=>{s.hooks.print.for("asset.info.minimized").tap(a,(s,{green:t,formatFlag:i})=>s?t(i("minimized")):void 0)})})}async transformAssets(t){let{options:{devtool:i}}=t.compiler,{include:a,exclude:p,test:c,sourceMap:f=void 0===this.options.sourceMap?!!(i&&i.includes("source-map")):this.options.sourceMap,...l}=this.options,h=t.getAssets().filter(s=>!s.info.minimized&&(c||m).test(s.name)&&r({include:a,exclude:p},s.name));await Promise.all(h.map(async i=>{let r;let a=i.source.source(),m="string"==typeof a?o.encode(a):a,p=this.transform({filename:i.name,code:m,minify:!0,sourceMap:f,...l}),c=s.from(p.code);r=f?new n(c,i.name,p.map||"",a,p.map||"",!0):new e(c),t.updateAsset(i.name,r,{...i.info,minimized:!0})}))}}
1
+ import{Buffer as s}from"node:buffer";import{transform as e}from"lightningcss";import i from"webpack";let t=new TextEncoder,o=i.sources.RawSource,n=i.sources.SourceMapSource,a=i.ModuleFilenameHelpers.matchObject,r="lightning-css-minify",m=/\.(c|le|sc|sa)ss(?:\?.*)?$/i;export class LightningCssMinifyPlugin{constructor(s={}){let{implementation:i,...t}=s;if(i&&"function"!=typeof i.transform)throw TypeError(`[LightningCssMinifyPlugin]: implementation.transform must be an 'lightningcss' transform function. Received ${typeof i.transform}`);this.transform=i?.transform??e,this.options=t}apply(s){let e=JSON.stringify({name:r,version:"0.0.1",options:this.options});s.hooks.compilation.tap(r,s=>{s.hooks.chunkHash.tap(r,(s,i)=>i.update(e)),s.hooks.processAssets.tapPromise({name:r,stage:i.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE,additionalAssets:!0},async()=>await this.transformAssets(s)),s.hooks.statsPrinter.tap(r,s=>{s.hooks.print.for("asset.info.minimized").tap(r,(s,{green:e,formatFlag:i})=>s?e(i("minimized")):void 0)})})}async transformAssets(e){let{options:{devtool:i}}=e.compiler,{include:p,exclude:c,test:f,sourceMap:l=void 0===this.options.sourceMap?!!(i&&i.includes("source-map")):this.options.sourceMap,...u}=this.options,h=e.getCache(r),d=e.getAssets().filter(s=>!s.info.minimized&&(f||m).test(s.name)&&a({include:p,exclude:c},s.name));await Promise.all(d.map(async i=>{let a;let r=h.getItemCache(JSON.stringify({name:i.name,sourceMap:l,transformOptions:u}),h.getLazyHashedEtag(i.source)),m=await r.getPromise();if(m&&m.minimized){e.updateAsset(i.name,m.source,{...i.info,minimized:!0});return}let p=i.source.source(),c="string"==typeof p?t.encode(p):p,f=this.transform({filename:i.name,code:c,minify:!0,sourceMap:l,...u}),d=s.from(f.code),g={source:a=l?new n(d,i.name,f.map||"",p,f.map||"",!0):new o(d),map:f.map||void 0,minimized:!0};await r.storePromise(g),e.updateAsset(i.name,a,{...i.info,minimized:!0})}))}}
@@ -1,5 +1,9 @@
1
1
  import { type JsMinifyOptions, minify } from '@swc/core';
2
- import webpack, { type Compiler } from 'webpack';
2
+ import webpack, { type Compilation, type Compiler, type sources, type WebpackError } from 'webpack';
3
+ interface CacheItem {
4
+ source: sources.RawSource;
5
+ minimized: boolean;
6
+ }
3
7
  declare class SwcMinifyPlugin {
4
8
  private name: string;
5
9
  private options: JsMinifyOptions;
@@ -1 +1 @@
1
- import{minify as e}from"@swc/core";import o from"webpack";export default class{constructor(e){this.name="SwcMinifyPlugin",this.options={format:{comments:!1},ecma:2015,compress:{drop_console:!0,drop_debugger:!0,global_defs:{"@alert":"console.log"},pure_funcs:["console.log","console.warn","console.error","console.info"],ecma:2015,toplevel:!1,module:!1,ie8:!1,keep_classnames:void 0,keep_fnames:!1,top_retain:[],keep_infinity:!0},mangle:!0,...e}}apply(s){s.hooks.compilation.tap(this.name,s=>{s.hooks.processAssets.tapAsync({name:this.name,stage:o.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE,additionalAssets:!0},async(t,a)=>{let n=Object.keys(t).filter(e=>e.endsWith(".js")&&!e.endsWith(".min.js"));try{await Promise.all(n.map(async t=>{let a=s.getAsset(t);if(a){let n=a.source.source().toString().replace(/\r\n/g,"\n"),{code:i}=await e(n,this.options);s.updateAsset(t,new o.sources.RawSource(i))}})),a()}catch(e){a(e)}})})}}
1
+ import{minify as e}from"@swc/core";import s from"webpack";export default class{constructor(e){this.name="SwcMinifyPlugin",this.options={format:{comments:!1},ecma:2015,compress:{drop_console:!0,drop_debugger:!0,global_defs:{"@alert":"console.log"},pure_funcs:["console.log","console.warn","console.error","console.info"],ecma:2015,toplevel:!1,module:!1,ie8:!1,keep_classnames:void 0,keep_fnames:!1,top_retain:[],keep_infinity:!0},mangle:!0,...e}}apply(o){o.hooks.compilation.tap(this.name,o=>{o.hooks.processAssets.tapAsync({name:this.name,stage:s.Compilation.PROCESS_ASSETS_STAGE_OPTIMIZE_SIZE,additionalAssets:!0},async(t,i)=>{let r=o.getCache(this.name),n=Object.keys(t).filter(e=>e.endsWith(".js")&&!e.endsWith(".min.js"));try{await Promise.all(n.map(async t=>{let i;let n=o.getAsset(t);if(!n||n.info.minimized)return;let a=r.getItemCache(JSON.stringify(this.options),r.getLazyHashedEtag(n.source)),c=await a.getPromise();if(c&&c.minimized){o.updateAsset(t,c.source,{minimized:!0});return}if("function"==typeof n.source.buffer)i=n.source.buffer();else{let e=n.source.source();i=Buffer.isBuffer(e)?e:Buffer.from(e)}try{let{code:r}=await e(i.toString().replace(/\r\n/g,"\n"),this.options),n={source:new s.sources.RawSource(r),minimized:!0};await a.storePromise(n),o.updateAsset(t,n.source,{minimized:!0})}catch(e){o.errors.push(e)}})),i()}catch(e){i(e)}})})}}
@@ -1,4 +1,4 @@
1
- import type { Compiler } from 'webpack';
1
+ import type { Compiler, WebpackPluginInstance } from 'webpack';
2
2
  import VirtualModulesPlugin from 'webpack-virtual-modules';
3
3
  import parseModuleMeta from '../commom/parse-module-meta.mjs';
4
4
  import paths from '../commom/paths.mjs';
@@ -14,7 +14,7 @@ export interface VirtualModulePluginOption {
14
14
  [key: string]: string | object;
15
15
  }
16
16
  declare const PLUGIN_NAME: string;
17
- export declare class VirtualModuleWebpackPlugin {
17
+ export declare class VirtualModuleWebpackPlugin implements WebpackPluginInstance {
18
18
  private virtualModules: VirtualModulesPlugin;
19
19
  private options: Record<string, string>;
20
20
  private init: boolean;
@@ -1,5 +1,5 @@
1
- import CompressionPlugin from 'compression-webpack-plugin';
2
1
  import webpack, { type WebpackPluginInstance } from 'webpack';
2
+ import CompressionPlugin from './plugin/compression.mjs';
3
3
  import { CopyPlugin } from './plugin/copy.mjs';
4
4
  import { HtmlMeta, HtmlPlugin } from './plugin/html-plugin.mjs';
5
5
  import moduleFederation from './plugin/module-federation.mjs';
@@ -1 +1 @@
1
- import e from"compression-webpack-plugin";import t from"webpack";import{CopyPlugin as i}from"./plugin/copy.mjs";import{HtmlPlugin as o}from"./plugin/html-plugin.mjs";import r from"./plugin/module-federation.mjs";import{VirtualModuleWebpackPlugin as l}from"./plugin/virtual-module.mjs";import{CONFIG as n}from"./config.mjs";import{isDev as p,packageJson as a}from"./process-env.mjs";let s=[...r,new l(n.virtualModule),new i(n.copy),new t.DefinePlugin({"process.env":JSON.stringify(n.env)}),new t.IgnorePlugin({resourceRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),...n.plugins,p&&new e({filename:"[path][base].gz",algorithm:"gzip",test:/\.(js|css|html|svg)$/})].filter(Boolean);if(n.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:a.description,keywords:Array.isArray(a.keywords)?a.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};n.seo&&(e.relCanonical={rel:"canonical",href:`https://${n.seo.domain}${n.basename}`}),n.htmlPluginOption.meta&&Object.assign(e,n.htmlPluginOption.meta),s.push(new o({...n.htmlPluginOption,meta:e}))}if(n.fixBrowserRouter){let e=n.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,i=n.fixBrowserRouter.pathSegmentsToKeep??e;s.push(new o({filename:n.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>`}))}n.sourceMap&&s.push(new t.SourceMapDevToolPlugin(n.sourceMap));export default s;
1
+ import e from"webpack";import t from"./plugin/compression.mjs";import{CopyPlugin as i}from"./plugin/copy.mjs";import{HtmlPlugin as o}from"./plugin/html-plugin.mjs";import r from"./plugin/module-federation.mjs";import{VirtualModuleWebpackPlugin as l}from"./plugin/virtual-module.mjs";import{CONFIG as n}from"./config.mjs";import{isDev as p,packageJson as a}from"./process-env.mjs";let s=[...r,new l(n.virtualModule),new i(n.copy),new e.DefinePlugin({"process.env":JSON.stringify(n.env)}),new e.IgnorePlugin({resourceRegExp:/\/(__(tests|mocks)__|test|spec|e2e)\//}),...n.plugins,p&&new t({filename:"[path][base].gz",algorithm:"gzip",test:/\.(js|css|html|svg)$/})].filter(Boolean);if(n.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:a.description,keywords:Array.isArray(a.keywords)?a.keywords.toString():"","http-equiv":"refresh",viewport:"width=device-width, initial-scale=1"};n.seo&&(e.relCanonical={rel:"canonical",href:`https://${n.seo.domain}${n.basename}`}),n.htmlPluginOption.meta&&Object.assign(e,n.htmlPluginOption.meta),s.push(new o({...n.htmlPluginOption,meta:e}))}if(n.fixBrowserRouter){let e=n.basename.split("/").filter(Boolean).length,t=`${Array(e).fill("..").join("/")+(e?"/":"")}404.html`,i=n.fixBrowserRouter.pathSegmentsToKeep??e;s.push(new o({filename:n.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>`}))}n.sourceMap&&s.push(new e.SourceMapDevToolPlugin(n.sourceMap));export default s;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moneko/core",
3
- "version": "3.36.3",
3
+ "version": "3.37.1",
4
4
  "description": "core",
5
5
  "main": "lib/index.mjs",
6
6
  "type": "module",
@@ -18,16 +18,15 @@
18
18
  "dependencies": {
19
19
  "@fastify/http-proxy": "9.5.0",
20
20
  "@moneko/convert": "1.0.0",
21
- "@moneko/eslint": "1.2.1",
21
+ "@moneko/eslint": "1.3.0",
22
22
  "@moneko/mdx": "0.1.44",
23
23
  "@moneko/raw-import": "0.0.3",
24
- "@moneko/stylelint": "1.2.1",
24
+ "@moneko/stylelint": "1.3.0",
25
25
  "@moneko/transform-imports": "0.6.1",
26
- "@moneko/utils": "0.1.22",
26
+ "@moneko/utils": "0.2.1",
27
27
  "@swc/core": "1.6.13",
28
28
  "browserslist": "4.24.4",
29
29
  "chokidar": "4.0.3",
30
- "compression-webpack-plugin": "11.1.0",
31
30
  "core-js": "3.41.0",
32
31
  "core-js-compat": "3.41.0",
33
32
  "fastify": "4.29.0",
@@ -40,7 +39,7 @@
40
39
  "style-loader": "4.0.0",
41
40
  "swc-loader": "0.2.6",
42
41
  "typescript": "5.8.3",
43
- "webpack": "5.98.0",
42
+ "webpack": "5.99.1",
44
43
  "webpack-hot-middleware": "2.26.1",
45
44
  "webpack-merge": "6.0.1",
46
45
  "webpack-virtual-modules": "0.6.2"
@@ -51,8 +50,8 @@
51
50
  "@types/stylis": "4.2.7",
52
51
  "@types/webpack-bundle-analyzer": "4.7.0",
53
52
  "@types/webpack-hot-middleware": "2.25.9",
54
- "babel-plugin-react-compiler": "19.0.0-beta-e993439-20250328",
55
- "sass": "1.86.2",
53
+ "babel-plugin-react-compiler": "19.0.0-beta-e993439-20250405",
54
+ "sass": "1.86.3",
56
55
  "sass-loader": "16.0.5",
57
56
  "solid-refresh": "0.7.5",
58
57
  "stylis": "4.3.6",