@abtnode/core 1.16.25-next-b726d470 → 1.16.25

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.
@@ -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) {
@@ -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') {
@@ -99,10 +95,8 @@ const createPackRelease = async ({
99
95
  releaseId,
100
96
  status,
101
97
  });
102
- const project = await projectState.updateProject(projectId, params);
103
98
 
104
99
  const _releaseId = release.id;
105
-
106
100
  const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
107
101
  const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
108
102
  const tmpResourceDir = path.join(projectDir, PROJECT.RESOURCE_DIR);
@@ -118,10 +112,6 @@ const createPackRelease = async ({
118
112
  await fs.ensureDir(tmpResourceDir);
119
113
  }
120
114
 
121
- if (status === PROJECT.RELEASE_STATUS.draft) {
122
- return release;
123
- }
124
-
125
115
  const releaseExportDir = path.join(releaseDir, '.blocklet');
126
116
  const releaseBundleDir = path.join(releaseExportDir, 'bundle');
127
117
  const releaseReleaseDir = path.join(releaseExportDir, 'release');
@@ -129,6 +119,18 @@ const createPackRelease = async ({
129
119
  const moniker = (urlPathFriendly(slugify(release.blockletTitle)) || 'blocklet').toLowerCase();
130
120
  const releaseFileName = `${moniker}-${release.blockletVersion}.zip`;
131
121
  const releaseFile = path.join(releaseDir, releaseFileName);
122
+
123
+ if (status !== PROJECT.RELEASE_STATUS.draft) {
124
+ params.lastReleaseId = _releaseId;
125
+ params.lastReleaseFiles = [releaseFileName];
126
+ }
127
+
128
+ const project = await projectState.updateProject(projectId, params);
129
+
130
+ if (status === PROJECT.RELEASE_STATUS.draft) {
131
+ return release;
132
+ }
133
+
132
134
  if (fs.existsSync(releaseFile)) {
133
135
  logger.error('release file already exists, remove it', releaseFile);
134
136
  await fs.remove(releaseFile);
@@ -150,7 +150,9 @@ const createRelease = async ({
150
150
  throw new Error('project not found');
151
151
  }
152
152
 
153
- if (project0.type === PROJECT.TYPES.pack) {
153
+ const isPack = blockletComponents?.length > 0;
154
+
155
+ if (isPack) {
154
156
  return createPackRelease({
155
157
  did,
156
158
  projectId,
@@ -201,10 +203,8 @@ const createRelease = async ({
201
203
  releaseId,
202
204
  status,
203
205
  });
204
- const project = await projectState.updateProject(projectId, params);
205
206
 
206
207
  const _releaseId = release.id;
207
-
208
208
  const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
209
209
  const resourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR);
210
210
  const tmpResourceDir = path.join(projectDir, PROJECT.RESOURCE_DIR);
@@ -220,10 +220,6 @@ const createRelease = async ({
220
220
  await fs.ensureDir(tmpResourceDir);
221
221
  }
222
222
 
223
- if (status === PROJECT.RELEASE_STATUS.draft) {
224
- return release;
225
- }
226
-
227
223
  const releaseExportDir = path.join(releaseDir, '.blocklet');
228
224
  const releaseBundleDir = path.join(releaseExportDir, 'bundle');
229
225
  const releaseReleaseDir = path.join(releaseExportDir, 'release');
@@ -231,6 +227,18 @@ const createRelease = async ({
231
227
  const moniker = (urlPathFriendly(slugify(release.blockletTitle)) || 'blocklet').toLowerCase();
232
228
  const releaseFileName = `${moniker}-${release.blockletVersion}.zip`;
233
229
  const releaseFile = path.join(releaseDir, releaseFileName);
230
+
231
+ if (status !== PROJECT.RELEASE_STATUS.draft) {
232
+ params.lastReleaseId = _releaseId;
233
+ params.lastReleaseFiles = [releaseFileName];
234
+ }
235
+
236
+ const project = await projectState.updateProject(projectId, params);
237
+
238
+ if (status === PROJECT.RELEASE_STATUS.draft) {
239
+ return release;
240
+ }
241
+
234
242
  if (fs.existsSync(releaseFile)) {
235
243
  logger.error('release file already exists, remove it', releaseFile);
236
244
  await fs.remove(releaseFile);
@@ -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
  }
@@ -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-b726d470",
6
+ "version": "1.16.25",
7
7
  "description": "",
8
8
  "main": "lib/index.js",
9
9
  "files": [
@@ -19,19 +19,19 @@
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-b726d470",
23
- "@abtnode/auth": "1.16.25-next-b726d470",
24
- "@abtnode/certificate-manager": "1.16.25-next-b726d470",
25
- "@abtnode/constant": "1.16.25-next-b726d470",
26
- "@abtnode/cron": "1.16.25-next-b726d470",
27
- "@abtnode/logger": "1.16.25-next-b726d470",
28
- "@abtnode/models": "1.16.25-next-b726d470",
29
- "@abtnode/queue": "1.16.25-next-b726d470",
30
- "@abtnode/rbac": "1.16.25-next-b726d470",
31
- "@abtnode/router-provider": "1.16.25-next-b726d470",
32
- "@abtnode/static-server": "1.16.25-next-b726d470",
33
- "@abtnode/timemachine": "1.16.25-next-b726d470",
34
- "@abtnode/util": "1.16.25-next-b726d470",
22
+ "@abtnode/analytics": "1.16.25",
23
+ "@abtnode/auth": "1.16.25",
24
+ "@abtnode/certificate-manager": "1.16.25",
25
+ "@abtnode/constant": "1.16.25",
26
+ "@abtnode/cron": "1.16.25",
27
+ "@abtnode/logger": "1.16.25",
28
+ "@abtnode/models": "1.16.25",
29
+ "@abtnode/queue": "1.16.25",
30
+ "@abtnode/rbac": "1.16.25",
31
+ "@abtnode/router-provider": "1.16.25",
32
+ "@abtnode/static-server": "1.16.25",
33
+ "@abtnode/timemachine": "1.16.25",
34
+ "@abtnode/util": "1.16.25",
35
35
  "@arcblock/did": "1.18.113",
36
36
  "@arcblock/did-auth": "1.18.113",
37
37
  "@arcblock/did-ext": "^1.18.113",
@@ -42,12 +42,12 @@
42
42
  "@arcblock/pm2-events": "^0.0.5",
43
43
  "@arcblock/validator": "^1.18.113",
44
44
  "@arcblock/vc": "1.18.113",
45
- "@blocklet/constant": "1.16.25-next-b726d470",
46
- "@blocklet/env": "1.16.25-next-b726d470",
47
- "@blocklet/meta": "1.16.25-next-b726d470",
48
- "@blocklet/resolver": "1.16.25-next-b726d470",
49
- "@blocklet/sdk": "1.16.25-next-b726d470",
50
- "@did-space/client": "^0.3.71",
45
+ "@blocklet/constant": "1.16.25",
46
+ "@blocklet/env": "1.16.25",
47
+ "@blocklet/meta": "1.16.25",
48
+ "@blocklet/resolver": "1.16.25",
49
+ "@blocklet/sdk": "1.16.25",
50
+ "@did-space/client": "^0.3.73",
51
51
  "@fidm/x509": "^1.2.1",
52
52
  "@ocap/mcrypto": "1.18.113",
53
53
  "@ocap/util": "1.18.113",
@@ -102,5 +102,5 @@
102
102
  "jest": "^29.7.0",
103
103
  "unzipper": "^0.10.11"
104
104
  },
105
- "gitHead": "3adef75441748e01ccba82fa1bfd875cbd096185"
105
+ "gitHead": "8752b9a0caa8745e16e1de8db4ef696b713ffb4d"
106
106
  }