@marsx-dev/launcher 0.0.26 → 0.0.29
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/dist/cli/migrate.d.ts.map +1 -1
- package/dist/cli/migrate.js +21 -16
- package/dist/loader.d.ts.map +1 -1
- package/dist/loader.js +33 -14
- package/package.json +1 -1
- package/src/cli/migrate.ts +20 -16
- package/src/loader.ts +35 -14
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAQA,wBAAsB,aAAa,
|
|
1
|
+
{"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../src/cli/migrate.ts"],"names":[],"mappings":"AAQA,wBAAsB,aAAa,kBAyBlC"}
|
package/dist/cli/migrate.js
CHANGED
|
@@ -14,22 +14,27 @@ const v3_1 = require("../utils/v3");
|
|
|
14
14
|
async function migrateV3ToV4() {
|
|
15
15
|
console.log('Connecting to MongoDB...');
|
|
16
16
|
const mongoConn = await new mongodb_1.MongoClient(configuration_1.config.mongoConn).connect();
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
17
|
+
try {
|
|
18
|
+
const db = mongoConn.db(configuration_1.config.mongoDbName);
|
|
19
|
+
const allBlocks = await db
|
|
20
|
+
.collection('blocks')
|
|
21
|
+
.find({
|
|
22
|
+
Type: {
|
|
23
|
+
$ne: 'settings',
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
.toArray();
|
|
27
|
+
console.log(`Downloaded ${allBlocks.length} block(s)`);
|
|
28
|
+
for (const block of allBlocks) {
|
|
29
|
+
const serialized = (0, sfc_1.serializeSfc)((0, v3_1.convertV3ToSfc)(block));
|
|
30
|
+
await (0, fileUtils_1.writeFileMakeDir)(path_1.default.join(configuration_1.config.blocksDir, serialized.filePath), serialized.content);
|
|
31
|
+
console.log(`Saved ${serialized.filePath}`);
|
|
32
|
+
}
|
|
33
|
+
console.log(chalk_1.default.green('\nMigration complete successfully!'));
|
|
34
|
+
}
|
|
35
|
+
finally {
|
|
36
|
+
await mongoConn.close();
|
|
31
37
|
}
|
|
32
|
-
console.log(chalk_1.default.green('\nMigration complete successfully!'));
|
|
33
38
|
}
|
|
34
39
|
exports.migrateV3ToV4 = migrateV3ToV4;
|
|
35
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvbWlncmF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIscUNBQXNDO0FBQ3RDLGdEQUF3QjtBQUN4QixvREFBMEM7QUFDMUMsc0NBQTRDO0FBQzVDLGtEQUFzRDtBQUN0RCxvQ0FBMkQ7QUFFcEQsS0FBSyxVQUFVLGFBQWE7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0lBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxxQkFBVyxDQUFDLHNCQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEUsSUFBSTtRQUNGLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsc0JBQU0sQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUM1QyxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUU7YUFDdkIsVUFBVSxDQUFlLFFBQVEsQ0FBQzthQUNsQyxJQUFJLENBQUM7WUFDSixJQUFJLEVBQUU7Z0JBQ0osR0FBRyxFQUFFLFVBQVU7YUFDaEI7U0FDRixDQUFDO2FBQ0QsT0FBTyxFQUFFLENBQUM7UUFDYixPQUFPLENBQUMsR0FBRyxDQUFDLGNBQWMsU0FBUyxDQUFDLE1BQU0sV0FBVyxDQUFDLENBQUM7UUFFdkQsS0FBSyxNQUFNLEtBQUssSUFBSSxTQUFTLEVBQUU7WUFDN0IsTUFBTSxVQUFVLEdBQUcsSUFBQSxrQkFBWSxFQUFDLElBQUEsbUJBQWMsRUFBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO1lBQ3ZELE1BQU0sSUFBQSw0QkFBZ0IsRUFBQyxjQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFNLENBQUMsU0FBUyxFQUFFLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDN0YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLFVBQVUsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1NBQzdDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFLLENBQUMsS0FBSyxDQUFDLG9DQUFvQyxDQUFDLENBQUMsQ0FBQztLQUNoRTtZQUFTO1FBQ1IsTUFBTSxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDekI7QUFDSCxDQUFDO0FBekJELHNDQXlCQyJ9
|
package/dist/loader.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAQA,OAAO,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAC;AA4J/D,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,uBASrD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAKzD"}
|
package/dist/loader.js
CHANGED
|
@@ -16,6 +16,7 @@ const sfc_1 = require("./utils/sfc");
|
|
|
16
16
|
const fileUtils_1 = require("./utils/fileUtils");
|
|
17
17
|
const v3_1 = require("./utils/v3");
|
|
18
18
|
const IMPORTED_BLOCKS_DIR = '_imported';
|
|
19
|
+
let downloadedExternalBlockNames = new Set();
|
|
19
20
|
function getImportedBlocksRoot() {
|
|
20
21
|
return path_1.default.join(configuration_1.config.blocksDir, IMPORTED_BLOCKS_DIR);
|
|
21
22
|
}
|
|
@@ -31,25 +32,38 @@ function isImportedBlockFile(filePath) {
|
|
|
31
32
|
function isSettingsBlockFile(filePath) {
|
|
32
33
|
return path_1.default.parse(filePath).name.endsWith('.settings');
|
|
33
34
|
}
|
|
35
|
+
function rememberExternalBlocks(blocks) {
|
|
36
|
+
for (const block of blocks) {
|
|
37
|
+
downloadedExternalBlockNames.add(block.path.name);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
function filterFreshExternalBlocks(blocks) {
|
|
41
|
+
const result = [];
|
|
42
|
+
for (const block of blocks) {
|
|
43
|
+
if (downloadedExternalBlockNames.has(block.path.name))
|
|
44
|
+
continue;
|
|
45
|
+
downloadedExternalBlockNames.add(block.path.name);
|
|
46
|
+
result.push(block);
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
34
50
|
async function downloadFromExternal(externalImport) {
|
|
35
51
|
const params = { api_key: externalImport.api_key, git_commit_ish: externalImport.git_commit_ish || '' };
|
|
36
52
|
const url = lodash_1.default.trimEnd(externalImport.url, '/');
|
|
37
53
|
console.log(`Downloading blocks from ${url}`);
|
|
38
54
|
try {
|
|
39
55
|
const v4Resp = await axios_1.default.get(`${url}/api/GetExportedAppBlocksV4`, { params });
|
|
40
|
-
return v4Resp.data;
|
|
56
|
+
return { ...v4Resp.data, blocks: filterFreshExternalBlocks(v4Resp.data.blocks) };
|
|
41
57
|
}
|
|
42
58
|
catch (e) {
|
|
43
59
|
console.log(`${url} does not support V4, fallback to V3`);
|
|
44
60
|
}
|
|
45
61
|
const v3Resp = await axios_1.default.get(`${url}/api/GetExportedAppBlocks`, { params });
|
|
46
|
-
const v3BlocksAllRaw = v3Resp.data.reverse();
|
|
47
|
-
const seenNames = new Set();
|
|
48
62
|
const v3Blocks = [];
|
|
49
|
-
for (const block of
|
|
50
|
-
if (
|
|
63
|
+
for (const block of v3Resp.data.reverse()) {
|
|
64
|
+
if (downloadedExternalBlockNames.has(block.Name))
|
|
51
65
|
continue;
|
|
52
|
-
|
|
66
|
+
downloadedExternalBlockNames.add(block.Name);
|
|
53
67
|
v3Blocks.push((0, v3_1.convertV3ToSfc)(block));
|
|
54
68
|
}
|
|
55
69
|
return { commit: '', hash: '', blocks: v3Blocks };
|
|
@@ -71,22 +85,27 @@ function getImportCacheFilePath(externalImport) {
|
|
|
71
85
|
}
|
|
72
86
|
async function downloadAndSave(externalImport) {
|
|
73
87
|
const cacheFilePath = getImportCacheFilePath(externalImport);
|
|
88
|
+
let blocks = [];
|
|
74
89
|
if (await (0, fileUtils_1.isFile)(cacheFilePath)) {
|
|
75
90
|
const content = await fs_1.promises.readFile(cacheFilePath, 'utf-8');
|
|
76
|
-
|
|
77
|
-
|
|
91
|
+
blocks = JSON.parse(content);
|
|
92
|
+
console.log(`Loaded ${blocks.length} cached blocks from ${externalImport.url}`);
|
|
93
|
+
rememberExternalBlocks(blocks);
|
|
94
|
+
}
|
|
95
|
+
else {
|
|
96
|
+
const response = await downloadFromExternal(externalImport);
|
|
97
|
+
blocks = response.blocks;
|
|
98
|
+
console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
|
|
99
|
+
await (0, fileUtils_1.writeFileMakeDir)(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
|
|
78
100
|
}
|
|
79
|
-
const response = await downloadFromExternal(externalImport);
|
|
80
|
-
const blocks = response.blocks;
|
|
81
|
-
console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
|
|
82
|
-
await (0, fileUtils_1.writeFileMakeDir)(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
|
|
83
101
|
if (!configuration_1.config.production) {
|
|
84
102
|
await saveImportedBlocks(externalImport, blocks);
|
|
85
103
|
}
|
|
86
104
|
return blocks;
|
|
87
105
|
}
|
|
88
106
|
async function downloadAll(externalImports) {
|
|
89
|
-
|
|
107
|
+
downloadedExternalBlockNames = new Set();
|
|
108
|
+
const responses = await Promise.all([...externalImports].reverse().map(downloadAndSave));
|
|
90
109
|
return lodash_1.default.flatten(responses);
|
|
91
110
|
}
|
|
92
111
|
async function downloadSettingsFromDb() {
|
|
@@ -138,4 +157,4 @@ async function loadAllBlocks() {
|
|
|
138
157
|
return [...externalBlocks, ...localBlocks];
|
|
139
158
|
}
|
|
140
159
|
exports.loadAllBlocks = loadAllBlocks;
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
160
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLDJCQUFvQztBQUNwQyxrRkFBOEM7QUFDOUMscUNBQXNDO0FBQ3RDLG9EQUF1QjtBQUN2QixnREFBd0I7QUFDeEIsbURBQThEO0FBQzlELHFDQUErRDtBQUMvRCxpREFBaUY7QUFDakYsbUNBQTBEO0FBRzFELE1BQU0sbUJBQW1CLEdBQUcsV0FBVyxDQUFDO0FBQ3hDLElBQUksNEJBQTRCLEdBQUcsSUFBSSxHQUFHLEVBQVUsQ0FBQztBQUVyRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsc0JBQU0sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxjQUFtQztJQUNoRSxPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELFNBQVMsbUJBQW1CLENBQUMsUUFBZ0I7SUFDM0MsTUFBTSxrQkFBa0IsR0FBRyxxQkFBcUIsRUFBRSxDQUFDO0lBQ25ELE1BQU0sZ0JBQWdCLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNoRCxNQUFNLG9CQUFvQixHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMsQ0FBQztJQUM5RCxPQUFPLGdCQUFnQixLQUFLLG9CQUFvQixJQUFJLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxHQUFHLG9CQUFvQixHQUFHLGNBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQ3hILENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLFFBQWdCO0lBQzNDLE9BQU8sY0FBSSxDQUFDLEtBQUssQ0FBQyxRQUFR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
|
package/package.json
CHANGED
package/src/cli/migrate.ts
CHANGED
|
@@ -9,22 +9,26 @@ import { convertV3ToSfc, V3MongoBlock } from '../utils/v3';
|
|
|
9
9
|
export async function migrateV3ToV4() {
|
|
10
10
|
console.log('Connecting to MongoDB...');
|
|
11
11
|
const mongoConn = await new MongoClient(config.mongoConn).connect();
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
12
|
+
try {
|
|
13
|
+
const db = mongoConn.db(config.mongoDbName);
|
|
14
|
+
const allBlocks = await db
|
|
15
|
+
.collection<V3MongoBlock>('blocks')
|
|
16
|
+
.find({
|
|
17
|
+
Type: {
|
|
18
|
+
$ne: 'settings',
|
|
19
|
+
},
|
|
20
|
+
})
|
|
21
|
+
.toArray();
|
|
22
|
+
console.log(`Downloaded ${allBlocks.length} block(s)`);
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
24
|
+
for (const block of allBlocks) {
|
|
25
|
+
const serialized = serializeSfc(convertV3ToSfc(block));
|
|
26
|
+
await writeFileMakeDir(path.join(config.blocksDir, serialized.filePath), serialized.content);
|
|
27
|
+
console.log(`Saved ${serialized.filePath}`);
|
|
28
|
+
}
|
|
28
29
|
|
|
29
|
-
|
|
30
|
+
console.log(chalk.green('\nMigration complete successfully!'));
|
|
31
|
+
} finally {
|
|
32
|
+
await mongoConn.close();
|
|
33
|
+
}
|
|
30
34
|
}
|
package/src/loader.ts
CHANGED
|
@@ -12,6 +12,7 @@ import { convertV3ToSfc, V3MongoBlock } from './utils/v3';
|
|
|
12
12
|
|
|
13
13
|
type V4Response = { commit: string; hash: string; blocks: SfcBlock[] };
|
|
14
14
|
const IMPORTED_BLOCKS_DIR = '_imported';
|
|
15
|
+
let downloadedExternalBlockNames = new Set<string>();
|
|
15
16
|
|
|
16
17
|
function getImportedBlocksRoot() {
|
|
17
18
|
return path.join(config.blocksDir, IMPORTED_BLOCKS_DIR);
|
|
@@ -32,6 +33,25 @@ function isSettingsBlockFile(filePath: string) {
|
|
|
32
33
|
return path.parse(filePath).name.endsWith('.settings');
|
|
33
34
|
}
|
|
34
35
|
|
|
36
|
+
function rememberExternalBlocks(blocks: SfcBlock[]) {
|
|
37
|
+
for (const block of blocks) {
|
|
38
|
+
downloadedExternalBlockNames.add(block.path.name);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
function filterFreshExternalBlocks(blocks: SfcBlock[]) {
|
|
43
|
+
const result: SfcBlock[] = [];
|
|
44
|
+
|
|
45
|
+
for (const block of blocks) {
|
|
46
|
+
if (downloadedExternalBlockNames.has(block.path.name)) continue;
|
|
47
|
+
|
|
48
|
+
downloadedExternalBlockNames.add(block.path.name);
|
|
49
|
+
result.push(block);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
return result;
|
|
53
|
+
}
|
|
54
|
+
|
|
35
55
|
async function downloadFromExternal(externalImport: ImportProjectConfig): Promise<V4Response> {
|
|
36
56
|
const params = { api_key: externalImport.api_key, git_commit_ish: externalImport.git_commit_ish || '' };
|
|
37
57
|
|
|
@@ -39,20 +59,18 @@ async function downloadFromExternal(externalImport: ImportProjectConfig): Promis
|
|
|
39
59
|
console.log(`Downloading blocks from ${url}`);
|
|
40
60
|
try {
|
|
41
61
|
const v4Resp = await axios.get<V4Response>(`${url}/api/GetExportedAppBlocksV4`, { params });
|
|
42
|
-
return v4Resp.data;
|
|
62
|
+
return { ...v4Resp.data, blocks: filterFreshExternalBlocks(v4Resp.data.blocks) };
|
|
43
63
|
} catch (e) {
|
|
44
64
|
console.log(`${url} does not support V4, fallback to V3`);
|
|
45
65
|
}
|
|
46
66
|
|
|
47
67
|
const v3Resp = await axios.get<V3MongoBlock[]>(`${url}/api/GetExportedAppBlocks`, { params });
|
|
48
|
-
const v3BlocksAllRaw = v3Resp.data.reverse();
|
|
49
|
-
const seenNames = new Set<string>();
|
|
50
68
|
const v3Blocks: SfcBlock[] = [];
|
|
51
69
|
|
|
52
|
-
for (const block of
|
|
53
|
-
if (
|
|
70
|
+
for (const block of v3Resp.data.reverse()) {
|
|
71
|
+
if (downloadedExternalBlockNames.has(block.Name)) continue;
|
|
54
72
|
|
|
55
|
-
|
|
73
|
+
downloadedExternalBlockNames.add(block.Name);
|
|
56
74
|
v3Blocks.push(convertV3ToSfc(block));
|
|
57
75
|
}
|
|
58
76
|
|
|
@@ -79,18 +97,20 @@ function getImportCacheFilePath(externalImport: ImportProjectConfig) {
|
|
|
79
97
|
|
|
80
98
|
async function downloadAndSave(externalImport: ImportProjectConfig): Promise<SfcBlock[]> {
|
|
81
99
|
const cacheFilePath = getImportCacheFilePath(externalImport);
|
|
100
|
+
let blocks: SfcBlock[] = [];
|
|
82
101
|
|
|
83
102
|
if (await isFile(cacheFilePath)) {
|
|
84
103
|
const content = await fs.readFile(cacheFilePath, 'utf-8');
|
|
85
|
-
|
|
86
|
-
|
|
104
|
+
blocks = JSON.parse(content) as SfcBlock[];
|
|
105
|
+
console.log(`Loaded ${blocks.length} cached blocks from ${externalImport.url}`);
|
|
106
|
+
rememberExternalBlocks(blocks);
|
|
107
|
+
} else {
|
|
108
|
+
const response = await downloadFromExternal(externalImport);
|
|
109
|
+
blocks = response.blocks;
|
|
110
|
+
console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
|
|
111
|
+
await writeFileMakeDir(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
|
|
87
112
|
}
|
|
88
113
|
|
|
89
|
-
const response = await downloadFromExternal(externalImport);
|
|
90
|
-
const blocks = response.blocks;
|
|
91
|
-
console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
|
|
92
|
-
await writeFileMakeDir(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
|
|
93
|
-
|
|
94
114
|
if (!config.production) {
|
|
95
115
|
await saveImportedBlocks(externalImport, blocks);
|
|
96
116
|
}
|
|
@@ -99,7 +119,8 @@ async function downloadAndSave(externalImport: ImportProjectConfig): Promise<Sfc
|
|
|
99
119
|
}
|
|
100
120
|
|
|
101
121
|
async function downloadAll(externalImports: ImportProjectConfig[]) {
|
|
102
|
-
|
|
122
|
+
downloadedExternalBlockNames = new Set<string>();
|
|
123
|
+
const responses = await Promise.all([...externalImports].reverse().map(downloadAndSave));
|
|
103
124
|
return _.flatten(responses);
|
|
104
125
|
}
|
|
105
126
|
|