@nocobase/cli 2.0.0-beta.9 → 2.1.0-beta.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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nocobase/cli",
3
- "version": "2.0.0-beta.9",
3
+ "version": "2.1.0-beta.1",
4
4
  "description": "",
5
5
  "license": "AGPL-3.0",
6
6
  "main": "./src/index.js",
@@ -8,8 +8,8 @@
8
8
  "nocobase": "./bin/index.js"
9
9
  },
10
10
  "dependencies": {
11
- "@nocobase/app": "2.0.0-beta.9",
12
- "@nocobase/license-kit": "^0.3.5",
11
+ "@nocobase/app": "2.1.0-beta.1",
12
+ "@nocobase/license-kit": "^0.3.7",
13
13
  "@types/fs-extra": "^11.0.1",
14
14
  "@umijs/utils": "3.5.20",
15
15
  "chalk": "^4.1.1",
@@ -27,12 +27,12 @@
27
27
  "tsx": "^4.19.0"
28
28
  },
29
29
  "devDependencies": {
30
- "@nocobase/devtools": "2.0.0-beta.9"
30
+ "@nocobase/devtools": "2.1.0-beta.1"
31
31
  },
32
32
  "repository": {
33
33
  "type": "git",
34
34
  "url": "git+https://github.com/nocobase/nocobase.git",
35
35
  "directory": "packages/core/cli"
36
36
  },
37
- "gitHead": "36ef50291e22fe1024c819b8748d51a59a5ea4f8"
37
+ "gitHead": "de3efeb357b6a98b813f1c14831afa832aed1780"
38
38
  }
@@ -21,6 +21,15 @@ function sleep(ms = 1000) {
21
21
  });
22
22
  }
23
23
 
