@moneko/core 3.0.0-beta.102 → 3.0.0-beta.104

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.
package/lib/app.js CHANGED
@@ -1 +1,22 @@
1
- import o from"fs";import e from"path";import{CONFIG as t}from"./common.js";import r from"./html-plugin-option.js";import{APPTYPE as s,PACKAGENAME as i,PROGRAMPATH as m,programInfo as p}from"./process-env.js";import{toUpperCaseString as f}from"./utils.js";let n="library"===s?"site":"src",c={...p,base:t.routeBaseName,routerMode:t.routerMode,mode:t.mode,locales:o.existsSync(e.join(m,`./${n}/locales`)),favicon:r.favicon,prefixCls:t.prefixCls,theme:t.theme,type:s,persist:o.existsSync(e.join(m,`./${n}/persist.ts`)),projectName:JSON.stringify(f(i)),iconfont:t.iconfont};export default c;
1
+ import fs from 'fs';
2
+ import path from 'path';
3
+ import { CONFIG } from './common.js';
4
+ import htmlPluginOption from './html-plugin-option.js';
5
+ import { APPTYPE, PACKAGENAME, PROGRAMPATH, programInfo } from './process-env.js';
6
+ import { toUpperCaseString } from './utils.js';
7
+ const entryName = APPTYPE === 'library' ? 'site' : 'src';
8
+ const app = {
9
+ ...programInfo,
10
+ base: CONFIG.routeBaseName,
11
+ routerMode: CONFIG.routerMode,
12
+ mode: CONFIG.mode,
13
+ locales: fs.existsSync(path.join(PROGRAMPATH, `./${entryName}/locales`)),
14
+ favicon: htmlPluginOption.favicon,
15
+ prefixCls: CONFIG.prefixCls,
16
+ theme: CONFIG.theme,
17
+ type: APPTYPE,
18
+ persist: fs.existsSync(path.join(PROGRAMPATH, `./${entryName}/persist.ts`)),
19
+ projectName: JSON.stringify(toUpperCaseString(PACKAGENAME)),
20
+ iconfont: CONFIG.iconfont
21
+ };
22
+ export default app;
package/lib/cleanup.js CHANGED
@@ -1 +1,19 @@
1
- import{existsSync as o,readdirSync as r,rmdirSync as t,statSync as i,unlinkSync as f}from"fs";import{join as s}from"path";import{cacheDir as c}from"./process-env.js";process.on("exit",function(){!function c(e){o(e)&&(r(e).forEach(o=>{let r=s(e,o);i(r).isDirectory()?c(r):f(r)}),t(e))}(c)});
1
+ import { existsSync, readdirSync, rmdirSync, statSync, unlinkSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { cacheDir } from './process-env.js';
4
+ function cleanDir(folderPath) {
5
+ if (existsSync(folderPath)) {
6
+ readdirSync(folderPath).forEach((file)=>{
7
+ const filePath = join(folderPath, file);
8
+ if (statSync(filePath).isDirectory()) {
9
+ cleanDir(filePath);
10
+ } else {
11
+ unlinkSync(filePath);
12
+ }
13
+ });
14
+ rmdirSync(folderPath);
15
+ }
16
+ }
17
+ process.on('exit', function() {
18
+ cleanDir(cacheDir);
19
+ });
package/lib/common/rem.js CHANGED
@@ -1,13 +1,14 @@
1
- import{CONFIG as e}from"../common.js";export default`(function (doc, win) {
1
+ import { CONFIG } from '../common.js';
2
+ export default `(function (doc, win) {
2
3
  function refreshRem() {
3
4
  const docEl = doc.documentElement;
4
5
  const clientWidth = docEl.clientWidth || doc.body.clientWidth;
5
- const _designSize = clientWidth <= 375 ? 375 : ${e.rem?.designSize};
6
+ const _designSize = clientWidth <= 375 ? 375 : ${CONFIG.rem?.designSize};
6
7
  let unitSize = clientWidth;
7
8
 
8
9
  if (clientWidth <= 375) {
9
10
  unitSize = clientWidth;
10
- } else if (clientWidth <= ${e.rem?.designSize}) {
11
+ } else if (clientWidth <= ${CONFIG.rem?.designSize}) {
11
12
  unitSize = _designSize;
12
13
  } else {
13
14
  unitSize = clientWidth;
@@ -25,4 +26,4 @@ import{CONFIG as e}from"../common.js";export default`(function (doc, win) {
25
26
  win.addEventListener(resizeEvt, refreshRem, false);
26
27
  }
27
28
  })(document, window);
28
- `;
29
+ `;
package/lib/common.d.ts CHANGED
@@ -3,3 +3,4 @@ export declare const ENTRYPATH: Record<AppType, string>;
3
3
  export declare const log: (msg: string) => void;
4
4
  export declare const CONFIG: ConfigType<"swc">;
5
5
  export declare const PUBLICPATH: string;
6
+ export declare let hasCustomRouter: boolean;
package/lib/common.js CHANGED
@@ -1,4 +1,228 @@
1
- import e from"fs";import t from"path";import o from"readline";import s from"chalk";import{merge as i}from"webpack-merge";import{APPTYPE as n,CUSTOMCONFIG as r,FRAMEWORK as l,PROGRAMPATH as a,jsxImportSource as c,pkgName as m}from"./process-env.js";import{isFunction as p,readConf as u}from"./utils.js";export const ENTRYPATH={mobile:"mobile",site:"site","back-stage":"back-stage","single-spa":"single-spa",library:"library","single-component":"single-component"};let d=[`@moneko/${l}`,"neko-ui","antd","@antv","katex","font-pingfang-sc","font-pingfang-tc","react-photo-view","react-markdown-editor-lite","schema-design","@app"],h={chunks:"all",minSize:1024,minChunks:1,cacheGroups:{route:{test:/[\\/].git[\\/]router/,priority:-10,reuseExistingChunk:!0,name:"route"},example:{test:/[\\/].git[\\/]example/,priority:-10,reuseExistingChunk:!0,name:"example"}}};"single-component"===n&&(h=!1);let g={seo:!1,mode:"csr",compiler:"swc",bundleAnalyzer:{analyzerMode:"static",reportFilename:"report.html",openAnalyzer:!1},entry:{},minifier:{js:{},css:{}},sourceMap:{filename:"[file].map",publicPath:""},env:{},routeBaseName:"/",publicPath:"/",rem:{designSize:"mobile"===n?375:1680},fallbackCompPath:null,modifyVars:{},prefixCls:"n",alias:{},layoutSider:{},moduleRules:[],prefixJsLoader:[],cssModules:[],importOnDemand:{},proxy:[],cacheDirectory:`${a}/node_modules/.temp_cache`,devServer:{allowedHosts:[".baidu.com"],host:"localhost",port:3e3,https:!1,compress:!1},htmlPluginOption:{template:`./node_modules/${m}/template/index.html`,favicon:`./node_modules/${m}/template/favicon.ico`,tags:[]},assetHtml:[],routerMode:"browser",fixBrowserRouter:!1,plugins:[],splitChunk:h,runtimeChunk:"single-component"!==n&&"single",moduleFederation:[],rulesInclude:{less:d,css:d,js:d,media:d,fonts:d},mdx:{jsxImportSource:c,useDynamicImport:!0,remarkPlugins:[],rehypePlugins:[]},jsxDomExpressions:{moduleName:"solid-js/web",builtIns:["For","Show","Switch","Match","Suspense","SuspenseList","Portal","Index","Dynamic","ErrorBoundary"],contextToCustomElements:!0,wrapConditionals:!0,generate:"dom",hydratable:!1},bar:{name:"编译中",color:"#6f42c1"},virtualModule:{},normalizeCss:!0};export const log=e=>{o.cursorTo(process.stdout,0),process.stdout.write(e)};let f=g,y=null,x={},b={};try{y=t.join(a,"./config/index.ts"),e.accessSync(y,e.constants.R_OK)}catch(e){y=null}if(y)try{let e=(await u(y,"index")).default;x=p(e)?e(process):e}catch(e){process.stdout.write(s.red(e))}if(r){let o=null;try{o=t.join(a,`./config/${r}.ts`),e.accessSync(o,e.constants.R_OK)}catch(e){o=null}if(null!==o)try{let e=(await u(o,r)).default;b=p(e)?e(process):e}catch(e){process.stdout.write(s.red(e))}}"tsc"===(f=i(f,x,b)).compiler&&f.minifier&&(f.minifier.js||Object.assign(f.minifier,{js:{type:"terser"}}),f.minifier.css||Object.assign(f.minifier,{css:{type:"cssnano"}})),!1===f.devtool&&(f.sourceMap=!1),!1===f.sourceMap&&(f.devtool=!1),f.fixBrowserRouter&&f.htmlPluginOption&&(f.htmlPluginOption.tags||(f.htmlPluginOption.tags=[]),f.htmlPluginOption.tags.push({textContent:`
1
+ import { accessSync, constants } from 'fs';
2
+ import { join } from 'path';
3
+ import readline from 'readline';
4
+ import chalk from 'chalk';
5
+ import { merge } from 'webpack-merge';
6
+ import { APPTYPE, CUSTOMCONFIG, FRAMEWORK, PACKAGENAME, PROGRAMPATH, jsxImportSource, pkgName } from './process-env.js';
7
+ import { isFunction, readConf, resolveProgramPath } from './utils.js';
8
+ export const ENTRYPATH = {
9
+ mobile: 'mobile',
10
+ site: 'site',
11
+ 'back-stage': 'back-stage',
12
+ 'single-spa': 'single-spa',
13
+ library: 'library',
14
+ 'single-component': 'single-component'
15
+ };
16
+ const includeModule = [
17
+ `@moneko/${FRAMEWORK}`,
18
+ 'neko-ui',
19
+ 'antd',
20
+ '@antv',
21
+ 'katex',
22
+ 'font-pingfang-sc',
23
+ 'font-pingfang-tc',
24
+ 'react-photo-view',
25
+ 'react-markdown-editor-lite',
26
+ 'schema-design',
27
+ '@app'
28
+ ];
29
+ let defaultSplitChunk = {
30
+ chunks: 'all',
31
+ minSize: 1024,
32
+ minChunks: 1,
33
+ cacheGroups: {
34
+ route: {
35
+ test: /[\\/].git[\\/]router/,
36
+ priority: -10,
37
+ reuseExistingChunk: true,
38
+ name: 'route'
39
+ },
40
+ example: {
41
+ test: /[\\/].git[\\/]example/,
42
+ priority: -10,
43
+ reuseExistingChunk: true,
44
+ name: 'example'
45
+ }
46
+ }
47
+ };
48
+ if (APPTYPE === 'single-component') {
49
+ defaultSplitChunk = false;
50
+ }
51
+ const defaultAlias = {
52
+ library: {
53
+ '@': resolveProgramPath('site'),
54
+ '@pkg': resolveProgramPath('components'),
55
+ [PACKAGENAME]: resolveProgramPath('components')
56
+ },
57
+ 'single-component': {
58
+ [PACKAGENAME]: resolveProgramPath('umd')
59
+ },
60
+ mobile: {},
61
+ site: {},
62
+ 'back-stage': {},
63
+ 'single-spa': {}
64
+ };
65
+ const defaultConfig = {
66
+ seo: false,
67
+ mode: 'csr',
68
+ compiler: 'swc',
69
+ bundleAnalyzer: {
70
+ analyzerMode: 'static',
71
+ reportFilename: 'report.html',
72
+ openAnalyzer: false
73
+ },
74
+ entry: {},
75
+ minifier: {
76
+ js: {},
77
+ css: {}
78
+ },
79
+ sourceMap: {
80
+ filename: '[file].map',
81
+ publicPath: ''
82
+ },
83
+ env: {},
84
+ routeBaseName: '/',
85
+ publicPath: '/',
86
+ rem: {
87
+ designSize: APPTYPE === 'mobile' ? 375 : 1680
88
+ },
89
+ fallbackCompPath: null,
90
+ modifyVars: {},
91
+ prefixCls: 'n',
92
+ alias: Object.assign({
93
+ '@': resolveProgramPath('src')
94
+ }, defaultAlias[APPTYPE]),
95
+ layoutSider: {},
96
+ moduleRules: [],
97
+ prefixJsLoader: [],
98
+ cssModules: [],
99
+ importOnDemand: {},
100
+ proxy: [],
101
+ cacheDirectory: `${PROGRAMPATH}/node_modules/.temp_cache`,
102
+ devServer: {
103
+ allowedHosts: [
104
+ '.baidu.com'
105
+ ],
106
+ host: 'localhost',
107
+ port: 3000,
108
+ https: false,
109
+ compress: false
110
+ },
111
+ htmlPluginOption: {
112
+ template: `./node_modules/${pkgName}/template/index.html`,
113
+ favicon: `./node_modules/${pkgName}/template/favicon.ico`,
114
+ tags: []
115
+ },
116
+ assetHtml: [],
117
+ routerMode: 'browser',
118
+ fixBrowserRouter: false,
119
+ plugins: [],
120
+ splitChunk: defaultSplitChunk,
121
+ runtimeChunk: APPTYPE === 'single-component' ? false : 'single',
122
+ moduleFederation: [],
123
+ rulesInclude: {
124
+ less: includeModule,
125
+ css: includeModule,
126
+ js: includeModule,
127
+ media: includeModule,
128
+ fonts: includeModule
129
+ },
130
+ mdx: {
131
+ jsxImportSource: jsxImportSource,
132
+ useDynamicImport: true,
133
+ remarkPlugins: [],
134
+ rehypePlugins: []
135
+ },
136
+ jsxDomExpressions: {
137
+ moduleName: 'solid-js/web',
138
+ builtIns: [
139
+ 'For',
140
+ 'Show',
141
+ 'Switch',
142
+ 'Match',
143
+ 'Suspense',
144
+ 'SuspenseList',
145
+ 'Portal',
146
+ 'Index',
147
+ 'Dynamic',
148
+ 'ErrorBoundary'
149
+ ],
150
+ contextToCustomElements: true,
151
+ wrapConditionals: true,
152
+ generate: 'dom',
153
+ hydratable: false
154
+ },
155
+ bar: {
156
+ name: '编译中',
157
+ color: '#6f42c1'
158
+ },
159
+ virtualModule: {},
160
+ normalizeCss: true
161
+ };
162
+ export const log = (msg)=>{
163
+ readline.cursorTo(process.stdout, 0);
164
+ process.stdout.write(msg);
165
+ };
166
+ let customConf = defaultConfig;
167
+ let configPath = null;
168
+ let normalConf = {};
169
+ let envConf = {};
170
+ try {
171
+ configPath = join(PROGRAMPATH, './config/index.ts');
172
+ accessSync(configPath, constants.R_OK);
173
+ } catch (error) {
174
+ configPath = null;
175
+ }
176
+ if (configPath) {
177
+ try {
178
+ const conf = (await readConf(configPath, 'index')).default;
179
+ normalConf = isFunction(conf) ? conf(process) : conf;
180
+ } catch (error) {
181
+ process.stdout.write(chalk.red(error));
182
+ }
183
+ }
184
+ if (CUSTOMCONFIG) {
185
+ let customConfigPath = null;
186
+ try {
187
+ customConfigPath = join(PROGRAMPATH, `./config/${CUSTOMCONFIG}.ts`);
188
+ accessSync(customConfigPath, constants.R_OK);
189
+ } catch (error) {
190
+ customConfigPath = null;
191
+ }
192
+ if (customConfigPath !== null) {
193
+ try {
194
+ const conf = (await readConf(customConfigPath, CUSTOMCONFIG)).default;
195
+ envConf = isFunction(conf) ? conf(process) : conf;
196
+ } catch (error) {
197
+ process.stdout.write(chalk.red(error));
198
+ }
199
+ }
200
+ }
201
+ customConf = merge(customConf, normalConf, envConf);
202
+ if (customConf.compiler === 'tsc' && customConf.minifier) {
203
+ if (!customConf.minifier.js) {
204
+ Object.assign(customConf.minifier, {
205
+ js: {
206
+ type: 'terser'
207
+ }
208
+ });
209
+ }
210
+ if (!customConf.minifier.css) {
211
+ Object.assign(customConf.minifier, {
212
+ css: {
213
+ type: 'cssnano'
214
+ }
215
+ });
216
+ }
217
+ }
218
+ if (customConf.devtool === false) customConf.sourceMap = false;
219
+ if (customConf.sourceMap === false) customConf.devtool = false;
220
+ if (customConf.fixBrowserRouter && customConf.htmlPluginOption) {
221
+ if (!customConf.htmlPluginOption.tags) {
222
+ customConf.htmlPluginOption.tags = [];
223
+ }
224
+ customConf.htmlPluginOption.tags.push({
225
+ textContent: `
2
226
  (function(l) {
3
227
  if (l.search[1] === '/' ) {
4
228
  var decoded = l.search.slice(1).split('&').map(function(s) {
@@ -9,4 +233,19 @@ import e from"fs";import t from"path";import o from"readline";import s from"chal
9
233
  );
10
234
  }
11
235
  }(window.location))
12
- `}));export const CONFIG=f;export const PUBLICPATH=CONFIG.publicPath||"/";global.NEKOCLICONFIG={CONFIG,log};
236
+ `
237
+ });
238
+ }
239
+ export const CONFIG = customConf;
240
+ export const PUBLICPATH = CONFIG.publicPath || '/';
241
+ export let hasCustomRouter = false;
242
+ try {
243
+ accessSync(join(CONFIG.alias['@'], './router/index.ts'), constants.R_OK);
244
+ hasCustomRouter = true;
245
+ } catch (error) {
246
+ hasCustomRouter = false;
247
+ }
248
+ global.NEKOCLICONFIG = {
249
+ CONFIG,
250
+ log
251
+ };
package/lib/coverage.js CHANGED
@@ -1 +1,30 @@
1
- import{accessSync as e,constants as r,readFileSync as c}from"fs";import{join as o}from"path";import{Parser as t}from"xml2js";import{PACKAGENAME as a,PROGRAMPATH as s}from"./process-env.js";export const coverage={};try{let i=o(s,"./coverage/clover.xml");e(i,r.R_OK);let m=new t({explicitArray:!1,async:!1}),p=c(i,{encoding:"utf-8"});m.parseString(p,(e,r)=>{if(!e){let e=r.coverage.project.metrics.$,c=r.coverage.project.package;Object.assign(coverage,{[a]:e}),c.forEach(e=>{Object.assign(coverage,{[e.$.name]:e.metrics.$})})}})}catch(e){}
1
+ import { accessSync, constants, readFileSync } from 'fs';
2
+ import { join } from 'path';
3
+ import { Parser } from 'xml2js';
4
+ import { PACKAGENAME, PROGRAMPATH } from './process-env.js';
5
+ export const coverage = {};
6
+ try {
7
+ const coveragePath = join(PROGRAMPATH, './coverage/clover.xml');
8
+ accessSync(coveragePath, constants.R_OK);
9
+ const parser = new Parser({
10
+ explicitArray: false,
11
+ async: false
12
+ });
13
+ const cover = readFileSync(coveragePath, {
14
+ encoding: 'utf-8'
15
+ });
16
+ parser.parseString(cover, (error, result)=>{
17
+ if (!error) {
18
+ const projectMetrics = result.coverage.project.metrics.$;
19
+ const components = result.coverage.project.package;
20
+ Object.assign(coverage, {
21
+ [PACKAGENAME]: projectMetrics
22
+ });
23
+ components.forEach((pkg)=>{
24
+ Object.assign(coverage, {
25
+ [pkg.$.name]: pkg.metrics.$
26
+ });
27
+ });
28
+ }
29
+ });
30
+ } catch (error) {}
package/lib/define.js CHANGED
@@ -1 +1,9 @@
1
- import{CONFIG as o}from"./common.js";import{NODE_ENV as e}from"./process-env.js";let r={"process.env":JSON.stringify({NODE_ENV:e,...o.env})};export default r;
1
+ import { CONFIG } from './common.js';
2
+ import { NODE_ENV } from './process-env.js';
3
+ const define = {
4
+ 'process.env': JSON.stringify({
5
+ NODE_ENV: NODE_ENV,
6
+ ...CONFIG.env
7
+ })
8
+ };
9
+ export default define;
package/lib/docs.js CHANGED
@@ -1 +1,113 @@
1
- import{statSync as e}from"fs";import{dirname as t,join as o}from"path";import{watch as r}from"chokidar";import n from"./generate-api.js";import i from"./object-listener.js";import{APPTYPE as s,FRAMEWORK as p}from"./process-env.js";import{resolveProgramPath as l}from"./utils.js";import{alias as a}from"./webpack.common.js";let c="@app/comment";export const docs=i({});let m={[c]:{}},d={react:"createElement","solid-js":"createComponent"}[p],f=`() => ${d}(SuspenseComp, { comp: $1 })`,u=`import { ${d} } from "${p}";import { SuspenseComp } from "@moneko/${p}";`;function $(e,r){let i=e.replace(RegExp(`^${a["@pkg"]}`),""),s=t(i).replace(/^\//,""),p=[c,s].join("/"),l=i.split("/").pop()?.replace(/\.tsx?/,".md");if(!l)return;m[c][s]||(m[c][s]={});let $=o(p,l);if("deleted"===r)m[c][s][l]&&delete m[c][s][l];else{let t=n(e);m[$]=t,t?m[c][s][l]=`rr(() => import(/* webpackChunkName: '${$}' */'${$}?raw').then((res) => ({default: ${d}(Dynamic, {text: res.default, component: 'n-md', css: 'table td a {display:inline-flex;align-items:center;gap:2px;}table td a n-img{display:inline-block;overflow:hidden;border-radius:var(--border-radius);inline-size:18px;block-size:18px;}'})})))rr`:m[c][s][l]&&delete m[c][s][l]}let b={};for(let e in m[c])Object.prototype.hasOwnProperty.call(m[c],e)&&(b[e]=Object.values(m[c][e]));let g={...m};delete g[c],Object.assign(docs.data,{...g,"@app/docs":`${u}export default ${JSON.stringify(b).replace(/"rr\((.+?)\)rr"/g,f)}`})}["react","solid-js"].includes(p)||(f="$1",u=""),"solid-js"===p&&(u=`import { Dynamic } from "${p}/web";${u}`),"library"===s&&function(){let t=[],o=r(l("components"),{ignored:[/(^|[\\/\\])\../,/(^|[\\/\\])__tests__([\\/\\]|$)/],persistent:!0,ignoreInitial:!1});function n(t){return/\.tsx?$/.test(t)&&e(t).isFile()}o.on("add",e=>{n(e)&&($(e,"added"),t.push(e))}),o.on("change",e=>{n(e)&&$(e,"change")}),o.on("unlink",e=>{n(e)&&($(e,"deleted"),t.splice(t.indexOf(e),1))}),o.on("ready",()=>{t.forEach(e=>{$(e,"change")})}),process.on("SIGINT",function(){o.close()})}();
1
+ import { statSync } from 'fs';
2
+ import { dirname, join } from 'path';
3
+ import { watch } from 'chokidar';
4
+ import { CONFIG } from './common.js';
5
+ import generateApi from './generate-api.js';
6
+ import objectListener from './object-listener.js';
7
+ import { APPTYPE, FRAMEWORK } from './process-env.js';
8
+ import { resolveProgramPath } from './utils.js';
9
+ const base = '@app/comment';
10
+ const apiEntry = '@app/docs';
11
+ export const docs = objectListener({});
12
+ const cacheEnvApi = {
13
+ [base]: {}
14
+ };
15
+ const createElement = {
16
+ react: 'createElement',
17
+ 'solid-js': 'createComponent'
18
+ }[FRAMEWORK];
19
+ let replaceStr = `() => ${createElement}(SuspenseComp, { comp: $1 })`;
20
+ let prefixStr = `import { ${createElement} } from "${FRAMEWORK}";import { SuspenseComp } from "@moneko/${FRAMEWORK}";`;
21
+ if (![
22
+ 'react',
23
+ 'solid-js'
24
+ ].includes(FRAMEWORK)) {
25
+ replaceStr = '$1';
26
+ prefixStr = '';
27
+ }
28
+ if (FRAMEWORK === 'solid-js') {
29
+ prefixStr = `import { Dynamic } from "${FRAMEWORK}/web";${prefixStr}`;
30
+ }
31
+ function handleFileChange(filePath, changeType) {
32
+ const fil = filePath.replace(new RegExp(`^${CONFIG.alias['@pkg']}`), '');
33
+ const __dir = dirname(fil).replace(/^\//, '');
34
+ const apiDir = [
35
+ base,
36
+ __dir
37
+ ].join('/');
38
+ const name = fil.split('/').pop()?.replace(/\.tsx?/, '.md');
39
+ if (!name) return;
40
+ if (!cacheEnvApi[base][__dir]) {
41
+ cacheEnvApi[base][__dir] = {};
42
+ }
43
+ const target = join(apiDir, name);
44
+ if (changeType === 'deleted') {
45
+ if (cacheEnvApi[base][__dir][name]) {
46
+ delete cacheEnvApi[base][__dir][name];
47
+ }
48
+ } else {
49
+ const api = generateApi(filePath);
50
+ cacheEnvApi[target] = api;
51
+ if (api) {
52
+ cacheEnvApi[base][__dir][name] = `rr(() => import(/* webpackChunkName: '${target}' */'${target}?raw').then((res) => ({default: ${createElement}(Dynamic, {text: res.default, component: 'n-md', css: 'table td a {display:inline-flex;align-items:center;gap:2px;}table td a n-img{display:inline-block;overflow:hidden;border-radius:var(--border-radius);inline-size:18px;block-size:18px;}'})})))rr`;
53
+ } else if (cacheEnvApi[base][__dir][name]) {
54
+ delete cacheEnvApi[base][__dir][name];
55
+ }
56
+ }
57
+ const basestr = {};
58
+ for(const k in cacheEnvApi[base]){
59
+ if (Object.prototype.hasOwnProperty.call(cacheEnvApi[base], k)) {
60
+ basestr[k] = Object.values(cacheEnvApi[base][k]);
61
+ }
62
+ }
63
+ const env = {
64
+ ...cacheEnvApi
65
+ };
66
+ delete env[base];
67
+ Object.assign(docs.data, {
68
+ ...env,
69
+ [apiEntry]: `${prefixStr}export default ${JSON.stringify(basestr).replace(/"rr\((.+?)\)rr"/g, replaceStr)}`
70
+ });
71
+ }
72
+ function watchDirectory() {
73
+ const files = [];
74
+ const watcher = watch(resolveProgramPath('components'), {
75
+ ignored: [
76
+ /(^|[\\/\\])\../,
77
+ /(^|[\\/\\])__tests__([\\/\\]|$)/
78
+ ],
79
+ persistent: true,
80
+ ignoreInitial: false
81
+ });
82
+ function isTs(path) {
83
+ return /\.tsx?$/.test(path) && statSync(path).isFile();
84
+ }
85
+ watcher.on('add', (path)=>{
86
+ if (isTs(path)) {
87
+ handleFileChange(path, 'added');
88
+ files.push(path);
89
+ }
90
+ });
91
+ watcher.on('change', (path)=>{
92
+ if (isTs(path)) {
93
+ handleFileChange(path, 'change');
94
+ }
95
+ });
96
+ watcher.on('unlink', (path)=>{
97
+ if (isTs(path)) {
98
+ handleFileChange(path, 'deleted');
99
+ files.splice(files.indexOf(path), 1);
100
+ }
101
+ });
102
+ watcher.on('ready', ()=>{
103
+ files.forEach((f)=>{
104
+ handleFileChange(f, 'change');
105
+ });
106
+ });
107
+ process.on('SIGINT', function() {
108
+ watcher.close();
109
+ });
110
+ }
111
+ if (APPTYPE === 'library') {
112
+ watchDirectory();
113
+ }
package/lib/done.js CHANGED
@@ -1 +1,12 @@
1
- export default class{constructor(o){this.options=Object.assign({},o)}apply(o){o.hooks.done.tap("DoneWebpackPlugin",()=>{this.options.done?.()})}};
1
+ class DoneWebpackPlugin {
2
+ options;
3
+ constructor(options){
4
+ this.options = Object.assign({}, options);
5
+ }
6
+ apply(compiler) {
7
+ compiler.hooks.done.tap('DoneWebpackPlugin', ()=>{
8
+ this.options.done?.();
9
+ });
10
+ }
11
+ }
12
+ export default DoneWebpackPlugin;
package/lib/esm.js CHANGED
@@ -1 +1,7 @@
1
- export default function t(t,...e){let r=t.raw[0];for(let a=0;a<e.length;a++)r+=e[a]+t.raw[a+1];return`data:text/javascript;base64,${Buffer.from(r).toString("base64")}`}
1
+ export default function esm(templateStrings, ...substitutions) {
2
+ let js = templateStrings.raw[0];
3
+ for(let i = 0; i < substitutions.length; i++){
4
+ js += substitutions[i] + templateStrings.raw[i + 1];
5
+ }
6
+ return `data:text/javascript;base64,${Buffer.from(js).toString('base64')}`;
7
+ }