@abtnode/core 1.16.28-beta-b30865b3 → 1.16.28-beta-cec13afc
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/blocklet/manager/helper/install-component-from-url.js +3 -1
- package/lib/blocklet/project/create-pack-release.js +2 -2
- package/lib/blocklet/project/index.js +56 -22
- package/lib/blocklet/project/util.js +35 -0
- package/lib/states/release.js +1 -0
- package/lib/validators/project.js +3 -0
- package/package.json +21 -21
|
@@ -95,9 +95,11 @@ const installComponentFromUrl = async ({
|
|
|
95
95
|
const { dynamicComponents } = await parseComponents(newChild);
|
|
96
96
|
|
|
97
97
|
const index = blocklet.children.findIndex((child) => child.meta.did === meta.did);
|
|
98
|
+
|
|
98
99
|
if (index >= 0) {
|
|
99
100
|
// if upgrade, do not update mountPoint and title
|
|
100
|
-
newChild.mountPoint =
|
|
101
|
+
newChild.mountPoint =
|
|
102
|
+
blocklet.children[index].mountPoint || formatName(newChildMeta.title) || formatName(newChildMeta.name);
|
|
101
103
|
// 更新版本时, title 应该更新
|
|
102
104
|
// newChild.meta.title = blocklet.children[index].meta.title;
|
|
103
105
|
newChild.installedAt = blocklet.children[index].installedAt;
|
|
@@ -13,7 +13,7 @@ const { createRelease: createBlockletRelease } = require('@abtnode/util/lib/crea
|
|
|
13
13
|
const urlPathFriendly = require('@blocklet/meta/lib/url-path-friendly').default;
|
|
14
14
|
const { hasStartEngine } = require('@blocklet/meta/lib/util');
|
|
15
15
|
|
|
16
|
-
const logger = require('@abtnode/logger')('
|
|
16
|
+
const logger = require('@abtnode/logger')('blocklet-studio-pack');
|
|
17
17
|
|
|
18
18
|
const { createReleaseSchema } = require('../../validators/project');
|
|
19
19
|
|
|
@@ -228,7 +228,7 @@ const createPackRelease = async ({
|
|
|
228
228
|
if (fs.existsSync(extendedMetaFile)) {
|
|
229
229
|
const extendedMeta = readMetaFile(extendedMetaFile);
|
|
230
230
|
logger.info('merge extended blocklet.yml', extendedMeta);
|
|
231
|
-
Object.assign(meta, pick(extendedMeta, ['environments', 'engine']));
|
|
231
|
+
Object.assign(meta, pick(extendedMeta, ['environments', 'engine', 'capabilities']));
|
|
232
232
|
}
|
|
233
233
|
|
|
234
234
|
// Reset group for blocklets with engine specified
|
|
@@ -10,7 +10,7 @@ const { titleSchema } = require('@blocklet/meta/lib/schema');
|
|
|
10
10
|
const { validateNewDid } = require('@blocklet/meta/lib/name');
|
|
11
11
|
const urlPathFriendly = require('@blocklet/meta/lib/url-path-friendly').default;
|
|
12
12
|
|
|
13
|
-
const logger = require('@abtnode/logger')('
|
|
13
|
+
const logger = require('@abtnode/logger')('blocklet-studio');
|
|
14
14
|
|
|
15
15
|
const { createReleaseSchema } = require('../../validators/project');
|
|
16
16
|
const getIsMultipleTenant = require('./get-is-multiple-tenant');
|
|
@@ -19,8 +19,10 @@ const {
|
|
|
19
19
|
getLogoFile,
|
|
20
20
|
exportBlockletResources,
|
|
21
21
|
getResourceList,
|
|
22
|
+
checkUploadExists,
|
|
22
23
|
checkResourceExists,
|
|
23
24
|
getExtendedMetaFile,
|
|
25
|
+
exportUploadedResources,
|
|
24
26
|
} = require('./util');
|
|
25
27
|
const createPackRelease = require('./create-pack-release');
|
|
26
28
|
const connectToStore = require('./connect-to-store');
|
|
@@ -172,6 +174,7 @@ const createRelease = async ({
|
|
|
172
174
|
blockletIntroduction,
|
|
173
175
|
blockletLogo,
|
|
174
176
|
blockletScreenshots,
|
|
177
|
+
uploadedResource,
|
|
175
178
|
blockletComponents,
|
|
176
179
|
note,
|
|
177
180
|
manager,
|
|
@@ -196,6 +199,7 @@ const createRelease = async ({
|
|
|
196
199
|
blockletLogo,
|
|
197
200
|
blockletIntroduction,
|
|
198
201
|
blockletScreenshots,
|
|
202
|
+
uploadedResource,
|
|
199
203
|
note,
|
|
200
204
|
};
|
|
201
205
|
|
|
@@ -235,16 +239,16 @@ const createRelease = async ({
|
|
|
235
239
|
if (action === 'update') {
|
|
236
240
|
const release = await releaseState.findOne({ projectId, id: releaseId });
|
|
237
241
|
if (!release) {
|
|
238
|
-
throw new Error(
|
|
242
|
+
throw new Error(`Blocklet release ${releaseId} not found for project ${projectId}`);
|
|
239
243
|
}
|
|
240
244
|
if (release.status !== 'draft') {
|
|
241
|
-
throw new Error(
|
|
245
|
+
throw new Error(`Can not update a published release: ${releaseId}`);
|
|
242
246
|
}
|
|
243
247
|
}
|
|
244
248
|
|
|
245
249
|
const existVersion = await releaseState.findOne({ projectId, blockletVersion });
|
|
246
250
|
if (existVersion && (action === 'create' || existVersion.id !== releaseId)) {
|
|
247
|
-
throw new Error(`
|
|
251
|
+
throw new Error(`Release version ${blockletVersion} already exists`);
|
|
248
252
|
}
|
|
249
253
|
|
|
250
254
|
const { blockletDid } = project0;
|
|
@@ -253,8 +257,14 @@ const createRelease = async ({
|
|
|
253
257
|
|
|
254
258
|
const projectDir = path.join(blocklet.env.dataDir, PROJECT.DIR, `${projectId}`);
|
|
255
259
|
|
|
260
|
+
// validate resources
|
|
261
|
+
const isResourceFromUpload = !!uploadedResource;
|
|
256
262
|
if (status !== PROJECT.RELEASE_STATUS.draft) {
|
|
257
|
-
|
|
263
|
+
if (isResourceFromUpload) {
|
|
264
|
+
await checkUploadExists(projectDir, action, releaseId, uploadedResource);
|
|
265
|
+
} else {
|
|
266
|
+
await checkResourceExists(projectDir, action, releaseId);
|
|
267
|
+
}
|
|
258
268
|
}
|
|
259
269
|
|
|
260
270
|
const release = await releaseState.upsertRelease({
|
|
@@ -264,6 +274,7 @@ const createRelease = async ({
|
|
|
264
274
|
releaseId,
|
|
265
275
|
status,
|
|
266
276
|
});
|
|
277
|
+
logger.info('release upsert done', release);
|
|
267
278
|
|
|
268
279
|
const _releaseId = release.id;
|
|
269
280
|
const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${_releaseId}`);
|
|
@@ -301,7 +312,7 @@ const createRelease = async ({
|
|
|
301
312
|
}
|
|
302
313
|
|
|
303
314
|
if (fs.existsSync(releaseFile)) {
|
|
304
|
-
logger.
|
|
315
|
+
logger.warn('release file exists, remove it', releaseFile);
|
|
305
316
|
await fs.remove(releaseFile);
|
|
306
317
|
}
|
|
307
318
|
|
|
@@ -338,17 +349,7 @@ const createRelease = async ({
|
|
|
338
349
|
});
|
|
339
350
|
await fs.outputFile(changelogDistFile, changelog.join('\n\n'));
|
|
340
351
|
|
|
341
|
-
// create resource
|
|
342
|
-
await exportBlockletResources({
|
|
343
|
-
app: blocklet,
|
|
344
|
-
projectId,
|
|
345
|
-
releaseId: _releaseId,
|
|
346
|
-
exportDir: releaseBundleDir,
|
|
347
|
-
blockletDid,
|
|
348
|
-
});
|
|
349
|
-
|
|
350
352
|
// create blocklet.yml
|
|
351
|
-
const resourceList = await getResourceList(resourceDir);
|
|
352
353
|
const meta = {
|
|
353
354
|
did: blockletDid,
|
|
354
355
|
name: blockletDid,
|
|
@@ -356,20 +357,53 @@ const createRelease = async ({
|
|
|
356
357
|
description: blockletDescription,
|
|
357
358
|
version: blockletVersion,
|
|
358
359
|
logo: logoFileName,
|
|
359
|
-
resource: {
|
|
360
|
-
bundles: resourceList.length ? resourceList : undefined,
|
|
361
|
-
},
|
|
362
360
|
components: [],
|
|
363
361
|
files: project.blockletScreenshots?.length ? ['screenshots'] : [],
|
|
364
362
|
screenshots: project.blockletScreenshots || [],
|
|
365
363
|
};
|
|
366
364
|
|
|
365
|
+
// create resource
|
|
366
|
+
if (isResourceFromUpload) {
|
|
367
|
+
await exportUploadedResources({
|
|
368
|
+
app: blocklet,
|
|
369
|
+
projectId,
|
|
370
|
+
releaseId: _releaseId,
|
|
371
|
+
exportDir: releaseBundleDir,
|
|
372
|
+
});
|
|
373
|
+
|
|
374
|
+
meta.main = PROJECT.MAIN_DIR;
|
|
375
|
+
meta.engine = {
|
|
376
|
+
interpreter: 'blocklet',
|
|
377
|
+
source: {
|
|
378
|
+
// FIXME: @wangshijun publish this to production store
|
|
379
|
+
store: 'https://test.store.blocklet.dev',
|
|
380
|
+
name: 'z2qa2dGC9EmsjB2WJtUcmuRWx43zTwPUZQF7g',
|
|
381
|
+
version: 'latest',
|
|
382
|
+
},
|
|
383
|
+
};
|
|
384
|
+
} else {
|
|
385
|
+
await exportBlockletResources({
|
|
386
|
+
app: blocklet,
|
|
387
|
+
projectId,
|
|
388
|
+
releaseId: _releaseId,
|
|
389
|
+
exportDir: releaseBundleDir,
|
|
390
|
+
blockletDid,
|
|
391
|
+
});
|
|
392
|
+
|
|
393
|
+
const resourceList = await getResourceList(resourceDir);
|
|
394
|
+
if (resourceList) {
|
|
395
|
+
meta.resource = {
|
|
396
|
+
bundles: resourceList.length ? resourceList : undefined,
|
|
397
|
+
};
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
|
|
367
401
|
// merge extended blocklet.yml
|
|
368
402
|
const extendedMetaFile = getExtendedMetaFile({ app: blocklet, projectId, releaseId });
|
|
369
403
|
if (fs.existsSync(extendedMetaFile)) {
|
|
370
404
|
const extendedMeta = readMetaFile(extendedMetaFile);
|
|
371
|
-
logger.info('
|
|
372
|
-
Object.assign(meta, pick(extendedMeta, ['environments', 'engine']));
|
|
405
|
+
logger.info('release extended blocklet.yml', extendedMeta);
|
|
406
|
+
Object.assign(meta, pick(extendedMeta, ['environments', 'engine', 'capabilities']));
|
|
373
407
|
}
|
|
374
408
|
|
|
375
409
|
// Enable mountPoint for blocklets with engine specified
|
|
@@ -411,7 +445,7 @@ const createRelease = async ({
|
|
|
411
445
|
files: [releaseFileName],
|
|
412
446
|
});
|
|
413
447
|
|
|
414
|
-
logger.info('
|
|
448
|
+
logger.info('release finalized', res2);
|
|
415
449
|
|
|
416
450
|
return res2;
|
|
417
451
|
} catch (error) {
|
|
@@ -3,6 +3,7 @@ const fs = require('fs-extra');
|
|
|
3
3
|
const fg = require('fast-glob');
|
|
4
4
|
const { isValid: isValidDid } = require('@arcblock/did');
|
|
5
5
|
const { PROJECT, BLOCKLET_RESOURCE_DIR, BLOCKLET_META_FILE } = require('@blocklet/constant');
|
|
6
|
+
const { expandBundle } = require('../../util');
|
|
6
7
|
|
|
7
8
|
const COMPONENT_CONFIG_MAP_DIR = '.component_config';
|
|
8
9
|
|
|
@@ -77,6 +78,15 @@ const exportBlockletResources = async ({
|
|
|
77
78
|
}
|
|
78
79
|
};
|
|
79
80
|
|
|
81
|
+
const exportUploadedResources = async ({ app, projectId, releaseId, exportDir }) => {
|
|
82
|
+
const projectDir = path.join(app.env.dataDir, PROJECT.DIR, `${projectId}`);
|
|
83
|
+
const releaseDir = path.join(projectDir, PROJECT.RELEASE_DIR, `${releaseId}`);
|
|
84
|
+
const sourceDir = path.join(releaseDir, PROJECT.RESOURCE_DIR, PROJECT.MAIN_DIR);
|
|
85
|
+
const destDir = path.join(exportDir, PROJECT.MAIN_DIR);
|
|
86
|
+
await fs.ensureDir(destDir);
|
|
87
|
+
await fs.copy(sourceDir, destDir);
|
|
88
|
+
};
|
|
89
|
+
|
|
80
90
|
async function checkIfDirectory(file) {
|
|
81
91
|
try {
|
|
82
92
|
const stats = await fs.promises.stat(file);
|
|
@@ -135,6 +145,29 @@ const checkResourceExists = async (projectDir, action, releaseId) => {
|
|
|
135
145
|
}
|
|
136
146
|
};
|
|
137
147
|
|
|
148
|
+
const checkUploadExists = async (projectDir, action, releaseId, uploadedResource) => {
|
|
149
|
+
const uploadedFile = path.join(projectDir, PROJECT.ASSET_DIR, uploadedResource);
|
|
150
|
+
if (!fs.existsSync(uploadedFile)) {
|
|
151
|
+
throw new Error(`Uploaded resource does not exist: ${uploadedResource}`);
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
const resourceDir =
|
|
155
|
+
action === 'create'
|
|
156
|
+
? path.join(projectDir, PROJECT.RESOURCE_DIR, PROJECT.MAIN_DIR)
|
|
157
|
+
: path.join(projectDir, PROJECT.RELEASE_DIR, `${releaseId}`, PROJECT.RESOURCE_DIR, PROJECT.MAIN_DIR);
|
|
158
|
+
|
|
159
|
+
if (fs.existsSync(resourceDir)) {
|
|
160
|
+
fs.rmSync(resourceDir, { recursive: true });
|
|
161
|
+
}
|
|
162
|
+
fs.ensureDirSync(resourceDir);
|
|
163
|
+
|
|
164
|
+
await expandBundle(uploadedFile, resourceDir);
|
|
165
|
+
const files = ['index.html', 'index.htm'];
|
|
166
|
+
if (files.every((file) => fs.existsSync(path.join(resourceDir, file)) === false)) {
|
|
167
|
+
throw new Error(`Uploaded resource does not contain index.html or index.htm: ${uploadedResource}`);
|
|
168
|
+
}
|
|
169
|
+
};
|
|
170
|
+
|
|
138
171
|
const getExtendedMetaFile = ({ app, projectId, releaseId }) => {
|
|
139
172
|
const { dataDir } = app.env;
|
|
140
173
|
const dirArr = [dataDir, PROJECT.DIR, projectId || '/'];
|
|
@@ -148,7 +181,9 @@ const getExtendedMetaFile = ({ app, projectId, releaseId }) => {
|
|
|
148
181
|
module.exports = {
|
|
149
182
|
getLogoFile,
|
|
150
183
|
exportBlockletResources,
|
|
184
|
+
exportUploadedResources,
|
|
151
185
|
getResourceList,
|
|
186
|
+
checkUploadExists,
|
|
152
187
|
checkResourceExists,
|
|
153
188
|
getExtendedMetaFile,
|
|
154
189
|
};
|
package/lib/states/release.js
CHANGED
|
@@ -5,6 +5,7 @@ const note = Joi.string().min(1).max(PROJECT.MAX_NOTE_LENGTH);
|
|
|
5
5
|
const blockletIntroduction = Joi.string().max(PROJECT.MAX_INTRO_LENGTH).allow('').allow(null);
|
|
6
6
|
const blockletScreenshots = Joi.array().items(Joi.string().min(1).max(200));
|
|
7
7
|
const blockletLogo = Joi.string().max(200).allow(null).allow('');
|
|
8
|
+
const uploadedResource = Joi.string().max(255).allow(null).allow('');
|
|
8
9
|
|
|
9
10
|
const createReleaseSchema = (status) =>
|
|
10
11
|
Joi.object({
|
|
@@ -24,6 +25,7 @@ const createReleaseSchema = (status) =>
|
|
|
24
25
|
required: Joi.boolean().allow(null),
|
|
25
26
|
})
|
|
26
27
|
),
|
|
28
|
+
uploadedResource,
|
|
27
29
|
});
|
|
28
30
|
|
|
29
31
|
module.exports = {
|
|
@@ -31,5 +33,6 @@ module.exports = {
|
|
|
31
33
|
blockletIntroduction,
|
|
32
34
|
blockletScreenshots,
|
|
33
35
|
blockletLogo,
|
|
36
|
+
uploadedResource,
|
|
34
37
|
createReleaseSchema,
|
|
35
38
|
};
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publishConfig": {
|
|
4
4
|
"access": "public"
|
|
5
5
|
},
|
|
6
|
-
"version": "1.16.28-beta-
|
|
6
|
+
"version": "1.16.28-beta-cec13afc",
|
|
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.28-beta-
|
|
23
|
-
"@abtnode/auth": "1.16.28-beta-
|
|
24
|
-
"@abtnode/certificate-manager": "1.16.28-beta-
|
|
25
|
-
"@abtnode/constant": "1.16.28-beta-
|
|
26
|
-
"@abtnode/cron": "1.16.28-beta-
|
|
27
|
-
"@abtnode/logger": "1.16.28-beta-
|
|
28
|
-
"@abtnode/models": "1.16.28-beta-
|
|
29
|
-
"@abtnode/queue": "1.16.28-beta-
|
|
30
|
-
"@abtnode/rbac": "1.16.28-beta-
|
|
31
|
-
"@abtnode/router-provider": "1.16.28-beta-
|
|
32
|
-
"@abtnode/static-server": "1.16.28-beta-
|
|
33
|
-
"@abtnode/timemachine": "1.16.28-beta-
|
|
34
|
-
"@abtnode/util": "1.16.28-beta-
|
|
22
|
+
"@abtnode/analytics": "1.16.28-beta-cec13afc",
|
|
23
|
+
"@abtnode/auth": "1.16.28-beta-cec13afc",
|
|
24
|
+
"@abtnode/certificate-manager": "1.16.28-beta-cec13afc",
|
|
25
|
+
"@abtnode/constant": "1.16.28-beta-cec13afc",
|
|
26
|
+
"@abtnode/cron": "1.16.28-beta-cec13afc",
|
|
27
|
+
"@abtnode/logger": "1.16.28-beta-cec13afc",
|
|
28
|
+
"@abtnode/models": "1.16.28-beta-cec13afc",
|
|
29
|
+
"@abtnode/queue": "1.16.28-beta-cec13afc",
|
|
30
|
+
"@abtnode/rbac": "1.16.28-beta-cec13afc",
|
|
31
|
+
"@abtnode/router-provider": "1.16.28-beta-cec13afc",
|
|
32
|
+
"@abtnode/static-server": "1.16.28-beta-cec13afc",
|
|
33
|
+
"@abtnode/timemachine": "1.16.28-beta-cec13afc",
|
|
34
|
+
"@abtnode/util": "1.16.28-beta-cec13afc",
|
|
35
35
|
"@arcblock/did": "1.18.123",
|
|
36
36
|
"@arcblock/did-auth": "1.18.123",
|
|
37
37
|
"@arcblock/did-ext": "^1.18.123",
|
|
@@ -42,12 +42,12 @@
|
|
|
42
42
|
"@arcblock/pm2-events": "^0.0.5",
|
|
43
43
|
"@arcblock/validator": "^1.18.123",
|
|
44
44
|
"@arcblock/vc": "1.18.123",
|
|
45
|
-
"@blocklet/constant": "1.16.28-beta-
|
|
46
|
-
"@blocklet/env": "1.16.28-beta-
|
|
47
|
-
"@blocklet/meta": "1.16.28-beta-
|
|
48
|
-
"@blocklet/resolver": "1.16.28-beta-
|
|
49
|
-
"@blocklet/sdk": "1.16.28-beta-
|
|
50
|
-
"@blocklet/store": "1.16.28-beta-
|
|
45
|
+
"@blocklet/constant": "1.16.28-beta-cec13afc",
|
|
46
|
+
"@blocklet/env": "1.16.28-beta-cec13afc",
|
|
47
|
+
"@blocklet/meta": "1.16.28-beta-cec13afc",
|
|
48
|
+
"@blocklet/resolver": "1.16.28-beta-cec13afc",
|
|
49
|
+
"@blocklet/sdk": "1.16.28-beta-cec13afc",
|
|
50
|
+
"@blocklet/store": "1.16.28-beta-cec13afc",
|
|
51
51
|
"@did-space/client": "^0.5.1",
|
|
52
52
|
"@fidm/x509": "^1.2.1",
|
|
53
53
|
"@ocap/mcrypto": "1.18.123",
|
|
@@ -103,5 +103,5 @@
|
|
|
103
103
|
"jest": "^29.7.0",
|
|
104
104
|
"unzipper": "^0.10.11"
|
|
105
105
|
},
|
|
106
|
-
"gitHead": "
|
|
106
|
+
"gitHead": "6ab117057365e4687296dba666f27470b4e31af2"
|
|
107
107
|
}
|