@marsx-dev/launcher 0.0.22 → 0.0.23

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":"fix-folders.d.ts","sourceRoot":"","sources":["../../src/cli/fix-folders.ts"],"names":[],"mappings":"AAWA,wBAAsB,iBAAiB,CAAC,OAAO,UAAO,iBA6CrD"}
1
+ {"version":3,"file":"fix-folders.d.ts","sourceRoot":"","sources":["../../src/cli/fix-folders.ts"],"names":[],"mappings":"AAWA,wBAAsB,iBAAiB,CAAC,OAAO,UAAO,iBA8CrD"}
@@ -16,6 +16,7 @@ async function fixDbBlockFolders(safeRun = true) {
16
16
  console.log(chalk_1.default.red(`Running in ${safeRun ? 'SAFE' : 'WRITE TO DB'} mode!`));
17
17
  console.log(`Reading files to migrate from ${configuration_1.config.blocksDir} folder`);
18
18
  let localBlocks = await (0, loader_1.readBlockFiles)(configuration_1.config.blocksDir);
19
+ localBlocks = localBlocks.filter(l => l.path.filePath.indexOf('_imported') === -1);
19
20
  localBlocks = localBlocks.filter(l => l.path.filePath.indexOf('_forked') === -1);
20
21
  console.log(`Got ${localBlocks.length} files to migrate`);
21
22
  const db = await getMongoDbConnection();
@@ -48,4 +49,4 @@ async function fixDbBlockFolders(safeRun = true) {
48
49
  console.log(chalk_1.default.green('\nFolders fixed complete successfully!'));
49
50
  }
50
51
  exports.fixDbBlockFolders = fixDbBlockFolders;
51
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4LWZvbGRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2ZpeC1mb2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQixvREFBMEM7QUFDMUMsc0NBQTJDO0FBRTNDLHFDQUFvRDtBQUVwRCxLQUFLLFVBQVUsb0JBQW9CO0lBQ2pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxxQkFBVyxDQUFDLHNCQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLHNCQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsSUFBSTtJQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRS9FLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLHNCQUFNLENBQUMsU0FBUyxTQUFTLENBQUMsQ0FBQztJQUV6RSxJQUFJLFdBQVcsR0FBRyxNQUFNLElBQUEsdUJBQWMsRUFBQyxzQkFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXpELFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakYsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLFdBQVcsQ0FBQyxNQUFNLG1CQUFtQixDQUFDLENBQUM7SUFFMUQsTUFBTSxFQUFFLEdBQUcsTUFBTSxvQkFBb0IsRUFBRSxDQUFDO0lBRXhDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNWLE1BQU0sZUFBZSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQWUsUUFBUSxDQUFDLENBQUM7SUFFOUQsS0FBSyxNQUFNLEtBQUssSUFBSSxXQUFXLEVBQUU7UUFDL0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFFdkQsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksa0JBQVEsQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBVyxDQUFDLENBQUM7WUFDOUQsSUFBSSxDQUFDLE9BQU8sRUFBRTtnQkFDWixNQUFNLEdBQUcsR0FBRyxNQUFNLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxNQUFNLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7Z0JBQ3pILE9BQU8sQ0FBQyxHQUFHLENBQ1QsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLEtBQUssT0FBTyxDQUFDLFFBQVEsRUFBRSxLQUMzRCxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxHQUFHLENBQUMsYUFDcEQsRUFBRSxDQUNILENBQUM7YUFDSDtpQkFBTTtnQkFDTCxNQUFNLE9BQU8sR0FBRyxNQUFNLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxHQUFHLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztnQkFDaEUsSUFBSSxPQUFPLEVBQUU7b0JBQ1gsT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sU0FBUyxPQUFPLEVBQUUsR0FBRyxLQUFLLE9BQU8sRUFBRSxNQUFNLE9BQU8sS0FBSyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO2lCQUN4SDtxQkFBTTtvQkFDTCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxTQUFTLE9BQU8sYUFBYSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ3JHO2FBQ0Y7U0FDRjtRQUFDLE9BQU8sR0FBRyxFQUFFO1lBQ1osT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7WUFDdkQsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQztTQUNwQjtRQUVELENBQUMsRUFBRSxDQUFDO0tBQ0w7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxLQUFLLENBQUMsd0NBQXdDLENBQUMsQ0FBQyxDQUFDO0FBQ3JFLENBQUM7QUE3Q0QsOENBNkNDIn0=
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZml4LWZvbGRlcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2xpL2ZpeC1mb2xkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtEQUEwQjtBQUMxQixvREFBMEM7QUFDMUMsc0NBQTJDO0FBRTNDLHFDQUFvRDtBQUVwRCxLQUFLLFVBQVUsb0JBQW9CO0lBQ2pDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxxQkFBVyxDQUFDLHNCQUFNLENBQUMsU0FBUyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7SUFDcEUsT0FBTyxTQUFTLENBQUMsRUFBRSxDQUFDLHNCQUFNLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDMUMsQ0FBQztBQUVNLEtBQUssVUFBVSxpQkFBaUIsQ0FBQyxPQUFPLEdBQUcsSUFBSTtJQUNwRCxPQUFPLENBQUMsR0FBRyxDQUFDLGVBQUssQ0FBQyxHQUFHLENBQUMsY0FBYyxPQUFPLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsYUFBYSxRQUFRLENBQUMsQ0FBQyxDQUFDO0lBRS9FLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLHNCQUFNLENBQUMsU0FBUyxTQUFTLENBQUMsQ0FBQztJQUV6RSxJQUFJLFdBQVcsR0FBRyxNQUFNLElBQUEsdUJBQWMsRUFBQyxzQkFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXpELFdBQVcsR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkYsV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVqRixPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sV0FBVyxDQUFDLE1BQU0sbUJBQW1CLENBQUMsQ0FBQztJQUUxRCxNQUFNLEVBQUUsR0FBRyxNQUFNLG9CQUFvQixFQUFFLENBQUM7SUFFeEMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ1YsTUFBTSxlQUFlLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBZSxRQUFRLENBQUMsQ0FBQztJQUU5RCxLQUFLLE1BQU0sS0FBSyxJQUFJLFdBQVcsRUFBRTtRQUMvQixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV2RCxJQUFJO1lBQ0YsTUFBTSxPQUFPLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFXLENBQUMsQ0FBQztZQUM5RCxJQUFJLENBQUMsT0FBTyxFQUFFO2dCQUNaLE1BQU0sR0FBRyxHQUFHLE1BQU0sZUFBZSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDekgsT0FBTyxDQUFDLEdBQUcsQ0FDVCxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksV0FBVyxDQUFDLE1BQU0sS0FBSyxPQUFPLENBQUMsUUFBUSxFQUFFLEtBQzNELEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsVUFBVSxHQUFHLEdBQUcsQ0FBQyxhQUNwRCxFQUFFLENBQ0gsQ0FBQzthQUNIO2lCQUFNO2dCQUNMLE1BQU0sT0FBTyxHQUFHLE1BQU0sZUFBZSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDO2dCQUNoRSxJQUFJLE9BQU8sRUFBRTtvQkFDWCxPQUFPLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxTQUFTLE9BQU8sRUFBRSxHQUFHLEtBQUssT0FBTyxFQUFFLE1BQU0sT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7aUJBQ3hIO3FCQUFNO29CQUNMLE9BQU8sQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQyxNQUFNLFNBQVMsT0FBTyxhQUFhLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztpQkFDckc7YUFDRjtTQUNGO1FBQUMsT0FBTyxHQUFHLEVBQUU7WUFDWixPQUFPLENBQUMsR0FBRyxDQUFDLFlBQVksQ0FBQyxHQUFHLENBQUMsSUFBSSxXQUFXLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUN2RCxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1NBQ3BCO1FBRUQsQ0FBQyxFQUFFLENBQUM7S0FDTDtJQUVELE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBSyxDQUFDLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQTlDRCw4Q0E4Q0MifQ==
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAyDA,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,iBAyFpD"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/cli/init.ts"],"names":[],"mappings":"AAyDA,wBAAsB,WAAW,CAAC,WAAW,EAAE,MAAM,iBA6FpD"}
package/dist/cli/init.js CHANGED
@@ -107,7 +107,8 @@ async function initProject(projectName) {
107
107
  };