24
+ async function buildBundleStatusHtml() {
25
+ const data = await fs.promises.readFile(path.resolve(__dirname, '../../templates/bundle-status.html'), 'utf-8');
26
+ await fs.promises.writeFile(
27
+ path.resolve(process.cwd(), 'node_modules/@umijs/preset-umi/assets/bundle-status.html'),
28
+ data,
29
+ 'utf-8',
30
+ );
31
+ }
32
+
24
33
  /**
25
34
  *
26
35
  * @param {Command} cli
@@ -37,6 +46,7 @@ module.exports = (cli) => {
37
46
  .allowUnknownOption()
38
47
  .action(async (opts) => {
39
48
  checkDBDialect();
49
+ await buildBundleStatusHtml();
40
50
  let subprocess;
41
51
  const runDevClient = () => {
42
52
  console.log('starting client', 1 * clientPort);
@@ -208,7 +208,7 @@ class PackageManager {
208
208
  showLicenseInfo(LicenseKeyError.notValid);
209
209
  }
210
210
  logger.error(`Login failed: ${this.baseURL}`);
211
- logger.error(error?.message || error);
211
+ logger.error(error?.message, { error });
212
212
  }
213
213
  }
214
214
 
@@ -32,6 +32,6 @@ module.exports = (cli) => {
32
32
  .command('pm2-stop')
33
33
  .allowUnknownOption()
34
34
  .action(() => {
35
- run('pm2', ['stop', 'all']);
35
+ run('pm2', ['kill']);
36
36
  });
37
37
  };
package/src/util.js CHANGED
@@ -304,6 +304,8 @@ function buildIndexHtml(force = false) {
304
304
  .replace(/\{\{env.API_BASE_URL\}\}/g, process.env.API_BASE_URL || process.env.API_BASE_PATH)
305
305
  .replace(/\{\{env.WS_URL\}\}/g, process.env.WEBSOCKET_URL || '')
306
306
  .replace(/\{\{env.WS_PATH\}\}/g, process.env.WS_PATH)
307
+ .replace(/\{\{env.ESM_CDN_BASE_URL\}\}/g, process.env.ESM_CDN_BASE_URL || '')
308
+ .replace(/\{\{env.ESM_CDN_SUFFIX\}\}/g, process.env.ESM_CDN_SUFFIX || '')
307
309
  .replace('src="/umi.', `src="${process.env.APP_PUBLIC_PATH}umi.`);
308
310
 
309
311
  if (process.env.CDN_BASE_URL) {
@@ -398,6 +400,8 @@ exports.initEnv = function initEnv() {
398
400
  CDN_BASE_URL: '',
399
401
  APP_PUBLIC_PATH: '/',
400
402
  WATCH_FILE: resolve(process.cwd(), 'storage/app.watch.ts'),
403
+ ESM_CDN_BASE_URL: 'https://esm.sh',
404
+ ESM_CDN_SUFFIX: '',
401
405
  };
402
406
 
403
407
  if (
@@ -0,0 +1,338 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta
6
+ name="viewport"
7
+ content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"
8
+ />
9
+ <meta http-equiv="X-UA-Compatible" content="ie=edge" />
10
+ <title>NocoBase Loading...</title>
11
+ <style data-basic>
12
+ body {
13
+ margin: 0;
14
+ font-family: system-ui, -apple-system, BlinkMacSystemFont, sans-serif;
15
+ min-height: 100vh;
16
+ display: flex;
17
+ align-items: center;
18
+ justify-content: center;
19
+ flex-direction: column;
20
+ color: #333;
21
+ background-color: #f5f5f5;
22
+ }
23
+
24
+ #loading {
25
+ position: relative;
26
+ padding: 20px 28px 24px 88px;
27
+ }
28
+
29
+ #loading::before {
30
+ position: absolute;
31
+ left: 0;
32
+ top: 50%;
33
+ content: '';
34
+ display: inline-block;
35
+ width: 40px;
36
+ height: 40px;
37
+ border-radius: 50%;
38
+ border: 3px solid #e0e0e0;
39
+ border-top-color: #999;
40
+ animation: loading-spin 0.9s linear infinite;
41
+ transform: translateY(-50%);
42
+ }
43
+
44
+ #loading h3 {
45
+ margin: 0 0 2px;
46
+ color: #666;
47
+ font-size: 20px;
48
+ font-weight: normal;
49
+ }
50
+
51
+ #loading small {
52
+ color: #888;
53
+ font-size: 12px;
54
+ }
55
+
56
+ #loading small::after {
57
+ content: 'from source';
58
+ }
59
+
60
+ #loading p {
61
+ box-sizing: border-box;
62
+ font-family: Georgia, 'Times New Roman', Times, serif;
63
+ color: #333;
64
+ }
65
+
66
+ #loading p:empty {
67
+ display: none;
68
+ }
69
+
70
+ #loading p span {
71
+ font-family: sans-serif;
72
+ padding: 0 6px 0 2px;
73
+ color: #666;
74
+ font-size: 14px;
75
+ vertical-align: bottom;
76
+ }
77
+
78
+ #loading p.summary {
79
+ margin: 8px 0;
80
+ height: 28px;
81
+ font-size: 24px;
82
+ }
83
+
84
+ #loading p.detail {
85
+ margin: 2px 0;
86
+ height: 40px;
87
+ font-size: 16px;
88
+ }
89
+
90
+ code.progress-details {
91
+ margin-top: 20px;
92
+ font-size: 13px;
93
+ color: #999;
94
+ max-width: calc(100vw - 500px);
95
+ text-align: center;
96
+ white-space: pre-wrap;
97
+ }
98
+
99
+ @keyframes fade-in-out {
100
+ 0% {
101
+ opacity: 0.4;
102
+ }
103
+
104
+ 100% {
105
+ opacity: 1;
106
+ }
107
+ }
108
+
109
+ @keyframes loading-spin {
110
+ 0% {
111
+ transform: translateY(-50%) rotate(0deg);
112
+ }
113
+
114
+ 100% {
115
+ transform: translateY(-50%) rotate(360deg);
116
+ }
117
+ }
118
+ </style>
119
+ <style data-mfsu>
120
+ #loading[data-mfsu]::after {
121
+ position: absolute;
122
+ top: 0;
123
+ left: 64px;
124
+ content: '';
125
+ width: 20px;
126
+ height: 22px;
127
+ background: center / 20px 22px;
128
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAuCAMAAABteatCAAABKVBMVEUAAAADAgAAAAAAAAAAAAAAAAAAAAAIBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+2SgAAAD81ycWEwPxzSXOsCBBOAoqIwbjwiOWgBd2ZBJdTw741Ca1mhyhihlHPAswKQcbFwT00CbgvyLWtyG5nh2GchV7aRNYSw1VSA3zzybpxyTmxCTLrR+QehaMdxZvXxFmVxBjVQ85MQglIAXqxyTSsyG/ox6zmRyrkhqpkBqmjhqdhhiBbhRQRAxMQQyKBhJVAAAAM3RSTlMA/vrcEO3F/nA4BvfUqYx4aFAjBP7x6uOugCEdCrSllohUSj0yLRQC/se/k2FWJ7qamFjVvxppAAAB4klEQVQ4y42U10IaQRhG2QVBAaVIMxQNCthT9iwdkSoEEkss6e39HyIaQ4Zhdjee63PxH/h2XCqF4EbU9QQ8bsAb9vxXzNI7iYGeivgdvQ12h8ag09VgaXPF3sujjYwHzq96gNvu3OgSY2PGx1bf7txMkJ+mITBHNufmuKsYMm//nit5y8TODJXzKWTnvW2dL4YFpz5y63NeOkHLyvum8ao05/m91EwLr6mxJR24Sf+DhTeGkOQd4ruw8FpoYcnbCfBd1cwb9CPJKya5Vr32lEBe8kovuG0r3qBLfNslsUW5oXiVWxI7shdB+6R473okj2XvOM6l4g3vYK24OJmJGlK93gU9e5QRYor6wLCg/fWXBvGXs54QmjQZ6c5LMfOCDuX3VcOOsz8z3wvfjyYUBOrjhp1qXgHux//vIAFarVOx8honGkvLsz2u51cD4JucLg6t8sZHYM0jvRCH+yyeazbLsPrMtUg6lISm8D7XwWv5CBTitMRPXgN3xGVFOsnEVBpUPEFqbdGgiwYZ/z71itqgkqM/fPyO1QZ5vLHqv4bnLlvCaCO1QSWi0bl/kUSDDSsBfqgNKtEEN2qDStFN90JpUMnsUZ4+NPidvVIKUBtUDkA0OBBCNDjxWjQ4o4sGR34DhGGszb2iUaMAAAAASUVORK5CYII=');
129
+ animation: fade-in-out alternate infinite 1s;
130
+ }
131
+
132
+ #loading[data-mfsu] small::after {
133
+ content: 'Umi with MFSU';
134
+ }
135
+
136
+ #loading[data-mfsu]:hover p.summary,
137
+ #loading[data-mfsu]:not(:hover) p.detail {
138
+ display: none;
139
+ }
140
+ </style>
141
+ <style data-progress>
142
+ #loading[data-percent^='2']:not([data-percent='2'])::before,
143
+ #loading[data-percent^='3']:not([data-percent='3'])::before {
144
+ background-position-x: -68px;
145
+ }
146
+
147
+ #loading[data-percent^='4']:not([data-percent='4'])::before,
148
+ #loading[data-percent^='5']:not([data-percent='5'])::before {
149
+ background-position-x: -136px;
150
+ }
151
+
152
+ #loading[data-percent^='6']:not([data-percent='6'])::before,
153
+ #loading[data-percent^='7']:not([data-percent='7'])::before {
154
+ background-position-x: -204px;
155
+ }
156
+
157
+ #loading[data-percent^='8']:not([data-percent='8'])::before,
158
+ #loading[data-percent^='9']:not([data-percent='9'])::before {
159
+ background-position-x: -272px;
160
+ }
161
+
162
+ #loading[data-percent='99']::before,
163
+ #loading[data-percent='100']::before {
164
+ background-position-x: -340px !important;
165
+ }
166
+ </style>
167
+ <style data-mako>
168
+ #loading[data-mako]::after {
169
+ position: absolute;
170
+ top: 0;
171
+ left: 64px;
172
+ content: '';
173
+ width: 20px;
174
+ height: 22px;
175
+ background: center / 20px 22px;
176
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAuCAMAAABteatCAAABKVBMVEUAAAADAgAAAAAAAAAAAAAAAAAAAAAIBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+2SgAAAD81ycWEwPxzSXOsCBBOAoqIwbjwiOWgBd2ZBJdTw741Ca1mhyhihlHPAswKQcbFwT00CbgvyLWtyG5nh2GchV7aRNYSw1VSA3zzybpxyTmxCTLrR+QehaMdxZvXxFmVxBjVQ85MQglIAXqxyTSsyG/ox6zmRyrkhqpkBqmjhqdhhiBbhRQRAxMQQyKBhJVAAAAM3RSTlMA/vrcEO3F/nA4BvfUqYx4aFAjBP7x6uOugCEdCrSllohUSj0yLRQC/se/k2FWJ7qamFjVvxppAAAB4klEQVQ4y42U10IaQRhG2QVBAaVIMxQNCthT9iwdkSoEEkss6e39HyIaQ4Zhdjee63PxH/h2XCqF4EbU9QQ8bsAb9vxXzNI7iYGeivgdvQ12h8ag09VgaXPF3sujjYwHzq96gNvu3OgSY2PGx1bf7txMkJ+mITBHNufmuKsYMm//nit5y8TODJXzKWTnvW2dL4YFpz5y63NeOkHLyvum8ao05/m91EwLr6mxJR24Sf+DhTeGkOQd4ruw8FpoYcnbCfBd1cwb9CPJKya5Vr32lEBe8kovuG0r3qBLfNslsUW5oXiVWxI7shdB+6R473okj2XvOM6l4g3vYK24OJmJGlK93gU9e5QRYor6wLCg/fWXBvGXs54QmjQZ6c5LMfOCDuX3VcOOsz8z3wvfjyYUBOrjhp1qXgHux//vIAFarVOx8honGkvLsz2u51cD4JucLg6t8sZHYM0jvRCH+yyeazbLsPrMtUg6lISm8D7XwWv5CBTitMRPXgN3xGVFOsnEVBpUPEFqbdGgiwYZ/z71itqgkqM/fPyO1QZ5vLHqv4bnLlvCaCO1QSWi0bl/kUSDDSsBfqgNKtEEN2qDStFN90JpUMnsUZ4+NPidvVIKUBtUDkA0OBBCNDjxWjQ4o4sGR34DhGGszb2iUaMAAAAASUVORK5CYII=');
177
+ animation: fade-in-out alternate infinite 1s;
178
+ }
179
+
180
+ #loading[data-mako] small::after {
181
+ content: 'Umi with Mako';
182
+ }
183
+
184
+ #loading[data-mako] .loader {
185
+ position: fixed;
186
+ left: 0;
187
+ top: 0;
188
+ height: 5px;
189
+ width: 100vw;
190
+ --c:no-repeat linear-gradient(#1d90fe 0 0);
191
+ background: var(--c),var(--c),#cddeee;
192
+ background-size: 60% 100%;
193
+ animation: l16 3s infinite;
194
+ }
195
+
196
+ @keyframes l16 {
197
+ 0% {background-position:-150% 0,-150% 0}
198
+ 66% {background-position: 250% 0,-150% 0}
199
+ 100% {background-position: 250% 0, 250% 0}
200
+ }
201
+ </style>
202
+ <style data-utoopack>
203
+ #loading[data-utoopack]::after {
204
+ position: absolute;
205
+ top: 0;
206
+ left: 64px;
207
+ content: '';
208
+ width: 20px;
209
+ height: 22px;
210
+ background: center / 20px 22px;
211
+ background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACgAAAAuCAMAAABteatCAAABKVBMVEUAAAADAgAAAAAAAAAAAAAAAAAAAAAIBwEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMCgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASDwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD+2SgAAAD81ycWEwPxzSXOsCBBOAoqIwbjwiOWgBd2ZBJdTw741Ca1mhyhihlHPAswKQcbFwT00CbgvyLWtyG5nh2GchV7aRNYSw1VSA3zzybpxyTmxCTLrR+QehaMdxZvXxFmVxBjVQ85MQglIAXqxyTSsyG/ox6zmRyrkhqpkBqmjhqdhhiBbhRQRAxMQQyKBhJVAAAAM3RSTlMA/vrcEO3F/nA4BvfUqYx4aFAjBP7x6uOugCEdCrSllohUSj0yLRQC/se/k2FWJ7qamFjVvxppAAAB4klEQVQ4y42U10IaQRhG2QVBAaVIMxQNCthT9iwdkSoEEkss6e39HyIaQ4Zhdjee63PxH/h2XCqF4EbU9QQ8bsAb9vxXzNI7iYGeivgdvQ12h8ag09VgaXPF3sujjYwHzq96gNvu3OgSY2PGx1bf7txMkJ+mITBHNufmuKsYMm//nit5y8TODJXzKWTnvW2dL4YFpz5y63NeOkHLyvum8ao05/m91EwLr6mxJR24Sf+DhTeGkOQd4ruw8FpoYcnbCfBd1cwb9CPJKya5Vr32lEBe8kovuG0r3qBLfNslsUW5oXiVWxI7shdB+6R473okj2XvOM6l4g3vYK24OJmJGlK93gU9e5QRYor6wLCg/fWXBvGXs54QmjQZ6c5LMfOCDuX3VcOOsz8z3wvfjyYUBOrjhp1qXgHux//vIAFarVOx8honGkvLsz2u51cD4JucLg6t8sZHYM0jvRCH+yyeazbLsPrMtUg6lISm8D7XwWv5CBTitMRPXgN3xGVFOsnEVBpUPEFqbdGgiwYZ/z71itqgkqM/fPyO1QZ5vLHqv4bnLlvCaCO1QSWi0bl/kUSDDSsBfqgNKtEEN2qDStFN90JpUMnsUZ4+NPidvVIKUBtUDkA0OBBCNDjxWjQ4o4sGR34DhGGszb2iUaMAAAAASUVORK5CYII=');
212
+ animation: fade-in-out alternate infinite 1s;
213
+ }
214
+
215
+ #loading[data-utoopack] small::after {
216
+ content: 'Umi with Utoopack';
217
+ }
218
+
219
+ #loading[data-utoopack] .loader {
220
+ position: fixed;
221
+ left: 0;
222
+ top: 0;
223
+ height: 5px;
224
+ width: 100vw;
225
+ --c:no-repeat linear-gradient(#1d90fe 0 0);
226
+ background: var(--c),var(--c),#cddeee;
227
+ background-size: 60% 100%;
228
+ animation: l16 3s infinite;
229
+ }
230
+
231
+ @keyframes l16 {
232
+ 0% {background-position:-150% 0,-150% 0}
233
+ 66% {background-position: 250% 0,-150% 0}
234
+ 100% {background-position: 250% 0, 250% 0}
235
+ }
236
+ </style>
237
+ </head>
238
+
239
+ <body>
240
+ <div id="loading">
241
+ <div class="loader"></div>
242
+ <h3>Bundling...</h3>
243
+ <small></small>
244
+ <p class="summary"></p>
245
+ <p class="detail"></p>
246
+ </div>
247
+ <code class="progress-details"></code>
248
+
249
+ <script>
250
+ const loading = document.getElementById('loading');
251
+ const progressDetails = document.querySelector('.progress-details');
252
+ const summary = loading.querySelector('.summary');
253
+ const detail = loading.querySelector('.detail');
254
+
255
+ function check(data) {
256
+ renderStatus(data);
257
+ if (
258
+ data.bundleStatus.done &&
259
+ (!data.mfsuBundleStatus || data.mfsuBundleStatus.done)
260
+ ) {
261
+ location.reload();
262
+ } else {
263
+ setTimeout(loadData, 300);
264
+ }
265
+ }
266
+
267
+ function renderStatus(data) {
268
+ if (data.bundler === 'mako') {
269
+ loading.setAttribute('data-mako', '');
270
+ window.__MAKO_PERCENT = window.__MAKO_PERCENT || 0.1;
271
+ const makoPercent = Math.floor(window.__MAKO_PERCENT * 100);
272
+ loading.setAttribute('data-percent', makoPercent);
273
+ window.__MAKO_PERCENT = window.__MAKO_PERCENT >= 1 ? 0.2 : window.__MAKO_PERCENT + 0.1;
274
+ return;
275
+ }
276
+ if (data.bundler === 'utoopack') {
277
+ loading.setAttribute('data-utoopack', '');
278
+ window.__UTOO_PERCENT = window.__UTOO_PERCENT || 0.1;
279
+ const utooPercent = Math.floor(window.__UTOO_PERCENT * 100);
280
+ loading.setAttribute('data-percent', utooPercent);
281
+ window.__UTOO_PERCENT = window.__UTOO_PERCENT >= 1 ? 0.2 : window.__UTOO_PERCENT + 0.1;
282
+
283
+ return;
284
+ }
285
+ const hasMFSU = Boolean(data.mfsuBundleStatus);
286
+ const hasProgressDetails = Boolean(
287
+ data.bundleStatus.progresses[0].details,
288
+ );
289
+
290
+ if (hasProgressDetails) {
291
+ const details = data.bundleStatus.progresses[0].details;
292
+ if (details.length) {
293
+ progressDetails.innerHTML = details.join('<br />');
294
+ }
295
+ }
296
+
297
+ const srcPercent = Math.floor(
298
+ (data.bundleStatus.done
299
+ ? 1
300
+ : data.bundleStatus.progresses[0].percent || 0) * 100,
301
+ );
302
+ const mfsuPrecent =
303
+ hasMFSU &&
304
+ Math.floor(
305
+ (data.mfsuBundleStatus.done
306
+ ? 1
307
+ : data.mfsuBundleStatus.percent || 0) * 100,
308
+ );
309
+ const totalPercent = hasMFSU
310
+ ? Math.floor((srcPercent + mfsuPrecent) / 2)
311
+ : srcPercent;
312
+ const summaryText = totalPercent + '<span>%</span>';
313
+ let detailText = summaryText;
314
+
315
+ if (hasMFSU) {
316
+ loading.setAttribute('data-mfsu', '');
317
+ detailText = [
318
+ srcPercent + '<span>% for src</span>',
319
+ '<br />',
320
+ mfsuPrecent + '<span>% for deps</span>',
321
+ ].join('\n');
322
+ detail.innerHTML = detailText;
323
+ }
324
+
325
+ loading.setAttribute('data-percent', totalPercent);
326
+ summary.innerHTML = summaryText;
327
+ }
328
+
329
+ function loadData() {
330
+ fetch('/__umi/api/bundle-status')
331
+ .then((res) => res.json())
332
+ .then(check);
333
+ }
334
+
335
+ loadData();
336
+ </script>
337
+ </body>
338
+ </html>