@blocklet/pages-kit-block-studio 0.6.14 → 0.6.15

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.
@@ -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 fs_1 = __importDefault(require("fs"));
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 founds, please check has any component been selected');
58
+ throw new Error('No components found, please check has any component been selected');
140
59
  }
141
- // Execute build command with filtered components
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) {