108
108
  await (0, fileUtils_1.writeFileMakeDir)(path_1.default.join(projectDir, 'config', 'default.json'), JSON.stringify(config, null, 2));
109
109
  await (0, fileUtils_1.writeFileMakeDir)(path_1.default.join(projectDir, 'config', 'custom-environment-variables.json'), JSON.stringify(configuration_1.CustomEnvironmentVariables, null, 2));
110
- await (0, fileUtils_1.writeFileMakeDir)(path_1.default.join(projectDir, '.gitignore'), 'node_modules\ndist\n.cache\n');
110
+ await (0, fileUtils_1.writeFileMakeDir)(path_1.default.join(projectDir, '.gitignore'), 'node_modules\ndist\n.cache\nblocks/_imported\n');
111
+ await (0, fileUtils_1.writeFileMakeDir)(path_1.default.join(projectDir, 'AGENTS.md'), '## Instructions\n- Never manually edit files under `blocks/_imported/`. That directory is generated at runtime from external imports and may be fully rewritten by the launcher.\n- Never edit `*.settings.mars` files. If a settings change is required, describe exactly what the developer should change manually instead of modifying the file.\n- If you need to modify an imported block, do not edit `blocks/_imported/`. Create a local fork under `blocks/_forked/<import_app_name>/...`, keep the block filename and block contents compatible with the imported block you are overriding, and edit the fork there instead.\n- `_forked` is only a local convention. The loader treats it as normal local blocks, so forks override imported blocks because local blocks are loaded after imported ones. There is no automatic fork command in this repo.\n');
111
112
  function run(...args) {
112
113
  const cmd = args[0];
113
114
  (0, textUtils_1.assert)(cmd);
@@ -130,4 +131,4 @@ async function initProject(projectName) {
130
131
  console.log(` - Start local server: ${chalk_1.default.underline('npm run start')}`);
131
132
  }
132
133
  exports.initProject = initProject;
133
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsaURBQTBDO0FBQzFDLG1DQUFxQztBQUNyQyxnREFBd0I7QUFDeEIsb0RBQXNFO0FBQ3RFLGtEQUFtRTtBQUNuRSxrREFBNEM7QUFDNUMsbUNBQW1DO0FBQ25DLDJCQUFvQztBQUVwQyxNQUFNLFlBQVksR0FBRztJQUNuQixrQkFBa0I7SUFDbEIsU0FBUztJQUNULGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIsbUJBQW1CO0NBQ3BCLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRztJQUNsQixxQkFBcUI7SUFDckIsU0FBUztJQUNULE9BQU87SUFDUCxlQUFlO0lBQ2YsUUFBUTtJQUNSLFFBQVE7SUFDUixVQUFVO0lBQ1YsUUFBUTtJQUNSLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsWUFBWTtJQUNaLE1BQU07SUFDTixRQUFRO0NBQ1QsQ0FBQztBQUVGLE1BQU0sT0FBTyxHQUFHO0lBQ2QsWUFBWTtJQUNaLGtDQUFrQztJQUNsQyxRQUFRO0lBQ1IsV0FBVztJQUNYLGNBQWM7SUFDZCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixZQUFZO0NBQ2IsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUU1RCxLQUFLLFVBQVUsV0FBVyxDQUFDLFdBQW1CO0lBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsS0FBSyxXQUFXLENB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
134
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jbGkvaW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsaURBQTBDO0FBQzFDLG1DQUFxQztBQUNyQyxnREFBd0I7QUFDeEIsb0RBQXNFO0FBQ3RFLGtEQUFtRTtBQUNuRSxrREFBNEM7QUFDNUMsbUNBQW1DO0FBQ25DLDJCQUFvQztBQUVwQyxNQUFNLFlBQVksR0FBRztJQUNuQixrQkFBa0I7SUFDbEIsU0FBUztJQUNULGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsZ0JBQWdCO0lBQ2hCLGNBQWM7SUFDZCxjQUFjO0lBQ2QsZUFBZTtJQUNmLGtCQUFrQjtJQUNsQixnQkFBZ0I7SUFDaEIsbUJBQW1CO0lBQ25CLHlCQUF5QjtJQUN6QixnQkFBZ0I7SUFDaEIsbUJBQW1CO0NBQ3BCLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRztJQUNsQixxQkFBcUI7SUFDckIsU0FBUztJQUNULE9BQU87SUFDUCxlQUFlO0lBQ2YsUUFBUTtJQUNSLFFBQVE7SUFDUixVQUFVO0lBQ1YsUUFBUTtJQUNSLHdCQUF3QjtJQUN4Qix3QkFBd0I7SUFDeEIsWUFBWTtJQUNaLE1BQU07SUFDTixRQUFRO0NBQ1QsQ0FBQztBQUVGLE1BQU0sT0FBTyxHQUFHO0lBQ2QsWUFBWTtJQUNaLGtDQUFrQztJQUNsQyxRQUFRO0lBQ1IsV0FBVztJQUNYLGNBQWM7SUFDZCxlQUFlO0lBQ2YsaUJBQWlCO0lBQ2pCLGVBQWU7SUFDZixZQUFZO0NBQ2IsQ0FBQztBQUVGLE1BQU0sWUFBWSxHQUFHLENBQUMsR0FBRyxZQUFZLEVBQUUsR0FBRyxXQUFXLEVBQUUsR0FBRyxPQUFPLENBQUMsQ0FBQztBQUU1RCxLQUFLLFVBQVUsV0FBVyxDQUFDLFdBQW1CO0lBQ25ELElBQUksQ0FBQyxXQUFXLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLFdBQVcsS0FBSyxXQUFXLENBQUMsV0FBVyxFQUFFLEVBQUU7UUFDNUUsTUFBTSxJQUFJLGdCQUFRLENBQ2hCLGlCQUFpQixXQUFXLDZGQUE2RixDQUMxSCxDQUFDO0tBQ0g7SUFDRCxNQUFNLElBQUksR0FBRztRQUNYLFNBQVMsRUFBRSxXQUFXO1FBQ3RCLFVBQVUsRUFBRSxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUM7UUFDekMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQztLQUNwQyxDQUFDO0lBRUYsTUFBTSxVQUFVLEdBQUcsY0FBSSxDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUU3QyxJQUFJLE1BQU0sSUFBQSx1QkFBVyxFQUFDLFVBQVUsQ0FBQyxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxnQkFBUSxDQUFDLGdCQUFnQixXQUFXLHdEQUF3RCxDQUFDLENBQUM7S0FDekc7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLG1DQUFtQyxlQUFLLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUUxRSxNQUFNLFdBQVcsR0FBRztRQUNsQixJQUFJLEVBQUUsSUFBSSxDQUFDLFVBQVU7UUFDckIsT0FBTyxFQUFFLE9BQU87UUFDaEIsT0FBTyxFQUFFLElBQUk7UUFDYixPQUFPLEVBQUU7WUFDUCxLQUFLLEVBQUUsYUFBYTtTQUNyQjtRQUNELFlBQVksRUFBRSxFQUFFO0tBQ2pCLENBQUM7SUFDRixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDNUQsTUFBTSxJQUFBLDRCQUFnQixFQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLGNBQWMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBRTlFLE1BQU0sTUFBTSxHQUFXO1FBQ3JCLFVBQVUsRUFBRSxLQUFLO1FBQ2pCLElBQUksRUFBRSxJQUFJO1FBQ1YsU0FBUyxFQUFFLFFBQVE7UUFDbkIsUUFBUSxFQUFFLFFBQVE7UUFDbEIsU0FBUyxFQUFFLFlBQVk7UUFDdkIsV0FBVyxFQUFFLElBQUksQ0FBQyxVQUFVO1FBQzVCLHNCQUFzQixFQUFFLFlBQVk7UUFDcEMsdUJBQXVCLEVBQUUsSUFBSSxDQUFDLEtBQUs7UUFDbkMsZUFBZSxFQUFFLFdBQVcsSUFBSSxDQUFDLEtBQUssd0JBQXdCO1FBQzlELGFBQWEsRUFBRSxVQUFVO1FBQ3pCLG1CQUFtQixFQUFFLGdCQUFnQjtRQUNyQyxZQUFZLEVBQUUsV0FBVztRQUN6QixNQUFNLEVBQUUsQ0FBQyxNQUFNLElBQUEsb0JBQVcsRUFBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUM7UUFDL0MsUUFBUSxFQUFFLENBQUMsTUFBTSxJQUFBLG9CQUFXLEVBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDO1FBQ2pELGNBQWMsRUFBRTtZQUNkO2dCQUNFLElBQUksRUFBRSxZQUFZO2dCQUNsQixHQUFHLEVBQUUsNEJBQTRCO2dCQUNqQyxPQUFPLEVBQUUsV0FBVztnQkFDcEIsY0FBYyxFQUFFLE1BQU07YUFDdkI7U0FDRjtLQUNGLENBQUM7SUFFRixNQUFNLElBQUEsNEJBQWdCLEVBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLGNBQWMsQ0FBQyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3pHLE1BQU0sSUFBQSw0QkFBZ0IsRUFDcEIsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLG1DQUFtQyxDQUFDLEVBQ3BFLElBQUksQ0FBQyxTQUFTLENBQUMsMENBQTBCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNwRCxDQUFDO0lBQ0YsTUFBTSxJQUFBLDRCQUFnQixFQUFDLGNBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFlBQVksQ0FBQyxFQUFFLGdEQUFnRCxDQUFDLENBQUM7SUFDOUcsTUFBTSxJQUFBLDRCQUFnQixFQUNwQixjQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsRUFDbEMsdTBCQUF1MEIsQ0FDeDBCLENBQUM7SUFFRixTQUFTLEdBQUcsQ0FBQyxHQUFHLElBQWM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BCLElBQUEsa0JBQU0sRUFBQyxHQUFHLENBQUMsQ0FBQztRQUNaLElBQUEseUJBQVMsRUFBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNwRixDQUFDO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxpRUFBaUUsQ0FBQyxDQUFDO0lBQy9FLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEdBQUcsWUFBWSxDQUFDLENBQUM7SUFDakMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUVoQixHQUFHLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSx1QkFBdUIsQ0FBQyxDQUFDO0lBQzVDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQ2hDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3hCLDJDQUEyQztJQUMzQyxHQUFHLENBQUMsS0FBSyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsd0JBQXdCLENBQUMsQ0FBQztJQUVyRCxNQUFNLGFBQUUsQ0FBQyxLQUFLLENBQUMsY0FBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQztJQUVoRCxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssZUFBSyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsWUFBWSxXQUFXLE9BQU8sVUFBVSxFQUFFLENBQUMsQ0FBQztJQUVwRixPQUFPLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsbUNBQW1DLGVBQUssQ0FBQyxTQUFTLENBQUMsTUFBTSxXQUFXLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUN2RixPQUFPLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxlQUFLLENBQUMsU0FBUyxDQUFDLDBCQUEwQixDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3RILE9BQU8sQ0FBQyxHQUFHLENBQUMsNkNBQTZDLGVBQUssQ0FBQyxTQUFTLENBQUMsbUJBQW1CLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDakcsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsZUFBSyxDQUFDLFNBQVMsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDN0UsQ0FBQztBQTdGRCxrQ0E2RkMifQ==
package/dist/loader.d.ts CHANGED
@@ -1,4 +1,6 @@
1
+ import { ImportProjectConfig } from './configuration';
1
2
  import { SfcBlock } from './utils/sfc';
2
3
  export declare function readBlockFiles(blocksDir: string): Promise<SfcBlock[]>;
4
+ export declare function readImportedBlockFiles(externalImport: ImportProjectConfig): Promise<SfcBlock[]>;
3
5
  export declare function loadAllBlocks(): Promise<SfcBlock[]>;
4
6
  //# sourceMappingURL=loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAOA,OAAO,EAAY,QAAQ,EAAE,MAAM,aAAa,CAAC;AAmDjD,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,uBAGrD;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAIzD"}
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"AAKA,OAAO,EAAU,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAA0B,QAAQ,EAAE,MAAM,aAAa,CAAC;AA2F/D,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,uBAQrD;AAED,wBAAsB,sBAAsB,CAAC,cAAc,EAAE,mBAAmB,uBAO/E;AAED,wBAAsB,aAAa,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC,CAMzD"}
package/dist/loader.js CHANGED
@@ -3,17 +3,23 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
3
3
  return (mod && mod.__esModule) ? mod : { "default": mod };
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.loadAllBlocks = exports.readBlockFiles = void 0;
6
+ exports.loadAllBlocks = exports.readImportedBlockFiles = exports.readBlockFiles = void 0;
7
7
  const axios_1 = __importDefault(require("axios"));
