@marsx-dev/launcher 0.0.25 → 0.0.26

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 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAMA,OAAO,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAC;AAoG/D,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,uBASrD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAKzD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAC;AAuI/D,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,uBASrD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAKzD"}
package/dist/loader.js CHANGED
@@ -5,7 +5,9 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.loadAllBlocks = exports.readBlockFiles = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
+ const crypto_1 = __importDefault(require("crypto"));
8
9
  const fs_1 = require("fs");
10
+ const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
9
11
  const mongodb_1 = require("mongodb");
10
12
  const lodash_1 = __importDefault(require("lodash"));
11
13
  const path_1 = __importDefault(require("path"));
@@ -41,7 +43,16 @@ async function downloadFromExternal(externalImport) {
41
43
  console.log(`${url} does not support V4, fallback to V3`);
42
44
  }
43
45
  const v3Resp = await axios_1.default.get(`${url}/api/GetExportedAppBlocks`, { params });
44
- return { commit: '', hash: '', blocks: v3Resp.data.map(b => (0, v3_1.convertV3ToSfc)(b)) };
46
+ const v3BlocksAllRaw = v3Resp.data.reverse();
47
+ const seenNames = new Set();
48
+ const v3Blocks = [];
49
+ for (const block of v3BlocksAllRaw) {
50
+ if (seenNames.has(block.Name))
51
+ continue;
52
+ seenNames.add(block.Name);
53
+ v3Blocks.push((0, v3_1.convertV3ToSfc)(block));
54
+ }
55
+ return { commit: '', hash: '', blocks: v3Blocks };
45
56
  }
46
57
  async function saveImportedBlocks(externalImport, blocks) {
47
58
  const importedProjectDir = getImportedProjectDir(externalImport);
@@ -53,10 +64,25 @@ async function saveImportedBlocks(externalImport, blocks) {
53
64
  await (0, fileUtils_1.writeFileMakeDir)(outputPath, serialized.content);
54
65
  }
55
66
  }
