@dcl/sdk 7.0.6-4197739270.commit-db87ed8 → 7.0.6-4217957637.commit-a393ef7

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 (88) hide show
  1. package/package.json +6 -30
  2. package/cli/commands/build/helpers.d.ts +0 -21
  3. package/cli/commands/build/helpers.js +0 -50
  4. package/cli/commands/build/helpers.ts +0 -89
  5. package/cli/commands/build/index.d.ts +0 -19
  6. package/cli/commands/build/index.js +0 -69
  7. package/cli/commands/build/index.ts +0 -91
  8. package/cli/commands/init/index.d.ts +0 -17
  9. package/cli/commands/init/index.js +0 -51
  10. package/cli/commands/init/index.ts +0 -67
  11. package/cli/commands/init/repos.d.ts +0 -9
  12. package/cli/commands/init/repos.js +0 -12
  13. package/cli/commands/init/repos.ts +0 -17
  14. package/cli/commands/preview/bff.d.ts +0 -3
  15. package/cli/commands/preview/bff.js +0 -54
  16. package/cli/commands/preview/bff.ts +0 -63
  17. package/cli/commands/preview/catalyst.d.ts +0 -5
  18. package/cli/commands/preview/catalyst.js +0 -24
  19. package/cli/commands/preview/catalyst.ts +0 -31
  20. package/cli/commands/preview/coordinates.d.ts +0 -20
  21. package/cli/commands/preview/coordinates.js +0 -90
  22. package/cli/commands/preview/coordinates.ts +0 -146
  23. package/cli/commands/preview/endpoints.d.ts +0 -10
  24. package/cli/commands/preview/endpoints.js +0 -455
  25. package/cli/commands/preview/endpoints.ts +0 -568
  26. package/cli/commands/preview/eth.d.ts +0 -2
  27. package/cli/commands/preview/eth.js +0 -6
  28. package/cli/commands/preview/eth.ts +0 -3
  29. package/cli/commands/preview/index.d.ts +0 -20
  30. package/cli/commands/preview/index.js +0 -100
  31. package/cli/commands/preview/index.ts +0 -98
  32. package/cli/commands/preview/port.d.ts +0 -1
  33. package/cli/commands/preview/port.js +0 -21
  34. package/cli/commands/preview/port.ts +0 -15
  35. package/cli/commands/preview/project.d.ts +0 -14
  36. package/cli/commands/preview/project.js +0 -77
  37. package/cli/commands/preview/project.ts +0 -112
  38. package/cli/commands/preview/types.d.ts +0 -18
  39. package/cli/commands/preview/types.js +0 -3
  40. package/cli/commands/preview/types.ts +0 -26
  41. package/cli/commands/preview/wire.d.ts +0 -2
  42. package/cli/commands/preview/wire.js +0 -66
  43. package/cli/commands/preview/wire.ts +0 -70
  44. package/cli/commands/preview/ws.d.ts +0 -7
  45. package/cli/commands/preview/ws.js +0 -16
  46. package/cli/commands/preview/ws.ts +0 -24
  47. package/cli/commands/start/index.d.ts +0 -29
  48. package/cli/commands/start/index.js +0 -126
  49. package/cli/commands/start/index.ts +0 -145
  50. package/cli/components/fetch.d.ts +0 -5
  51. package/cli/components/fetch.js +0 -34
  52. package/cli/components/fetch.ts +0 -11
  53. package/cli/components/fs.d.ts +0 -12
  54. package/cli/components/fs.js +0 -69
  55. package/cli/components/fs.ts +0 -62
  56. package/cli/components/index.d.ts +0 -7
  57. package/cli/components/index.js +0 -13
  58. package/cli/components/index.ts +0 -14
  59. package/cli/index.d.ts +0 -7
  60. package/cli/index.js +0 -76
  61. package/cli/index.ts +0 -85
  62. package/cli/utils/args.d.ts +0 -10
  63. package/cli/utils/args.js +0 -16
  64. package/cli/utils/args.ts +0 -18
  65. package/cli/utils/commands.d.ts +0 -3
  66. package/cli/utils/commands.js +0 -24
  67. package/cli/utils/commands.ts +0 -28
  68. package/cli/utils/dcl-ignore.d.ts +0 -4
  69. package/cli/utils/dcl-ignore.js +0 -44
  70. package/cli/utils/dcl-ignore.ts +0 -45
  71. package/cli/utils/error.d.ts +0 -2
  72. package/cli/utils/error.js +0 -7
  73. package/cli/utils/error.ts +0 -1
  74. package/cli/utils/exec.d.ts +0 -8
  75. package/cli/utils/exec.js +0 -32
  76. package/cli/utils/exec.ts +0 -42
  77. package/cli/utils/fs.d.ts +0 -10
  78. package/cli/utils/fs.js +0 -26
  79. package/cli/utils/fs.ts +0 -41
  80. package/cli/utils/log.d.ts +0 -5
  81. package/cli/utils/log.js +0 -29
  82. package/cli/utils/log.ts +0 -39
  83. package/cli/utils/object.d.ts +0 -9
  84. package/cli/utils/object.js +0 -45
  85. package/cli/utils/object.ts +0 -62
  86. package/cli/utils/out-messages.d.ts +0 -1
  87. package/cli/utils/out-messages.js +0 -8
  88. package/cli/utils/out-messages.ts +0 -3
