@dcl/sdk 7.0.6-4006744889.commit-c6aff5f → 7.0.6-4009020955.commit-08722f5

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.
Files changed (85) hide show
  1. package/cli/commands/build/helpers.d.ts +25 -0
  2. package/cli/commands/build/helpers.js +50 -0
  3. package/cli/commands/build/helpers.ts +95 -0
  4. package/cli/commands/build/index.d.ts +19 -0
  5. package/cli/commands/build/index.js +64 -0
  6. package/cli/commands/build/index.ts +91 -0
  7. package/cli/commands/init/index.d.ts +1 -1
  8. package/cli/commands/init/index.js +8 -14
  9. package/cli/commands/init/index.ts +8 -18
  10. package/cli/commands/init/repos.js +1 -1
  11. package/cli/commands/init/repos.ts +1 -2
  12. package/cli/commands/preview/bff.d.ts +3 -0
  13. package/cli/commands/preview/bff.js +50 -0
  14. package/cli/commands/preview/bff.ts +59 -0
  15. package/cli/commands/preview/catalyst.d.ts +5 -0
  16. package/cli/commands/preview/catalyst.js +24 -0
  17. package/cli/commands/preview/catalyst.ts +31 -0
  18. package/cli/commands/preview/coordinates.d.ts +20 -0
  19. package/cli/commands/preview/coordinates.js +90 -0
  20. package/cli/commands/preview/coordinates.ts +146 -0
  21. package/cli/commands/preview/endpoints.d.ts +10 -0
  22. package/cli/commands/preview/endpoints.js +500 -0
  23. package/cli/commands/preview/endpoints.ts +594 -0
  24. package/cli/commands/preview/eth.d.ts +2 -0
  25. package/cli/commands/preview/eth.js +6 -0
  26. package/cli/commands/preview/eth.ts +3 -0
  27. package/cli/commands/preview/index.d.ts +18 -0
  28. package/cli/commands/preview/index.js +75 -0
  29. package/cli/commands/preview/index.ts +88 -0
  30. package/cli/commands/preview/port.d.ts +1 -0
  31. package/cli/commands/preview/port.js +21 -0
  32. package/cli/commands/preview/port.ts +15 -0
  33. package/cli/commands/preview/project.d.ts +14 -0
  34. package/cli/commands/preview/project.js +77 -0
  35. package/cli/commands/preview/project.ts +112 -0
  36. package/cli/commands/preview/types.d.ts +13 -0
  37. package/cli/commands/preview/types.js +3 -0
  38. package/cli/commands/preview/types.ts +19 -0
  39. package/cli/commands/preview/wire.d.ts +14 -0
  40. package/cli/commands/preview/wire.js +28 -0
  41. package/cli/commands/preview/wire.ts +48 -0
  42. package/cli/commands/preview/ws.d.ts +7 -0
  43. package/cli/commands/preview/ws.js +16 -0
  44. package/cli/commands/preview/ws.ts +24 -0
  45. package/cli/commands/start/index.d.ts +29 -0
  46. package/cli/commands/start/index.js +121 -0
  47. package/cli/commands/start/index.ts +132 -0
  48. package/cli/components/fs.d.ts +2 -1
  49. package/cli/components/fs.js +1 -1
  50. package/cli/components/fs.ts +2 -11
  51. package/cli/index.js +4 -6
  52. package/cli/index.ts +9 -10
  53. package/cli/utils/args.js +2 -2
  54. package/cli/utils/args.ts +2 -8
  55. package/cli/utils/commands.js +2 -2
  56. package/cli/utils/commands.ts +3 -7
  57. package/cli/utils/exec.d.ts +8 -0
  58. package/cli/utils/exec.js +33 -0
  59. package/cli/utils/exec.ts +38 -0
  60. package/cli/utils/fs.js +1 -1
  61. package/cli/utils/fs.ts +1 -4
  62. package/cli/utils/handler.d.ts +6 -0
  63. package/cli/utils/handler.js +19 -0
  64. package/cli/utils/handler.ts +23 -0
  65. package/cli/utils/object.d.ts +9 -0
  66. package/cli/utils/object.js +45 -0
  67. package/cli/utils/object.ts +62 -0
  68. package/cli/utils/out-messages.d.ts +1 -0
  69. package/cli/utils/out-messages.js +8 -0
  70. package/cli/utils/out-messages.ts +3 -0
  71. package/internal/Observable.js +3 -7
  72. package/internal/provider.js +1 -1
  73. package/internal/transports/rendererTransport.js +2 -3
  74. package/messageBus.js +1 -1
  75. package/observables.js +1 -1
  76. package/package.json +18 -7
  77. package/src/internal/Observable.ts +9 -44
  78. package/src/internal/provider.ts +3 -11
  79. package/src/internal/transports/rendererTransport.ts +4 -12
  80. package/src/messageBus.ts +1 -4
  81. package/src/observables.ts +27 -63
  82. package/tsconfig.cli.json +10 -1
  83. package/cli/utils/spinner.d.ts +0 -15
  84. package/cli/utils/spinner.js +0 -41
  85. package/cli/utils/spinner.ts +0 -44