8
- const crypto_1 = __importDefault(require("crypto"));
9
8
  const fs_1 = require("fs");
10
- const json_stable_stringify_1 = __importDefault(require("json-stable-stringify"));
9
+ const mongodb_1 = require("mongodb");
11
10
  const lodash_1 = __importDefault(require("lodash"));
12
11
  const path_1 = __importDefault(require("path"));
13
12
  const configuration_1 = require("./configuration");
14
13
  const sfc_1 = require("./utils/sfc");
15
14
  const fileUtils_1 = require("./utils/fileUtils");
16
15
  const v3_1 = require("./utils/v3");
16
+ const IMPORTED_BLOCKS_DIR = '_imported';
17
+ function getImportedBlocksRoot() {
18
+ return path_1.default.join(configuration_1.config.blocksDir, IMPORTED_BLOCKS_DIR);
19
+ }
20
+ function getImportedProjectDir(externalImport) {
21
+ return path_1.default.join(getImportedBlocksRoot(), externalImport.name);
22
+ }
17
23
  async function downloadFromExternal(externalImport) {
18
24
  const params = { api_key: externalImport.api_key, git_commit_ish: externalImport.git_commit_ish || '' };
19
25
  const url = lodash_1.default.trimEnd(externalImport.url, '/');
@@ -28,24 +34,52 @@ async function downloadFromExternal(externalImport) {
28
34
  const v3Resp = await axios_1.default.get(`${url}/api/GetExportedAppBlocks`, { params });
29
35
  return { commit: '', hash: '', blocks: v3Resp.data.map(b => (0, v3_1.convertV3ToSfc)(b)) };
30
36
  }
31
- async function loadCachedOrDownload(externalImport) {
32
- const hash = crypto_1.default.createHash('md5').update((0, json_stable_stringify_1.default)(externalImport)).digest('hex');
33
- const cacheFileName = `${externalImport.name}_${externalImport.git_commit_ish}_${hash}.json`.replace(/[^\w.]+/g, '_');
34
- const cacheFilePath = path_1.default.join(configuration_1.config.cacheDir, 'imports', cacheFileName);
35
- if (await (0, fileUtils_1.isFile)(cacheFilePath)) {
36
- const content = await fs_1.promises.readFile(cacheFilePath);
37
- console.log(`Loading cached blocks from ${externalImport.url}`);
38
- return JSON.parse(content.toString('utf-8'));
37
+ async function saveImportedBlocks(externalImport, blocks) {
38
+ const importedProjectDir = getImportedProjectDir(externalImport);
39
+ await fs_1.promises.rm(importedProjectDir, { recursive: true, force: true });
40
+ await fs_1.promises.mkdir(importedProjectDir, { recursive: true });
41
+ for (const block of blocks) {
42
+ const serialized = (0, sfc_1.serializeSfc)(block);
43
+ const outputPath = path_1.default.join(importedProjectDir, serialized.filePath);
44
+ await (0, fileUtils_1.writeFileMakeDir)(outputPath, serialized.content);
39
45
  }
46
+ }
47
+ async function downloadAndSave(externalImport) {
40
48
  const { blocks } = await downloadFromExternal(externalImport);
41
49
  console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
42
- await (0, fileUtils_1.writeFileMakeDir)(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
50
+ await saveImportedBlocks(externalImport, blocks);
43
51
  return blocks;
44
52
  }
45
53
  async function downloadAll(externalImports) {
46
- const responses = await Promise.all(externalImports.map(loadCachedOrDownload));
54
+ const responses = await Promise.all(externalImports.map(downloadAndSave));
47
55
  return lodash_1.default.flatten(responses);
48
56
  }
57
+ async function downloadSettingsFromDb() {
58
+ console.log('Downloading settings from MongoDB');
59
+ const mongoConn = await new mongodb_1.MongoClient(configuration_1.config.mongoConn).connect();
60
+ try {
61
+ const db = mongoConn.db(configuration_1.config.mongoDbName);
62
+ const settingsBlocks = await db
63
+ .collection('blocks')
64
+ .find({
65
+ Type: 'settings',
66
+ })
67
+ .toArray();
68
+ console.log(`Downloaded ${settingsBlocks.length} settings block(s) from MongoDB`);
69
+ return settingsBlocks.map(block => (0, v3_1.convertV3ToSfc)(block));
70
+ }
71
+ finally {
72
+ await mongoConn.close();
73
+ }
74
+ }
75
+ async function saveSettingsBlocks(blocks) {
76
+ await fs_1.promises.rm(path_1.default.join(configuration_1.config.blocksDir, '_settings'), { recursive: true, force: true });
77
+ for (const block of blocks) {
78
+ const serialized = (0, sfc_1.serializeSfc)(block);
79
+ const outputPath = path_1.default.join(configuration_1.config.blocksDir, serialized.filePath);
80
+ await (0, fileUtils_1.writeFileMakeDir)(outputPath, serialized.content);
81
+ }
82
+ }
49
83
  async function readBlockFile(blocksDir, filePath) {
50
84
  const content = await fs_1.promises.readFile(filePath);
51
85
  const relPath = path_1.default.relative(blocksDir, filePath);
@@ -53,13 +87,27 @@ async function readBlockFile(blocksDir, filePath) {
53
87
  }
54
88
  async function readBlockFiles(blocksDir) {
55
89
  const files = await (0, fileUtils_1.listFilesRecursive)(blocksDir);
56
- return await Promise.all(files.filter(f => !path_1.default.basename(f).startsWith('.')).map(f => readBlockFile(blocksDir, f)));
90
+ return await Promise.all(files
91
+ .filter(f => !path_1.default.basename(f).startsWith('.'))
92
+ .filter(f => path_1.default.relative(blocksDir, f).split(path_1.default.sep)[0] !== IMPORTED_BLOCKS_DIR)
93
+ .map(f => readBlockFile(blocksDir, f)));
57
94
  }
58
95
  exports.readBlockFiles = readBlockFiles;
96
+ async function readImportedBlockFiles(externalImport) {
97
+ const importedProjectDir = getImportedProjectDir(externalImport);
98
+ if (!(await (0, fileUtils_1.isDirectory)(importedProjectDir))) {
99
+ return [];
100
+ }
101
+ const files = await (0, fileUtils_1.listFilesRecursive)(importedProjectDir);
102
+ return await Promise.all(files.filter(f => !path_1.default.basename(f).startsWith('.')).map(f => readBlockFile(importedProjectDir, f)));
103
+ }
104
+ exports.readImportedBlockFiles = readImportedBlockFiles;
59
105
  async function loadAllBlocks() {
60
- const externalBlocks = await downloadAll(configuration_1.config.importProjects);
106
+ await downloadAll(configuration_1.config.importProjects);
107
+ await saveSettingsBlocks(await downloadSettingsFromDb());
108
+ const externalBlocks = lodash_1.default.flatten(await Promise.all(configuration_1.config.importProjects.map(readImportedBlockFiles)));
61
109
  const localBlocks = await readBlockFiles(configuration_1.config.blocksDir);
62
110
  return [...externalBlocks, ...localBlocks];
63
111
  }
64
112
  exports.loadAllBlocks = loadAllBlocks;
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsb0RBQTRCO0FBQzVCLDJCQUFvQztBQUNwQyxrRkFBOEM7QUFDOUMsb0RBQXVCO0FBQ3ZCLGdEQUF3QjtBQUN4QixtREFBOEQ7QUFDOUQscUNBQWlEO0FBQ2pELGlEQUFpRjtBQUNqRixtQ0FBMEQ7QUFJMUQsS0FBSyxVQUFVLG9CQUFvQixDQUFDLGNBQW1DO0lBQ3JFLE1BQU0sTUFBTSxHQUFHLEVBQUUsT0FBTyxFQUFFLGNBQWMsQ0FBQyxPQUFPLEVBQUUsY0FBYyxFQUFFLGNBQWMsQ0FBQyxjQUFjLElBQUksRUFBRSxFQUFFLENBQUM7SUFFeEcsTUFBTSxHQUFHLEdBQUcsZ0JBQUMsQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQixHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQzlDLElBQUk7UUFDRixNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQWEsR0FBRyxHQUFHLDZCQUE2QixFQUFFLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUM1RixPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUM7S0FDcEI7SUFBQyxPQUFPLENBQUMsRUFBRTtRQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLHNDQUFzQyxDQUFDLENBQUM7S0FDM0Q7SUFFRCxNQUFNLE1BQU0sR0FBRyxNQUFNLGVBQUssQ0FBQyxHQUFHLENBQWlCLEdBQUcsR0FBRywyQkFBMkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFDOUYsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQyxH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
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrREFBMEI7QUFDMUIsMkJBQW9DO0FBQ3BDLHFDQUFzQztBQUN0QyxvREFBdUI7QUFDdkIsZ0RBQXdCO0FBQ3hCLG1EQUE4RDtBQUM5RCxxQ0FBK0Q7QUFDL0QsaURBQXNGO0FBQ3RGLG1DQUEwRDtBQUcxRCxNQUFNLG1CQUFtQixHQUFHLFdBQVcsQ0FBQztBQUV4QyxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMsc0JBQU0sQ0FBQyxTQUFTLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsQ0FBQyxjQUFtQztJQUNoRSxPQUFPLGNBQUksQ0FBQyxJQUFJLENBQUMscUJBQXFCLEVBQUUsRUFBRSxjQUFjLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDakUsQ0FBQztBQUVELEtBQUssVUFBVSxvQkFBb0IsQ0FBQyxjQUFtQztJQUNyRSxNQUFNLE1BQU0sR0FBRyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsT0FBTyxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsY0FBYyxJQUFJLEVBQUUsRUFBRSxDQUFDO0lBRXhHLE1BQU0sR0FBRyxHQUFHLGdCQUFDLENBQUMsT0FBTyxDQUFDLGNBQWMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsR0FBRyxFQUFFLENBQUMsQ0FBQztJQUM5QyxJQUFJO1FBQ0YsTUFBTSxNQUFNLEdBQUcsTUFBTSxlQUFLLENBQUMsR0FBRyxDQUFhLEdBQUcsR0FBRyw2QkFBNkIsRUFBRSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDNUYsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDO0tBQ3BCO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFP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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marsx-dev/launcher",
3
- "version": "0.0.22",
3
+ "version": "0.0.23",
4
4
  "description": "MarsX launcher",
5
5
  "author": "MarsX team <team@marsx.dev>",
6
6
  "homepage": "https://marsx.dev/",
@@ -31,7 +31,7 @@
31
31
  "types": "./dist/index.d.ts",
32
32
  "scripts": {
33
33
  "validate": "npm run validate:prettier && npm run validate:lint && npm run validate:tsc",
34
- "validate:prettier": "prettier --ignore-path=.gitignore --check \"**/*.+(js|ts|json)\"",
34
+ "validate:prettier": "prettier --ignore-path=.gitignore --list-different \"**/*.+(js|ts|json)\"",
35
35
  "validate:lint": "eslint --ignore-path=.gitignore --ext=.js,.ts .",
36
36
  "validate:tsc": "tsc --noEmit",
37
37
  "fix": "npm run fix:prettier && npm run fix:list",
@@ -16,6 +16,7 @@ export async function fixDbBlockFolders(safeRun = true) {
16
16
 
17
17
  let localBlocks = await readBlockFiles(config.blocksDir);
18
18
 
19
+ localBlocks = localBlocks.filter(l => l.path.filePath.indexOf('_imported') === -1);
19
20
  localBlocks = localBlocks.filter(l => l.path.filePath.indexOf('_forked') === -1);
20
21
 
21
22
  console.log(`Got ${localBlocks.length} files to migrate`);
package/src/cli/init.ts CHANGED
@@ -117,7 +117,11 @@ export async function initProject(projectName: string) {
117
117
  path.join(projectDir, 'config', 'custom-environment-variables.json'),
118
118
  JSON.stringify(CustomEnvironmentVariables, null, 2),
119
119
  );
120
- await writeFileMakeDir(path.join(projectDir, '.gitignore'), 'node_modules\ndist\n.cache\n');
120
+ await writeFileMakeDir(path.join(projectDir, '.gitignore'), 'node_modules\ndist\n.cache\nblocks/_imported\n');
121
+ await writeFileMakeDir(
122
+ path.join(projectDir, 'AGENTS.md'),
123
+ '## Instructions\n- Never manually edit files under `blocks/_imported/`. That directory is generated at runtime from external imports and may be fully rewritten by the launcher.\n- Never edit `*.settings.mars` files. If a settings change is required, describe exactly what the developer should change manually instead of modifying the file.\n- If you need to modify an imported block, do not edit `blocks/_imported/`. Create a local fork under `blocks/_forked/<import_app_name>/...`, keep the block filename and block contents compatible with the imported block you are overriding, and edit the fork there instead.\n- `_forked` is only a local convention. The loader treats it as normal local blocks, so forks override imported blocks because local blocks are loaded after imported ones. There is no automatic fork command in this repo.\n',
124
+ );
121
125
 
122
126
  function run(...args: string[]) {
123
127
  const cmd = args[0];
package/src/loader.ts CHANGED
@@ -1,15 +1,23 @@
1
1
  import axios from 'axios';
2
- import crypto from 'crypto';
3
2
  import { promises as fs } from 'fs';
4
- import stringify from 'json-stable-stringify';
3
+ import { MongoClient } from 'mongodb';
5
4
  import _ from 'lodash';
6
5
  import path from 'path';
7
6
  import { config, ImportProjectConfig } from './configuration';
8
- import { parseSFC, SfcBlock } from './utils/sfc';
9
- import { isFile, listFilesRecursive, writeFileMakeDir } from './utils/fileUtils';
7
+ import { parseSFC, serializeSfc, SfcBlock } from './utils/sfc';
8
+ import { isDirectory, listFilesRecursive, writeFileMakeDir } from './utils/fileUtils';
10
9
  import { convertV3ToSfc, V3MongoBlock } from './utils/v3';
11
10
 
12
11
  type V4Response = { commit: string; hash: string; blocks: SfcBlock[] };
12
+ const IMPORTED_BLOCKS_DIR = '_imported';
13
+
14
+ function getImportedBlocksRoot() {
15
+ return path.join(config.blocksDir, IMPORTED_BLOCKS_DIR);
16
+ }
17
+
18
+ function getImportedProjectDir(externalImport: ImportProjectConfig) {
19
+ return path.join(getImportedBlocksRoot(), externalImport.name);
20
+ }
13
21
 
14
22
  async function downloadFromExternal(externalImport: ImportProjectConfig): Promise<V4Response> {
15
23
  const params = { api_key: externalImport.api_key, git_commit_ish: externalImport.git_commit_ish || '' };
@@ -27,29 +35,60 @@ async function downloadFromExternal(externalImport: ImportProjectConfig): Promis
27
35
  return { commit: '', hash: '', blocks: v3Resp.data.map(b => convertV3ToSfc(b)) };
28
36
  }
29
37
 
30
- async function loadCachedOrDownload(externalImport: ImportProjectConfig): Promise<SfcBlock[]> {
31
- const hash = crypto.createHash('md5').update(stringify(externalImport)).digest('hex');
32
- const cacheFileName = `${externalImport.name}_${externalImport.git_commit_ish}_${hash}.json`.replace(/[^\w.]+/g, '_');
33
- const cacheFilePath = path.join(config.cacheDir, 'imports', cacheFileName);
38
+ async function saveImportedBlocks(externalImport: ImportProjectConfig, blocks: SfcBlock[]) {
39
+ const importedProjectDir = getImportedProjectDir(externalImport);
40
+ await fs.rm(importedProjectDir, { recursive: true, force: true });
41
+ await fs.mkdir(importedProjectDir, { recursive: true });
34
42
 
35
- if (await isFile(cacheFilePath)) {
36
- const content = await fs.readFile(cacheFilePath);
37
- console.log(`Loading cached blocks from ${externalImport.url}`);
38
- return JSON.parse(content.toString('utf-8'));
43
+ for (const block of blocks) {
44
+ const serialized = serializeSfc(block);
45
+ const outputPath = path.join(importedProjectDir, serialized.filePath);
46
+ await writeFileMakeDir(outputPath, serialized.content);
39
47
  }
48
+ }
40
49
 
50
+ async function downloadAndSave(externalImport: ImportProjectConfig): Promise<SfcBlock[]> {
41
51
  const { blocks } = await downloadFromExternal(externalImport);
42
52
  console.log(`Downloaded ${blocks.length} blocks from ${externalImport.url}`);
43
-
44
- await writeFileMakeDir(cacheFilePath, JSON.stringify(blocks, null, 2), 'utf-8');
53
+ await saveImportedBlocks(externalImport, blocks);
45
54
  return blocks;
46
55
  }
47
56
 
48
57
  async function downloadAll(externalImports: ImportProjectConfig[]) {
49
- const responses = await Promise.all(externalImports.map(loadCachedOrDownload));
58
+ const responses = await Promise.all(externalImports.map(downloadAndSave));
50
59
  return _.flatten(responses);
51
60
  }
52
61
 
62
+ async function downloadSettingsFromDb(): Promise<SfcBlock[]> {
63
+ console.log('Downloading settings from MongoDB');
64
+ const mongoConn = await new MongoClient(config.mongoConn).connect();
65
+
66
+ try {
67
+ const db = mongoConn.db(config.mongoDbName);
68
+ const settingsBlocks = await db
69
+ .collection<V3MongoBlock>('blocks')
70
+ .find({
71
+ Type: 'settings',
72
+ })
73
+ .toArray();
74
+
75
+ console.log(`Downloaded ${settingsBlocks.length} settings block(s) from MongoDB`);
76
+ return settingsBlocks.map(block => convertV3ToSfc(block));
77
+ } finally {
78
+ await mongoConn.close();
79
+ }
80
+ }
81
+
82
+ async function saveSettingsBlocks(blocks: SfcBlock[]) {
83
+ await fs.rm(path.join(config.blocksDir, '_settings'), { recursive: true, force: true });
84
+
85
+ for (const block of blocks) {
86
+ const serialized = serializeSfc(block);
87
+ const outputPath = path.join(config.blocksDir, serialized.filePath);
88
+ await writeFileMakeDir(outputPath, serialized.content);
89
+ }
90
+ }
91
+
53
92
  async function readBlockFile(blocksDir: string, filePath: string): Promise<SfcBlock> {
54
93
  const content = await fs.readFile(filePath);
55
94
  const relPath = path.relative(blocksDir, filePath);
@@ -58,11 +97,27 @@ async function readBlockFile(blocksDir: string, filePath: string): Promise<SfcBl
58
97
 
59
98
  export async function readBlockFiles(blocksDir: string) {
60
99
  const files = await listFilesRecursive(blocksDir);
61
- return await Promise.all(files.filter(f => !path.basename(f).startsWith('.')).map(f => readBlockFile(blocksDir, f)));
100
+ return await Promise.all(
101
+ files
102
+ .filter(f => !path.basename(f).startsWith('.'))
103
+ .filter(f => path.relative(blocksDir, f).split(path.sep)[0] !== IMPORTED_BLOCKS_DIR)
104
+ .map(f => readBlockFile(blocksDir, f)),
105
+ );
106
+ }
107
+
108
+ export async function readImportedBlockFiles(externalImport: ImportProjectConfig) {
109
+ const importedProjectDir = getImportedProjectDir(externalImport);
110
+ if (!(await isDirectory(importedProjectDir))) {
111
+ return [];
112
+ }
113
+ const files = await listFilesRecursive(importedProjectDir);
114
+ return await Promise.all(files.filter(f => !path.basename(f).startsWith('.')).map(f => readBlockFile(importedProjectDir, f)));
62
115
  }
63
116
 
64
117
  export async function loadAllBlocks(): Promise<SfcBlock[]> {
65
- const externalBlocks = await downloadAll(config.importProjects);
118
+ await downloadAll(config.importProjects);
119
+ await saveSettingsBlocks(await downloadSettingsFromDb());
120
+ const externalBlocks = _.flatten(await Promise.all(config.importProjects.map(readImportedBlockFiles)));
66
121
  const localBlocks = await readBlockFiles(config.blocksDir);
67
122
  return [...externalBlocks, ...localBlocks];
68
123
  }