@@ -1,100 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __importStar = (this && this.__importStar) || function (mod) {
19
- if (mod && mod.__esModule) return mod;
20
- var result = {};
21
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
- __setModuleDefault(result, mod);
23
- return result;
24
- };
25
- var __importDefault = (this && this.__importDefault) || function (mod) {
26
- return (mod && mod.__esModule) ? mod : { "default": mod };
27
- };
28
- Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.main = exports.args = exports.help = void 0;
30
- const path_1 = __importStar(require("path"));
31
- const fp_future_1 = __importDefault(require("fp-future"));
32
- const interfaces_1 = require("@well-known-components/interfaces");
33
- const rooms_1 = require("@dcl/mini-comms/dist/adapters/rooms");
34
- const env_config_provider_1 = require("@well-known-components/env-config-provider");
35
- const http_server_1 = require("@well-known-components/http-server");
36
- const logger_1 = require("@well-known-components/logger");
37
- const metrics_1 = require("@well-known-components/metrics");
38
- const ws_1 = require("./ws");
39
- const args_1 = require("../../utils/args");
40
- const helpers_1 = require("../../commands/build/helpers");
41
- const project_1 = require("./project");
42
- const port_1 = require("./port");
43
- const eth_1 = require("./eth");
44
- const wire_1 = require("./wire");
45
- const error_1 = require("../../utils/error");
46
- function help() {
47
- return ``;
48
- }
49
- exports.help = help;
50
- exports.args = (0, args_1.getArgs)({
51
- '--watch': Boolean,
52
- '-w': '--watch',
53
- '--dir': String,
54
- '--port': Number,
55
- '-p': '--port'
56
- });
57
- async function main(options) {
58
- const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
59
- await (0, project_1.validateExistingProject)(options.components, dir);
60
- await (0, project_1.validateSceneOptions)(options.components, dir);
61
- if (await (0, helpers_1.needsDependencies)(options.components, dir)) {
62
- const npmModulesPath = path_1.default.resolve(dir, 'node_modules');
63
- throw new error_1.CliError(`Couldn\'t find ${npmModulesPath}, please run: npm install`);
64
- }
65
- const port = options.args['--port'] || (await (0, port_1.previewPort)());
66
- const program = await interfaces_1.Lifecycle.run({
67
- async initComponents() {
68
- const metrics = (0, metrics_1.createTestMetricsComponent)(rooms_1.roomsMetrics);
69
- const config = (0, env_config_provider_1.createRecordConfigComponent)(Object.assign({ HTTP_SERVER_PORT: port.toString(), HTTP_SERVER_HOST: '0.0.0.0' }, process.env));
70
- const logs = await (0, logger_1.createConsoleLogComponent)({});
71
- const ws = await (0, ws_1.createWsComponent)({ logs });
72
- const server = await (0, http_server_1.createServerComponent)({ config, logs, ws: ws.ws }, {});
73
- const rooms = await (0, rooms_1.createRoomsComponent)({
74
- metrics,
75
- logs,
76
- config
77
- });
78
- const programClosed = (0, fp_future_1.default)();
79
- const signaler = {
80
- programClosed,
81
- async stop() {
82
- programClosed.resolve();
83
- }
84
- };
85
- return Object.assign(Object.assign({}, options.components), { logs, ethereumProvider: eth_1.providerInstance, rooms,
86
- config,
87
- metrics,
88
- server,
89
- ws,
90
- signaler });
91
- },
92
- async main({ components, startComponents }) {
93
- await (0, wire_1.wire)(components, dir, !!options.args['--watch']);
94
- await startComponents();
95
- }
96
- });
97
- return program;
98
- }
99
- exports.main = main;
100
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZDQUFvQztBQUNwQywwREFBOEI7QUFDOUIsa0VBQTZFO0FBQzdFLCtEQUF3RjtBQUN4RixvRkFBd0Y7QUFDeEYsb0VBQTBFO0FBQzFFLDBEQUF5RTtBQUN6RSw0REFBMkU7QUFDM0UsNkJBQXdDO0FBR3hDLDJDQUEwQztBQUMxQywwREFBZ0U7QUFFaEUsdUNBQXlFO0FBQ3pFLGlDQUFvQztBQUNwQywrQkFBd0M7QUFDeEMsaUNBQTZCO0FBQzdCLDZDQUE0QztBQUU1QyxTQUFnQixJQUFJO0lBQ2xCLE9BQU8sRUFBRSxDQUFBO0FBQ1gsQ0FBQztBQUZELG9CQUVDO0FBT1ksUUFBQSxJQUFJLEdBQUcsSUFBQSxjQUFPLEVBQUM7SUFDMUIsU0FBUyxFQUFFLE9BQU87SUFDbEIsSUFBSSxFQUFFLFNBQVM7SUFDZixPQUFPLEVBQUUsTUFBTTtJQUNmLFFBQVEsRUFBRSxNQUFNO0lBQ2hCLElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQyxDQUFBO0FBSUssS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLElBQUEsaUNBQXVCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUN0RCxNQUFNLElBQUEsOEJBQW9CLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUVuRCxJQUFJLE1BQU0sSUFBQSwyQkFBaUIsRUFBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxFQUFFO1FBQ3BELE1BQU0sY0FBYyxHQUFHLGNBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFBO1FBQ3hELE1BQU0sSUFBSSxnQkFBUSxDQUFDLGtCQUFrQixjQUFjLDJCQUEyQixDQUFDLENBQUE7S0FDaEY7SUFFRCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFBLGtCQUFXLEdBQUUsQ0FBQyxDQUFBO0lBRTVELE1BQU0sT0FBTyxHQUFHLE1BQU0sc0JBQVMsQ0FBQyxHQUFHLENBQW9CO1FBQ3JELEtBQUssQ0FBQyxjQUFjO1lBQ2xCLE1BQU0sT0FBTyxHQUFHLElBQUEsb0NBQTBCLEVBQUMsb0JBQVksQ0FBQyxDQUFBO1lBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUEsaURBQTJCLGtCQUN4QyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsUUFBUSxFQUFFLEVBQ2pDLGdCQUFnQixFQUFFLFNBQVMsSUFDeEIsT0FBTyxDQUFDLEdBQUcsRUFDZCxDQUFBO1lBQ0YsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLGtDQUF5QixFQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQ2hELE1BQU0sRUFBRSxHQUFHLE1BQU0sSUFBQSxzQkFBaUIsRUFBQyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7WUFDNUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLG1DQUFxQixFQUFvQixFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQTtZQUM5RixNQUFNLEtBQUssR0FBRyxNQUFNLElBQUEsNEJBQW9CLEVBQUM7Z0JBQ3ZDLE9BQU87Z0JBQ1AsSUFBSTtnQkFDSixNQUFNO2FBQ1AsQ0FBQyxDQUFBO1lBRUYsTUFBTSxhQUFhLEdBQUcsSUFBQSxtQkFBTSxHQUFRLENBQUE7WUFDcEMsTUFBTSxRQUFRLEdBQXdDO2dCQUNwRCxhQUFhO2dCQUNiLEtBQUssQ0FBQyxJQUFJO29CQUdSLGFBQWEsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtnQkFDekIsQ0FBQzthQUNGLENBQUE7WUFFRCx1Q0FDSyxPQUFPLENBQUMsVUFBVSxLQUNyQixJQUFJLEVBQ0osZ0JBQWdCLEVBQUUsc0JBQWdCLEVBQ2xDLEtBQUs7Z0JBQ0wsTUFBTTtnQkFDTixPQUFPO2dCQUNQLE1BQU07Z0JBQ04sRUFBRTtnQkFDRixRQUFRLElBQ1Q7UUFDSCxDQUFDO1FBQ0QsS0FBSyxDQUFDLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxlQUFlLEVBQUU7WUFDeEMsTUFBTSxJQUFBLFdBQUksRUFBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUE7WUFDdEQsTUFBTSxlQUFlLEVBQUUsQ0FBQTtRQUN6QixDQUFDO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsT0FBTyxPQUFPLENBQUE7QUFDaEIsQ0FBQztBQTFERCxvQkEwREMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCwgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCBmdXR1cmUgZnJvbSAnZnAtZnV0dXJlJ1xuaW1wb3J0IHsgTGlmZWN5Y2xlLCBJQmFzZUNvbXBvbmVudCB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvaW50ZXJmYWNlcydcbmltcG9ydCB7IHJvb21zTWV0cmljcywgY3JlYXRlUm9vbXNDb21wb25lbnQgfSBmcm9tICdAZGNsL21pbmktY29tbXMvZGlzdC9hZGFwdGVycy9yb29tcydcbmltcG9ydCB7IGNyZWF0ZVJlY29yZENvbmZpZ0NvbXBvbmVudCB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvZW52LWNvbmZpZy1wcm92aWRlcidcbmltcG9ydCB7IGNyZWF0ZVNlcnZlckNvbXBvbmVudCB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvaHR0cC1zZXJ2ZXInXG5pbXBvcnQgeyBjcmVhdGVDb25zb2xlTG9nQ29tcG9uZW50IH0gZnJvbSAnQHdlbGwta25vd24tY29tcG9uZW50cy9sb2dnZXInXG5pbXBvcnQgeyBjcmVhdGVUZXN0TWV0cmljc0NvbXBvbmVudCB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvbWV0cmljcydcbmltcG9ydCB7IGNyZWF0ZVdzQ29tcG9uZW50IH0gZnJvbSAnLi93cydcblxuaW1wb3J0IHsgQ2xpQ29tcG9uZW50cyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyBnZXRBcmdzIH0gZnJvbSAnLi4vLi4vdXRpbHMvYXJncydcbmltcG9ydCB7IG5lZWRzRGVwZW5kZW5jaWVzIH0gZnJvbSAnLi4vLi4vY29tbWFuZHMvYnVpbGQvaGVscGVycydcbmltcG9ydCB7IElTaWduYWxlckNvbXBvbmVudCwgUHJldmlld0NvbXBvbmVudHMgfSBmcm9tICcuL3R5cGVzJ1xuaW1wb3J0IHsgdmFsaWRhdGVFeGlzdGluZ1Byb2plY3QsIHZhbGlkYXRlU2NlbmVPcHRpb25zIH0gZnJvbSAnLi9wcm9qZWN0J1xuaW1wb3J0IHsgcHJldmlld1BvcnQgfSBmcm9tICcuL3BvcnQnXG5pbXBvcnQgeyBwcm92aWRlckluc3RhbmNlIH0gZnJvbSAnLi9ldGgnXG5pbXBvcnQgeyB3aXJlIH0gZnJvbSAnLi93aXJlJ1xuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcidcblxuZXhwb3J0IGZ1bmN0aW9uIGhlbHAoKSB7XG4gIHJldHVybiBgYFxufVxuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFyZ3M6IE9taXQ8dHlwZW9mIGFyZ3MsICdfJz5cbiAgY29tcG9uZW50czogUGljazxDbGlDb21wb25lbnRzLCAnZmV0Y2gnIHwgJ2ZzJz5cbn1cblxuZXhwb3J0IGNvbnN0IGFyZ3MgPSBnZXRBcmdzKHtcbiAgJy0td2F0Y2gnOiBCb29sZWFuLFxuICAnLXcnOiAnLS13YXRjaCcsXG4gICctLWRpcic6IFN0cmluZyxcbiAgJy0tcG9ydCc6IE51bWJlcixcbiAgJy1wJzogJy0tcG9ydCdcbn0pXG5cbi8vIGNvcHkvcGFzdGUgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL2NsaS9ibG9iLzMyZGU5NmJjZmM0ZWYxYzI2YzU1ODBjNzc2N2FkNmM4Y2FjM2IzNjcvc3JjL2xpYi9EZWNlbnRyYWxhbmQudHNcbi8vIFRPRE86IHJlZmFjdG9yIHRoaXMgc3R1ZmYgY29tcGxldGVseVxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1haW4ob3B0aW9uczogT3B0aW9ucykge1xuICBjb25zdCBkaXIgPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIG9wdGlvbnMuYXJnc1snLS1kaXInXSB8fCAnLicpXG4gIGF3YWl0IHZhbGlkYXRlRXhpc3RpbmdQcm9qZWN0KG9wdGlvbnMuY29tcG9uZW50cywgZGlyKVxuICBhd2FpdCB2YWxpZGF0ZVNjZW5lT3B0aW9ucyhvcHRpb25zLmNvbXBvbmVudHMsIGRpcilcblxuICBpZiAoYXdhaXQgbmVlZHNEZXBlbmRlbmNpZXMob3B0aW9ucy5jb21wb25lbnRzLCBkaXIpKSB7XG4gICAgY29uc3QgbnBtTW9kdWxlc1BhdGggPSBwYXRoLnJlc29sdmUoZGlyLCAnbm9kZV9tb2R1bGVzJylcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoYENvdWxkblxcJ3QgZmluZCAke25wbU1vZHVsZXNQYXRofSwgcGxlYXNlIHJ1bjogbnBtIGluc3RhbGxgKVxuICB9XG5cbiAgY29uc3QgcG9ydCA9IG9wdGlvbnMuYXJnc1snLS1wb3J0J10gfHwgKGF3YWl0IHByZXZpZXdQb3J0KCkpXG5cbiAgY29uc3QgcHJvZ3JhbSA9IGF3YWl0IExpZmVjeWNsZS5ydW48UHJldmlld0NvbXBvbmVudHM+KHtcbiAgICBhc3luYyBpbml0Q29tcG9uZW50cygpIHtcbiAgICAgIGNvbnN0IG1ldHJpY3MgPSBjcmVhdGVUZXN0TWV0cmljc0NvbXBvbmVudChyb29tc01ldHJpY3MpXG4gICAgICBjb25zdCBjb25maWcgPSBjcmVhdGVSZWNvcmRDb25maWdDb21wb25lbnQoe1xuICAgICAgICBIVFRQX1NFUlZFUl9QT1JUOiBwb3J0LnRvU3RyaW5nKCksXG4gICAgICAgIEhUVFBfU0VSVkVSX0hPU1Q6ICcwLjAuMC4wJyxcbiAgICAgICAgLi4ucHJvY2Vzcy5lbnZcbiAgICAgIH0pXG4gICAgICBjb25zdCBsb2dzID0gYXdhaXQgY3JlYXRlQ29uc29sZUxvZ0NvbXBvbmVudCh7fSlcbiAgICAgIGNvbnN0IHdzID0gYXdhaXQgY3JlYXRlV3NDb21wb25lbnQoeyBsb2dzIH0pXG4gICAgICBjb25zdCBzZXJ2ZXIgPSBhd2FpdCBjcmVhdGVTZXJ2ZXJDb21wb25lbnQ8UHJldmlld0NvbXBvbmVudHM+KHsgY29uZmlnLCBsb2dzLCB3czogd3Mud3MgfSwge30pXG4gICAgICBjb25zdCByb29tcyA9IGF3YWl0IGNyZWF0ZVJvb21zQ29tcG9uZW50KHtcbiAgICAgICAgbWV0cmljcyxcbiAgICAgICAgbG9ncyxcbiAgICAgICAgY29uZmlnXG4gICAgICB9KVxuXG4gICAgICBjb25zdCBwcm9ncmFtQ2xvc2VkID0gZnV0dXJlPHZvaWQ+KClcbiAgICAgIGNvbnN0IHNpZ25hbGVyOiBJQmFzZUNvbXBvbmVudCAmIElTaWduYWxlckNvbXBvbmVudCA9IHtcbiAgICAgICAgcHJvZ3JhbUNsb3NlZCxcbiAgICAgICAgYXN5bmMgc3RvcCgpIHtcbiAgICAgICAgICAvLyB0aGlzIHByb21pc2UgaXMgcmVzb2x2ZWQgdXBvbiBTSUdURVJNIG9yIFNJR0hVUFxuICAgICAgICAgIC8vIG9yIHdoZW4gcHJvZ3JhbS5zdG9wIGlzIGNhbGxlZFxuICAgICAgICAgIHByb2dyYW1DbG9zZWQucmVzb2x2ZSgpXG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHtcbiAgICAgICAgLi4ub3B0aW9ucy5jb21wb25lbnRzLFxuICAgICAgICBsb2dzLFxuICAgICAgICBldGhlcmV1bVByb3ZpZGVyOiBwcm92aWRlckluc3RhbmNlLFxuICAgICAgICByb29tcyxcbiAgICAgICAgY29uZmlnLFxuICAgICAgICBtZXRyaWNzLFxuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIHdzLFxuICAgICAgICBzaWduYWxlclxuICAgICAgfVxuICAgIH0sXG4gICAgYXN5bmMgbWFpbih7IGNvbXBvbmVudHMsIHN0YXJ0Q29tcG9uZW50cyB9KSB7XG4gICAgICBhd2FpdCB3aXJlKGNvbXBvbmVudHMsIGRpciwgISFvcHRpb25zLmFyZ3NbJy0td2F0Y2gnXSlcbiAgICAgIGF3YWl0IHN0YXJ0Q29tcG9uZW50cygpXG4gICAgfVxuICB9KVxuXG4gIHJldHVybiBwcm9ncmFtXG59XG4iXX0=
@@ -1,98 +0,0 @@
1
- import path, { resolve } from 'path'
2
- import future from 'fp-future'
3
- import { Lifecycle, IBaseComponent } from '@well-known-components/interfaces'
4
- import { roomsMetrics, createRoomsComponent } from '@dcl/mini-comms/dist/adapters/rooms'
5
- import { createRecordConfigComponent } from '@well-known-components/env-config-provider'
6
- import { createServerComponent } from '@well-known-components/http-server'
7
- import { createConsoleLogComponent } from '@well-known-components/logger'
8
- import { createTestMetricsComponent } from '@well-known-components/metrics'
9
- import { createWsComponent } from './ws'
10
-
11
- import { CliComponents } from '../../components'
12
- import { getArgs } from '../../utils/args'
13
- import { needsDependencies } from '../../commands/build/helpers'
14
- import { ISignalerComponent, PreviewComponents } from './types'
15
- import { validateExistingProject, validateSceneOptions } from './project'
16
- import { previewPort } from './port'
17
- import { providerInstance } from './eth'
18
- import { wire } from './wire'
19
- import { CliError } from '../../utils/error'
20
-
21
- export function help() {
22
- return ``
23
- }
24
-
25
- interface Options {
26
- args: Omit<typeof args, '_'>
27
- components: Pick<CliComponents, 'fetch' | 'fs'>
28
- }
29
-
30
- export const args = getArgs({
31
- '--watch': Boolean,
32
- '-w': '--watch',
33
- '--dir': String,
34
- '--port': Number,
35
- '-p': '--port'
36
- })
37
-
38
- // copy/paste from https://github.com/decentraland/cli/blob/32de96bcfc4ef1c26c5580c7767ad6c8cac3b367/src/lib/Decentraland.ts
39
- // TODO: refactor this stuff completely
40
- export async function main(options: Options) {
41
- const dir = resolve(process.cwd(), options.args['--dir'] || '.')
42
- await validateExistingProject(options.components, dir)
43
- await validateSceneOptions(options.components, dir)
44
-
45
- if (await needsDependencies(options.components, dir)) {
46
- const npmModulesPath = path.resolve(dir, 'node_modules')
47
- throw new CliError(`Couldn\'t find ${npmModulesPath}, please run: npm install`)
48
- }
49
-
50
- const port = options.args['--port'] || (await previewPort())
51
-
52
- const program = await Lifecycle.run<PreviewComponents>({
53
- async initComponents() {
54
- const metrics = createTestMetricsComponent(roomsMetrics)
55
- const config = createRecordConfigComponent({
56
- HTTP_SERVER_PORT: port.toString(),
57
- HTTP_SERVER_HOST: '0.0.0.0',
58
- ...process.env
59
- })
60
- const logs = await createConsoleLogComponent({})
61
- const ws = await createWsComponent({ logs })
62
- const server = await createServerComponent<PreviewComponents>({ config, logs, ws: ws.ws }, {})
63
- const rooms = await createRoomsComponent({
64
- metrics,
65
- logs,
66
- config
67
- })
68
-
69
- const programClosed = future<void>()
70
- const signaler: IBaseComponent & ISignalerComponent = {
71
- programClosed,
72
- async stop() {
73
- // this promise is resolved upon SIGTERM or SIGHUP
74
- // or when program.stop is called
75
- programClosed.resolve()
76
- }
77
- }
78
-
79
- return {
80
- ...options.components,
81
- logs,
82
- ethereumProvider: providerInstance,
83
- rooms,
84
- config,
85
- metrics,
86
- server,
87
- ws,
88
- signaler
89
- }
90
- },
91
- async main({ components, startComponents }) {
92
- await wire(components, dir, !!options.args['--watch'])
93
- await startComponents()
94
- }
95
- })
96
-
97
- return program
98
- }
@@ -1 +0,0 @@
1
- export declare function previewPort(): Promise<number>;
@@ -1,21 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.previewPort = void 0;
7
- const portfinder_1 = __importDefault(require("portfinder"));
8
- async function previewPort() {
9
- let resolvedPort = 0;
10
- if (!resolvedPort) {
11
- try {
12
- resolvedPort = await portfinder_1.default.getPortPromise();
13
- }
14
- catch (e) {
15
- resolvedPort = 2044;
16
- }
17
- }
18
- return resolvedPort;
19
- }
20
- exports.previewPort = previewPort;
21
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9ydC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInBvcnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsNERBQW1DO0FBRTVCLEtBQUssVUFBVSxXQUFXO0lBQy9CLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQTtJQUVwQixJQUFJLENBQUMsWUFBWSxFQUFFO1FBQ2pCLElBQUk7WUFDRixZQUFZLEdBQUcsTUFBTSxvQkFBVSxDQUFDLGNBQWMsRUFBRSxDQUFBO1NBQ2pEO1FBQUMsT0FBTyxDQUFDLEVBQUU7WUFDVixZQUFZLEdBQUcsSUFBSSxDQUFBO1NBQ3BCO0tBQ0Y7SUFFRCxPQUFPLFlBQVksQ0FBQTtBQUNyQixDQUFDO0FBWkQsa0NBWUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcG9ydGZpbmRlciBmcm9tICdwb3J0ZmluZGVyJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcHJldmlld1BvcnQoKSB7XG4gIGxldCByZXNvbHZlZFBvcnQgPSAwXG5cbiAgaWYgKCFyZXNvbHZlZFBvcnQpIHtcbiAgICB0cnkge1xuICAgICAgcmVzb2x2ZWRQb3J0ID0gYXdhaXQgcG9ydGZpbmRlci5nZXRQb3J0UHJvbWlzZSgpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcmVzb2x2ZWRQb3J0ID0gMjA0NFxuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXNvbHZlZFBvcnRcbn1cbiJdfQ==
@@ -1,15 +0,0 @@
1
- import portfinder from 'portfinder'
2
-
3
- export async function previewPort() {
4
- let resolvedPort = 0
5
-
6
- if (!resolvedPort) {
7
- try {
8
- resolvedPort = await portfinder.getPortPromise()
9
- } catch (e) {
10
- resolvedPort = 2044
11
- }
12
- }
13
-
14
- return resolvedPort
15
- }
@@ -1,14 +0,0 @@
1
- import { Scene } from '@dcl/schemas';
2
- import { IFileSystemComponent } from '../../components/fs';
3
- export declare const SCENE_FILE = "scene.json";
4
- export declare function getSceneFilePath(dir: string): string;
5
- export declare function getSceneFile(components: {
6
- fs: IFileSystemComponent;
7
- }, dir: string): Promise<Scene>;
8
- export declare function validateSceneData(sceneFile: Scene): void;
9
- export declare function validateSceneOptions(components: {
10
- fs: IFileSystemComponent;
11
- }, dir: string): Promise<void>;
12
- export declare function validateExistingProject(components: {
13
- fs: IFileSystemComponent;
14
- }, dir: string): Promise<void>;
@@ -1,77 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.validateExistingProject = exports.validateSceneOptions = exports.validateSceneData = exports.getSceneFile = exports.getSceneFilePath = exports.SCENE_FILE = void 0;
4
- const path_1 = require("path");
5
- const error_1 = require("../../utils/error");
6
- const coordinates_1 = require("./coordinates");
7
- exports.SCENE_FILE = 'scene.json';
8
- function isWebSocket(url) {
9
- return /wss?\:\/\//gi.test(url);
10
- }
11
- function isValidMainFormat(path) {
12
- const supportedExtensions = new Set(['js', 'html', 'xml']);
13
- const mainExt = path ? path.split('.').pop() : null;
14
- return path === null || !!(mainExt && supportedExtensions.has(mainExt));
15
- }
16
- function getSceneFilePath(dir) {
17
- return (0, path_1.resolve)(dir, exports.SCENE_FILE);
18
- }
19
- exports.getSceneFilePath = getSceneFilePath;
20
- async function getSceneFile(components, dir) {
21
- try {
22
- const sceneFile = JSON.parse(await components.fs.readFile(getSceneFilePath(dir), 'utf-8'));
23
- return sceneFile;
24
- }
25
- catch (e) {
26
- throw new error_1.CliError(`Unable to read 'scene.json' file. Try initializing the project using 'dcl init'.
27
- \t > Folder: ${dir}
28
- `);
29
- }
30
- }
31
- exports.getSceneFile = getSceneFile;
32
- function validateSceneData(sceneFile) {
33
- const { base, parcels } = sceneFile.scene;
34
- const parcelSet = new Set(parcels);
35
- if (!base) {
36
- throw new error_1.CliError('Missing scene base attribute at scene.json');
37
- }
38
- if (!parcels) {
39
- throw new error_1.CliError('Missing scene parcels attribute at scene.json');
40
- }
41
- if (parcelSet.size < parcels.length) {
42
- throw new error_1.CliError(`There are duplicated parcels at scene.json.`);
43
- }
44
- if (!parcelSet.has(base)) {
45
- throw new error_1.CliError(`Your base parcel ${base} should be included on parcels attribute at scene.json`);
46
- }
47
- const objParcels = parcels.map(coordinates_1.getObject);
48
- objParcels.forEach(({ x, y }) => {
49
- if ((0, coordinates_1.inBounds)(x, y)) {
50
- return;
51
- }
52
- const { minX, maxX } = (0, coordinates_1.getBounds)();
53
- throw new error_1.CliError(`Coordinates ${x},${y} are outside of allowed limits (from ${minX} to ${maxX})`);
54
- });
55
- if (!(0, coordinates_1.areConnected)(objParcels)) {
56
- throw new error_1.CliError('Parcels described on scene.json are not connected. They should be one next to each other');
57
- }
58
- }
59
- exports.validateSceneData = validateSceneData;
60
- async function validateSceneOptions(components, dir) {
61
- const sceneFile = await getSceneFile(components, dir);
62
- return validateSceneData(sceneFile);
63
- }
64
- exports.validateSceneOptions = validateSceneOptions;
65
- async function validateExistingProject(components, dir) {
66
- const sceneFile = await getSceneFile(components, dir);
67
- if (!isWebSocket(sceneFile.main)) {
68
- if (!isValidMainFormat(sceneFile.main)) {
69
- throw new error_1.CliError(`Main scene format file (${sceneFile.main}) is not a supported format`);
70
- }
71
- if (sceneFile.main !== null && !(await components.fs.fileExists((0, path_1.resolve)(dir, sceneFile.main)))) {
72
- throw new error_1.CliError(`Main scene file ${sceneFile.main} is missing in folder ${dir}`);
73
- }
74
- }
75
- }
76
- exports.validateExistingProject = validateExistingProject;
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvamVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByb2plY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQThCO0FBRzlCLDZDQUE0QztBQUM1QywrQ0FBNEU7QUFHL0QsUUFBQSxVQUFVLEdBQUcsWUFBWSxDQUFBO0FBTXRDLFNBQVMsV0FBVyxDQUFDLEdBQVc7SUFDOUIsT0FBTyxjQUFjLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ2pDLENBQUM7QUFNRCxTQUFTLGlCQUFpQixDQUFDLElBQW1CO0lBQzVDLE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7SUFDMUQsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUE7SUFDbkQsT0FBTyxJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLE9BQU8sSUFBSSxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUN6RSxDQUFDO0FBTUQsU0FBZ0IsZ0JBQWdCLENBQUMsR0FBVztJQUMxQyxPQUFPLElBQUEsY0FBTyxFQUFDLEdBQUcsRUFBRSxrQkFBVSxDQUFDLENBQUE7QUFDakMsQ0FBQztBQUZELDRDQUVDO0FBS00sS0FBSyxVQUFVLFlBQVksQ0FBQyxVQUF3QyxFQUFFLEdBQVc7SUFDdEYsSUFBSTtRQUNGLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxVQUFVLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQzFGLE9BQU8sU0FBeUIsQ0FBQTtLQUNqQztJQUFDLE9BQU8sQ0FB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cm9tICdwYXRoJ1xuaW1wb3J0IHsgU2NlbmUgfSBmcm9tICdAZGNsL3NjaGVtYXMnXG5cbmltcG9ydCB7IENsaUVycm9yIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXJyb3InXG5pbXBvcnQgeyBnZXRPYmplY3QsIGluQm91bmRzLCBnZXRCb3VuZHMsIGFyZUNvbm5lY3RlZCB9IGZyb20gJy4vY29vcmRpbmF0ZXMnXG5pbXBvcnQgeyBJRmlsZVN5c3RlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZnMnXG5cbmV4cG9ydCBjb25zdCBTQ0VORV9GSUxFID0gJ3NjZW5lLmpzb24nXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBnaXZlbiBVUkwgaXMgYSB2YWxpZCB3ZWJzb2NrZXQgVVJMLlxuICogQHBhcmFtIHVybCBUaGUgZ2l2ZW4gVVJMLlxuICovXG5mdW5jdGlvbiBpc1dlYlNvY2tldCh1cmw6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gL3dzcz9cXDpcXC9cXC8vZ2kudGVzdCh1cmwpXG59XG5cbi8qKlxuICogUmV0dXJucyBgdHJ1ZWAgaWYgdGhlIHByb3ZpZGVkIHBhdGggY29udGFpbnMgYSB2YWxpZCBtYWluIGZpbGUgZm9ybWF0LlxuICogQHBhcmFtIHBhdGggVGhlIHBhdGggdG8gdGhlIG1haW4gZmlsZS5cbiAqL1xuZnVuY3Rpb24gaXNWYWxpZE1haW5Gb3JtYXQocGF0aDogc3RyaW5nIHwgbnVsbCk6IGJvb2xlYW4ge1xuICBjb25zdCBzdXBwb3J0ZWRFeHRlbnNpb25zID0gbmV3IFNldChbJ2pzJywgJ2h0bWwnLCAneG1sJ10pXG4gIGNvbnN0IG1haW5FeHQgPSBwYXRoID8gcGF0aC5zcGxpdCgnLicpLnBvcCgpIDogbnVsbFxuICByZXR1cm4gcGF0aCA9PT0gbnVsbCB8fCAhIShtYWluRXh0ICYmIHN1cHBvcnRlZEV4dGVuc2lvbnMuaGFzKG1haW5FeHQpKVxufVxuXG4vKipcbiAqIENvbXBvc2VzIHRoZSBwYXRoIHRvIHRoZSBgc2NlbmUuanNvbmAgZmlsZSBiYXNlZCBvbiB0aGUgcHJvdmlkZWQgcGF0aC5cbiAqIEBwYXJhbSBkaXIgVGhlIHBhdGggdG8gdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSBzY2VuZSBmaWxlLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0U2NlbmVGaWxlUGF0aChkaXI6IHN0cmluZyk6IHN0cmluZyB7XG4gIHJldHVybiByZXNvbHZlKGRpciwgU0NFTkVfRklMRSlcbn1cblxuLyoqXG4gKiBSZXR1cm5zIGFuIG9iamVjdCBjb250YWluaW5nIHRoZSBjb250ZW50cyBvZiB0aGUgYHNjZW5lLmpzb25gIGZpbGUuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBnZXRTY2VuZUZpbGUoY29tcG9uZW50czogeyBmczogSUZpbGVTeXN0ZW1Db21wb25lbnQgfSwgZGlyOiBzdHJpbmcpOiBQcm9taXNlPFNjZW5lPiB7XG4gIHRyeSB7XG4gICAgY29uc3Qgc2NlbmVGaWxlID0gSlNPTi5wYXJzZShhd2FpdCBjb21wb25lbnRzLmZzLnJlYWRGaWxlKGdldFNjZW5lRmlsZVBhdGgoZGlyKSwgJ3V0Zi04JykpXG4gICAgcmV0dXJuIHNjZW5lRmlsZSBhcyBhbnkgYXMgU2NlbmVcbiAgfSBjYXRjaCAoZSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgVW5hYmxlIHRvIHJlYWQgJ3NjZW5lLmpzb24nIGZpbGUuIFRyeSBpbml0aWFsaXppbmcgdGhlIHByb2plY3QgdXNpbmcgJ2RjbCBpbml0Jy5cbiAgICAgICAgXFx0ID4gRm9sZGVyOiAke2Rpcn1cbiAgICAgICAgYClcbiAgfVxufVxuXG4vKipcbiAqIEZhaWxzIHRoZSBleGVjdXRpb24gaWYgb25lIG9mIHRoZSBwYXJjZWwgZGF0YSBpcyBpbnZhbGlkXG4gKiBAcGFyYW0gc2NlbmVGaWxlIFRoZSBKU09OIHBhcnNlZCBmaWxlIG9mIHNjZW5lLmpzb25cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZhbGlkYXRlU2NlbmVEYXRhKHNjZW5lRmlsZTogU2NlbmUpOiB2b2lkIHtcbiAgY29uc3QgeyBiYXNlLCBwYXJjZWxzIH0gPSBzY2VuZUZpbGUuc2NlbmVcbiAgY29uc3QgcGFyY2VsU2V0ID0gbmV3IFNldChwYXJjZWxzKVxuXG4gIGlmICghYmFzZSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcignTWlzc2luZyBzY2VuZSBiYXNlIGF0dHJpYnV0ZSBhdCBzY2VuZS5qc29uJylcbiAgfVxuXG4gIGlmICghcGFyY2Vscykge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcignTWlzc2luZyBzY2VuZSBwYXJjZWxzIGF0dHJpYnV0ZSBhdCBzY2VuZS5qc29uJylcbiAgfVxuXG4gIGlmIChwYXJjZWxTZXQuc2l6ZSA8IHBhcmNlbHMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKGBUaGVyZSBhcmUgZHVwbGljYXRlZCBwYXJjZWxzIGF0IHNjZW5lLmpzb24uYClcbiAgfVxuXG4gIGlmICghcGFyY2VsU2V0LmhhcyhiYXNlKSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgWW91ciBiYXNlIHBhcmNlbCAke2Jhc2V9IHNob3VsZCBiZSBpbmNsdWRlZCBvbiBwYXJjZWxzIGF0dHJpYnV0ZSBhdCBzY2VuZS5qc29uYClcbiAgfVxuXG4gIGNvbnN0IG9ialBhcmNlbHMgPSBwYXJjZWxzLm1hcChnZXRPYmplY3QpXG4gIG9ialBhcmNlbHMuZm9yRWFjaCgoeyB4LCB5IH0pID0+IHtcbiAgICBpZiAoaW5Cb3VuZHMoeCwgeSkpIHtcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICBjb25zdCB7IG1pblgsIG1heFggfSA9IGdldEJvdW5kcygpXG4gICAgdGhyb3cgbmV3IENsaUVycm9yKGBDb29yZGluYXRlcyAke3h9LCR7eX0gYXJlIG91dHNpZGUgb2YgYWxsb3dlZCBsaW1pdHMgKGZyb20gJHttaW5YfSB0byAke21heFh9KWApXG4gIH0pXG5cbiAgaWYgKCFhcmVDb25uZWN0ZWQob2JqUGFyY2VscykpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoJ1BhcmNlbHMgZGVzY3JpYmVkIG9uIHNjZW5lLmpzb24gYXJlIG5vdCBjb25uZWN0ZWQuIFRoZXkgc2hvdWxkIGJlIG9uZSBuZXh0IHRvIGVhY2ggb3RoZXInKVxuICB9XG59XG5cbi8qKlxuICogRmFpbHMgdGhlIGV4ZWN1dGlvbiBpZiBvbmUgb2YgdGhlIHBhcmNlbCBkYXRhIGlzIGludmFsaWRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHZhbGlkYXRlU2NlbmVPcHRpb25zKGNvbXBvbmVudHM6IHsgZnM6IElGaWxlU3lzdGVtQ29tcG9uZW50IH0sIGRpcjogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGNvbnN0IHNjZW5lRmlsZSA9IGF3YWl0IGdldFNjZW5lRmlsZShjb21wb25lbnRzLCBkaXIpXG4gIHJldHVybiB2YWxpZGF0ZVNjZW5lRGF0YShzY2VuZUZpbGUpXG59XG5cbi8qKlxuICogVmFsaWRhdGVzIGFsbCB0aGUgY29uZGl0aW9ucyByZXF1aXJlZCB0byBvcGVyYXRlIG92ZXIgYW4gZXhpc3RpbmcgcHJvamVjdC5cbiAqIFRocm93cyBpZiBhIHByb2plY3QgY29udGFpbnMgYW4gaW52YWxpZCBtYWluIHBhdGggb3IgaWYgdGhlIGBzY2VuZS5qc29uYCBmaWxlIGlzIG1pc3NpbmcuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB2YWxpZGF0ZUV4aXN0aW5nUHJvamVjdChjb21wb25lbnRzOiB7IGZzOiBJRmlsZVN5c3RlbUNvbXBvbmVudCB9LCBkaXI6IHN0cmluZykge1xuICBjb25zdCBzY2VuZUZpbGUgPSBhd2FpdCBnZXRTY2VuZUZpbGUoY29tcG9uZW50cywgZGlyKVxuXG4gIGlmICghaXNXZWJTb2NrZXQoc2NlbmVGaWxlLm1haW4pKSB7XG4gICAgaWYgKCFpc1ZhbGlkTWFpbkZvcm1hdChzY2VuZUZpbGUubWFpbikpIHtcbiAgICAgIHRocm93IG5ldyBDbGlFcnJvcihgTWFpbiBzY2VuZSBmb3JtYXQgZmlsZSAoJHtzY2VuZUZpbGUubWFpbn0pIGlzIG5vdCBhIHN1cHBvcnRlZCBmb3JtYXRgKVxuICAgIH1cblxuICAgIGlmIChzY2VuZUZpbGUubWFpbiAhPT0gbnVsbCAmJiAhKGF3YWl0IGNvbXBvbmVudHMuZnMuZmlsZUV4aXN0cyhyZXNvbHZlKGRpciwgc2NlbmVGaWxlLm1haW4pKSkpIHtcbiAgICAgIHRocm93IG5ldyBDbGlFcnJvcihgTWFpbiBzY2VuZSBmaWxlICR7c2NlbmVGaWxlLm1haW59IGlzIG1pc3NpbmcgaW4gZm9sZGVyICR7ZGlyfWApXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,112 +0,0 @@
1
- import { resolve } from 'path'
2
- import { Scene } from '@dcl/schemas'
3
-
4
- import { CliError } from '../../utils/error'
5
- import { getObject, inBounds, getBounds, areConnected } from './coordinates'
6
- import { IFileSystemComponent } from '../../components/fs'
7
-
8
- export const SCENE_FILE = 'scene.json'
9
-
10
- /**
11
- * Returns true if the given URL is a valid websocket URL.
12
- * @param url The given URL.
13
- */
14
- function isWebSocket(url: string): boolean {
15
- return /wss?\:\/\//gi.test(url)
16
- }
17
-
18
- /**
19
- * Returns `true` if the provided path contains a valid main file format.
20
- * @param path The path to the main file.
21
- */
22
- function isValidMainFormat(path: string | null): boolean {
23
- const supportedExtensions = new Set(['js', 'html', 'xml'])
24
- const mainExt = path ? path.split('.').pop() : null
25
- return path === null || !!(mainExt && supportedExtensions.has(mainExt))
26
- }
27
-
28
- /**
29
- * Composes the path to the `scene.json` file based on the provided path.
30
- * @param dir The path to the directory containing the scene file.
31
- */
32
- export function getSceneFilePath(dir: string): string {
33
- return resolve(dir, SCENE_FILE)
34
- }
35
-
36
- /**
37
- * Returns an object containing the contents of the `scene.json` file.
38
- */
39
- export async function getSceneFile(components: { fs: IFileSystemComponent }, dir: string): Promise<Scene> {
40
- try {
41
- const sceneFile = JSON.parse(await components.fs.readFile(getSceneFilePath(dir), 'utf-8'))
42
- return sceneFile as any as Scene
43
- } catch (e) {
44
- throw new CliError(`Unable to read 'scene.json' file. Try initializing the project using 'dcl init'.
45
- \t > Folder: ${dir}
46
- `)
47
- }
48
- }
49
-
50
- /**
51
- * Fails the execution if one of the parcel data is invalid
52
- * @param sceneFile The JSON parsed file of scene.json
53
- */
54
- export function validateSceneData(sceneFile: Scene): void {
55
- const { base, parcels } = sceneFile.scene
56
- const parcelSet = new Set(parcels)
57
-
58
- if (!base) {
59
- throw new CliError('Missing scene base attribute at scene.json')
60
- }
61
-
62
- if (!parcels) {
63
- throw new CliError('Missing scene parcels attribute at scene.json')
64
- }
65
-
66
- if (parcelSet.size < parcels.length) {
67
- throw new CliError(`There are duplicated parcels at scene.json.`)
68
- }
69
-
70
- if (!parcelSet.has(base)) {
71
- throw new CliError(`Your base parcel ${base} should be included on parcels attribute at scene.json`)
72
- }
73
-
74
- const objParcels = parcels.map(getObject)
75
- objParcels.forEach(({ x, y }) => {
76
- if (inBounds(x, y)) {
77
- return
78
- }
79
- const { minX, maxX } = getBounds()
80
- throw new CliError(`Coordinates ${x},${y} are outside of allowed limits (from ${minX} to ${maxX})`)
81
- })
82
-
83
- if (!areConnected(objParcels)) {
84
- throw new CliError('Parcels described on scene.json are not connected. They should be one next to each other')
85
- }
86
- }
87
-
88
- /**
89
- * Fails the execution if one of the parcel data is invalid
90
- */
91
- export async function validateSceneOptions(components: { fs: IFileSystemComponent }, dir: string): Promise<void> {
92
- const sceneFile = await getSceneFile(components, dir)
93
- return validateSceneData(sceneFile)
94
- }
95
-
96
- /**
97
- * Validates all the conditions required to operate over an existing project.
98
- * Throws if a project contains an invalid main path or if the `scene.json` file is missing.
99
- */
100
- export async function validateExistingProject(components: { fs: IFileSystemComponent }, dir: string) {
101
- const sceneFile = await getSceneFile(components, dir)
102
-
103
- if (!isWebSocket(sceneFile.main)) {
104
- if (!isValidMainFormat(sceneFile.main)) {
105
- throw new CliError(`Main scene format file (${sceneFile.main}) is not a supported format`)
106
- }
107
-
108
- if (sceneFile.main !== null && !(await components.fs.fileExists(resolve(dir, sceneFile.main)))) {
109
- throw new CliError(`Main scene file ${sceneFile.main} is missing in folder ${dir}`)
110
- }
111
- }
112
- }
@@ -1,18 +0,0 @@
1
- import { ILoggerComponent, IMetricsComponent, IHttpServerComponent, IConfigComponent } from '@well-known-components/interfaces';
2
- import { HTTPProvider } from 'eth-connect';
3
- import { RoomComponent } from '@dcl/mini-comms/dist/adapters/rooms';
4
- import { WebSocketComponent } from './ws';
5
- import { CliComponents } from '../../components';
6
- export type PreviewComponents = CliComponents & {
7
- logs: ILoggerComponent;
8
- server: IHttpServerComponent<PreviewComponents>;
9
- config: IConfigComponent;
10
- metrics: IMetricsComponent<any>;
11
- ethereumProvider: HTTPProvider;
12
- rooms: RoomComponent;
13
- ws: WebSocketComponent;
14
- signaler: ISignalerComponent;
15
- };
16
- export type ISignalerComponent = {
17
- programClosed: Promise<void>;
18
- };
@@ -1,3 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJ0eXBlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgSUxvZ2dlckNvbXBvbmVudCxcbiAgSU1ldHJpY3NDb21wb25lbnQsXG4gIElIdHRwU2VydmVyQ29tcG9uZW50LFxuICBJQ29uZmlnQ29tcG9uZW50XG59IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvaW50ZXJmYWNlcydcbmltcG9ydCB7IEhUVFBQcm92aWRlciB9IGZyb20gJ2V0aC1jb25uZWN0J1xuaW1wb3J0IHsgUm9vbUNvbXBvbmVudCB9IGZyb20gJ0BkY2wvbWluaS1jb21tcy9kaXN0L2FkYXB0ZXJzL3Jvb21zJ1xuaW1wb3J0IHsgV2ViU29ja2V0Q29tcG9uZW50IH0gZnJvbSAnLi93cydcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuXG5leHBvcnQgdHlwZSBQcmV2aWV3Q29tcG9uZW50cyA9IENsaUNvbXBvbmVudHMgJiB7XG4gIGxvZ3M6IElMb2dnZXJDb21wb25lbnRcbiAgc2VydmVyOiBJSHR0cFNlcnZlckNvbXBvbmVudDxQcmV2aWV3Q29tcG9uZW50cz5cbiAgY29uZmlnOiBJQ29uZmlnQ29tcG9uZW50XG4gIG1ldHJpY3M6IElNZXRyaWNzQ29tcG9uZW50PGFueT5cbiAgZXRoZXJldW1Qcm92aWRlcjogSFRUUFByb3ZpZGVyXG4gIHJvb21zOiBSb29tQ29tcG9uZW50XG4gIHdzOiBXZWJTb2NrZXRDb21wb25lbnRcbiAgc2lnbmFsZXI6IElTaWduYWxlckNvbXBvbmVudFxufVxuXG5leHBvcnQgdHlwZSBJU2lnbmFsZXJDb21wb25lbnQgPSB7XG4gIC8vIHByb2dyYW1DbG9zZWQgcmVzb2x2ZXMgd2hlbiB0aGUgY29tcG9uZW50IGlzIHN0b3BwZWRcbiAgcHJvZ3JhbUNsb3NlZDogUHJvbWlzZTx2b2lkPlxufVxuIl19
@@ -1,26 +0,0 @@
1
- import {
2
- ILoggerComponent,
3
- IMetricsComponent,
4
- IHttpServerComponent,
5
- IConfigComponent
6
- } from '@well-known-components/interfaces'
7
- import { HTTPProvider } from 'eth-connect'
8
- import { RoomComponent } from '@dcl/mini-comms/dist/adapters/rooms'
9
- import { WebSocketComponent } from './ws'
10
- import { CliComponents } from '../../components'
11
-
12
- export type PreviewComponents = CliComponents & {
13
- logs: ILoggerComponent
14
- server: IHttpServerComponent<PreviewComponents>
15
- config: IConfigComponent
16
- metrics: IMetricsComponent<any>
17
- ethereumProvider: HTTPProvider
18
- rooms: RoomComponent
19
- ws: WebSocketComponent
20
- signaler: ISignalerComponent
21
- }
22
-
23
- export type ISignalerComponent = {
24
- // programClosed resolves when the component is stopped
25
- programClosed: Promise<void>
26
- }
@@ -1,2 +0,0 @@
1
- import { PreviewComponents } from './types';
2
- export declare function wire(components: PreviewComponents, dir: string, watch?: boolean): Promise<void>;
@@ -1,66 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.wire = void 0;
7
- const path_1 = __importDefault(require("path"));
8
- const chokidar_1 = __importDefault(require("chokidar"));
9
- const schemas_1 = require("@dcl/schemas");
10
- const ws_1 = require("ws");
11
- const bff_1 = require("./bff");
12
- const http_server_1 = require("@well-known-components/http-server");
13
- const endpoints_1 = require("./endpoints");
14
- const ws_2 = require("@well-known-components/http-server/dist/ws");
15
- const dcl_ignore_1 = require("../../utils/dcl-ignore");
16
- async function wire(components, dir, watch = false) {
17
- const router = new http_server_1.Router();
18
- const sceneUpdateClients = new Set();
19
- router.get('/', async (ctx, next) => {
20
- if (ctx.request.headers.get('upgrade') === 'websocket') {
21
- return (0, ws_2.upgradeWebSocketResponse)((ws) => initWsConnection(ws, sceneUpdateClients));
22
- }
23
- return next();
24
- });
25
- (0, bff_1.setupBffAndComms)(components, router);
26
- (0, endpoints_1.setupEcs6Endpoints)(components, dir, router);
27
- components.server.setContext(components);
28
- components.server.use(router.allowedMethods());
29
- components.server.use(router.middleware());
30
- if (watch) {
31
- const { clients } = components.ws.ws;
32
- const ignored = await (0, dcl_ignore_1.getDCLIgnorePatterns)(components, dir);
33
- chokidar_1.default
34
- .watch(path_1.default.resolve(dir), {
35
- ignored,
36
- ignoreInitial: false,
37
- cwd: dir
38
- })
39
- .on('all', async (_, _file) => {
40
- return updateScene(dir, clients);
41
- });
42
- }
43
- }
44
- exports.wire = wire;
45
- const initWsConnection = (ws, clients) => {
46
- if (ws.readyState === ws.OPEN) {
47
- clients.add(ws);
48
- }
49
- else {
50
- ws.on('open', () => clients.add(ws));
51
- }
52
- ws.on('close', () => clients.delete(ws));
53
- };
54
- const updateScene = (dir, clients) => {
55
- for (const client of clients) {
56
- if (client.readyState === ws_1.WebSocket.OPEN) {
57
- const message = {
58
- type: schemas_1.sdk.SCENE_UPDATE,
59
- payload: { sceneId: 'b64-' + Buffer.from(dir).toString('base64'), sceneType: schemas_1.sdk.ProjectType.SCENE }
60
- };
61
- client.send(schemas_1.sdk.UPDATE);
62
- client.send(JSON.stringify(message));
63
- }
64
- }
65
- };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2lyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIndpcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsZ0RBQXVCO0FBQ3ZCLHdEQUErQjtBQUMvQiwwQ0FBa0M7QUFDbEMsMkJBQThCO0FBQzlCLCtCQUF3QztBQUN4QyxvRUFBMkQ7QUFDM0QsMkNBQWdEO0FBRWhELG1FQUFxRjtBQUNyRix1REFBNkQ7QUFFdEQsS0FBSyxVQUFVLElBQUksQ0FBQyxVQUE2QixFQUFFLEdBQVcsRUFBRSxRQUFpQixLQUFLO0lBQzNGLE1BQU0sTUFBTSxHQUFHLElBQUksb0JBQU0sRUFBcUIsQ0FBQTtJQUU5QyxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUFhLENBQUE7SUFFL0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsRUFBRTtRQUNsQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxXQUFXLEVBQUU7WUFDdEQsT0FBTyxJQUFBLDZCQUF3QixFQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFzQixFQUFFLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtTQUN0RztRQUVELE9BQU8sSUFBSSxFQUFFLENBQUE7SUFDZixDQUFDLENBQUMsQ0FBQTtJQUVGLElBQUEsc0JBQWdCLEVBQUMsVUFBVSxFQUFFLE1BQU0sQ0FBQyxDQUFBO0lBQ3BDLElBQUEsOEJBQWtCLEVBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUUzQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUN4QyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsY0FBYyxFQUFFLENBQUMsQ0FBQTtJQUM5QyxVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUUxQyxJQUFJLEtBQUssRUFBRTtRQUNULE1BQU0sRUFBRSxPQUFPLEVBQUUsR0FBRyxVQUFVLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtRQUNwQyxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEsaUNBQW9CLEVBQUMsVUFBVSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRTNELGtCQUFRO2FBQ0wsS0FBSyxDQUFDLGNBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDeEIsT0FBTztZQUNQLGFBQWEsRUFBRSxLQUFLO1lBQ3BCLEdBQUcsRUFBRSxHQUFHO1NBQ1QsQ0FBQzthQUNELEVBQUUsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRTtZQUU1QixPQUFPLFdBQVcsQ0FBQyxHQUFHLEVBQUUsT0FBTyxDQUFDLENBQUE7UUFDbEMsQ0FBQyxDQUFDLENBQUE7S0FDTDtBQUNILENBQUM7QUFuQ0Qsb0JBbUNDO0FBRUQsTUFBTSxnQkFBZ0IsR0FBRyxDQUFDLEVBQWEsRUFBRSxPQUF1QixFQUFFLEVBQUU7SUFDbEUsSUFBSSxFQUFFLENBQUMsVUFBVSxLQUFLLEVBQUUsQ0FBQyxJQUFJLEVBQUU7UUFDN0IsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUNoQjtTQUFNO1FBQ0wsRUFBRSxDQUFDLEVBQUUsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0tBQ3JDO0lBQ0QsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxFQUFFLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0FBQzFDLENBQUMsQ0FBQTtBQUVELE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBVyxFQUFFLE9BQXVCLEVBQVEsRUFBRTtJQUNqRSxLQUFLLE1BQU0sTUFBTSxJQUFJLE9BQU8sRUFBRTtRQUM1QixJQUFJLE1BQU0sQ0FBQyxVQUFVLEtBQUssY0FBUyxDQUFDLElBQUksRUFBRTtZQUN4QyxNQUFNLE9BQU8sR0FBb0I7Z0JBQy9CLElBQUksRUFBRSxhQUFHLENBQUMsWUFBWTtnQkFDdEIsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsYUFBRyxDQUFDLFdBQVcsQ0FBQyxLQUFLLEVBQUU7YUFDckcsQ0FBQTtZQUVELE1BQU0sQ0FBQyxJQUFJLENBQUMsYUFBRyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ3ZCLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFBO1NBQ3JDO0tBQ0Y7QUFDSCxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgcGF0aCBmcm9tICdwYXRoJ1xuaW1wb3J0IGNob2tpZGFyIGZyb20gJ2Nob2tpZGFyJ1xuaW1wb3J0IHsgc2RrIH0gZnJvbSAnQGRjbC9zY2hlbWFzJ1xuaW1wb3J0IHsgV2ViU29ja2V0IH0gZnJvbSAnd3MnXG5pbXBvcnQgeyBzZXR1cEJmZkFuZENvbW1zIH0gZnJvbSAnLi9iZmYnXG5pbXBvcnQgeyBSb3V0ZXIgfSBmcm9tICdAd2VsbC1rbm93bi1jb21wb25lbnRzL2h0dHAtc2VydmVyJ1xuaW1wb3J0IHsgc2V0dXBFY3M2RW5kcG9pbnRzIH0gZnJvbSAnLi9lbmRwb2ludHMnXG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyB1cGdyYWRlV2ViU29ja2V0UmVzcG9uc2UgfSBmcm9tICdAd2VsbC1rbm93bi1jb21wb25lbnRzL2h0dHAtc2VydmVyL2Rpc3Qvd3MnXG5pbXBvcnQgeyBnZXREQ0xJZ25vcmVQYXR0ZXJucyB9IGZyb20gJy4uLy4uL3V0aWxzL2RjbC1pZ25vcmUnXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB3aXJlKGNvbXBvbmVudHM6IFByZXZpZXdDb21wb25lbnRzLCBkaXI6IHN0cmluZywgd2F0Y2g6IGJvb2xlYW4gPSBmYWxzZSkge1xuICBjb25zdCByb3V0ZXIgPSBuZXcgUm91dGVyPFByZXZpZXdDb21wb25lbnRzPigpXG5cbiAgY29uc3Qgc2NlbmVVcGRhdGVDbGllbnRzID0gbmV3IFNldDxXZWJTb2NrZXQ+KClcblxuICByb3V0ZXIuZ2V0KCcvJywgYXN5bmMgKGN0eCwgbmV4dCkgPT4ge1xuICAgIGlmIChjdHgucmVxdWVzdC5oZWFkZXJzLmdldCgndXBncmFkZScpID09PSAnd2Vic29ja2V0Jykge1xuICAgICAgcmV0dXJuIHVwZ3JhZGVXZWJTb2NrZXRSZXNwb25zZSgod3MpID0+IGluaXRXc0Nvbm5lY3Rpb24od3MgYXMgYW55IGFzIFdlYlNvY2tldCwgc2NlbmVVcGRhdGVDbGllbnRzKSlcbiAgICB9XG5cbiAgICByZXR1cm4gbmV4dCgpXG4gIH0pXG5cbiAgc2V0dXBCZmZBbmRDb21tcyhjb21wb25lbnRzLCByb3V0ZXIpXG4gIHNldHVwRWNzNkVuZHBvaW50cyhjb21wb25lbnRzLCBkaXIsIHJvdXRlcilcblxuICBjb21wb25lbnRzLnNlcnZlci5zZXRDb250ZXh0KGNvbXBvbmVudHMpXG4gIGNvbXBvbmVudHMuc2VydmVyLnVzZShyb3V0ZXIuYWxsb3dlZE1ldGhvZHMoKSlcbiAgY29tcG9uZW50cy5zZXJ2ZXIudXNlKHJvdXRlci5taWRkbGV3YXJlKCkpXG5cbiAgaWYgKHdhdGNoKSB7XG4gICAgY29uc3QgeyBjbGllbnRzIH0gPSBjb21wb25lbnRzLndzLndzXG4gICAgY29uc3QgaWdub3JlZCA9IGF3YWl0IGdldERDTElnbm9yZVBhdHRlcm5zKGNvbXBvbmVudHMsIGRpcilcblxuICAgIGNob2tpZGFyXG4gICAgICAud2F0Y2gocGF0aC5yZXNvbHZlKGRpciksIHtcbiAgICAgICAgaWdub3JlZCxcbiAgICAgICAgaWdub3JlSW5pdGlhbDogZmFsc2UsXG4gICAgICAgIGN3ZDogZGlyXG4gICAgICB9KVxuICAgICAgLm9uKCdhbGwnLCBhc3luYyAoXywgX2ZpbGUpID0+IHtcbiAgICAgICAgLy8gVE9ETzogYWNjdW11bGF0ZSBjaGFuZ2VzIGluIGFuIGFycmF5IGFuZCBkZWJvdW5jZVxuICAgICAgICByZXR1cm4gdXBkYXRlU2NlbmUoZGlyLCBjbGllbnRzKVxuICAgICAgfSlcbiAgfVxufVxuXG5jb25zdCBpbml0V3NDb25uZWN0aW9uID0gKHdzOiBXZWJTb2NrZXQsIGNsaWVudHM6IFNldDxXZWJTb2NrZXQ+KSA9PiB7XG4gIGlmICh3cy5yZWFkeVN0YXRlID09PSB3cy5PUEVOKSB7XG4gICAgY2xpZW50cy5hZGQod3MpXG4gIH0gZWxzZSB7XG4gICAgd3Mub24oJ29wZW4nLCAoKSA9PiBjbGllbnRzLmFkZCh3cykpXG4gIH1cbiAgd3Mub24oJ2Nsb3NlJywgKCkgPT4gY2xpZW50cy5kZWxldGUod3MpKVxufVxuXG5jb25zdCB1cGRhdGVTY2VuZSA9IChkaXI6IHN0cmluZywgY2xpZW50czogU2V0PFdlYlNvY2tldD4pOiB2b2lkID0+IHtcbiAgZm9yIChjb25zdCBjbGllbnQgb2YgY2xpZW50cykge1xuICAgIGlmIChjbGllbnQucmVhZHlTdGF0ZSA9PT0gV2ViU29ja2V0Lk9QRU4pIHtcbiAgICAgIGNvbnN0IG1lc3NhZ2U6IHNkay5TY2VuZVVwZGF0ZSA9IHtcbiAgICAgICAgdHlwZTogc2RrLlNDRU5FX1VQREFURSxcbiAgICAgICAgcGF5bG9hZDogeyBzY2VuZUlkOiAnYjY0LScgKyBCdWZmZXIuZnJvbShkaXIpLnRvU3RyaW5nKCdiYXNlNjQnKSwgc2NlbmVUeXBlOiBzZGsuUHJvamVjdFR5cGUuU0NFTkUgfVxuICAgICAgfVxuXG4gICAgICBjbGllbnQuc2VuZChzZGsuVVBEQVRFKVxuICAgICAgY2xpZW50LnNlbmQoSlNPTi5zdHJpbmdpZnkobWVzc2FnZSkpXG4gICAgfVxuICB9XG59XG4iXX0=