@@ -0,0 +1,25 @@
1
+ import { IFileSystemComponent } from '../../components/fs';
2
+ import { Dict } from '../../utils/object';
3
+ export declare const REQUIRED_FILES: {
4
+ PACKAGE_JSON: string;
5
+ TS_CONFIG_JSON: string;
6
+ SCENE_JSON: string;
7
+ };
8
+ export declare const REQUIRED_PACKAGE_JSON: {};
9
+ export declare const getProjectStructure: () => string[];
10
+ export declare const validateProjectStructure: (components: {
11
+ fs: IFileSystemComponent;
12
+ }, dir: string, fileList: string[]) => Promise<boolean>;
13
+ export declare const validatePackageJson: (components: {
14
+ fs: IFileSystemComponent;
15
+ }, dir: string, deps: Dict) => Promise<boolean>;
16
+ export declare const needsDependencies: (components: {
17
+ fs: IFileSystemComponent;
18
+ }, dir: string) => Promise<boolean>;
19
+ export declare const npm: string;
20
+ export declare function installDependencies(dir: string): Promise<void>;
21
+ export declare const buildTypescript: ({ dir, watch, production }: {
22
+ dir: string;
23
+ watch: boolean;
24
+ production: boolean;
25
+ }) => Promise<void>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.buildTypescript = exports.installDependencies = exports.npm = exports.needsDependencies = exports.validatePackageJson = exports.validateProjectStructure = exports.getProjectStructure = exports.REQUIRED_PACKAGE_JSON = exports.REQUIRED_FILES = void 0;
4
+ const path_1 = require("path");
5
+ const exec_1 = require("../../utils/exec");
6
+ const object_1 = require("../../utils/object");
7
+ exports.REQUIRED_FILES = {
8
+ PACKAGE_JSON: 'package.json',
9
+ TS_CONFIG_JSON: 'tsconfig.json',
10
+ SCENE_JSON: 'scene.json'
11
+ };
12
+ exports.REQUIRED_PACKAGE_JSON = {};
13
+ const getProjectStructure = () => Object.values(exports.REQUIRED_FILES);
14
+ exports.getProjectStructure = getProjectStructure;
15
+ const validateProjectStructure = async (components, dir, fileList) => {
16
+ const files = await components.fs.readdir(dir);
17
+ const requiredFiles = new Set(fileList);
18
+ for (let i = 0; i < files.length && requiredFiles.size > 0; i++) {
19
+ if (requiredFiles.has(files[i])) {
20
+ requiredFiles.delete(files[i]);
21
+ }
22
+ }
23
+ return requiredFiles.size === 0;
24
+ };
25
+ exports.validateProjectStructure = validateProjectStructure;
26
+ const validatePackageJson = async (components, dir, deps) => {
27
+ const packageJson = JSON.parse(await components.fs.readFile((0, path_1.resolve)(dir, exports.REQUIRED_FILES.PACKAGE_JSON), 'utf-8'));
28
+ return (0, object_1.hasPrimitiveKeys)(packageJson, deps);
29
+ };
30
+ exports.validatePackageJson = validatePackageJson;
31
+ const needsDependencies = async (components, dir) => {
32
+ const nodeModulesPath = (0, path_1.resolve)(dir, 'node_modules');
33
+ const hasNodeModulesFolder = await components.fs.existPath(nodeModulesPath);
34
+ const isNodeModulesEmpty = hasNodeModulesFolder && (await components.fs.readdir(nodeModulesPath)).length === 0;
35
+ return !hasNodeModulesFolder || isNodeModulesEmpty;
36
+ };
37
+ exports.needsDependencies = needsDependencies;
38
+ exports.npm = /^win/.test(process.platform) ? 'npm.cmd' : 'npm';
39
+ async function installDependencies(dir) {
40
+ await (0, exec_1.exec)(dir, `${exports.npm} install`);
41
+ }
42
+ exports.installDependencies = installDependencies;
43
+ const buildTypescript = async ({ dir, watch, production }) => {
44
+ const command = watch ? 'watch' : 'build';
45
+ await (0, exec_1.exec)(dir, `${exports.npm} run ${command}`, {
46
+ env: { NODE_ENV: production ? 'production' : '' }
47
+ });
48
+ };
49
+ exports.buildTypescript = buildTypescript;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQThCO0FBRzlCLDJDQUF1QztBQUN2QywrQ0FBMkQ7QUFLOUMsUUFBQSxjQUFjLEdBQUc7SUFDNUIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsY0FBYyxFQUFFLGVBQWU7SUFDL0IsVUFBVSxFQUFFLFlBQVk7Q0FDekIsQ0FBQTtBQUtZLFFBQUEscUJBQXFCLEdBQUcsRUFBRSxDQUFBO0FBS2hDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBYyxDQUFDLENBQUE7QUFBekQsUUFBQSxtQkFBbUIsdUJBQXNDO0FBSy9ELE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxVQUF3QyxFQUN4QyxHQUFXLEVBQ1gsUUFBa0IsRUFDQSxFQUFFO0lBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0QsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDL0I7S0FDRjtJQUVELE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUE7QUFDakMsQ0FBQyxDQUFBO0FBZlksUUFBQSx3QkFBd0IsNEJBZXBDO0FBS00sTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLFVBQXdDLEVBQ3hDLEdBQVcsRUFDWCxJQUFVLEVBQ1EsRUFBRTtJQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBQSxjQUFPLEVBQUMsR0FBRyxFQUFFLHNCQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNoSCxPQUFPLElBQUEseUJBQWdCLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzVDLENBQUMsQ0FBQTtBQVBZLFFBQUEsbUJBQW1CLHVCQU8vQjtBQUtNLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLFVBQXdDLEVBQUUsR0FBVyxFQUFvQixFQUFFO0lBQ2pILE1BQU0sZUFBZSxHQUFHLElBQUEsY0FBTyxFQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNwRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBO0lBRTlHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxrQkFBa0IsQ0FBQTtBQUNwRCxDQUFDLENBQUE7QUFOWSxRQUFBLGlCQUFpQixxQkFNN0I7QUFHWSxRQUFBLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFLN0QsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEdBQVc7SUFDbkQsTUFBTSxJQUFBLFdBQUksRUFBQyxHQUFHLEVBQUUsR0FBRyxXQUFHLFVBQVUsQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFGRCxrREFFQztBQUtNLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxFQUNwQyxHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFLWCxFQUFpQixFQUFFO0lBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7SUFDekMsTUFBTSxJQUFBLFdBQUksRUFBQyxHQUFHLEVBQUUsR0FBRyxXQUFHLFFBQVEsT0FBTyxFQUFFLEVBQUU7UUFDdkMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7S0FDbEQsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBYlksUUFBQSxlQUFlLG1CQWEzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJRmlsZVN5c3RlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZnMnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXhlYydcbmltcG9ydCB7IERpY3QsIGhhc1ByaW1pdGl2ZUtleXMgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3QnXG5cbi8qKlxuICogUmVxdWlyZWQgcHJvamVjdCBkaXJzL2ZpbGVzXG4gKi9cbmV4cG9ydCBjb25zdCBSRVFVSVJFRF9GSUxFUyA9IHtcbiAgUEFDS0FHRV9KU09OOiAncGFja2FnZS5qc29uJyxcbiAgVFNfQ09ORklHX0pTT046ICd0c2NvbmZpZy5qc29uJyxcbiAgU0NFTkVfSlNPTjogJ3NjZW5lLmpzb24nXG59XG5cbi8qKlxuICogUmVxdWlyZWQgXCJwYWNrYWdlLmpzb25cIiBzdHJ1Y3R1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IFJFUVVJUkVEX1BBQ0tBR0VfSlNPTiA9IHt9XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVxdWlyZWQgZmlsZXMgZm9yIGEgcHJvamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJvamVjdFN0cnVjdHVyZSA9ICgpID0+IE9iamVjdC52YWx1ZXMoUkVRVUlSRURfRklMRVMpXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9qZWN0IGZvbGxvd3MgYSB2YWxpZCBzY2VuZSBzdHJ1Y3R1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUHJvamVjdFN0cnVjdHVyZSA9IGFzeW5jIChcbiAgY29tcG9uZW50czogeyBmczogSUZpbGVTeXN0ZW1Db21wb25lbnQgfSxcbiAgZGlyOiBzdHJpbmcsXG4gIGZpbGVMaXN0OiBzdHJpbmdbXVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29tcG9uZW50cy5mcy5yZWFkZGlyKGRpcilcbiAgY29uc3QgcmVxdWlyZWRGaWxlcyA9IG5ldyBTZXQoZmlsZUxpc3QpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGggJiYgcmVxdWlyZWRGaWxlcy5zaXplID4gMDsgaSsrKSB7XG4gICAgaWYgKHJlcXVpcmVkRmlsZXMuaGFzKGZpbGVzW2ldKSkge1xuICAgICAgcmVxdWlyZWRGaWxlcy5kZWxldGUoZmlsZXNbaV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcXVpcmVkRmlsZXMuc2l6ZSA9PT0gMFxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvamVjdCdzIFwicGFja2FnZS5qc29uXCIgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGFja2FnZUpzb24gPSBhc3luYyAoXG4gIGNvbXBvbmVudHM6IHsgZnM6IElGaWxlU3lzdGVtQ29tcG9uZW50IH0sXG4gIGRpcjogc3RyaW5nLFxuICBkZXBzOiBEaWN0XG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGF3YWl0IGNvbXBvbmVudHMuZnMucmVhZEZpbGUocmVzb2x2ZShkaXIsIFJFUVVJUkVEX0ZJTEVTLlBBQ0tBR0VfSlNPTiksICd1dGYtOCcpKVxuICByZXR1cm4gaGFzUHJpbWl0aXZlS2V5cyhwYWNrYWdlSnNvbiwgZGVwcylcbn1cblxuLypcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvamVjdCBjb250YWlucyBhbiBlbXB0eSBub2RlX21vZHVsZXMgZm9sZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBuZWVkc0RlcGVuZGVuY2llcyA9IGFzeW5jIChjb21wb25lbnRzOiB7IGZzOiBJRmlsZVN5c3RlbUNvbXBvbmVudCB9LCBkaXI6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSByZXNvbHZlKGRpciwgJ25vZGVfbW9kdWxlcycpXG4gIGNvbnN0IGhhc05vZGVNb2R1bGVzRm9sZGVyID0gYXdhaXQgY29tcG9uZW50cy5mcy5leGlzdFBhdGgobm9kZU1vZHVsZXNQYXRoKVxuICBjb25zdCBpc05vZGVNb2R1bGVzRW1wdHkgPSBoYXNOb2RlTW9kdWxlc0ZvbGRlciAmJiAoYXdhaXQgY29tcG9uZW50cy5mcy5yZWFkZGlyKG5vZGVNb2R1bGVzUGF0aCkpLmxlbmd0aCA9PT0gMFxuXG4gIHJldHVybiAhaGFzTm9kZU1vZHVsZXNGb2xkZXIgfHwgaXNOb2RlTW9kdWxlc0VtcHR5XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgbnBtID0gL153aW4vLnRlc3QocHJvY2Vzcy5wbGF0Zm9ybSkgPyAnbnBtLmNtZCcgOiAnbnBtJ1xuXG4vKlxuICogUnVucyBcIm5wbSBpbnN0YWxsXCIgZm9yIGRlc2lyZWQgcHJvamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llcyhkaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjKGRpciwgYCR7bnBtfSBpbnN0YWxsYClcbn1cblxuLyoqXG4gKiBCdWlsZCdzIFR5cGVzY3JpcHQgdXNpbmcgXCJ0c2NvbmZpZy5qc29uXCIgZmlsZVxuICovXG5leHBvcnQgY29uc3QgYnVpbGRUeXBlc2NyaXB0ID0gYXN5bmMgKHtcbiAgZGlyLFxuICB3YXRjaCxcbiAgcHJvZHVjdGlvblxufToge1xuICBkaXI6IHN0cmluZ1xuICB3YXRjaDogYm9vbGVhblxuICBwcm9kdWN0aW9uOiBib29sZWFuXG59KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNvbW1hbmQgPSB3YXRjaCA/ICd3YXRjaCcgOiAnYnVpbGQnXG4gIGF3YWl0IGV4ZWMoZGlyLCBgJHtucG19IHJ1biAke2NvbW1hbmR9YCwge1xuICAgIGVudjogeyBOT0RFX0VOVjogcHJvZHVjdGlvbiA/ICdwcm9kdWN0aW9uJyA6ICcnIH1cbiAgfSlcbn1cbiJdfQ==
@@ -0,0 +1,95 @@
1
+ import { resolve } from 'path'
2
+
3
+ import { IFileSystemComponent } from '../../components/fs'
4
+ import { exec } from '../../utils/exec'
5
+ import { Dict, hasPrimitiveKeys } from '../../utils/object'
6
+
7
+ /**
8
+ * Required project dirs/files
9
+ */
10
+ export const REQUIRED_FILES = {
11
+ PACKAGE_JSON: 'package.json',
12
+ TS_CONFIG_JSON: 'tsconfig.json',
13
+ SCENE_JSON: 'scene.json'
14
+ }
15
+
16
+ /**
17
+ * Required "package.json" structure
18
+ */
19
+ export const REQUIRED_PACKAGE_JSON = {}
20
+
21
+ /**
22
+ * Returns the required files for a project
23
+ */
24
+ export const getProjectStructure = () => Object.values(REQUIRED_FILES)
25
+
26
+ /**
27
+ * Returns true if the project follows a valid scene structure
28
+ */
29
+ export const validateProjectStructure = async (
30
+ components: { fs: IFileSystemComponent },
31
+ dir: string,
32
+ fileList: string[]
33
+ ): Promise<boolean> => {
34
+ const files = await components.fs.readdir(dir)
35
+ const requiredFiles = new Set(fileList)
36
+
37
+ for (let i = 0; i < files.length && requiredFiles.size > 0; i++) {
38
+ if (requiredFiles.has(files[i])) {
39
+ requiredFiles.delete(files[i])
40
+ }
41
+ }
42
+
43
+ return requiredFiles.size === 0
44
+ }
45
+
46
+ /**
47
+ * Returns true if the project's "package.json" is valid
48
+ */
49
+ export const validatePackageJson = async (
50
+ components: { fs: IFileSystemComponent },
51
+ dir: string,
52
+ deps: Dict
53
+ ): Promise<boolean> => {
54
+ const packageJson = JSON.parse(await components.fs.readFile(resolve(dir, REQUIRED_FILES.PACKAGE_JSON), 'utf-8'))
55
+ return hasPrimitiveKeys(packageJson, deps)
56
+ }
57
+
58
+ /*
59
+ * Returns true if the project contains an empty node_modules folder
60
+ */
61
+ export const needsDependencies = async (components: { fs: IFileSystemComponent }, dir: string): Promise<boolean> => {
62
+ const nodeModulesPath = resolve(dir, 'node_modules')
63
+ const hasNodeModulesFolder = await components.fs.existPath(nodeModulesPath)
64
+ const isNodeModulesEmpty = hasNodeModulesFolder && (await components.fs.readdir(nodeModulesPath)).length === 0
65
+
66
+ return !hasNodeModulesFolder || isNodeModulesEmpty
67
+ }
68
+
69
+ /* istanbul ignore next */
70
+ export const npm = /^win/.test(process.platform) ? 'npm.cmd' : 'npm'
71
+
72
+ /*
73
+ * Runs "npm install" for desired project
74
+ */
75
+ export async function installDependencies(dir: string): Promise<void> {
76
+ await exec(dir, `${npm} install`)
77
+ }
78
+
79
+ /**
80
+ * Build's Typescript using "tsconfig.json" file
81
+ */
82
+ export const buildTypescript = async ({
83
+ dir,
84
+ watch,
85
+ production
86
+ }: {
87
+ dir: string
88
+ watch: boolean
89
+ production: boolean
90
+ }): Promise<void> => {
91
+ const command = watch ? 'watch' : 'build'
92
+ await exec(dir, `${npm} run ${command}`, {
93
+ env: { NODE_ENV: production ? 'production' : '' }
94
+ })
95
+ }
@@ -0,0 +1,19 @@
1
+ import { CliComponents } from '../../components';
2
+ interface Options {
3
+ args: Omit<typeof args, '_'>;
4
+ components: Pick<CliComponents, 'fs'>;
5
+ }
6
+ export declare const args: import("arg").Result<{
7
+ '--help': BooleanConstructor;
8
+ '-h': string;
9
+ } & {
10
+ '--watch': BooleanConstructor;
11
+ '-w': string;
12
+ '--production': BooleanConstructor;
13
+ '-p': string;
14
+ '--skip-install': BooleanConstructor;
15
+ '--dir': StringConstructor;
16
+ }>;
17
+ export declare function help(): string;
18
+ export declare const main: (args: Options) => Promise<void>;
19
+ export {};
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.main = exports.help = exports.args = void 0;
4
+ const path_1 = require("path");
5
+ const out_messages_1 = require("../../utils/out-messages");
6
+ const log_1 = require("../../utils/log");
7
+ const args_1 = require("../../utils/args");
8
+ const error_1 = require("../../utils/error");
9
+ const helpers_1 = require("./helpers");
10
+ const handler_1 = require("../../utils/handler");
11
+ const console_1 = require("console");
12
+ exports.args = (0, args_1.getArgs)({
13
+ '--watch': Boolean,
14
+ '-w': '--watch',
15
+ '--production': Boolean,
16
+ '-p': '--production',
17
+ '--skip-install': Boolean,
18
+ '--dir': String
19
+ });
20
+ function help() {
21
+ return `
22
+ Usage: 'dcl build [options]'
23
+ Options:'
24
+ -h, --help Displays complete help
25
+ -w, --watch Watch for file changes and build on change
26
+ -p, --production Build without sourcemaps
27
+ --skip-install Skip installing dependencies
28
+ --dir Path to directory to build
29
+
30
+ Example:
31
+ - Build your scene:
32
+ '$ dcl build'
33
+ `;
34
+ }
35
+ exports.help = help;
36
+ exports.main = (0, handler_1.main)(async function main(options) {
37
+ const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
38
+ const projectStructure = (0, helpers_1.getProjectStructure)();
39
+ const hasValidProjectStructure = await (0, helpers_1.validateProjectStructure)(options.components, dir, projectStructure);
40
+ if (!hasValidProjectStructure) {
41
+ throw new error_1.CliError(`Invalid scene structure found. Required files:
42
+ ${(0, out_messages_1.toStringList)(projectStructure)}`);
43
+ }
44
+ (0, log_1.succeed)('Project has a valid structure');
45
+ const hasValidPackageJson = await (0, helpers_1.validatePackageJson)(options.components, dir, helpers_1.REQUIRED_PACKAGE_JSON);
46
+ if (!hasValidPackageJson) {
47
+ throw new error_1.CliError(`Invalid "package.json" file. Structure required:
48
+ ${JSON.stringify(helpers_1.REQUIRED_PACKAGE_JSON, null, 2)}`);
49
+ }
50
+ (0, log_1.succeed)('Project has a valid "package.json"');
51
+ const shouldInstallDeps = await (0, helpers_1.needsDependencies)(options.components, dir);
52
+ if (shouldInstallDeps && !options.args['--skip-install']) {
53
+ (0, console_1.info)('Installing dependencies...');
54
+ await (0, helpers_1.installDependencies)(dir);
55
+ }
56
+ (0, log_1.succeed)('Dependencies installed');
57
+ await (0, helpers_1.buildTypescript)({
58
+ dir,
59
+ watch: !!options.args['--watch'],
60
+ production: !!options.args['--production']
61
+ });
62
+ (0, log_1.succeed)('Project built successfully!');
63
+ });
64
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFHOUIsMkRBQXVEO0FBQ3ZELHlDQUF5QztBQUN6QywyQ0FBMEM7QUFDMUMsNkNBQTRDO0FBQzVDLHVDQVFrQjtBQUNsQixpREFBcUQ7QUFDckQscUNBQThCO0FBT2pCLFFBQUEsSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDO0lBQzFCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLElBQUksRUFBRSxTQUFTO0lBQ2YsY0FBYyxFQUFFLE9BQU87SUFDdkIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixPQUFPLEVBQUUsTUFBTTtDQUNoQixDQUFDLENBQUE7QUFFRixTQUFnQixJQUFJO0lBQ2xCLE9BQU87Ozs7Ozs7Ozs7OztHQVlOLENBQUE7QUFDSCxDQUFDO0FBZEQsb0JBY0M7QUFFWSxRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLE9BQWdCO0lBQzlELE1BQU0sR0FBRyxHQUFHLElBQUEsY0FBTyxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSw2QkFBbUIsR0FBRSxDQUFBO0lBRTlDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxJQUFBLGtDQUF3QixFQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFFMUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1FBQzdCLE1BQU0sSUFBSSxnQkFBUSxDQUFDO1FBQ2YsSUFBQSwyQkFBWSxFQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0tBQ3RDO0lBRUQsSUFBQSxhQUFPLEVBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUV4QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSw2QkFBbUIsRUFBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSwrQkFBcUIsQ0FBQyxDQUFBO0lBRXJHLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUN4QixNQUFNLElBQUksZ0JBQVEsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsK0JBQXFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUN0RDtJQUVELElBQUEsYUFBTyxFQUFDLG9DQUFvQyxDQUFDLENBQUE7SUFFN0MsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsMkJBQWlCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUUxRSxJQUFJLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3hELElBQUEsY0FBSSxFQUFDLDRCQUE0QixDQUFDLENBQUE7UUFDbEMsTUFBTSxJQUFBLDZCQUFtQixFQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQy9CO0lBRUQsSUFBQSxhQUFPLEVBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUVqQyxNQUFNLElBQUEseUJBQWUsRUFBQztRQUNwQixHQUFHO1FBQ0gsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0tBQzNDLENBQUMsQ0FBQTtJQUVGLElBQUEsYUFBTyxFQUFDLDZCQUE2QixDQUFDLENBQUE7QUFJeEMsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ2xpQ29tcG9uZW50cyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyB0b1N0cmluZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9vdXQtbWVzc2FnZXMnXG5pbXBvcnQgeyBzdWNjZWVkIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nJ1xuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4uLy4uL3V0aWxzL2FyZ3MnXG5pbXBvcnQgeyBDbGlFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2Vycm9yJ1xuaW1wb3J0IHtcbiAgZ2V0UHJvamVjdFN0cnVjdHVyZSxcbiAgYnVpbGRUeXBlc2NyaXB0LFxuICBpbnN0YWxsRGVwZW5kZW5jaWVzLFxuICBuZWVkc0RlcGVuZGVuY2llcyxcbiAgdmFsaWRhdGVQcm9qZWN0U3RydWN0dXJlLFxuICB2YWxpZGF0ZVBhY2thZ2VKc29uLFxuICBSRVFVSVJFRF9QQUNLQUdFX0pTT05cbn0gZnJvbSAnLi9oZWxwZXJzJ1xuaW1wb3J0IHsgbWFpbiBhcyBoYW5kbGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlcidcbmltcG9ydCB7IGluZm8gfSBmcm9tICdjb25zb2xlJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFyZ3M6IE9taXQ8dHlwZW9mIGFyZ3MsICdfJz5cbiAgY29tcG9uZW50czogUGljazxDbGlDb21wb25lbnRzLCAnZnMnPlxufVxuXG5leHBvcnQgY29uc3QgYXJncyA9IGdldEFyZ3Moe1xuICAnLS13YXRjaCc6IEJvb2xlYW4sXG4gICctdyc6ICctLXdhdGNoJyxcbiAgJy0tcHJvZHVjdGlvbic6IEJvb2xlYW4sXG4gICctcCc6ICctLXByb2R1Y3Rpb24nLFxuICAnLS1za2lwLWluc3RhbGwnOiBCb29sZWFuLFxuICAnLS1kaXInOiBTdHJpbmdcbn0pXG5cbmV4cG9ydCBmdW5jdGlvbiBoZWxwKCkge1xuICByZXR1cm4gYFxuICBVc2FnZTogJ2RjbCBidWlsZCBbb3B0aW9uc10nXG4gICAgT3B0aW9uczonXG4gICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgIERpc3BsYXlzIGNvbXBsZXRlIGhlbHBcbiAgICAgIC13LCAtLXdhdGNoICAgICAgICAgICAgICAgV2F0Y2ggZm9yIGZpbGUgY2hhbmdlcyBhbmQgYnVpbGQgb24gY2hhbmdlXG4gICAgICAtcCwgLS1wcm9kdWN0aW9uICAgICAgICAgIEJ1aWxkIHdpdGhvdXQgc291cmNlbWFwc1xuICAgICAgLS1za2lwLWluc3RhbGwgICAgICAgICAgICBTa2lwIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzXG4gICAgICAtLWRpciAgICAgICAgICAgICAgICAgICAgIFBhdGggdG8gZGlyZWN0b3J5IHRvIGJ1aWxkXG5cbiAgICBFeGFtcGxlOlxuICAgIC0gQnVpbGQgeW91ciBzY2VuZTpcbiAgICAgICckIGRjbCBidWlsZCdcbiAgYFxufVxuXG5leHBvcnQgY29uc3QgbWFpbiA9IGhhbmRsZXIoYXN5bmMgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBPcHRpb25zKSB7XG4gIGNvbnN0IGRpciA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0aW9ucy5hcmdzWyctLWRpciddIHx8ICcuJylcbiAgY29uc3QgcHJvamVjdFN0cnVjdHVyZSA9IGdldFByb2plY3RTdHJ1Y3R1cmUoKVxuXG4gIGNvbnN0IGhhc1ZhbGlkUHJvamVjdFN0cnVjdHVyZSA9IGF3YWl0IHZhbGlkYXRlUHJvamVjdFN0cnVjdHVyZShvcHRpb25zLmNvbXBvbmVudHMsIGRpciwgcHJvamVjdFN0cnVjdHVyZSlcblxuICBpZiAoIWhhc1ZhbGlkUHJvamVjdFN0cnVjdHVyZSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgSW52YWxpZCBzY2VuZSBzdHJ1Y3R1cmUgZm91bmQuIFJlcXVpcmVkIGZpbGVzOlxuICAgICAgJHt0b1N0cmluZ0xpc3QocHJvamVjdFN0cnVjdHVyZSl9YClcbiAgfVxuXG4gIHN1Y2NlZWQoJ1Byb2plY3QgaGFzIGEgdmFsaWQgc3RydWN0dXJlJylcblxuICBjb25zdCBoYXNWYWxpZFBhY2thZ2VKc29uID0gYXdhaXQgdmFsaWRhdGVQYWNrYWdlSnNvbihvcHRpb25zLmNvbXBvbmVudHMsIGRpciwgUkVRVUlSRURfUEFDS0FHRV9KU09OKVxuXG4gIGlmICghaGFzVmFsaWRQYWNrYWdlSnNvbikge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgSW52YWxpZCBcInBhY2thZ2UuanNvblwiIGZpbGUuIFN0cnVjdHVyZSByZXF1aXJlZDpcbiAgICAgICR7SlNPTi5zdHJpbmdpZnkoUkVRVUlSRURfUEFDS0FHRV9KU09OLCBudWxsLCAyKX1gKVxuICB9XG5cbiAgc3VjY2VlZCgnUHJvamVjdCBoYXMgYSB2YWxpZCBcInBhY2thZ2UuanNvblwiJylcblxuICBjb25zdCBzaG91bGRJbnN0YWxsRGVwcyA9IGF3YWl0IG5lZWRzRGVwZW5kZW5jaWVzKG9wdGlvbnMuY29tcG9uZW50cywgZGlyKVxuXG4gIGlmIChzaG91bGRJbnN0YWxsRGVwcyAmJiAhb3B0aW9ucy5hcmdzWyctLXNraXAtaW5zdGFsbCddKSB7XG4gICAgaW5mbygnSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi4nKVxuICAgIGF3YWl0IGluc3RhbGxEZXBlbmRlbmNpZXMoZGlyKVxuICB9XG5cbiAgc3VjY2VlZCgnRGVwZW5kZW5jaWVzIGluc3RhbGxlZCcpXG5cbiAgYXdhaXQgYnVpbGRUeXBlc2NyaXB0KHtcbiAgICBkaXIsXG4gICAgd2F0Y2g6ICEhb3B0aW9ucy5hcmdzWyctLXdhdGNoJ10sXG4gICAgcHJvZHVjdGlvbjogISFvcHRpb25zLmFyZ3NbJy0tcHJvZHVjdGlvbiddXG4gIH0pXG5cbiAgc3VjY2VlZCgnUHJvamVjdCBidWlsdCBzdWNjZXNzZnVsbHkhJylcblxuICAvLyB0cmFjayBzdHVmZi4uLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL2NsaS9ibG9iL21haW4vc3JjL2NvbW1hbmRzL2J1aWxkLnRzXG59KVxuIl19
@@ -0,0 +1,91 @@
1
+ import { resolve } from 'path'
2
+
3
+ import { CliComponents } from '../../components'
4
+ import { toStringList } from '../../utils/out-messages'
5
+ import { succeed } from '../../utils/log'
6
+ import { getArgs } from '../../utils/args'
7
+ import { CliError } from '../../utils/error'
8
+ import {
9
+ getProjectStructure,
10
+ buildTypescript,
11
+ installDependencies,
12
+ needsDependencies,
13
+ validateProjectStructure,
14
+ validatePackageJson,
15
+ REQUIRED_PACKAGE_JSON
16
+ } from './helpers'
17
+ import { main as handler } from '../../utils/handler'
18
+ import { info } from 'console'
19
+
20
+ interface Options {
21
+ args: Omit<typeof args, '_'>
22
+ components: Pick<CliComponents, 'fs'>
23
+ }
24
+
25
+ export const args = getArgs({
26
+ '--watch': Boolean,
27
+ '-w': '--watch',
28
+ '--production': Boolean,
29
+ '-p': '--production',
30
+ '--skip-install': Boolean,
31
+ '--dir': String
32
+ })
33
+
34
+ export function help() {
35
+ return `
36
+ Usage: 'dcl build [options]'
37
+ Options:'
38
+ -h, --help Displays complete help
39
+ -w, --watch Watch for file changes and build on change
40
+ -p, --production Build without sourcemaps
41
+ --skip-install Skip installing dependencies
42
+ --dir Path to directory to build
43
+
44
+ Example:
45
+ - Build your scene:
46
+ '$ dcl build'
47
+ `
48
+ }
49
+
50
+ export const main = handler(async function main(options: Options) {
51
+ const dir = resolve(process.cwd(), options.args['--dir'] || '.')
52
+ const projectStructure = getProjectStructure()
53
+
54
+ const hasValidProjectStructure = await validateProjectStructure(options.components, dir, projectStructure)
55
+
56
+ if (!hasValidProjectStructure) {
57
+ throw new CliError(`Invalid scene structure found. Required files:
58
+ ${toStringList(projectStructure)}`)
59
+ }
60
+
61
+ succeed('Project has a valid structure')
62
+
63
+ const hasValidPackageJson = await validatePackageJson(options.components, dir, REQUIRED_PACKAGE_JSON)
64
+
65
+ if (!hasValidPackageJson) {
66
+ throw new CliError(`Invalid "package.json" file. Structure required:
67
+ ${JSON.stringify(REQUIRED_PACKAGE_JSON, null, 2)}`)
68
+ }
69
+
70
+ succeed('Project has a valid "package.json"')
71
+
72
+ const shouldInstallDeps = await needsDependencies(options.components, dir)
73
+
74
+ if (shouldInstallDeps && !options.args['--skip-install']) {
75
+ info('Installing dependencies...')
76
+ await installDependencies(dir)
77
+ }
78
+
79
+ succeed('Dependencies installed')
80
+
81
+ await buildTypescript({
82
+ dir,
83
+ watch: !!options.args['--watch'],
84
+ production: !!options.args['--production']
85
+ })
86
+
87
+ succeed('Project built successfully!')
88
+
89
+ // track stuff...
90
+ // https://github.com/decentraland/cli/blob/main/src/commands/build.ts
91
+ })
@@ -12,5 +12,5 @@ export declare const args: import("arg").Result<{
12
12
  '--dir': StringConstructor;
13
13
  }>;