67
+ function getImportCacheFilePath(externalImport) {
68
+ const hash = crypto_1.default.createHash('md5').update((0, json_stable_stringify_1.default)(externalImport)).digest('hex');
69
+ const cacheFileName = `${externalImport.name}_${externalImport.git_commit_ish}_${hash}.json`.replace(/[^\w.]+/g, '_');
70
+ return path_1.default.join(configuration_1.config.cacheDir, 'imports', cacheFileName);
71
+ }
56
72
  async function downloadAndSave(externalImport) {
57
- const { blocks } = await downloadFromExternal(externalImport);
73
+ const cacheFilePath = getImportCacheFilePath(externalImport);
74
+ if (await (0, fileUtils_1.isFile)(cacheFilePath)) {
75
+ const content = await fs_1.promises.readFile(cacheFilePath, 'utf-8');
76
+ console.log(`Loading cached blocks from ${externalImport.url}`);
77
+ return JSON.parse(content);
78
+ }
79
+ const response = await downloadFromExternal(externalImport);
80
+ const blocks = response.blocks;
58
81
  console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
59
- await saveImportedBlocks(externalImport, blocks);
82
+ await (0, fileUtils_1.writeFileMakeDir)(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
83
+ if (!configuration_1.config.production) {
84
+ await saveImportedBlocks(externalImport, blocks);
85
+ }
60
86
  return blocks;
61
87
  }
62
88
  async function downloadAll(externalImports) {
@@ -82,6 +108,9 @@ async function downloadSettingsFromDb() {
82
108
  }
83
109
  }
84
110
  async function saveSettingsBlocks(blocks) {
111
+ if (configuration_1.config.production) {
112
+ return;
113
+ }
85
114
  for (const block of blocks) {
86
115
  const serialized = (0, sfc_1.serializeSfc)(block);
87
116
  const outputPath = path_1.default.join(configuration_1.config.blocksDir, serialized.filePath);
@@ -109,4 +138,4 @@ async function loadAllBlocks() {
109
138
  return [...externalBlocks, ...localBlocks];
110
139
  }
111
140
  exports.loadAllBlocks = loadAllBlocks;
112
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsMkJBQW9DO0FBQ3BDLHFDQUFzQztBQUN0QyxvREFBdUI7QUFDdkIsZ0RBQXdCO0FBQ3hCLG1EQUE4RDtBQUM5RCxxQ0FBK0Q7QUFDL0QsaURBQXlFO0FBQ3pFLG1DQUEwRDtBQUcxRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztBQUV4QyxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsc0JBQU0sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxjQUFtQztJQUNoRSxPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsUUFBZ0I7SUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0lBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLG9CQUFvQixHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RCxPQUFPLGdCQUFnQixLQUFLLG9CQUFvQixJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLG9CQUFvQixHQUFHLGNBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hILENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFFBQWdCO0lBQzNDLE9BQU8sY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxLQUFLLFVB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
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLDJCQUFvQztBQUNwQyxrRkFBOEM7QUFDOUMscUNBQXNDO0FBQ3RDLG9EQUF1QjtBQUN2QixnREFBd0I7QUFDeEIsbURBQThEO0FBQzlELHFDQUErRDtBQUMvRCxpREFBaUY7QUFDakYsbUNBQTBEO0FBRzFELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0FBRXhDLFNBQVMscUJBQXFCO0lBQzVCLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxzQkFBTSxDQUFDLFNBQVMsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0FBQzFELENBQUM7QUFFRCxTQUFTLHFCQUFxQixDQUFDLGNBQW1DO0lBQ2hFLE9BQU8sY0FBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxFQUFFLGNBQWMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxtQkFBbUIsQ0FBQyxRQUFnQjtJQUMzQyxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixFQUFFLENBQUM7SUFDbkQsTUFBTSxnQkFBZ0IsR0FBRyxjQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ2hELE1BQU0sb0JBQW9CLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQyxDQUFDO0lBQzlELE9BQU8sZ0JBQWdCLEtBQUssb0JBQW9CLElBQUksZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEdBQUcsb0JBQW9CLEdBQUcsY0FBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDeEgsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsUUFBZ0I7SUFDM0MsT0FBTyxjQUFJLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marsx-dev/launcher",
3
- "version": "0.0.25",
3
+ "version": "0.0.26",
4
4
  "description": "MarsX launcher",
5
5
  "author": "MarsX team <team@marsx.dev>",
6
6
  "homepage": "https://marsx.dev/",
package/src/loader.ts CHANGED
@@ -1,11 +1,13 @@
1
1
  import axios from 'axios';
2
+ import crypto from 'crypto';
2
3
  import { promises as fs } from 'fs';
4
+ import stringify from 'json-stable-stringify';
3
5
  import { MongoClient } from 'mongodb';
4
6
  import _ from 'lodash';
5
7
  import path from 'path';
6
8
  import { config, ImportProjectConfig } from './configuration';
7
9
  import { parseSFC, serializeSfc, SfcBlock } from './utils/sfc';
8
- import { listFilesRecursive, writeFileMakeDir } from './utils/fileUtils';
10
+ import { isFile, listFilesRecursive, writeFileMakeDir } from './utils/fileUtils';
9
11
  import { convertV3ToSfc, V3MongoBlock } from './utils/v3';
10
12
 
11
13
  type V4Response = { commit: string; hash: string; blocks: SfcBlock[] };
@@ -43,7 +45,18 @@ async function downloadFromExternal(externalImport: ImportProjectConfig): Promis
43
45
  }
44
46
 
45
47
  const v3Resp = await axios.get<V3MongoBlock[]>(`${url}/api/GetExportedAppBlocks`, { params });
46
- return { commit: '', hash: '', blocks: v3Resp.data.map(b => convertV3ToSfc(b)) };
48
+ const v3BlocksAllRaw = v3Resp.data.reverse();
49
+ const seenNames = new Set<string>();
50
+ const v3Blocks: SfcBlock[] = [];
51
+
52
+ for (const block of v3BlocksAllRaw) {
53
+ if (seenNames.has(block.Name)) continue;
54
+
55
+ seenNames.add(block.Name);
56
+ v3Blocks.push(convertV3ToSfc(block));
57
+ }
58
+
59
+ return { commit: '', hash: '', blocks: v3Blocks };
47
60
  }
48
61
 
49
62
  async function saveImportedBlocks(externalImport: ImportProjectConfig, blocks: SfcBlock[]) {
@@ -58,10 +71,30 @@ async function saveImportedBlocks(externalImport: ImportProjectConfig, blocks: S
58
71
  }
59
72
  }
60
73
 
74
+ function getImportCacheFilePath(externalImport: ImportProjectConfig) {
75
+ const hash = crypto.createHash('md5').update(stringify(externalImport)).digest('hex');
76
+ const cacheFileName = `${externalImport.name}_${externalImport.git_commit_ish}_${hash}.json`.replace(/[^\w.]+/g, '_');
77
+ return path.join(config.cacheDir, 'imports', cacheFileName);
78
+ }
79
+
61
80
  async function downloadAndSave(externalImport: ImportProjectConfig): Promise<SfcBlock[]> {
62
- const { blocks } = await downloadFromExternal(externalImport);
81
+ const cacheFilePath = getImportCacheFilePath(externalImport);
82
+
83
+ if (await isFile(cacheFilePath)) {
84
+ const content = await fs.readFile(cacheFilePath, 'utf-8');
85
+ console.log(`Loading cached blocks from ${externalImport.url}`);
86
+ return JSON.parse(content) as SfcBlock[];
87
+ }
88
+
89
+ const response = await downloadFromExternal(externalImport);
90
+ const blocks = response.blocks;
63
91
  console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
64
- await saveImportedBlocks(externalImport, blocks);
92
+ await writeFileMakeDir(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
93
+
94
+ if (!config.production) {
95
+ await saveImportedBlocks(externalImport, blocks);
96
+ }
97
+
65
98
  return blocks;
66
99
  }
67
100
 
@@ -91,6 +124,10 @@ async function downloadSettingsFromDb(): Promise<SfcBlock[]> {
91
124
  }
92
125
 
93
126
  async function saveSettingsBlocks(blocks: SfcBlock[]) {
127
+ if (config.production) {
128
+ return;
129
+ }
130
+
94
131
  for (const block of blocks) {
95
132
  const serialized = serializeSfc(block);
96
133
  const outputPath = path.join(config.blocksDir, serialized.filePath);