@blocklet/pages-kit-block-studio 0.6.14 → 0.6.16
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/cjs/middlewares/init-block-studio-router.js +34 -0
- package/lib/cjs/middlewares/init-resource-router.js +7 -262
- package/lib/cjs/tsconfig.tsbuildinfo +1 -1
- package/lib/cjs/utils/build-lib.js +291 -42
- package/lib/cjs/utils/helper.js +38 -0
- package/lib/esm/middlewares/init-block-studio-router.js +34 -0
- package/lib/esm/middlewares/init-resource-router.js +8 -224
- package/lib/esm/tsconfig.tsbuildinfo +1 -1
- package/lib/esm/utils/build-lib.js +259 -43
- package/lib/esm/utils/helper.js +35 -0
- package/lib/types/middlewares/init-resource-router.d.ts +0 -3
- package/lib/types/tsconfig.tsbuildinfo +1 -1
- package/lib/types/utils/build-lib.d.ts +4 -2
- package/lib/types/utils/helper.d.ts +3 -0
- package/package.json +3 -3
|
@@ -198,6 +198,40 @@ exports.initBlockStudioRouter.post('/', async (req, res) => {
|
|
|
198
198
|
});
|
|
199
199
|
}
|
|
200
200
|
}
|
|
201
|
+
// check if the properties has mediaKitUrl
|
|
202
|
+
if ((0, helper_1.isMetadataFile)(filePath) && content.properties) {
|
|
203
|
+
const downloadPromises = [];
|
|
204
|
+
Object.keys(content.properties).forEach((key) => {
|
|
205
|
+
const property = content.properties[key].data;
|
|
206
|
+
if (property.type === 'url') {
|
|
207
|
+
Object.keys(property.locales).forEach((locale) => {
|
|
208
|
+
if (property.locales[locale].defaultValue?.mediaKitUrl?.startsWith('mediakit://')) {
|
|
209
|
+
const downloadPromise = (async () => {
|
|
210
|
+
try {
|
|
211
|
+
const fileName = path_1.default.basename(property.locales[locale].defaultValue.mediaKitUrl);
|
|
212
|
+
const targetPath = path_1.default.join(dir, (0, helper_1.getPreviewImageRelativePath)(fileName));
|
|
213
|
+
if (fs_1.default.existsSync(targetPath)) {
|
|
214
|
+
return;
|
|
215
|
+
}
|
|
216
|
+
await (0, helper_1.downloadAsset)({
|
|
217
|
+
asset: fileName,
|
|
218
|
+
savePath: targetPath,
|
|
219
|
+
componentDid: process.env.BLOCKLET_COMPONENT_DID || '',
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
console.error('Download media kit file failed:', error.message);
|
|
224
|
+
}
|
|
225
|
+
})();
|
|
226
|
+
downloadPromises.push(downloadPromise);
|
|
227
|
+
}
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
});
|
|
231
|
+
if (downloadPromises.length > 0) {
|
|
232
|
+
await Promise.allSettled(downloadPromises);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
201
235
|
fs_1.default.writeFileSync(filePath, JSON.stringify(mergedContent, null, 2));
|
|
202
236
|
return res.json({ success: true, content: mergedContent, message: 'Updated' });
|
|
203
237
|
}
|
|
@@ -1,95 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
|
-
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
-
var ownKeys = function(o) {
|
|
20
|
-
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
-
var ar = [];
|
|
22
|
-
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
-
return ar;
|
|
24
|
-
};
|
|
25
|
-
return ownKeys(o);
|
|
26
|
-
};
|
|
27
|
-
return function (mod) {
|
|
28
|
-
if (mod && mod.__esModule) return mod;
|
|
29
|
-
var result = {};
|
|
30
|
-
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
-
__setModuleDefault(result, mod);
|
|
32
|
-
return result;
|
|
33
|
-
};
|
|
34
|
-
})();
|
|
35
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
-
};
|
|
38
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
3
|
exports.initResourceRouter = void 0;
|
|
40
|
-
exports.copyFile = copyFile;
|
|
41
|
-
exports.copyDirectory = copyDirectory;
|
|
42
|
-
exports.copyRecursive = copyRecursive;
|
|
43
4
|
const component_1 = require("@blocklet/sdk/lib/component");
|
|
44
|
-
const uploader_server_1 = require("@blocklet/uploader-server");
|
|
45
5
|
const child_process_1 = require("child_process");
|
|
46
6
|
const express_1 = require("express");
|
|
47
|
-
const
|
|
48
|
-
const get_1 = __importDefault(require("lodash/get"));
|
|
49
|
-
const set_1 = __importDefault(require("lodash/set"));
|
|
50
|
-
const path_1 = __importStar(require("path"));
|
|
51
|
-
const typescript_1 = __importDefault(require("typescript"));
|
|
7
|
+
const path_1 = require("path");
|
|
52
8
|
const helper_1 = require("../utils/helper");
|
|
9
|
+
const allTag = '@ALL_COMPONENTS';
|
|
53
10
|
const DID = 'z2qa7BQdkEb3TwYyEYC1psK6uvmGnHSUHt5RM';
|
|
54
11
|
const RESOURCE_TYPE = 'page';
|
|
55
|
-
const allTag = '@ALL_COMPONENTS';
|
|
56
12
|
// use for tracking build process
|
|
57
13
|
let currentBuildProcess = null;
|
|
58
|
-
function copyFile(src, dest) {
|
|
59
|
-
return new Promise((resolve, reject) => {
|
|
60
|
-
const readStream = fs_1.default.createReadStream(src);
|
|
61
|
-
const writeStream = fs_1.default.createWriteStream(dest);
|
|
62
|
-
readStream.on('error', reject);
|
|
63
|
-
writeStream.on('error', reject);
|
|
64
|
-
writeStream.on('finish', resolve);
|
|
65
|
-
readStream.pipe(writeStream);
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
async function copyDirectory(src, dest) {
|
|
69
|
-
await fs_1.default.promises.mkdir(dest, { recursive: true });
|
|
70
|
-
const entries = await fs_1.default.promises.readdir(src, { withFileTypes: true });
|
|
71
|
-
for (const entry of entries) {
|
|
72
|
-
const srcPath = path_1.default.join(src, entry.name);
|
|
73
|
-
const destPath = path_1.default.join(dest, entry.name);
|
|
74
|
-
if (entry.isDirectory()) {
|
|
75
|
-
// eslint-disable-next-line no-await-in-loop
|
|
76
|
-
await copyDirectory(srcPath, destPath);
|
|
77
|
-
}
|
|
78
|
-
else {
|
|
79
|
-
// eslint-disable-next-line no-await-in-loop
|
|
80
|
-
await copyFile(srcPath, destPath);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
async function copyRecursive(src, dest) {
|
|
85
|
-
const srcStats = await fs_1.default.promises.stat(src);
|
|
86
|
-
if (srcStats.isDirectory()) {
|
|
87
|
-
await copyDirectory(src, dest);
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
await copyFile(src, dest);
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
14
|
const getExportDir = (projectId, releaseId) => {
|
|
94
15
|
const exportDir = (0, component_1.getResourceExportDir)({ projectId, releaseId });
|
|
95
16
|
const dir = (0, path_1.join)(exportDir, DID, RESOURCE_TYPE);
|
|
@@ -101,8 +22,6 @@ exports.initResourceRouter.get('/', async (_req, res) => {
|
|
|
101
22
|
const rootDir = process.cwd();
|
|
102
23
|
const files = (0, helper_1.findComponentFiles)({ cwd: rootDir, strictExistMetadata: true });
|
|
103
24
|
for (const file of files) {
|
|
104
|
-
// const filePath = path.join(rootDir, file);
|
|
105
|
-
// const fileContent = fs.readFileSync(filePath, 'utf8');
|
|
106
25
|
const { blockName } = file;
|
|
107
26
|
resources.push({
|
|
108
27
|
id: blockName,
|
|
@@ -136,9 +55,11 @@ exports.initResourceRouter.post('/', async (req, res) => {
|
|
|
136
55
|
currentBuildProcess = null;
|
|
137
56
|
}
|
|
138
57
|
if (componentIds.length === 0) {
|
|
139
|
-
throw new Error('No components
|
|
58
|
+
throw new Error('No components found, please check has any component been selected');
|
|
140
59
|
}
|
|
141
|
-
//
|
|
60
|
+
// Get export directory
|
|
61
|
+
const exportDir = getExportDir(projectId, releaseId);
|
|
62
|
+
// Execute build command with export directory
|
|
142
63
|
const buildProcess = (0, child_process_1.spawn)('pnpm', ['run', 'build-lib'], {
|
|
143
64
|
stdio: 'inherit',
|
|
144
65
|
shell: true,
|
|
@@ -146,6 +67,7 @@ exports.initResourceRouter.post('/', async (req, res) => {
|
|
|
146
67
|
...process.env,
|
|
147
68
|
FORCE_COLOR: '1',
|
|
148
69
|
BLOCK_FILTER: componentIds.join(','),
|
|
70
|
+
EXPORT_DIR: exportDir,
|
|
149
71
|
NODE_OPTIONS: '--max_old_space_size=16384',
|
|
150
72
|
NODE_ENV: 'production',
|
|
151
73
|
},
|
|
@@ -164,183 +86,6 @@ exports.initResourceRouter.post('/', async (req, res) => {
|
|
|
164
86
|
reject(error);
|
|
165
87
|
});
|
|
166
88
|
});
|
|
167
|
-
const dir = getExportDir(projectId, releaseId);
|
|
168
|
-
fs_1.default.rmSync(dir, { recursive: true, force: true });
|
|
169
|
-
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
170
|
-
const rootDir = process.cwd();
|
|
171
|
-
const distDir = (0, path_1.join)(rootDir, helper_1.libDir);
|
|
172
|
-
const codeDir = (0, path_1.join)(distDir, 'es');
|
|
173
|
-
const tmpPackage = (0, path_1.join)(distDir, 'resource-blocklet');
|
|
174
|
-
fs_1.default.mkdirSync(tmpPackage, { recursive: true });
|
|
175
|
-
const pagesDir = (0, path_1.join)(tmpPackage, 'pages');
|
|
176
|
-
fs_1.default.mkdirSync(pagesDir, { recursive: true });
|
|
177
|
-
const componentsDir = (0, path_1.join)(tmpPackage, 'components');
|
|
178
|
-
fs_1.default.mkdirSync(componentsDir, { recursive: true });
|
|
179
|
-
const chunksDir = (0, path_1.join)(tmpPackage, 'chunks');
|
|
180
|
-
fs_1.default.mkdirSync(chunksDir, { recursive: true });
|
|
181
|
-
const chunksMapPath = (0, path_1.join)(codeDir, 'chunks-map.json');
|
|
182
|
-
const chunksMap = JSON.parse(fs_1.default.readFileSync(chunksMapPath, 'utf8'));
|
|
183
|
-
// get @metadata.json by glob
|
|
184
|
-
const canUseComponents = (0, helper_1.findComponentFiles)({ cwd: rootDir, filter: componentIds, strictExistMetadata: true });
|
|
185
|
-
// Filter and process metadata files
|
|
186
|
-
const metadataList = await Promise.all(canUseComponents.map(async ({ fullPath, blockName, metadata: _metadata }) => {
|
|
187
|
-
// get metadata
|
|
188
|
-
const metadata = _metadata;
|
|
189
|
-
const jsName = `${blockName}.js`;
|
|
190
|
-
// set version to 2
|
|
191
|
-
(0, set_1.default)(metadata, 'version', 2);
|
|
192
|
-
// get code to metadata
|
|
193
|
-
const code = fs_1.default.readFileSync((0, path_1.join)(codeDir, `${(0, helper_1.getComponentScriptName)(blockName, 'esm')}.js`), 'utf8');
|
|
194
|
-
if (code) {
|
|
195
|
-
(0, set_1.default)(metadata, 'renderer.script', code);
|
|
196
|
-
(0, set_1.default)(metadata, 'renderer.type', 'react-component');
|
|
197
|
-
(0, set_1.default)(metadata, 'renderer.chunks', chunksMap[jsName] || []);
|
|
198
|
-
}
|
|
199
|
-
// get cjs by code with transpileModule
|
|
200
|
-
try {
|
|
201
|
-
const cjsCode = typescript_1.default.transpileModule(code, {
|
|
202
|
-
compilerOptions: {
|
|
203
|
-
jsx: typescript_1.default.JsxEmit.React,
|
|
204
|
-
target: typescript_1.default.ScriptTarget.ES2016,
|
|
205
|
-
module: typescript_1.default.ModuleKind.CommonJS,
|
|
206
|
-
moduleResolution: typescript_1.default.ModuleResolutionKind.Node16,
|
|
207
|
-
},
|
|
208
|
-
}).outputText;
|
|
209
|
-
if (cjsCode) {
|
|
210
|
-
(0, set_1.default)(metadata, 'renderer.cjsScript', cjsCode);
|
|
211
|
-
}
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
// ignore error
|
|
215
|
-
}
|
|
216
|
-
// get edit component code
|
|
217
|
-
try {
|
|
218
|
-
const editComponentJsName = `${(0, helper_1.getEditComponentBlockName)(blockName)}.js`;
|
|
219
|
-
const editComponentCode = fs_1.default.readFileSync((0, path_1.join)(codeDir, editComponentJsName), 'utf8');
|
|
220
|
-
if (editComponentCode) {
|
|
221
|
-
// add edit component code
|
|
222
|
-
(0, set_1.default)(metadata, 'renderer.editComponent', editComponentCode);
|
|
223
|
-
// append edit component chunks
|
|
224
|
-
(0, set_1.default)(metadata, 'renderer.chunks', Array.from(new Set([...(0, get_1.default)(metadata, 'renderer.chunks', []), ...(chunksMap[editComponentJsName] || [])])));
|
|
225
|
-
}
|
|
226
|
-
}
|
|
227
|
-
catch (error) {
|
|
228
|
-
// ignore error
|
|
229
|
-
}
|
|
230
|
-
// get aigne output value schema
|
|
231
|
-
try {
|
|
232
|
-
const aigneOutputValueSchemaJsName = `${(0, helper_1.getAigneOutputValueSchemaBlockName)(blockName)}.js`;
|
|
233
|
-
const aigneOutputValueSchemaCode = fs_1.default.readFileSync((0, path_1.join)(codeDir, aigneOutputValueSchemaJsName), 'utf8');
|
|
234
|
-
if (aigneOutputValueSchemaCode) {
|
|
235
|
-
(0, set_1.default)(metadata, 'renderer.aigneOutputValueSchema', aigneOutputValueSchemaCode);
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
catch (error) {
|
|
239
|
-
// ignore error
|
|
240
|
-
}
|
|
241
|
-
// get properties schema
|
|
242
|
-
try {
|
|
243
|
-
const propertiesSchemaJsName = `${(0, helper_1.getPropertiesSchemaBlockName)(blockName)}.js`;
|
|
244
|
-
const propertiesSchemaCode = fs_1.default.readFileSync((0, path_1.join)(codeDir, propertiesSchemaJsName), 'utf8');
|
|
245
|
-
if (propertiesSchemaCode) {
|
|
246
|
-
(0, set_1.default)(metadata, 'renderer.PROPERTIES_SCHEMA', propertiesSchemaCode);
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
catch (error) {
|
|
250
|
-
// ignore error
|
|
251
|
-
}
|
|
252
|
-
// get getServerSideProps
|
|
253
|
-
try {
|
|
254
|
-
const getServerSidePropsJsName = `${(0, helper_1.getGetServerSidePropsBlockName)(blockName)}.js`;
|
|
255
|
-
const getServerSidePropsCode = fs_1.default.readFileSync((0, path_1.join)(codeDir, getServerSidePropsJsName), 'utf8');
|
|
256
|
-
if (getServerSidePropsCode) {
|
|
257
|
-
(0, set_1.default)(metadata, 'renderer.getServerSideProps', getServerSidePropsCode);
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
catch (error) {
|
|
261
|
-
// ignore error
|
|
262
|
-
}
|
|
263
|
-
// Handle preview image if exists
|
|
264
|
-
if (metadata.previewImage) {
|
|
265
|
-
const imagePath = path_1.default.join(path_1.default.dirname(fullPath), (0, helper_1.getPreviewImageRelativePath)(metadata.previewImage));
|
|
266
|
-
const imageDestPath = path_1.default.join(componentsDir, metadata.previewImage);
|
|
267
|
-
if (fs_1.default.existsSync(imagePath)) {
|
|
268
|
-
fs_1.default.copyFileSync(imagePath, imageDestPath);
|
|
269
|
-
}
|
|
270
|
-
}
|
|
271
|
-
// Handle type:url properties url
|
|
272
|
-
if (metadata.properties) {
|
|
273
|
-
const downloadPromises = [];
|
|
274
|
-
Object.keys(metadata.properties).forEach((key) => {
|
|
275
|
-
const property = metadata.properties[key].data;
|
|
276
|
-
if (property.type === 'url') {
|
|
277
|
-
// 如果每个 locales 的默认值里面,存在 mediaKitUrl 的值,需要把图片下载放到 imagePath 里面
|
|
278
|
-
Object.keys(property.locales).forEach((locale) => {
|
|
279
|
-
if (property.locales[locale].defaultValue?.mediaKitUrl?.startsWith('mediakit://')) {
|
|
280
|
-
const downloadPromise = (async () => {
|
|
281
|
-
try {
|
|
282
|
-
const fileName = (0, path_1.basename)(property.locales[locale].defaultValue.mediaKitUrl);
|
|
283
|
-
const targetPath = path_1.default.join(componentsDir, fileName);
|
|
284
|
-
// Check if file already exists to avoid redundant downloads
|
|
285
|
-
if (fs_1.default.existsSync(targetPath)) {
|
|
286
|
-
return;
|
|
287
|
-
}
|
|
288
|
-
const resWithStream = await (0, uploader_server_1.getMediaKitFileStream)(property.locales[locale].defaultValue.mediaKitUrl);
|
|
289
|
-
if (!resWithStream.data) {
|
|
290
|
-
return;
|
|
291
|
-
}
|
|
292
|
-
// create write stream
|
|
293
|
-
const writeStream = fs_1.default.createWriteStream(targetPath);
|
|
294
|
-
resWithStream.data.pipe(writeStream);
|
|
295
|
-
// wait for write stream to finish
|
|
296
|
-
await new Promise((resolve, reject) => {
|
|
297
|
-
writeStream.on('finish', () => {
|
|
298
|
-
// 修改 property.locales[locale].defaultValue.url 变为 mediakit:// 开头
|
|
299
|
-
property.locales[locale].defaultValue.url = property.locales[locale].defaultValue.mediaKitUrl;
|
|
300
|
-
resolve();
|
|
301
|
-
});
|
|
302
|
-
writeStream.on('error', reject);
|
|
303
|
-
});
|
|
304
|
-
}
|
|
305
|
-
catch (error) {
|
|
306
|
-
console.error('Download media kit file failed:', error.message);
|
|
307
|
-
}
|
|
308
|
-
})();
|
|
309
|
-
downloadPromises.push(downloadPromise);
|
|
310
|
-
}
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
// Wait for all downloads to complete for this metadata
|
|
315
|
-
if (downloadPromises.length > 0) {
|
|
316
|
-
await Promise.allSettled(downloadPromises);
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
// write metadata to metadataPath
|
|
320
|
-
const metadataYmlPath = path_1.default.join(componentsDir, `${metadata.name || 'unnamed'}.${metadata.id}.yml`);
|
|
321
|
-
fs_1.default.writeFileSync(metadataYmlPath, (0, helper_1.generateYaml)(metadata));
|
|
322
|
-
return metadata;
|
|
323
|
-
}));
|
|
324
|
-
// cp chunks dir
|
|
325
|
-
await copyRecursive((0, path_1.join)(codeDir, 'chunks'), chunksDir);
|
|
326
|
-
// write pages.config.yml
|
|
327
|
-
const pagesConfigPath = path_1.default.join(tmpPackage, '.blocklet/pages/pages.config.yml');
|
|
328
|
-
fs_1.default.mkdirSync(path_1.default.dirname(pagesConfigPath), { recursive: true });
|
|
329
|
-
const pagesConfig = {
|
|
330
|
-
version: 2,
|
|
331
|
-
pages: [],
|
|
332
|
-
components: metadataList.map((metadata) => ({
|
|
333
|
-
id: metadata.id,
|
|
334
|
-
name: metadata.name,
|
|
335
|
-
})),
|
|
336
|
-
supportedLocales: [],
|
|
337
|
-
config: {},
|
|
338
|
-
};
|
|
339
|
-
fs_1.default.writeFileSync(pagesConfigPath, (0, helper_1.generateYaml)(pagesConfig));
|
|
340
|
-
helper_1.logger.info('generate resource blocklet block count:', metadataList.length);
|
|
341
|
-
await copyRecursive(tmpPackage, dir);
|
|
342
|
-
// remove tmpPackage
|
|
343
|
-
// fs.rmSync(tmpPackage, { recursive: true, force: true });
|
|
344
89
|
res.json({ success: true });
|
|
345
90
|
}
|
|
346
91
|
catch (error) {
|