14
14
  export declare function help(): Promise<void>;
15
- export declare function main(options: Options): Promise<void>;
15
+ export declare const main: (args: Options) => Promise<void>;
16
16
  export {};
@@ -2,11 +2,11 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.main = exports.help = exports.args = void 0;
4
4
  const path_1 = require("path");
5
- const error_1 = require("../../utils/error");
6
5
  const args_1 = require("../../utils/args");
7
6
  const prompt_1 = require("../../utils/prompt");
8
7
  const fs_1 = require("../../utils/fs");
9
8
  const repos_1 = require("./repos");
9
+ const handler_1 = require("../../utils/handler");
10
10
  exports.args = (0, args_1.getArgs)({
11
11
  '--yes': Boolean,
12
12
  '-y': '--yes',
@@ -14,7 +14,7 @@ exports.args = (0, args_1.getArgs)({
14
14
  });
15
15
  async function help() { }
16
16
  exports.help = help;
17
- async function main(options) {
17
+ exports.main = (0, handler_1.main)(async function main(options) {
18
18
  const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
19
19
  const isEmpty = await (0, fs_1.isDirectoryEmpty)(options.components, dir);
20
20
  const yes = options.args['--yes'];
@@ -23,15 +23,9 @@ async function main(options) {
23
23
  if (!answer)
24
24
  return;
25
25
  }
26
- try {
27
- const scene = 'scene-template';
28
- const zip = await (0, fs_1.download)(options.components, (0, repos_1.get)(scene), (0, path_1.join)(dir, `${scene}.zip`));
29
- await (0, fs_1.extract)(zip, dir);
30
- await options.components.fs.unlink(zip);
31
- }
32
- catch (e) {
33
- throw new error_1.CliError(e.message);
34
- }
35
- }
36
- exports.main = main;
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBb0M7QUFFcEMsNkNBQTRDO0FBQzVDLDJDQUEwQztBQUMxQywrQ0FBNEM7QUFFNUMsdUNBQW9FO0FBRXBFLG1DQUF3QztBQU8zQixRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQztJQUMxQixPQUFPLEVBQUUsT0FBTztJQUNoQixJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQTtBQUVLLEtBQUssVUFBVSxJQUFJLEtBQUksQ0FBQztBQUEvQixvQkFBK0I7QUFFeEIsS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEscUJBQWdCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWpDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFPLEVBQzFCLHFEQUFxRCxDQUN0RCxDQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFNO0tBQ3BCO0lBRUQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFBO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxhQUFRLEVBQ3hCLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLElBQUEsV0FBTyxFQUFDLEtBQUssQ0FBQyxFQUNkLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQzFCLENBQUE7UUFDRCxNQUFNLElBQUEsWUFBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN2QixNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtLQUN4QztJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YsTUFBTSxJQUFJLGdCQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlCO0FBQ0gsQ0FBQztBQXpCRCxvQkF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcidcbmltcG9ydCB7IGdldEFyZ3MgfSBmcm9tICcuLi8uLi91dGlscy9hcmdzJ1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb21wdCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgaXNEaXJlY3RvcnlFbXB0eSwgZG93bmxvYWQsIGV4dHJhY3QgfSBmcm9tICcuLi8uLi91dGlscy9mcydcblxuaW1wb3J0IHsgZ2V0IGFzIGdldFJlcG8gfSBmcm9tICcuL3JlcG9zJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFyZ3M6IHR5cGVvZiBhcmdzXG4gIGNvbXBvbmVudHM6IFBpY2s8Q2xpQ29tcG9uZW50cywgJ2ZldGNoJyB8ICdmcyc+XG59XG5cbmV4cG9ydCBjb25zdCBhcmdzID0gZ2V0QXJncyh7XG4gICctLXllcyc6IEJvb2xlYW4sXG4gICcteSc6ICctLXllcycsXG4gICctLWRpcic6IFN0cmluZ1xufSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhlbHAoKSB7fVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBPcHRpb25zKSB7XG4gIGNvbnN0IGRpciA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0aW9ucy5hcmdzWyctLWRpciddIHx8ICcuJylcbiAgY29uc3QgaXNFbXB0eSA9IGF3YWl0IGlzRGlyZWN0b3J5RW1wdHkob3B0aW9ucy5jb21wb25lbnRzLCBkaXIpXG4gIGNvbnN0IHllcyA9IG9wdGlvbnMuYXJnc1snLS15ZXMnXVxuXG4gIGlmICghaXNFbXB0eSAmJiAheWVzKSB7XG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY29uZmlybShcbiAgICAgICdUaGUgZm9sZGVyIHNwZWNpZmllZCBpcyBub3QgZW1wdHksIGNvbnRpbnVlIGFueXdheT8nXG4gICAgKVxuXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzY2VuZSA9ICdzY2VuZS10ZW1wbGF0ZSdcbiAgICBjb25zdCB6aXAgPSBhd2FpdCBkb3dubG9hZChcbiAgICAgIG9wdGlvbnMuY29tcG9uZW50cyxcbiAgICAgIGdldFJlcG8oc2NlbmUpLFxuICAgICAgam9pbihkaXIsIGAke3NjZW5lfS56aXBgKVxuICAgIClcbiAgICBhd2FpdCBleHRyYWN0KHppcCwgZGlyKVxuICAgIGF3YWl0IG9wdGlvbnMuY29tcG9uZW50cy5mcy51bmxpbmsoemlwKVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoZS5tZXNzYWdlKVxuICB9XG59XG4iXX0=
26
+ const scene = 'scene-template';
27
+ const zip = await (0, fs_1.download)(options.components, (0, repos_1.get)(scene), (0, path_1.join)(dir, `${scene}.zip`));
28
+ await (0, fs_1.extract)(zip, dir);
29
+ await options.components.fs.unlink(zip);
30
+ });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBb0M7QUFFcEMsMkNBQTBDO0FBQzFDLCtDQUE0QztBQUU1Qyx1Q0FBb0U7QUFFcEUsbUNBQXdDO0FBQ3hDLGlEQUFxRDtBQU94QyxRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQztJQUMxQixPQUFPLEVBQUUsT0FBTztJQUNoQixJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQTtBQUVLLEtBQUssVUFBVSxJQUFJLEtBQUksQ0FBQztBQUEvQixvQkFBK0I7QUFFbEIsUUFBQSxJQUFJLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEscUJBQWdCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWpDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFPLEVBQUMscURBQXFELENBQUMsQ0FBQTtRQUVuRixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU07S0FDcEI7SUFFRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQTtJQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsYUFBUSxFQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBQSxXQUFPLEVBQUMsS0FBSyxDQUFDLEVBQUUsSUFBQSxXQUFJLEVBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3pGLE1BQU0sSUFBQSxZQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3pDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IGdldEFyZ3MgfSBmcm9tICcuLi8uLi91dGlscy9hcmdzJ1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb21wdCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgaXNEaXJlY3RvcnlFbXB0eSwgZG93bmxvYWQsIGV4dHJhY3QgfSBmcm9tICcuLi8uLi91dGlscy9mcydcblxuaW1wb3J0IHsgZ2V0IGFzIGdldFJlcG8gfSBmcm9tICcuL3JlcG9zJ1xuaW1wb3J0IHsgbWFpbiBhcyBoYW5kbGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlcidcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiB0eXBlb2YgYXJnc1xuICBjb21wb25lbnRzOiBQaWNrPENsaUNvbXBvbmVudHMsICdmZXRjaCcgfCAnZnMnPlxufVxuXG5leHBvcnQgY29uc3QgYXJncyA9IGdldEFyZ3Moe1xuICAnLS15ZXMnOiBCb29sZWFuLFxuICAnLXknOiAnLS15ZXMnLFxuICAnLS1kaXInOiBTdHJpbmdcbn0pXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoZWxwKCkge31cblxuZXhwb3J0IGNvbnN0IG1haW4gPSBoYW5kbGVyKGFzeW5jIGZ1bmN0aW9uIG1haW4ob3B0aW9uczogT3B0aW9ucykge1xuICBjb25zdCBkaXIgPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIG9wdGlvbnMuYXJnc1snLS1kaXInXSB8fCAnLicpXG4gIGNvbnN0IGlzRW1wdHkgPSBhd2FpdCBpc0RpcmVjdG9yeUVtcHR5KG9wdGlvbnMuY29tcG9uZW50cywgZGlyKVxuICBjb25zdCB5ZXMgPSBvcHRpb25zLmFyZ3NbJy0teWVzJ11cblxuICBpZiAoIWlzRW1wdHkgJiYgIXllcykge1xuICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNvbmZpcm0oJ1RoZSBmb2xkZXIgc3BlY2lmaWVkIGlzIG5vdCBlbXB0eSwgY29udGludWUgYW55d2F5PycpXG5cbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzY2VuZSA9ICdzY2VuZS10ZW1wbGF0ZSdcbiAgY29uc3QgemlwID0gYXdhaXQgZG93bmxvYWQob3B0aW9ucy5jb21wb25lbnRzLCBnZXRSZXBvKHNjZW5lKSwgam9pbihkaXIsIGAke3NjZW5lfS56aXBgKSlcbiAgYXdhaXQgZXh0cmFjdCh6aXAsIGRpcilcbiAgYXdhaXQgb3B0aW9ucy5jb21wb25lbnRzLmZzLnVubGluayh6aXApXG59KVxuIl19
@@ -1,12 +1,12 @@
1
1
  import { join, resolve } from 'path'
2
2
 
3
- import { CliError } from '../../utils/error'
4
3
  import { getArgs } from '../../utils/args'
5
4
  import { confirm } from '../../utils/prompt'
6
5
  import { CliComponents } from '../../components'
7
6
  import { isDirectoryEmpty, download, extract } from '../../utils/fs'
8
7
 
9
8
  import { get as getRepo } from './repos'
9
+ import { main as handler } from '../../utils/handler'
10
10
 
11
11
  interface Options {
12
12
  args: typeof args
@@ -21,29 +21,19 @@ export const args = getArgs({
21
21
 
22
22
  export async function help() {}
23
23
 
24
- export async function main(options: Options) {
24
+ export const main = handler(async function main(options: Options) {
25
25
  const dir = resolve(process.cwd(), options.args['--dir'] || '.')
26
26
  const isEmpty = await isDirectoryEmpty(options.components, dir)
27
27
  const yes = options.args['--yes']
28
28
 
29
29
  if (!isEmpty && !yes) {
30
- const answer = await confirm(
31
- 'The folder specified is not empty, continue anyway?'
32
- )
30
+ const answer = await confirm('The folder specified is not empty, continue anyway?')
33
31
 
34
32
  if (!answer) return
35
33
  }
36
34
 
37
- try {
38
- const scene = 'scene-template'
39
- const zip = await download(
40
- options.components,
41
- getRepo(scene),
42
- join(dir, `${scene}.zip`)
43
- )
44
- await extract(zip, dir)
45
- await options.components.fs.unlink(zip)
46
- } catch (e: any) {
47
- throw new CliError(e.message)
48
- }
49
- }
35
+ const scene = 'scene-template'
36
+ const zip = await download(options.components, getRepo(scene), join(dir, `${scene}.zip`))
37
+ await extract(zip, dir)
38
+ await options.components.fs.unlink(zip)
39
+ })
@@ -6,4 +6,4 @@ exports.REPOS = {
6
6
  };
7
7
  const get = (repo) => exports.REPOS[repo];
8
8
  exports.get = get;
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLEtBQUssR0FBRztJQUNuQixnQkFBZ0IsRUFDZCxpRkFBaUY7Q0FDcEYsQ0FBQTtBQUVNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBd0IsRUFBRSxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQS9DLFFBQUEsR0FBRyxPQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBSRVBPUyA9IHtcbiAgJ3NjZW5lLXRlbXBsYXRlJzpcbiAgICAnaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGs3LXNjZW5lLXRlbXBsYXRlL2FyY2hpdmUvcmVmcy9oZWFkcy9tYWluLnppcCdcbn1cblxuZXhwb3J0IGNvbnN0IGdldCA9IChyZXBvOiBrZXlvZiB0eXBlb2YgUkVQT1MpID0+IFJFUE9TW3JlcG9dXG4iXX0=
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLEtBQUssR0FBRztJQUNuQixnQkFBZ0IsRUFBRSxpRkFBaUY7Q0FDcEcsQ0FBQTtBQUVNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBd0IsRUFBRSxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQS9DLFFBQUEsR0FBRyxPQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBSRVBPUyA9IHtcbiAgJ3NjZW5lLXRlbXBsYXRlJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrNy1zY2VuZS10ZW1wbGF0ZS9hcmNoaXZlL3JlZnMvaGVhZHMvbWFpbi56aXAnXG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAocmVwbzoga2V5b2YgdHlwZW9mIFJFUE9TKSA9PiBSRVBPU1tyZXBvXVxuIl19
@@ -1,6 +1,5 @@
1
1
  export const REPOS = {
2
- 'scene-template':
3
- 'https://github.com/decentraland/sdk7-scene-template/archive/refs/heads/main.zip'
2
+ 'scene-template': 'https://github.com/decentraland/sdk7-scene-template/archive/refs/heads/main.zip'
4
3
  }
5
4
 
6
5
  export const get = (repo: keyof typeof REPOS) => REPOS[repo]
@@ -0,0 +1,3 @@
1
+ import { PreviewComponents } from './types';
2
+ import { Router } from '@well-known-components/http-server';
3
+ export declare function setupBffAndComms(components: PreviewComponents, router: Router<PreviewComponents>): Promise<void>;
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setupBffAndComms = void 0;
4
+ const handle_linear_protocol_1 = require("@dcl/mini-comms/dist/logic/handle-linear-protocol");
5
+ const ws_1 = require("@well-known-components/http-server/dist/ws");
6
+ async function setupBffAndComms(components, router) {
7
+ router.get('/about', async (ctx) => {
8
+ const host = ctx.url.host;
9
+ const body = {
10
+ bff: { healthy: false },
11
+ comms: {
12
+ healthy: true,
13
+ protocol: 'v3',
14
+ fixedAdapter: `ws-room:${ctx.url.protocol.replace(/^http/, 'ws')}//${host}/mini-comms/room-1`
15
+ },
16
+ configurations: {
17
+ realmName: 'LocalPreview'
18
+ },
19
+ content: {
20
+ healthy: true,
21
+ publicUrl: `${ctx.url.protocol}//${ctx.url.host}/content`
22
+ },
23
+ lambdas: {
24
+ healthy: true,
25
+ publicUrl: `${ctx.url.protocol}//${ctx.url.host}/lambdas`
26
+ },
27
+ healthy: true
28
+ };
29
+ return { body };
30
+ });
31
+ router.get('/mini-comms/:roomId', async (ctx) => {
32
+ return (0, ws_1.upgradeWebSocketResponse)((ws) => {
33
+ if (ws.protocol === 'rfc5' || ws.protocol === 'rfc4') {
34
+ ws.on('error', (error) => {
35
+ console.error(error);
36
+ ws.close();
37
+ });
38
+ ws.on('close', () => {
39
+ console.debug('Websocket closed');
40
+ });
41
+ (0, handle_linear_protocol_1.handleSocketLinearProtocol)(components, ws, ctx.params.roomId).catch((err) => {
42
+ console.info(err);
43
+ ws.close();
44
+ });
45
+ }
46
+ });
47
+ });
48
+ }
49
+ exports.setupBffAndComms = setupBffAndComms;
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhGQUE4RjtBQUk5RixtRUFBcUY7QUFPOUUsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFVBQTZCLEVBQUUsTUFBaUM7SUFDckcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFBO1FBRXpCLE1BQU0sSUFBSSxHQUFrQjtZQUMxQixHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ3ZCLEtBQUssRUFBRTtnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksb0JBQW9CO2FBQzlGO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLFNBQVMsRUFBRSxjQUFjO2FBQzFCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVO2FBQzFEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVO2FBQzFEO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFBO1FBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDOUMsT0FBTyxJQUFBLDZCQUF3QixFQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDcEQsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDcEIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNaLENBQUMsQ0FBQyxDQUFBO2dCQUVGLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUNuQyxDQUFDLENBQUMsQ0FBQTtnQkFFRixJQUFBLG1EQUEwQixFQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDL0UsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDakIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNaLENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQS9DRCw0Q0ErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYW5kbGVTb2NrZXRMaW5lYXJQcm90b2NvbCB9IGZyb20gJ0BkY2wvbWluaS1jb21tcy9kaXN0L2xvZ2ljL2hhbmRsZS1saW5lYXItcHJvdG9jb2wnXG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBBYm91dFJlc3BvbnNlIH0gZnJvbSAnQGRjbC9wcm90b2NvbC9vdXQtdHMvYmZmL2h0dHAtZW5kcG9pbnRzLmdlbidcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvaHR0cC1zZXJ2ZXInXG5pbXBvcnQgeyB1cGdyYWRlV2ViU29ja2V0UmVzcG9uc2UgfSBmcm9tICdAd2VsbC1rbm93bi1jb21wb25lbnRzL2h0dHAtc2VydmVyL2Rpc3Qvd3MnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGUgQkZGIG1vY2sgYW5kIGNvbW11bmljYXRpb25zIHNlcnZlciBmb3IgdGhlIHByZXZpZXcgbW9kZS5cbiAqIEl0IHJ1bnMgdXNpbmcgQGRjbC9taW5pLWNvbW1zIGltcGxlbWVudGluZyBSRkMtNVxuICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEJmZkFuZENvbW1zKGNvbXBvbmVudHM6IFByZXZpZXdDb21wb25lbnRzLCByb3V0ZXI6IFJvdXRlcjxQcmV2aWV3Q29tcG9uZW50cz4pIHtcbiAgcm91dGVyLmdldCgnL2Fib3V0JywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGhvc3QgPSBjdHgudXJsLmhvc3RcblxuICAgIGNvbnN0IGJvZHk6IEFib3V0UmVzcG9uc2UgPSB7XG4gICAgICBiZmY6IHsgaGVhbHRoeTogZmFsc2UgfSxcbiAgICAgIGNvbW1zOiB7XG4gICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgIHByb3RvY29sOiAndjMnLFxuICAgICAgICBmaXhlZEFkYXB0ZXI6IGB3cy1yb29tOiR7Y3R4LnVybC5wcm90b2NvbC5yZXBsYWNlKC9eaHR0cC8sICd3cycpfS8vJHtob3N0fS9taW5pLWNvbW1zL3Jvb20tMWBcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmF0aW9uczoge1xuICAgICAgICByZWFsbU5hbWU6ICdMb2NhbFByZXZpZXcnXG4gICAgICB9LFxuICAgICAgY29udGVudDoge1xuICAgICAgICBoZWFsdGh5OiB0cnVlLFxuICAgICAgICBwdWJsaWNVcmw6IGAke2N0eC51cmwucHJvdG9jb2x9Ly8ke2N0eC51cmwuaG9zdH0vY29udGVudGBcbiAgICAgIH0sXG4gICAgICBsYW1iZGFzOiB7XG4gICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgIHB1YmxpY1VybDogYCR7Y3R4LnVybC5wcm90b2NvbH0vLyR7Y3R4LnVybC5ob3N0fS9sYW1iZGFzYFxuICAgICAgfSxcbiAgICAgIGhlYWx0aHk6IHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4geyBib2R5IH1cbiAgfSlcblxuICByb3V0ZXIuZ2V0KCcvbWluaS1jb21tcy86cm9vbUlkJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIHJldHVybiB1cGdyYWRlV2ViU29ja2V0UmVzcG9uc2UoKHdzOiBhbnkpID0+IHtcbiAgICAgIGlmICh3cy5wcm90b2NvbCA9PT0gJ3JmYzUnIHx8IHdzLnByb3RvY29sID09PSAncmZjNCcpIHtcbiAgICAgICAgd3Mub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgIHdzLmNsb3NlKClcbiAgICAgICAgfSlcblxuICAgICAgICB3cy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2Vic29ja2V0IGNsb3NlZCcpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaGFuZGxlU29ja2V0TGluZWFyUHJvdG9jb2woY29tcG9uZW50cywgd3MsIGN0eC5wYXJhbXMucm9vbUlkKS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oZXJyKVxuICAgICAgICAgIHdzLmNsb3NlKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuIl19
@@ -0,0 +1,59 @@
1
+ import { handleSocketLinearProtocol } from '@dcl/mini-comms/dist/logic/handle-linear-protocol'
2
+ import { PreviewComponents } from './types'
3
+ import { AboutResponse } from '@dcl/protocol/out-ts/bff/http-endpoints.gen'
4
+ import { Router } from '@well-known-components/http-server'
5
+ import { upgradeWebSocketResponse } from '@well-known-components/http-server/dist/ws'
6
+
7
+ /**
8
+ * This module handles the BFF mock and communications server for the preview mode.
9
+ * It runs using @dcl/mini-comms implementing RFC-5
10
+ */
11
+
12
+ export async function setupBffAndComms(components: PreviewComponents, router: Router<PreviewComponents>) {
13
+ router.get('/about', async (ctx) => {
14
+ const host = ctx.url.host
15
+
16
+ const body: AboutResponse = {
17
+ bff: { healthy: false },
18
+ comms: {
19
+ healthy: true,
20
+ protocol: 'v3',
21
+ fixedAdapter: `ws-room:${ctx.url.protocol.replace(/^http/, 'ws')}//${host}/mini-comms/room-1`
22
+ },
23
+ configurations: {
24
+ realmName: 'LocalPreview'
25
+ },
26
+ content: {
27
+ healthy: true,
28
+ publicUrl: `${ctx.url.protocol}//${ctx.url.host}/content`
29
+ },
30
+ lambdas: {
31
+ healthy: true,
32
+ publicUrl: `${ctx.url.protocol}//${ctx.url.host}/lambdas`
33
+ },
34
+ healthy: true
35
+ }
36
+
37
+ return { body }
38
+ })
39
+
40
+ router.get('/mini-comms/:roomId', async (ctx) => {
41
+ return upgradeWebSocketResponse((ws: any) => {
42
+ if (ws.protocol === 'rfc5' || ws.protocol === 'rfc4') {
43
+ ws.on('error', (error: any) => {
44
+ console.error(error)
45
+ ws.close()
46
+ })
47
+
48
+ ws.on('close', () => {
49
+ console.debug('Websocket closed')
50
+ })
51
+
52
+ handleSocketLinearProtocol(components, ws, ctx.params.roomId).catch((err: any) => {
53
+ console.info(err)
54
+ ws.close()
55
+ })
56
+ }
57
+ })
58
+ })
59
+ }
@@ -0,0 +1,5 @@
1
+ import { Entity } from '@dcl/schemas';
2
+ export declare function fetchEntityByPointer(baseUrl: string, pointers: string[]): Promise<{
3
+ baseUrl: string;
4
+ deployments: Entity[];
5
+ }>;