@abtnode/core 1.16.25-next-bc2f4c63 → 1.16.26-beta-c724c8e6

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/api/team.js CHANGED
@@ -1345,6 +1345,13 @@ class TeamAPI extends EventEmitter {
1345
1345
  throw new Error(`Blocklet registry does not exist: ${sanitized}`);
1346
1346
  }
1347
1347
 
1348
+ const settings = await this.states.blockletExtras.getSettings(teamDid);
1349
+
1350
+ if (settings?.connectedStores?.length) {
1351
+ settings.connectedStores = settings.connectedStores.filter((x) => x.storeUrl !== sanitized);
1352
+ await this.states.blockletExtras.setSettings(teamDid, settings);
1353
+ }
1354
+
1348
1355
  return this.teamManager.updateStoreList(
1349
1356
  teamDid,
1350
1357
  storeList.filter((x) => x.url !== sanitized)
@@ -78,7 +78,7 @@ const resolveDownload = async (tarFile, dist, { removeTarFile = true, logger = d
78
78
 
79
79
  await fs.move(downloadDir, installDir, { overwrite: true });
80
80
 
81
- installExternalDependencies(installDir);
81
+ await installExternalDependencies({ appDir: installDir, forceInstall: true });
82
82
  } catch (error) {
83
83
  fs.removeSync(downloadDir);
84
84
  fs.removeSync(tmp);
@@ -145,7 +145,7 @@ const resolveDiffDownload = async (
145
145
  logger.info('Move downloadDir to installDir', { downloadDir, bundleDir });
146
146
  await fs.move(downloadDir, bundleDir, { overwrite: true });
147
147
 
148
- installExternalDependencies(bundleDir);
148
+ await installExternalDependencies({ appDir: bundleDir, forceInstall: true });
149
149
 
150
150
  return { meta, installDir: bundleDir };
151
151
  } catch (error) {
@@ -198,6 +198,8 @@ const {
198
198
  deleteRelease,
199
199
  getSelectedResources,
200
200
  updateSelectedResources,
201
+ connectToStore,
202
+ publishToStore,
201
203
  } = require('../project');
202
204
 
203
205
  const { formatEnvironments, getBlockletMeta, validateOwner, isCLI } = util;
@@ -2349,6 +2351,14 @@ class DiskBlockletManager extends BaseBlockletManager {
2349
2351
  return deleteRelease({ did, projectId, releaseId, manager: this });
2350
2352
  }
2351
2353
 
2354
+ connectToStore(params) {
2355
+ return connectToStore({ ...params, manager: this, blockletExtras: states.blockletExtras });
2356
+ }
2357
+
2358
+ publishToStore(params) {
2359
+ return publishToStore({ ...params, manager: this, blockletExtras: states.blockletExtras });
2360
+ }
2361
+
2352
2362
  getSelectedResources({ did, projectId, releaseId, componentDid } = {}) {
2353
2363
  return getSelectedResources({ did, projectId, releaseId, componentDid, manager: this });
2354
2364
  }
@@ -33,7 +33,7 @@ const {
33
33
  } = require('@blocklet/constant');
34
34
  const { update: updateMetaFile } = require('@blocklet/meta/lib/file');
35
35
  const getBlockletWallet = require('@blocklet/meta/lib/wallet');
36
- const { cloneDeep } = require('lodash');
36
+ const cloneDeep = require('lodash/cloneDeep');
37
37
 
38
38
  const { getBlockletDomainGroupName } = require('../../../util/router');
39
39
  const { getIpDnsDomainForBlocklet } = require('../../../util/get-domain-for-blocklet');
@@ -0,0 +1,69 @@
1
+ const validUrl = require('valid-url');
2
+
3
+ const { createConnect } = require('@blocklet/store');
4
+ const { BlockletEvents } = require('@blocklet/constant');
5
+
6
+ const connectToStore = async ({ did, storeName, storeId, storeUrl, blockletExtras, manager }) => {
7
+ if (!did) {
8
+ throw new Error('Invalid did');
9
+ }
10
+ // 校验是否为合法的url地址(必须是 http 或 https 协议),例如:https://store.blocklet.dev/
11
+ if (!validUrl.isWebUri(storeUrl)) {
12
+ throw new Error('Invalid store url:', storeUrl);
13
+ }
14
+ const settings = await blockletExtras.getSettings(did);
15
+
16
+ // eslint-disable-next-line no-async-promise-executor
17
+ return new Promise(async (resolve, reject) => {
18
+ try {
19
+ const fetchData = await createConnect({
20
+ connectUrl: storeUrl,
21
+ connectAction: 'connect-cli',
22
+ enableEncrypt: true,
23
+ openPage: (pageUrl) => {
24
+ resolve(pageUrl);
25
+ },
26
+ });
27
+ const { secretKey, developerDid, name, email } = fetchData;
28
+ if (!settings.connectedStores) {
29
+ settings.connectedStores = [];
30
+ }
31
+
32
+ const nextStore = {
33
+ storeId,
34
+ storeName,
35
+ storeUrl,
36
+ accessToken: secretKey,
37
+ developerDid,
38
+ developerName: name,
39
+ developerEmail: email,
40
+ };
41
+
42
+ const oldStore = settings.connectedStores.find((x) => x.storeUrl === storeUrl);
43
+ if (oldStore) {
44
+ Object.assign(oldStore, nextStore);
45
+ } else {
46
+ settings.connectedStores.push(nextStore);
47
+ }
48
+
49
+ await blockletExtras.setSettings(did, settings);
50
+
51
+ await manager.teamManager.createNotification({
52
+ teamDid: did,
53
+ title: `Connected ${storeName} successfully`,
54
+ description: `You can publish your blocklet to ${storeName} now`,
55
+ entityType: 'blocklet',
56
+ entityId: did,
57
+ severity: 'success',
58
+ });
59
+
60
+ manager.emit(BlockletEvents.updated, {
61
+ meta: { did },
62
+ });
63
+ } catch (error) {
64
+ reject(error);
65
+ }
66
+ });
67
+ };
68
+
69
+ module.exports = connectToStore;
@@ -62,10 +62,6 @@ const createPackRelease = async ({
62
62
  throw new Error('project not found');
63
63
  }
64
64
 
65
- if (project0.type !== PROJECT.TYPES.pack) {
66
- throw new Error('project type is not pack');
67
- }
68
-
69
65
  const action = releaseId ? 'update' : 'create';
70
66
 
71
67
  if (action === 'update') {
@@ -95,14 +91,13 @@ const createPackRelease = async ({
95
91
 
96
92
  const release = await releaseState.upsertRelease({
97
93
  ...params,
94
+ publishedStoreIds: [],
98
95
  projectId,
99
96
  releaseId,
100
97
  status,
101
98
  });
102
- const project = await projectState.updateProject(projectId, params);
103
99
 
104
100
  const _releaseId = release.id;
105
-
106
101
  const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
107
102
  const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
108
103
  const tmpResourceDir = path.join(projectDir, PROJECT.RESOURCE_DIR);
@@ -118,10 +113,6 @@ const createPackRelease = async ({
118
113
  await fs.ensureDir(tmpResourceDir);
119
114
  }
120
115
 
121
- if (status === PROJECT.RELEASE_STATUS.draft) {
122
- return release;
123
- }
124
-
125
116
  const releaseExportDir = path.join(releaseDir, '.blocklet');
126
117
  const releaseBundleDir = path.join(releaseExportDir, 'bundle');
127
118
  const releaseReleaseDir = path.join(releaseExportDir, 'release');
@@ -129,6 +120,18 @@ const createPackRelease = async ({
129
120
  const moniker = (urlPathFriendly(slugify(release.blockletTitle)) || 'blocklet').toLowerCase();
130
121
  const releaseFileName = `${moniker}-${release.blockletVersion}.zip`;
131
122
  const releaseFile = path.join(releaseDir, releaseFileName);
123
+
124
+ if (status !== PROJECT.RELEASE_STATUS.draft) {
125
+ params.lastReleaseId = _releaseId;
126
+ params.lastReleaseFiles = [releaseFileName];
127
+ }
128
+
129
+ const project = await projectState.updateProject(projectId, params);
130
+
131
+ if (status === PROJECT.RELEASE_STATUS.draft) {
132
+ return release;
133
+ }
134
+
132
135
  if (fs.existsSync(releaseFile)) {
133
136
  logger.error('release file already exists, remove it', releaseFile);
134
137
  await fs.remove(releaseFile);
@@ -15,6 +15,8 @@ const { createReleaseSchema } = require('../../validators/project');
15
15
 
16
16
  const { getLogoFile, exportBlockletResources, getResourceList, checkResourceExists } = require('./util');
17
17
  const createPackRelease = require('./create-pack-release');
18
+ const connectToStore = require('./connect-to-store');
19
+ const publishToStore = require('./publish-to-store');
18
20
 
19
21
  const COMPONENT_CONFIG_MAP_DIR = '.component_config';
20
22
 
@@ -150,7 +152,9 @@ const createRelease = async ({
150
152
  throw new Error('project not found');
151
153
  }
152
154
 
153
- if (project0.type === PROJECT.TYPES.pack) {
155
+ const isPack = blockletComponents?.length > 0;
156
+
157
+ if (isPack) {
154
158
  return createPackRelease({
155
159
  did,
156
160
  projectId,
@@ -197,14 +201,13 @@ const createRelease = async ({
197
201
 
198
202
  const release = await releaseState.upsertRelease({
199
203
  ...params,
204
+ publishedStoreIds: [],
200
205
  projectId,
201
206
  releaseId,
202
207
  status,
203
208
  });
204
- const project = await projectState.updateProject(projectId, params);
205
209
 
206
210
  const _releaseId = release.id;
207
-
208
211
  const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
209
212
  const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
210
213
  const tmpResourceDir = path.join(projectDir, PROJECT.RESOURCE_DIR);
@@ -220,10 +223,6 @@ const createRelease = async ({
220
223
  await fs.ensureDir(tmpResourceDir);
221
224
  }
222
225
 
223
- if (status === PROJECT.RELEASE_STATUS.draft) {
224
- return release;
225
- }
226
-
227
226
  const releaseExportDir = path.join(releaseDir, '.blocklet');
228
227
  const releaseBundleDir = path.join(releaseExportDir, 'bundle');
229
228
  const releaseReleaseDir = path.join(releaseExportDir, 'release');
@@ -231,6 +230,18 @@ const createRelease = async ({
231
230
  const moniker = (urlPathFriendly(slugify(release.blockletTitle)) || 'blocklet').toLowerCase();
232
231
  const releaseFileName = `${moniker}-${release.blockletVersion}.zip`;
233
232
  const releaseFile = path.join(releaseDir, releaseFileName);
233
+
234
+ if (status !== PROJECT.RELEASE_STATUS.draft) {
235
+ params.lastReleaseId = _releaseId;
236
+ params.lastReleaseFiles = [releaseFileName];
237
+ }
238
+
239
+ const project = await projectState.updateProject(projectId, params);
240
+
241
+ if (status === PROJECT.RELEASE_STATUS.draft) {
242
+ return release;
243
+ }
244
+
234
245
  if (fs.existsSync(releaseFile)) {
235
246
  logger.error('release file already exists, remove it', releaseFile);
236
247
  await fs.remove(releaseFile);
@@ -402,4 +413,6 @@ module.exports = {
402
413
  deleteRelease,
403
414
  getSelectedResources,
404
415
  updateSelectedResources,
416
+ connectToStore,
417
+ publishToStore,
405
418
  };
@@ -0,0 +1,78 @@
1
+ const path = require('path');
2
+ const { PROJECT } = require('@blocklet/constant');
3
+ const { upload } = require('@blocklet/store');
4
+
5
+ function ensureArray(value) {
6
+ if (!value) {
7
+ return [];
8
+ }
9
+ if (typeof value === 'string') {
10
+ return JSON.parse(value);
11
+ }
12
+ return value;
13
+ }
14
+
15
+ function getReleaseDir(blocklet, projectId, releaseId) {
16
+ const projectDir = path.join(blocklet.env.dataDir, PROJECT.DIR, `${projectId}`);
17
+ return path.join(projectDir, PROJECT.RELEASE_DIR, `${releaseId}`);
18
+ }
19
+
20
+ const publishToStore = async ({ did, projectId, releaseId, type, storeId, manager, blockletExtras }) => {
21
+ if (
22
+ !did ||
23
+ !projectId ||
24
+ !releaseId ||
25
+ !type ||
26
+ !storeId ||
27
+ typeof projectId !== 'string' ||
28
+ typeof releaseId !== 'string'
29
+ ) {
30
+ throw new Error('params is failed');
31
+ }
32
+
33
+ const { releaseState } = await manager._getProjectState(did);
34
+
35
+ const release = await releaseState.findOne({ projectId, id: releaseId });
36
+ if (!release) {
37
+ throw new Error('release not found');
38
+ }
39
+
40
+ const settings = await blockletExtras.getSettings(did);
41
+
42
+ if (!settings.connectedStores) {
43
+ throw new Error('no connected stores');
44
+ }
45
+ const store = settings.connectedStores.find((x) => x.storeId === storeId);
46
+ if (!store) {
47
+ throw new Error('no connected stores');
48
+ }
49
+ const { storeUrl } = store;
50
+ const { accessToken, developerDid } = store;
51
+
52
+ const blocklet = await manager.getBlocklet(did);
53
+ if (!blocklet) {
54
+ throw new Error('blocklet not found');
55
+ }
56
+
57
+ const releaseDir = getReleaseDir(blocklet, projectId, releaseId);
58
+ const metaFile = path.join(releaseDir, '.blocklet', 'release', 'blocklet.json');
59
+
60
+ const response = await upload({
61
+ metaFile,
62
+ storeUrl,
63
+ accessToken,
64
+ developerDid,
65
+ });
66
+
67
+ release.publishedStoreIds = ensureArray(release.publishedStoreIds);
68
+ release.publishedStoreIds.push(storeId);
69
+
70
+ await releaseState.update(
71
+ { id: releaseId },
72
+ { $set: { publishedStoreIds: Array.from(new Set(release.publishedStoreIds)) } }
73
+ );
74
+
75
+ return response?.status;
76
+ };
77
+
78
+ module.exports = publishToStore;
@@ -1,5 +1,6 @@
1
1
  const { readFileSync, outputJson } = require('fs-extra');
2
- const { isEmpty, cloneDeep } = require('lodash');
2
+ const isEmpty = require('lodash/isEmpty');
3
+ const cloneDeep = require('lodash/cloneDeep');
3
4
  const { join } = require('path');
4
5
  const security = require('@abtnode/util/lib/security');
5
6
 
@@ -1,5 +1,5 @@
1
1
  const { outputJson, createWriteStream, createReadStream, ensureDir } = require('fs-extra');
2
- const { cloneDeep } = require('lodash');
2
+ const cloneDeep = require('lodash/cloneDeep');
3
3
  const { join, basename, dirname } = require('path');
4
4
  const { BLOCKLET_CONFIGURABLE_KEY } = require('@blocklet/constant');
5
5
  const isEmpty = require('lodash/isEmpty');
@@ -1,7 +1,7 @@
1
1
  const fs = require('fs-extra');
2
2
  const { isValid } = require('@arcblock/did');
3
3
  const { ensureDirSync } = require('fs-extra');
4
- const { isEmpty } = require('lodash');
4
+ const isEmpty = require('lodash/isEmpty');
5
5
  const { join } = require('path');
6
6
  const { getAppName } = require('@blocklet/meta/lib/util');
7
7
 
@@ -21,7 +21,7 @@ const { isValid } = require('@arcblock/did');
21
21
  const { BLOCKLET_CONFIGURABLE_KEY, BlockletEvents } = require('@blocklet/constant');
22
22
  const { SpaceClient, IncrementalBackupBlockletCommand } = require('@did-space/client');
23
23
  const { ensureDirSync, existsSync, remove } = require('fs-extra');
24
- const { isEmpty } = require('lodash');
24
+ const isEmpty = require('lodash/isEmpty');
25
25
  const { join, basename } = require('path');
26
26
  const { getAppName, getAppDescription } = require('@blocklet/meta/lib/util');
27
27
 
@@ -1,5 +1,6 @@
1
1
  const { removeSync, outputJsonSync, readJSONSync } = require('fs-extra');
2
- const { cloneDeep, isEmpty } = require('lodash');
2
+ const isEmpty = require('lodash/isEmpty');
3
+ const cloneDeep = require('lodash/cloneDeep');
3
4
  const { join } = require('path');
4
5
  const security = require('@abtnode/util/lib/security');
5
6
  const { BLOCKLET_CONFIGURABLE_KEY } = require('@blocklet/constant');
@@ -1,5 +1,5 @@
1
1
  const { isValid } = require('@arcblock/did');
2
- const { isEmpty } = require('lodash');
2
+ const isEmpty = require('lodash/isEmpty');
3
3
  const merge = require('lodash/merge');
4
4
  const { ensureDirSync, existsSync, rmSync, copy } = require('fs-extra');
5
5
 
package/lib/cert.js CHANGED
@@ -89,17 +89,21 @@ class Cert extends EventEmitter {
89
89
  return this.manager
90
90
  .issue({ domain, siteId, inBlockletSetup }, { delay, metadata: { inBlockletSetup, blockletDid: did } })
91
91
  .then(async (cert) => {
92
- const site = await this.states.site.findOne({ id: siteId });
93
- for (const d of site.domainAliases) {
94
- if (d.value === domain) {
95
- d.certificateId = cert.id;
96
-
97
- break;
92
+ // Blocklet Dashboard 中添加域名时,需要更新 domainAliases certificateId
93
+ // 直接在 Blocklet Server Dashboard 中添加域名时,不需要更新 domainAliases 中 certificateId
94
+ if (siteId) {
95
+ const site = await this.states.site.findOne({ id: siteId });
96
+ for (const d of site.domainAliases) {
97
+ if (d.value === domain) {
98
+ d.certificateId = cert.id;
99
+
100
+ break;
101
+ }
98
102
  }
99
- }
100
103
 
101
- await this.states.site.update({ id: siteId }, { $set: { domainAliases: site.domainAliases } });
102
- logger.info('updated cert id for domain alias', { domain, did, certId: cert.id });
104
+ await this.states.site.update({ id: siteId }, { $set: { domainAliases: site.domainAliases } });
105
+ logger.info('updated cert id for domain alias', { domain, did, certId: cert.id });
106
+ }
103
107
 
104
108
  return cert;
105
109
  });
package/lib/index.js CHANGED
@@ -344,6 +344,8 @@ function ABTNode(options) {
344
344
  getProject: blockletManager.getProject.bind(blockletManager),
345
345
  updateProject: blockletManager.updateProject.bind(blockletManager),
346
346
  createRelease: blockletManager.createRelease.bind(blockletManager),
347
+ connectToStore: blockletManager.connectToStore.bind(blockletManager),
348
+ publishToStore: blockletManager.publishToStore.bind(blockletManager),
347
349
  getReleases: blockletManager.getReleases.bind(blockletManager),
348
350
  getRelease: blockletManager.getRelease.bind(blockletManager),
349
351
  deleteRelease: blockletManager.deleteRelease.bind(blockletManager),
@@ -1,7 +1,8 @@
1
1
  /* eslint-disable no-await-in-loop */
2
2
 
3
3
  const { DEFAULT_DID_REGISTRY, DEFAULT_DID_DOMAIN } = require('@abtnode/constant');
4
- const { isEmpty, omit } = require('lodash');
4
+ const omit = require('lodash/omit');
5
+ const isEmpty = require('lodash/isEmpty');
5
6
 
6
7
  const updateNodeInfo = async ({ printInfo, states }) => {
7
8
  // add didRegistry and didDomain
@@ -1,4 +1,4 @@
1
- const filesize = require('filesize');
1
+ const { filesize } = require('filesize');
2
2
  const { sendToAppChannel } = require('@blocklet/sdk/lib/util/send-notification');
3
3
  const { getAppPublicChannel } = require('@blocklet/meta/lib/channel');
4
4
 
@@ -57,7 +57,7 @@ class NodeMonitSender {
57
57
  const cpuContent = `${Math.floor(cpuPercent)}%`;
58
58
  const memoryPercent = (usedMem / totalMem) * 100;
59
59
  const memoryWanning = memoryPercent > 90;
60
- const memContent = `${filesize(Math.floor(usedMem))} (${Math.floor(memoryPercent)}%)`;
60
+ const memContent = `${filesize(Math.floor(usedMem), { base: 2 })} (${Math.floor(memoryPercent)}%)`;
61
61
 
62
62
  const sender = await this.getSender();
63
63
  const channel = getAppPublicChannel(sender.appDid);
@@ -42,10 +42,12 @@ class Project extends BaseState {
42
42
  'blockletDescription',
43
43
  'blockletDid',
44
44
  'blockletScreenshots',
45
+ 'lastReleaseId',
46
+ 'lastReleaseFiles',
45
47
  ]),
46
48
  (x) => !isUndefinedOrNull(x)
47
49
  );
48
-
50
+ _params.type = params.blockletComponents?.length ? 'pack' : 'resource';
49
51
  const [, [updated]] = await this.update({ id }, { $set: _params });
50
52
  return updated;
51
53
  }
@@ -29,6 +29,7 @@ class Release extends BaseState {
29
29
  'blockletLogo',
30
30
  'blockletIntroduction',
31
31
  'blockletScreenshots',
32
+ 'publishedStoreIds',
32
33
  'blockletComponents',
33
34
  'note',
34
35
  'status',
@@ -318,6 +318,7 @@ class TeamManager extends EventEmitter {
318
318
  }
319
319
 
320
320
  const metaDid = await this.states.blocklet.getBlockletMetaDid(did);
321
+
321
322
  await this.states.blockletExtras.setSettings(metaDid, { storeList: list });
322
323
  this.emit(BlockletEvents.storeChange, { meta: { did: metaDid } });
323
324
  }
@@ -104,6 +104,7 @@ const { validate: validateEngine, get: getEngine } = require('../blocklet/manage
104
104
  const isRequirementsSatisfied = require('./requirement');
105
105
  const { getDidDomainForBlocklet } = require('./get-domain-for-blocklet');
106
106
  const { expandBundle, findInterfacePortByName, prettyURL, templateReplace, getServerDidDomain } = require('./index');
107
+ const { installExternalDependencies } = require('./install-external-dependencies');
107
108
 
108
109
  /**
109
110
  * get blocklet engine info, default is node
@@ -562,6 +563,8 @@ const startBlockletProcess = async (
562
563
  const env = getRuntimeEnvironments(b, nodeEnvironments, ancestors);
563
564
  const startedAt = Date.now();
564
565
 
566
+ await installExternalDependencies({ appDir: env?.BLOCKLET_APP_DIR });
567
+
565
568
  // run hook
566
569
  await preFlight(b, { env });
567
570
 
@@ -1,8 +1,12 @@
1
- const { spawnSync } = require('child_process');
1
+ const { spawn } = require('child_process');
2
2
  const fs = require('fs-extra');
3
3
  const path = require('path');
4
4
 
5
- function installExternalDependencies(appDir) {
5
+ function isDependencyInstalled(appDir, dependency) {
6
+ return fs.existsSync(path.resolve(appDir, 'node_modules', dependency));
7
+ }
8
+
9
+ function installExternalDependencies({ appDir, forceInstall = false } = {}) {
6
10
  if (!appDir) {
7
11
  throw new Error('appDir is required');
8
12
  }
@@ -22,25 +26,44 @@ function installExternalDependencies(appDir) {
22
26
  // FIXME: 梁柱, 等未来所有的 blocklet 使用了正式版, 废弃 singleExternals
23
27
  const { singleExternals, blockletExternalDependencies } = packageJson;
24
28
  const externals = singleExternals || blockletExternalDependencies;
25
- if (!externals || !externals?.length) {
29
+ if (!Array.isArray(externals) || !externals.length) {
26
30
  return;
27
31
  }
28
32
 
29
- const result = spawnSync('npm', ['install'], {
30
- cwd: appDir,
31
- stdio: 'pipe',
32
- shell: true,
33
- env: {
34
- ...process.env,
35
- NODE_ENV: 'production',
36
- },
37
- });
33
+ const isNeedInstall = forceInstall || externals.some((dependency) => !isDependencyInstalled(appDir, dependency));
38
34
 
39
- if (result.status !== 0 && result.stderr && result.stderr.toString().trim()) {
40
- throw new Error(result.stderr.toString());
41
- }
42
- if (result.error) {
43
- throw result.error;
35
+ if (!isNeedInstall) {
36
+ return;
44
37
  }
38
+
39
+ // eslint-disable-next-line consistent-return
40
+ return new Promise((resolve, reject) => {
41
+ const child = spawn('npm', ['install'], {
42
+ cwd: appDir,
43
+ stdio: 'pipe',
44
+ shell: true,
45
+ env: {
46
+ ...process.env,
47
+ NODE_ENV: 'production',
48
+ },
49
+ });
50
+
51
+ let errorOutput = '';
52
+ child.stderr.on('data', (data) => {
53
+ errorOutput += data.toString();
54
+ });
55
+
56
+ child.on('close', (code) => {
57
+ if (code !== 0 && errorOutput.trim()) {
58
+ reject(new Error(errorOutput));
59
+ } else {
60
+ resolve();
61
+ }
62
+ });
63
+
64
+ child.on('error', (err) => {
65
+ reject(err);
66
+ });
67
+ });
45
68
  }
46
69
  module.exports = { installExternalDependencies };
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "publishConfig": {
4
4
  "access": "public"
5
5
  },
6
- "version": "1.16.25-next-bc2f4c63",
6
+ "version": "1.16.26-beta-c724c8e6",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,41 +19,42 @@
19
19
  "author": "wangshijun <wangshijun2010@gmail.com> (http://github.com/wangshijun)",
20
20
  "license": "Apache-2.0",
21
21
  "dependencies": {
22
- "@abtnode/analytics": "1.16.25-next-bc2f4c63",
23
- "@abtnode/auth": "1.16.25-next-bc2f4c63",
24
- "@abtnode/certificate-manager": "1.16.25-next-bc2f4c63",
25
- "@abtnode/constant": "1.16.25-next-bc2f4c63",
26
- "@abtnode/cron": "1.16.25-next-bc2f4c63",
27
- "@abtnode/logger": "1.16.25-next-bc2f4c63",
28
- "@abtnode/models": "1.16.25-next-bc2f4c63",
29
- "@abtnode/queue": "1.16.25-next-bc2f4c63",
30
- "@abtnode/rbac": "1.16.25-next-bc2f4c63",
31
- "@abtnode/router-provider": "1.16.25-next-bc2f4c63",
32
- "@abtnode/static-server": "1.16.25-next-bc2f4c63",
33
- "@abtnode/timemachine": "1.16.25-next-bc2f4c63",
34
- "@abtnode/util": "1.16.25-next-bc2f4c63",
35
- "@arcblock/did": "1.18.113",
36
- "@arcblock/did-auth": "1.18.113",
37
- "@arcblock/did-ext": "^1.18.113",
22
+ "@abtnode/analytics": "1.16.26-beta-c724c8e6",
23
+ "@abtnode/auth": "1.16.26-beta-c724c8e6",
24
+ "@abtnode/certificate-manager": "1.16.26-beta-c724c8e6",
25
+ "@abtnode/constant": "1.16.26-beta-c724c8e6",
26
+ "@abtnode/cron": "1.16.26-beta-c724c8e6",
27
+ "@abtnode/logger": "1.16.26-beta-c724c8e6",
28
+ "@abtnode/models": "1.16.26-beta-c724c8e6",
29
+ "@abtnode/queue": "1.16.26-beta-c724c8e6",
30
+ "@abtnode/rbac": "1.16.26-beta-c724c8e6",
31
+ "@abtnode/router-provider": "1.16.26-beta-c724c8e6",
32
+ "@abtnode/static-server": "1.16.26-beta-c724c8e6",
33
+ "@abtnode/timemachine": "1.16.26-beta-c724c8e6",
34
+ "@abtnode/util": "1.16.26-beta-c724c8e6",
35
+ "@arcblock/did": "1.18.114",
36
+ "@arcblock/did-auth": "1.18.114",
37
+ "@arcblock/did-ext": "^1.18.114",
38
38
  "@arcblock/did-motif": "^1.1.13",
39
- "@arcblock/did-util": "1.18.113",
40
- "@arcblock/event-hub": "1.18.113",
41
- "@arcblock/jwt": "^1.18.113",
39
+ "@arcblock/did-util": "1.18.114",
40
+ "@arcblock/event-hub": "1.18.114",
41
+ "@arcblock/jwt": "^1.18.114",
42
42
  "@arcblock/pm2-events": "^0.0.5",
43
- "@arcblock/validator": "^1.18.113",
44
- "@arcblock/vc": "1.18.113",
45
- "@blocklet/constant": "1.16.25-next-bc2f4c63",
46
- "@blocklet/env": "1.16.25-next-bc2f4c63",
47
- "@blocklet/meta": "1.16.25-next-bc2f4c63",
48
- "@blocklet/resolver": "1.16.25-next-bc2f4c63",
49
- "@blocklet/sdk": "1.16.25-next-bc2f4c63",
50
- "@did-space/client": "^0.3.71",
43
+ "@arcblock/validator": "^1.18.114",
44
+ "@arcblock/vc": "1.18.114",
45
+ "@blocklet/constant": "1.16.26-beta-c724c8e6",
46
+ "@blocklet/env": "1.16.26-beta-c724c8e6",
47
+ "@blocklet/meta": "1.16.26-beta-c724c8e6",
48
+ "@blocklet/resolver": "1.16.26-beta-c724c8e6",
49
+ "@blocklet/sdk": "1.16.26-beta-c724c8e6",
50
+ "@blocklet/store": "1.16.26-beta-c724c8e6",
51
+ "@did-space/client": "^0.3.75",
51
52
  "@fidm/x509": "^1.2.1",
52
- "@ocap/mcrypto": "1.18.113",
53
- "@ocap/util": "1.18.113",
54
- "@ocap/wallet": "1.18.113",
53
+ "@ocap/mcrypto": "1.18.114",
54
+ "@ocap/util": "1.18.114",
55
+ "@ocap/wallet": "1.18.114",
55
56
  "@slack/webhook": "^5.0.4",
56
- "archiver": "^5.3.1",
57
+ "archiver": "^7.0.1",
57
58
  "axios": "^0.27.2",
58
59
  "axon": "^2.0.3",
59
60
  "chalk": "^4.1.2",
@@ -62,14 +63,14 @@
62
63
  "detect-port": "^1.5.1",
63
64
  "escape-string-regexp": "^4.0.0",
64
65
  "fast-glob": "^3.3.2",
65
- "filesize": "^6.4.0",
66
+ "filesize": "^10.1.1",
66
67
  "flat": "^5.0.2",
67
68
  "fs-extra": "^11.2.0",
68
69
  "get-port": "^5.1.1",
69
70
  "hasha": "^5.2.2",
70
71
  "is-base64": "^1.1.0",
71
72
  "is-url": "^1.2.4",
72
- "joi": "17.11.0",
73
+ "joi": "17.12.2",
73
74
  "joi-extension-semver": "^5.0.0",
74
75
  "js-yaml": "^4.1.0",
75
76
  "kill-port": "^2.0.1",
@@ -102,5 +103,5 @@
102
103
  "jest": "^29.7.0",
103
104
  "unzipper": "^0.10.11"
104
105
  },
105
- "gitHead": "499ecf2bde0cdb25dbfdd1cf7807212f5fe37ad9"
106
+ "gitHead": "f2b51533d934be041b1cc5b4b2fc8c56f4855a26"
106
107
  }