@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,29 @@
1
+ import { CliComponents } from '../../components';
2
+ interface Options {
3
+ args: typeof args;
4
+ components: Pick<CliComponents, 'fetch' | 'fs'>;
5
+ }
6
+ export declare const args: import("arg").Result<{
7
+ '--help': BooleanConstructor;
8
+ '-h': string;
9
+ } & {
10
+ '--dir': StringConstructor;
11
+ '--help': BooleanConstructor;
12
+ '--port': StringConstructor;
13
+ '--no-debug': BooleanConstructor;
14
+ '--no-browser': BooleanConstructor;
15
+ '--no-watch': BooleanConstructor;
16
+ '--ci': BooleanConstructor;
17
+ '--skip-install': BooleanConstructor;
18
+ '--web3': BooleanConstructor;
19
+ '-h': string;
20
+ '-p': string;
21
+ '-d': string;
22
+ '-b': string;
23
+ '-w': string;
24
+ '--skip-build': BooleanConstructor;
25
+ '--desktop-client': BooleanConstructor;
26
+ }>;
27
+ export declare function help(): string;
28
+ export declare const main: (args: Options) => Promise<void>;
29
+ export {};
@@ -0,0 +1,121 @@
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.main = exports.help = exports.args = void 0;
7
+ const os_1 = __importDefault(require("os"));
8
+ const path_1 = require("path");
9
+ const open_1 = __importDefault(require("open"));
10
+ const build_1 = require("../build");
11
+ const preview_1 = require("../preview");
12
+ const port_1 = require("../preview/port");
13
+ const args_1 = require("../../utils/args");
14
+ const handler_1 = require("../../utils/handler");
15
+ exports.args = (0, args_1.getArgs)({
16
+ '--dir': String,
17
+ '--help': Boolean,
18
+ '--port': String,
19
+ '--no-debug': Boolean,
20
+ '--no-browser': Boolean,
21
+ '--no-watch': Boolean,
22
+ '--ci': Boolean,
23
+ '--skip-install': Boolean,
24
+ '--web3': Boolean,
25
+ '-h': '--help',
26
+ '-p': '--port',
27
+ '-d': '--no-debug',
28
+ '-b': '--no-browser',
29
+ '-w': '--no-watch',
30
+ '--skip-build': Boolean,
31
+ '--desktop-client': Boolean
32
+ });
33
+ function help() {
34
+ return `
35
+ Usage: dcl start [options]
36
+
37
+ Options:
38
+
39
+ -h, --help Displays complete help
40
+ -p, --port [port] Select a custom port for the development server
41
+ -d, --no-debug Disable debugging panel
42
+ -b, --no-browser Do not open a new browser window
43
+ -w, --no-watch Do not open watch for filesystem changes
44
+ -c, --ci Run the parcel previewer on a remote unix server
45
+ --web3 Connects preview to browser wallet to use the associated avatar and account
46
+ --skip-build Skip build and only serve the files in preview mode
47
+ --desktop-client Show URL to launch preview in the desktop client (BETA)
48
+
49
+ Examples:
50
+
51
+ - Start a local development server for a Decentraland Scene at port 3500
52
+
53
+ $ dcl start -p 3500
54
+
55
+ - Start a local development server for a Decentraland Scene at a docker container
56
+
57
+ $ dcl start --ci
58
+ `;
59
+ }
60
+ exports.help = help;
61
+ exports.main = (0, handler_1.main)(async function main(options) {
62
+ const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
63
+ const isCi = exports.args['--ci'] || process.env.CI || false;
64
+ const debug = !exports.args['--no-debug'] && !isCi;
65
+ const openBrowser = !exports.args['--no-browser'] && !isCi;
66
+ const skipBuild = exports.args['--skip-build'];
67
+ const watch = !exports.args['--no-watch'] && !isCi && !skipBuild;
68
+ const enableWeb3 = exports.args['--web3'];
69
+ const port = parseInt(exports.args['--port'], 10) || (await (0, port_1.previewPort)());
70
+ const baseCoords = { x: 0, y: 0 };
71
+ const hasPortableExperience = false;
72
+ const comps = { components: options.components };
73
+ if (!skipBuild) {
74
+ await (0, build_1.main)(Object.assign({ args: { '--dir': dir, '--watch': watch } }, comps));
75
+ }
76
+ await (0, preview_1.main)(Object.assign({ args: { '--dir': dir, '--port': port } }, comps));
77
+ const ifaces = os_1.default.networkInterfaces();
78
+ const availableURLs = [];
79
+ console.log(`\nPreview server is now running!`);
80
+ console.log('Available on:\n');
81
+ Object.keys(ifaces).forEach((dev) => {
82
+ ;
83
+ (ifaces[dev] || []).forEach((details) => {
84
+ if (details.family === 'IPv4') {
85
+ let addr = `http://${details.address}:${port}?position=${baseCoords.x}%2C${baseCoords.y}&ENABLE_ECS7`;
86
+ if (debug) {
87
+ addr = `${addr}&SCENE_DEBUG_PANEL`;
88
+ }
89
+ if (enableWeb3 || hasPortableExperience) {
90
+ addr = `${addr}&ENABLE_WEB3`;
91
+ }
92
+ availableURLs.push(addr);
93
+ }
94
+ });
95
+ });
96
+ const sortedURLs = availableURLs.sort((a, _b) => {
97
+ return a.toLowerCase().includes('localhost') || a.includes('127.0.0.1') || a.includes('0.0.0.0') ? -1 : 1;
98
+ });
99
+ for (const addr of sortedURLs) {
100
+ console.log(` ${addr}`);
101
+ }
102
+ if (exports.args['--desktop-client']) {
103
+ console.log('\n Desktop client:\n');
104
+ for (const addr of sortedURLs) {
105
+ const searchParams = new URLSearchParams();
106
+ searchParams.append('PREVIEW-MODE', addr);
107
+ console.log(` dcl://${searchParams.toString()}&`);
108
+ }
109
+ }
110
+ console.log('\n Details:\n');
111
+ console.log('\nPress CTRL+C to exit\n');
112
+ if (openBrowser && sortedURLs.length && !exports.args['--desktop-client']) {
113
+ try {
114
+ await (0, open_1.default)(sortedURLs[0]);
115
+ }
116
+ catch (_) {
117
+ console.log('Unable to open browser automatically.');
118
+ }
119
+ }
120
+ });
121
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBbUI7QUFDbkIsK0JBQThCO0FBQzlCLGdEQUF1QjtBQUd2QixvQ0FBd0M7QUFDeEMsd0NBQTRDO0FBQzVDLDBDQUE2QztBQUM3QywyQ0FBMEM7QUFDMUMsaURBQXFEO0FBTXhDLFFBQUEsSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDO0lBQzFCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLE1BQU07SUFDaEIsWUFBWSxFQUFFLE9BQU87SUFDckIsY0FBYyxFQUFFLE9BQU87SUFDdkIsWUFBWSxFQUFFLE9BQU87SUFDckIsTUFBTSxFQUFFLE9BQU87SUFDZixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLFFBQVE7SUFDZCxJQUFJLEVBQUUsWUFBWTtJQUNsQixJQUFJLEVBQUUsY0FBYztJQUNwQixJQUFJLEVBQUUsWUFBWTtJQUNsQixjQUFjLEVBQUUsT0FBTztJQUN2QixrQkFBa0IsRUFBRSxPQUFPO0NBQzVCLENBQUMsQ0FBQTtBQUVGLFNBQWdCLElBQUk7SUFDbEIsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBd0JSLENBQUE7QUFDRCxDQUFDO0FBMUJELG9CQTBCQztBQUVZLFFBQUEsSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsT0FBZ0I7SUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFPLEVBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7SUFDaEUsTUFBTSxJQUFJLEdBQUcsWUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLEtBQUssQ0FBQTtJQUNwRCxNQUFNLEtBQUssR0FBRyxDQUFDLFlBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUMxQyxNQUFNLFdBQVcsR0FBRyxDQUFDLFlBQUksQ0FBQyxjQUFjLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQTtJQUNsRCxNQUFNLFNBQVMsR0FBRyxZQUFJLENBQUMsY0FBYyxDQUFDLENBQUE7SUFDdEMsTUFBTSxLQUFLLEdBQUcsQ0FBQyxZQUFJLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUE7SUFDeEQsTUFBTSxVQUFVLEdBQUcsWUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2pDLE1BQU0sSUFBSSxHQUFHLFFBQVEsQ0FBQyxZQUFJLENBQUMsUUFBUSxDQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLElBQUEsa0JBQVcsR0FBRSxDQUFDLENBQUE7SUFDbkUsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQTtJQUNqQyxNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQTtJQUVuQyxNQUFNLEtBQUssR0FBRyxFQUFFLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUE7SUFDaEQsSUFBSSxDQUFDLFNBQVMsRUFBRTtRQUNkLE1BQU0sSUFBQSxZQUFLLGtCQUFHLElBQUksRUFBRSxFQUFFLE9BQU8sRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxJQUFLLEtBQUssRUFBRyxDQUFBO0tBQ3BFO0lBQ0QsTUFBTSxJQUFBLGNBQU8sa0JBQUcsSUFBSSxFQUFFLEVBQUUsT0FBTyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUssS0FBSyxFQUFHLENBQUE7SUFFbkUsTUFBTSxNQUFNLEdBQUcsWUFBRSxDQUFDLGlCQUFpQixFQUFFLENBQUE7SUFDckMsTUFBTSxhQUFhLEdBQWEsRUFBRSxDQUFBO0lBRWxDLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUMvQyxPQUFPLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLENBQUE7SUFFOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUNsQyxDQUFDO1FBQUEsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7WUFDdkMsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLE1BQU0sRUFBRTtnQkFDN0IsSUFBSSxJQUFJLEdBQUcsVUFBVSxPQUFPLENBQUMsT0FBTyxJQUFJLElBQUksYUFBYSxVQUFVLENBQUMsQ0FBQyxNQUFNLFVBQVUsQ0FBQyxDQUFDLGNBQWMsQ0FBQTtnQkFDckcsSUFBSSxLQUFLLEVBQUU7b0JBQ1QsSUFBSSxHQUFHLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQTtpQkFDbkM7Z0JBQ0QsSUFBSSxVQUFVLElBQUkscUJBQXFCLEVBQUU7b0JBQ3ZDLElBQUksR0FBRyxHQUFHLElBQUksY0FBYyxDQUFBO2lCQUM3QjtnQkFFRCxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO2FBQ3pCO1FBQ0gsQ0FBQyxDQUFDLENBQUE7SUFDSixDQUFDLENBQUMsQ0FBQTtJQUdGLE1BQU0sVUFBVSxHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUU7UUFDOUMsT0FBTyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMzRyxDQUFDLENBQUMsQ0FBQTtJQUVGLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0tBQzNCO0lBRUQsSUFBSSxZQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRTtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtZQUMxQyxZQUFZLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUNyRDtLQUNGO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUd2QyxJQUFJLFdBQVcsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDakUsSUFBSTtZQUNGLE1BQU0sSUFBQSxjQUFJLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDMUI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQTtTQUNyRDtLQUNGO0FBQ0gsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSAnb3MnXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCBvcGVuIGZyb20gJ29wZW4nXG5cbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgbWFpbiBhcyBidWlsZCB9IGZyb20gJy4uL2J1aWxkJ1xuaW1wb3J0IHsgbWFpbiBhcyBwcmV2aWV3IH0gZnJvbSAnLi4vcHJldmlldydcbmltcG9ydCB7IHByZXZpZXdQb3J0IH0gZnJvbSAnLi4vcHJldmlldy9wb3J0J1xuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4uLy4uL3V0aWxzL2FyZ3MnXG5pbXBvcnQgeyBtYWluIGFzIGhhbmRsZXIgfSBmcm9tICcuLi8uLi91dGlscy9oYW5kbGVyJ1xuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiB0eXBlb2YgYXJnc1xuICBjb21wb25lbnRzOiBQaWNrPENsaUNvbXBvbmVudHMsICdmZXRjaCcgfCAnZnMnPlxufVxuXG5leHBvcnQgY29uc3QgYXJncyA9IGdldEFyZ3Moe1xuICAnLS1kaXInOiBTdHJpbmcsXG4gICctLWhlbHAnOiBCb29sZWFuLFxuICAnLS1wb3J0JzogU3RyaW5nLFxuICAnLS1uby1kZWJ1Zyc6IEJvb2xlYW4sXG4gICctLW5vLWJyb3dzZXInOiBCb29sZWFuLFxuICAnLS1uby13YXRjaCc6IEJvb2xlYW4sXG4gICctLWNpJzogQm9vbGVhbixcbiAgJy0tc2tpcC1pbnN0YWxsJzogQm9vbGVhbixcbiAgJy0td2ViMyc6IEJvb2xlYW4sXG4gICctaCc6ICctLWhlbHAnLFxuICAnLXAnOiAnLS1wb3J0JyxcbiAgJy1kJzogJy0tbm8tZGVidWcnLFxuICAnLWInOiAnLS1uby1icm93c2VyJyxcbiAgJy13JzogJy0tbm8td2F0Y2gnLFxuICAnLS1za2lwLWJ1aWxkJzogQm9vbGVhbixcbiAgJy0tZGVza3RvcC1jbGllbnQnOiBCb29sZWFuXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gaGVscCgpIHtcbiAgcmV0dXJuIGBcbiAgVXNhZ2U6IGRjbCBzdGFydCBbb3B0aW9uc11cblxuICAgIE9wdGlvbnM6XG5cbiAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgRGlzcGxheXMgY29tcGxldGUgaGVscFxuICAgICAgLXAsIC0tcG9ydCAgICAgICAgW3BvcnRdICBTZWxlY3QgYSBjdXN0b20gcG9ydCBmb3IgdGhlIGRldmVsb3BtZW50IHNlcnZlclxuICAgICAgLWQsIC0tbm8tZGVidWcgICAgICAgICAgICBEaXNhYmxlIGRlYnVnZ2luZyBwYW5lbFxuICAgICAgLWIsIC0tbm8tYnJvd3NlciAgICAgICAgICBEbyBub3Qgb3BlbiBhIG5ldyBicm93c2VyIHdpbmRvd1xuICAgICAgLXcsIC0tbm8td2F0Y2ggICAgICAgICAgICBEbyBub3Qgb3BlbiB3YXRjaCBmb3IgZmlsZXN5c3RlbSBjaGFuZ2VzXG4gICAgICAtYywgLS1jaSAgICAgICAgICAgICAgICAgIFJ1biB0aGUgcGFyY2VsIHByZXZpZXdlciBvbiBhIHJlbW90ZSB1bml4IHNlcnZlclxuICAgICAgLS13ZWIzICAgICAgICAgICAgICAgICAgICBDb25uZWN0cyBwcmV2aWV3IHRvIGJyb3dzZXIgd2FsbGV0IHRvIHVzZSB0aGUgYXNzb2NpYXRlZCBhdmF0YXIgYW5kIGFjY291bnRcbiAgICAgIC0tc2tpcC1idWlsZCAgICAgICAgICAgICAgU2tpcCBidWlsZCBhbmQgb25seSBzZXJ2ZSB0aGUgZmlsZXMgaW4gcHJldmlldyBtb2RlXG4gICAgICAtLWRlc2t0b3AtY2xpZW50ICAgICAgICAgIFNob3cgVVJMIHRvIGxhdW5jaCBwcmV2aWV3IGluIHRoZSBkZXNrdG9wIGNsaWVudCAoQkVUQSlcblxuICAgIEV4YW1wbGVzOlxuXG4gICAgLSBTdGFydCBhIGxvY2FsIGRldmVsb3BtZW50IHNlcnZlciBmb3IgYSBEZWNlbnRyYWxhbmQgU2NlbmUgYXQgcG9ydCAzNTAwXG5cbiAgICAgICQgZGNsIHN0YXJ0IC1wIDM1MDBcblxuICAgIC0gU3RhcnQgYSBsb2NhbCBkZXZlbG9wbWVudCBzZXJ2ZXIgZm9yIGEgRGVjZW50cmFsYW5kIFNjZW5lIGF0IGEgZG9ja2VyIGNvbnRhaW5lclxuXG4gICAgICAkIGRjbCBzdGFydCAtLWNpXG5gXG59XG5cbmV4cG9ydCBjb25zdCBtYWluID0gaGFuZGxlcihhc3luYyBmdW5jdGlvbiBtYWluKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgY29uc3QgZGlyID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvcHRpb25zLmFyZ3NbJy0tZGlyJ10gfHwgJy4nKVxuICBjb25zdCBpc0NpID0gYXJnc1snLS1jaSddIHx8IHByb2Nlc3MuZW52LkNJIHx8IGZhbHNlXG4gIGNvbnN0IGRlYnVnID0gIWFyZ3NbJy0tbm8tZGVidWcnXSAmJiAhaXNDaVxuICBjb25zdCBvcGVuQnJvd3NlciA9ICFhcmdzWyctLW5vLWJyb3dzZXInXSAmJiAhaXNDaVxuICBjb25zdCBza2lwQnVpbGQgPSBhcmdzWyctLXNraXAtYnVpbGQnXVxuICBjb25zdCB3YXRjaCA9ICFhcmdzWyctLW5vLXdhdGNoJ10gJiYgIWlzQ2kgJiYgIXNraXBCdWlsZFxuICBjb25zdCBlbmFibGVXZWIzID0gYXJnc1snLS13ZWIzJ11cbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGFyZ3NbJy0tcG9ydCddISwgMTApIHx8IChhd2FpdCBwcmV2aWV3UG9ydCgpKVxuICBjb25zdCBiYXNlQ29vcmRzID0geyB4OiAwLCB5OiAwIH1cbiAgY29uc3QgaGFzUG9ydGFibGVFeHBlcmllbmNlID0gZmFsc2VcblxuICBjb25zdCBjb21wcyA9IHsgY29tcG9uZW50czogb3B0aW9ucy5jb21wb25lbnRzIH1cbiAgaWYgKCFza2lwQnVpbGQpIHtcbiAgICBhd2FpdCBidWlsZCh7IGFyZ3M6IHsgJy0tZGlyJzogZGlyLCAnLS13YXRjaCc6IHdhdGNoIH0sIC4uLmNvbXBzIH0pXG4gIH1cbiAgYXdhaXQgcHJldmlldyh7IGFyZ3M6IHsgJy0tZGlyJzogZGlyLCAnLS1wb3J0JzogcG9ydCB9LCAuLi5jb21wcyB9KVxuXG4gIGNvbnN0IGlmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKClcbiAgY29uc3QgYXZhaWxhYmxlVVJMczogc3RyaW5nW10gPSBbXVxuXG4gIGNvbnNvbGUubG9nKGBcXG5QcmV2aWV3IHNlcnZlciBpcyBub3cgcnVubmluZyFgKVxuICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIG9uOlxcbicpXG5cbiAgT2JqZWN0LmtleXMoaWZhY2VzKS5mb3JFYWNoKChkZXYpID0+IHtcbiAgICA7KGlmYWNlc1tkZXZdIHx8IFtdKS5mb3JFYWNoKChkZXRhaWxzKSA9PiB7XG4gICAgICBpZiAoZGV0YWlscy5mYW1pbHkgPT09ICdJUHY0Jykge1xuICAgICAgICBsZXQgYWRkciA9IGBodHRwOi8vJHtkZXRhaWxzLmFkZHJlc3N9OiR7cG9ydH0/cG9zaXRpb249JHtiYXNlQ29vcmRzLnh9JTJDJHtiYXNlQ29vcmRzLnl9JkVOQUJMRV9FQ1M3YFxuICAgICAgICBpZiAoZGVidWcpIHtcbiAgICAgICAgICBhZGRyID0gYCR7YWRkcn0mU0NFTkVfREVCVUdfUEFORUxgXG4gICAgICAgIH1cbiAgICAgICAgaWYgKGVuYWJsZVdlYjMgfHwgaGFzUG9ydGFibGVFeHBlcmllbmNlKSB7XG4gICAgICAgICAgYWRkciA9IGAke2FkZHJ9JkVOQUJMRV9XRUIzYFxuICAgICAgICB9XG5cbiAgICAgICAgYXZhaWxhYmxlVVJMcy5wdXNoKGFkZHIpXG4gICAgICB9XG4gICAgfSlcbiAgfSlcblxuICAvLyBQdXNoIGxvY2FsaG9zdCBhbmQgMTI3LjAuMC4xIGF0IHRvcFxuICBjb25zdCBzb3J0ZWRVUkxzID0gYXZhaWxhYmxlVVJMcy5zb3J0KChhLCBfYikgPT4ge1xuICAgIHJldHVybiBhLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoJ2xvY2FsaG9zdCcpIHx8IGEuaW5jbHVkZXMoJzEyNy4wLjAuMScpIHx8IGEuaW5jbHVkZXMoJzAuMC4wLjAnKSA/IC0xIDogMVxuICB9KVxuXG4gIGZvciAoY29uc3QgYWRkciBvZiBzb3J0ZWRVUkxzKSB7XG4gICAgY29uc29sZS5sb2coYCAgICAke2FkZHJ9YClcbiAgfVxuXG4gIGlmIChhcmdzWyctLWRlc2t0b3AtY2xpZW50J10pIHtcbiAgICBjb25zb2xlLmxvZygnXFxuICBEZXNrdG9wIGNsaWVudDpcXG4nKVxuICAgIGZvciAoY29uc3QgYWRkciBvZiBzb3J0ZWRVUkxzKSB7XG4gICAgICBjb25zdCBzZWFyY2hQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKClcbiAgICAgIHNlYXJjaFBhcmFtcy5hcHBlbmQoJ1BSRVZJRVctTU9ERScsIGFkZHIpXG4gICAgICBjb25zb2xlLmxvZyhgICAgIGRjbDovLyR7c2VhcmNoUGFyYW1zLnRvU3RyaW5nKCl9JmApXG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ1xcbiAgRGV0YWlsczpcXG4nKVxuICBjb25zb2xlLmxvZygnXFxuUHJlc3MgQ1RSTCtDIHRvIGV4aXRcXG4nKVxuXG4gIC8vIE9wZW4gcHJlZmVyYWJseSBsb2NhbGhvc3QvMTI3LjAuMC4xXG4gIGlmIChvcGVuQnJvd3NlciAmJiBzb3J0ZWRVUkxzLmxlbmd0aCAmJiAhYXJnc1snLS1kZXNrdG9wLWNsaWVudCddKSB7XG4gICAgdHJ5IHtcbiAgICAgIGF3YWl0IG9wZW4oc29ydGVkVVJMc1swXSlcbiAgICB9IGNhdGNoIChfKSB7XG4gICAgICBjb25zb2xlLmxvZygnVW5hYmxlIHRvIG9wZW4gYnJvd3NlciBhdXRvbWF0aWNhbGx5LicpXG4gICAgfVxuICB9XG59KVxuIl19
@@ -0,0 +1,132 @@
1
+ import os from 'os'
2
+ import { resolve } from 'path'
3
+ import open from 'open'
4
+
5
+ import { CliComponents } from '../../components'
6
+ import { main as build } from '../build'
7
+ import { main as preview } from '../preview'
8
+ import { previewPort } from '../preview/port'
9
+ import { getArgs } from '../../utils/args'
10
+ import { main as handler } from '../../utils/handler'
11
+ interface Options {
12
+ args: typeof args
13
+ components: Pick<CliComponents, 'fetch' | 'fs'>
14
+ }
15
+
16
+ export const args = getArgs({
17
+ '--dir': String,
18
+ '--help': Boolean,
19
+ '--port': String,
20
+ '--no-debug': Boolean,
21
+ '--no-browser': Boolean,
22
+ '--no-watch': Boolean,
23
+ '--ci': Boolean,
24
+ '--skip-install': Boolean,
25
+ '--web3': Boolean,
26
+ '-h': '--help',
27
+ '-p': '--port',
28
+ '-d': '--no-debug',
29
+ '-b': '--no-browser',
30
+ '-w': '--no-watch',
31
+ '--skip-build': Boolean,
32
+ '--desktop-client': Boolean
33
+ })
34
+
35
+ export function help() {
36
+ return `
37
+ Usage: dcl start [options]
38
+
39
+ Options:
40
+
41
+ -h, --help Displays complete help
42
+ -p, --port [port] Select a custom port for the development server
43
+ -d, --no-debug Disable debugging panel
44
+ -b, --no-browser Do not open a new browser window
45
+ -w, --no-watch Do not open watch for filesystem changes
46
+ -c, --ci Run the parcel previewer on a remote unix server
47
+ --web3 Connects preview to browser wallet to use the associated avatar and account
48
+ --skip-build Skip build and only serve the files in preview mode
49
+ --desktop-client Show URL to launch preview in the desktop client (BETA)
50
+
51
+ Examples:
52
+
53
+ - Start a local development server for a Decentraland Scene at port 3500
54
+
55
+ $ dcl start -p 3500
56
+
57
+ - Start a local development server for a Decentraland Scene at a docker container
58
+
59
+ $ dcl start --ci
60
+ `
61
+ }
62
+
63
+ export const main = handler(async function main(options: Options) {
64
+ const dir = resolve(process.cwd(), options.args['--dir'] || '.')
65
+ const isCi = args['--ci'] || process.env.CI || false
66
+ const debug = !args['--no-debug'] && !isCi
67
+ const openBrowser = !args['--no-browser'] && !isCi
68
+ const skipBuild = args['--skip-build']
69
+ const watch = !args['--no-watch'] && !isCi && !skipBuild
70
+ const enableWeb3 = args['--web3']
71
+ const port = parseInt(args['--port']!, 10) || (await previewPort())
72
+ const baseCoords = { x: 0, y: 0 }
73
+ const hasPortableExperience = false
74
+
75
+ const comps = { components: options.components }
76
+ if (!skipBuild) {
77
+ await build({ args: { '--dir': dir, '--watch': watch }, ...comps })
78
+ }
79
+ await preview({ args: { '--dir': dir, '--port': port }, ...comps })
80
+
81
+ const ifaces = os.networkInterfaces()
82
+ const availableURLs: string[] = []
83
+
84
+ console.log(`\nPreview server is now running!`)
85
+ console.log('Available on:\n')
86
+
87
+ Object.keys(ifaces).forEach((dev) => {
88
+ ;(ifaces[dev] || []).forEach((details) => {
89
+ if (details.family === 'IPv4') {
90
+ let addr = `http://${details.address}:${port}?position=${baseCoords.x}%2C${baseCoords.y}&ENABLE_ECS7`
91
+ if (debug) {
92
+ addr = `${addr}&SCENE_DEBUG_PANEL`
93
+ }
94
+ if (enableWeb3 || hasPortableExperience) {
95
+ addr = `${addr}&ENABLE_WEB3`
96
+ }
97
+
98
+ availableURLs.push(addr)
99
+ }
100
+ })
101
+ })
102
+
103
+ // Push localhost and 127.0.0.1 at top
104
+ const sortedURLs = availableURLs.sort((a, _b) => {
105
+ return a.toLowerCase().includes('localhost') || a.includes('127.0.0.1') || a.includes('0.0.0.0') ? -1 : 1
106
+ })
107
+
108
+ for (const addr of sortedURLs) {
109
+ console.log(` ${addr}`)
110
+ }
111
+
112
+ if (args['--desktop-client']) {
113
+ console.log('\n Desktop client:\n')
114
+ for (const addr of sortedURLs) {
115
+ const searchParams = new URLSearchParams()
116
+ searchParams.append('PREVIEW-MODE', addr)
117
+ console.log(` dcl://${searchParams.toString()}&`)
118
+ }
119
+ }
120
+
121
+ console.log('\n Details:\n')
122
+ console.log('\nPress CTRL+C to exit\n')
123
+
124
+ // Open preferably localhost/127.0.0.1
125
+ if (openBrowser && sortedURLs.length && !args['--desktop-client']) {
126
+ try {
127
+ await open(sortedURLs[0])
128
+ } catch (_) {
129
+ console.log('Unable to open browser automatically.')
130
+ }
131
+ }
132
+ })
@@ -2,9 +2,10 @@
2
2
  /// <reference types="node" />
3
3
  import * as fs from 'fs';
4
4
  import * as fsPromises from 'fs/promises';
5
- export type IFileSystemComponent = Pick<typeof fs, 'createReadStream'> & Pick<typeof fs, 'createWriteStream'> & Pick<typeof fsPromises, 'access' | 'opendir' | 'stat' | 'unlink' | 'mkdir' | 'readdir' | 'readFile' | 'writeFile'> & {
5
+ export type IFileSystemComponent = Pick<typeof fs, 'createReadStream'> & Pick<typeof fs, 'createWriteStream'> & Pick<typeof fsPromises, 'access' | 'opendir' | 'stat' | 'unlink' | 'mkdir' | 'readFile' | 'writeFile'> & {
6
6
  constants: Pick<typeof fs.constants, 'F_OK' | 'R_OK'>;
7
7
  } & {
8
8
  existPath(path: string): Promise<boolean>;
9
+ readdir(path: string): Promise<string[]>;
9
10
  };
10
11
  export declare function createFsComponent(): IFileSystemComponent;
@@ -55,4 +55,4 @@ function createFsComponent() {
55
55
  };
56
56
  }
57
57
  exports.createFsComponent = createFsComponent;
58
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF3QjtBQUN4Qix3REFBeUM7QUF5QnpDLEtBQUssVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNuQyxJQUFJO1FBQ0YsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxPQUFPLElBQUksQ0FBQTtLQUNaO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQUtELFNBQWdCLGlCQUFpQjtJQUMvQixPQUFPO1FBQ0wsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtRQUNyQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCO1FBQ3ZDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztRQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1NBQ3hCO1FBQ0QsU0FBUztLQUNWLENBQUE7QUFDSCxDQUFDO0FBbEJELDhDQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcblxuLyoqXG4gKiBAcHVibGljXG4gKlxuICogVGhpcyBtYXkgYmUgbW92ZWQgdG8gd2VsbC1rbm93bi1jb21wb25lbnRzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IHR5cGUgSUZpbGVTeXN0ZW1Db21wb25lbnQgPSBQaWNrPHR5cGVvZiBmcywgJ2NyZWF0ZVJlYWRTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzLCAnY3JlYXRlV3JpdGVTdHJlYW0nPiAmXG4gIFBpY2s8XG4gICAgdHlwZW9mIGZzUHJvbWlzZXMsXG4gICAgfCAnYWNjZXNzJ1xuICAgIHwgJ29wZW5kaXInXG4gICAgfCAnc3RhdCdcbiAgICB8ICd1bmxpbmsnXG4gICAgfCAnbWtkaXInXG4gICAgfCAncmVhZGRpcidcbiAgICB8ICdyZWFkRmlsZSdcbiAgICB8ICd3cml0ZUZpbGUnXG4gID4gJiB7XG4gICAgY29uc3RhbnRzOiBQaWNrPHR5cGVvZiBmcy5jb25zdGFudHMsICdGX09LJyB8ICdSX09LJz5cbiAgfSAmIHtcbiAgICBleGlzdFBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPlxuICB9XG5cbmFzeW5jIGZ1bmN0aW9uIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MocGF0aCwgZnMuY29uc3RhbnRzLkZfT0sgfCBmcy5jb25zdGFudHMuUl9PSylcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDb21wb25lbnQoKTogSUZpbGVTeXN0ZW1Db21wb25lbnQge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJlYWRTdHJlYW06IGZzLmNyZWF0ZVJlYWRTdHJlYW0sXG4gICAgY3JlYXRlV3JpdGVTdHJlYW06IGZzLmNyZWF0ZVdyaXRlU3RyZWFtLFxuICAgIGFjY2VzczogZnNQcm9taXNlcy5hY2Nlc3MsXG4gICAgd3JpdGVGaWxlOiBmc1Byb21pc2VzLndyaXRlRmlsZSxcbiAgICBvcGVuZGlyOiBmc1Byb21pc2VzLm9wZW5kaXIsXG4gICAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICAgIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gICAgbWtkaXI6IGZzUHJvbWlzZXMubWtkaXIsXG4gICAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICAgIHJlYWRGaWxlOiBmc1Byb21pc2VzLnJlYWRGaWxlLFxuICAgIGNvbnN0YW50czoge1xuICAgICAgRl9PSzogZnMuY29uc3RhbnRzLkZfT0ssXG4gICAgICBSX09LOiBmcy5jb25zdGFudHMuUl9PS1xuICAgIH0sXG4gICAgZXhpc3RQYXRoXG4gIH1cbn1cbiJdfQ==
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF3QjtBQUN4Qix3REFBeUM7QUFnQnpDLEtBQUssVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNuQyxJQUFJO1FBQ0YsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxPQUFPLElBQUksQ0FBQTtLQUNaO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQUtELFNBQWdCLGlCQUFpQjtJQUMvQixPQUFPO1FBQ0wsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtRQUNyQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCO1FBQ3ZDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztRQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1NBQ3hCO1FBQ0QsU0FBUztLQUNWLENBQUE7QUFDSCxDQUFDO0FBbEJELDhDQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcblxuLyoqXG4gKiBAcHVibGljXG4gKlxuICogVGhpcyBtYXkgYmUgbW92ZWQgdG8gd2VsbC1rbm93bi1jb21wb25lbnRzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IHR5cGUgSUZpbGVTeXN0ZW1Db21wb25lbnQgPSBQaWNrPHR5cGVvZiBmcywgJ2NyZWF0ZVJlYWRTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzLCAnY3JlYXRlV3JpdGVTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzUHJvbWlzZXMsICdhY2Nlc3MnIHwgJ29wZW5kaXInIHwgJ3N0YXQnIHwgJ3VubGluaycgfCAnbWtkaXInIHwgJ3JlYWRGaWxlJyB8ICd3cml0ZUZpbGUnPiAmIHtcbiAgICBjb25zdGFudHM6IFBpY2s8dHlwZW9mIGZzLmNvbnN0YW50cywgJ0ZfT0snIHwgJ1JfT0snPlxuICB9ICYge1xuICAgIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+XG4gICAgcmVhZGRpcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPlxuICB9XG5cbmFzeW5jIGZ1bmN0aW9uIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MocGF0aCwgZnMuY29uc3RhbnRzLkZfT0sgfCBmcy5jb25zdGFudHMuUl9PSylcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDb21wb25lbnQoKTogSUZpbGVTeXN0ZW1Db21wb25lbnQge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJlYWRTdHJlYW06IGZzLmNyZWF0ZVJlYWRTdHJlYW0sXG4gICAgY3JlYXRlV3JpdGVTdHJlYW06IGZzLmNyZWF0ZVdyaXRlU3RyZWFtLFxuICAgIGFjY2VzczogZnNQcm9taXNlcy5hY2Nlc3MsXG4gICAgd3JpdGVGaWxlOiBmc1Byb21pc2VzLndyaXRlRmlsZSxcbiAgICBvcGVuZGlyOiBmc1Byb21pc2VzLm9wZW5kaXIsXG4gICAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICAgIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gICAgbWtkaXI6IGZzUHJvbWlzZXMubWtkaXIsXG4gICAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICAgIHJlYWRGaWxlOiBmc1Byb21pc2VzLnJlYWRGaWxlLFxuICAgIGNvbnN0YW50czoge1xuICAgICAgRl9PSzogZnMuY29uc3RhbnRzLkZfT0ssXG4gICAgICBSX09LOiBmcy5jb25zdGFudHMuUl9PS1xuICAgIH0sXG4gICAgZXhpc3RQYXRoXG4gIH1cbn1cbiJdfQ==
@@ -8,20 +8,11 @@ import * as fsPromises from 'fs/promises'
8
8
  */
9
9
  export type IFileSystemComponent = Pick<typeof fs, 'createReadStream'> &
10
10
  Pick<typeof fs, 'createWriteStream'> &
11
- Pick<
12
- typeof fsPromises,
13
- | 'access'
14
- | 'opendir'
15
- | 'stat'
16
- | 'unlink'
17
- | 'mkdir'
18
- | 'readdir'
19
- | 'readFile'
20
- | 'writeFile'
21
- > & {
11
+ Pick<typeof fsPromises, 'access' | 'opendir' | 'stat' | 'unlink' | 'mkdir' | 'readFile' | 'writeFile'> & {
22
12
  constants: Pick<typeof fs.constants, 'F_OK' | 'R_OK'>
23
13
  } & {
24
14
  existPath(path: string): Promise<boolean>
15
+ readdir(path: string): Promise<string[]>
25
16
  }
26
17
 
27
18
  async function existPath(path: string): Promise<boolean> {
package/cli/index.js CHANGED
@@ -5,14 +5,12 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  };
6
6
  Object.defineProperty(exports, "__esModule", { value: true });
7
7
  const args_1 = require("./utils/args");
8
+ const out_messages_1 = require("./utils/out-messages");
8
9
  const log_1 = __importDefault(require("./utils/log"));
9
10
  const error_1 = require("./utils/error");
10
11
  const commands_1 = require("./utils/commands");
11
12
  const components_1 = require("./components");
12
- const listCommandsStr = (commands) => commands
13
- .map(($) => `
14
- * npx sdk ${$}`)
15
- .join('');
13
+ const listCommandsStr = (commands) => (0, out_messages_1.toStringList)(commands.map(($) => `npx @dcl/sdk ${$}`));
16
14
  const handleError = (err) => {
17
15
  if (!(err instanceof error_1.CliError)) {
18
16
  log_1.default.warn(`Developer: All errors thrown must be an instance of "CliError"`);
@@ -42,7 +40,7 @@ const helpMessage = (commands) => `Here is the list of commands: ${listCommandsS
42
40
  log_1.default.info(helpMessage(commands));
43
41
  return;
44
42
  }
45
- throw new error_1.CliError(`Command ${command} is invalid. ${helpMessage}`);
43
+ throw new error_1.CliError(`Command ${command} is invalid. ${helpMessage(commands)}`);
46
44
  }
47
45
  const cmd = require(`${commands_1.COMMANDS_PATH}/${command}`);
48
46
  if (commandFnsAreValid(cmd)) {
@@ -50,4 +48,4 @@ const helpMessage = (commands) => `Here is the list of commands: ${listCommandsS
50
48
  needsHelp ? await cmd.help(options) : await cmd.main(options);
51
49
  }
52
50
  })().catch(handleError);
53
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSx1Q0FBc0M7QUFDdEMsc0RBQTZCO0FBQzdCLHlDQUF3QztBQUN4QywrQ0FBNkQ7QUFDN0QsNkNBQTREO0FBZ0I1RCxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUM3QyxRQUFRO0tBQ0wsR0FBRyxDQUNGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztjQUNDLENBQUMsRUFBRSxDQUNaO0tBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRWIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksZ0JBQVEsQ0FBQyxFQUFFO1FBQzlCLGFBQUcsQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQTtLQUMzRTtJQUNELGFBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQWdCLEVBQWdDLEVBQUU7SUFDNUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtRQUNsQixNQUFNLElBQUksZ0JBQVEsQ0FBQzs7O0tBR2xCLENBQUMsQ0FBQTtLQUNIO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLElBQUksR0FBRyxJQUFBLGNBQU8sR0FBRSxDQUFBO0FBQ3RCLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQ3pDLGlDQUFpQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FFN0Q7QUFBQSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDaEMsTUFBTSxVQUFVLEdBQWtCLElBQUEsMkJBQWMsR0FBRSxDQUFBO0lBRWxELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxzQkFBVyxFQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRTlDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQy9CLElBQUksU0FBUyxFQUFFO1lBQ2IsYUFBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUMvQixPQUFNO1NBQ1A7UUFDRCxNQUFNLElBQUksZ0JBQVEsQ0FBQyxXQUFXLE9BQU8sZ0JBQWdCLFdBQVcsRUFBRSxDQUFDLENBQUE7S0FDcEU7SUFHRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyx3QkFBYSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFbEQsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMzQixNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQzlDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7S0FDOUQ7QUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4vdXRpbHMvYXJncydcbmltcG9ydCBsb2cgZnJvbSAnLi91dGlscy9sb2cnXG5pbXBvcnQgeyBDbGlFcnJvciB9IGZyb20gJy4vdXRpbHMvZXJyb3InXG5pbXBvcnQgeyBDT01NQU5EU19QQVRILCBnZXRDb21tYW5kcyB9IGZyb20gJy4vdXRpbHMvY29tbWFuZHMnXG5pbXBvcnQgeyBDbGlDb21wb25lbnRzLCBpbml0Q29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cydcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgYXJnczogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QXJncz5cbiAgY29tcG9uZW50czogQ2xpQ29tcG9uZW50c1xufVxuXG4vLyBsZWF2aW5nIGFyZ3MgYXMgXCJhbnlcIiBzaW5jZSB3ZSBkb24ndCBrbm93IHlldCBpZiB3ZSB3aWxsIHVzZSB0aGVtXG50eXBlIEZpbGVGbiA9IChvcHRpb25zOiBPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG5cbmludGVyZmFjZSBGaWxlRXhwb3J0cyB7XG4gIGhlbHA/OiBGaWxlRm5cbiAgbWFpbj86IEZpbGVGblxuICBhcmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QXJncz5cbn1cblxuY29uc3QgbGlzdENvbW1hbmRzU3RyID0gKGNvbW1hbmRzOiBzdHJpbmdbXSkgPT5cbiAgY29tbWFuZHNcbiAgICAubWFwKFxuICAgICAgKCQpID0+IGBcbiAgKiBucHggc2RrICR7JH1gXG4gICAgKVxuICAgIC5qb2luKCcnKVxuXG5jb25zdCBoYW5kbGVFcnJvciA9IChlcnI6IENsaUVycm9yKSA9PiB7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIENsaUVycm9yKSkge1xuICAgIGxvZy53YXJuKGBEZXZlbG9wZXI6IEFsbCBlcnJvcnMgdGhyb3duIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgXCJDbGlFcnJvclwiYClcbiAgfVxuICBsb2cuZmFpbChlcnIubWVzc2FnZSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5cbmNvbnN0IGNvbW1hbmRGbnNBcmVWYWxpZCA9IChmbnM6IEZpbGVFeHBvcnRzKTogZm5zIGlzIFJlcXVpcmVkPEZpbGVFeHBvcnRzPiA9PiB7XG4gIGNvbnN0IHsgaGVscCwgbWFpbiB9ID0gZm5zXG4gIGlmICghaGVscCB8fCAhbWFpbikge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgQ29tbWFuZCBkb2VzIG5vdCBmb2xsb3cgaW1wbGVtZW50YXRpb24gcnVsZXM6XG4gICAgICAqIFJlcXVpcmVzIGEgXCJoZWxwXCIgZnVuY3Rpb25cbiAgICAgICogUmVxdWlyZXMgYSBcIm1haW5cIiBmdW5jdGlvblxuICAgIGApXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgYXJncyA9IGdldEFyZ3MoKVxuY29uc3QgaGVscE1lc3NhZ2UgPSAoY29tbWFuZHM6IHN0cmluZ1tdKSA9PlxuICBgSGVyZSBpcyB0aGUgbGlzdCBvZiBjb21tYW5kczogJHtsaXN0Q29tbWFuZHNTdHIoY29tbWFuZHMpfWBcblxuOyhhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLmFyZ3ZbMl1cbiAgY29uc3QgbmVlZHNIZWxwID0gYXJnc1snLS1oZWxwJ11cbiAgY29uc3QgY29tcG9uZW50czogQ2xpQ29tcG9uZW50cyA9IGluaXRDb21wb25lbnRzKClcblxuICBjb25zdCBjb21tYW5kcyA9IGF3YWl0IGdldENvbW1hbmRzKGNvbXBvbmVudHMpXG5cbiAgaWYgKCFjb21tYW5kcy5pbmNsdWRlcyhjb21tYW5kKSkge1xuICAgIGlmIChuZWVkc0hlbHApIHtcbiAgICAgIGxvZy5pbmZvKGhlbHBNZXNzYWdlKGNvbW1hbmRzKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoYENvbW1hbmQgJHtjb21tYW5kfSBpcyBpbnZhbGlkLiAke2hlbHBNZXNzYWdlfWApXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCBjbWQgPSByZXF1aXJlKGAke0NPTU1BTkRTX1BBVEh9LyR7Y29tbWFuZH1gKVxuXG4gIGlmIChjb21tYW5kRm5zQXJlVmFsaWQoY21kKSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGFyZ3M6IGNtZC5hcmdzLCBjb21wb25lbnRzIH1cbiAgICBuZWVkc0hlbHAgPyBhd2FpdCBjbWQuaGVscChvcHRpb25zKSA6IGF3YWl0IGNtZC5tYWluKG9wdGlvbnMpXG4gIH1cbn0pKCkuY2F0Y2goaGFuZGxlRXJyb3IpXG4iXX0=
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQSx1Q0FBc0M7QUFDdEMsdURBQW1EO0FBQ25ELHNEQUE2QjtBQUM3Qix5Q0FBd0M7QUFDeEMsK0NBQTZEO0FBQzdELDZDQUE0RDtBQWdCNUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFBLDJCQUFZLEVBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUV0RyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxnQkFBUSxDQUFDLEVBQUU7UUFDOUIsYUFBRyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0tBQzNFO0lBQ0QsYUFBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUE7QUFFRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBZ0IsRUFBZ0MsRUFBRTtJQUM1RSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUMxQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ2xCLE1BQU0sSUFBSSxnQkFBUSxDQUFDOzs7S0FHbEIsQ0FBQyxDQUFBO0tBQ0g7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMsQ0FBQTtBQUVELE1BQU0sSUFBSSxHQUFHLElBQUEsY0FBTyxHQUFFLENBQUE7QUFDdEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxpQ0FBaUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBRXZHO0FBQUEsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNYLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sVUFBVSxHQUFrQixJQUFBLDJCQUFjLEdBQUUsQ0FBQTtJQUVsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsc0JBQVcsRUFBQyxVQUFVLENBQUMsQ0FBQTtJQUU5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMvQixJQUFJLFNBQVMsRUFBRTtZQUNiLGFBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDL0IsT0FBTTtTQUNQO1FBQ0QsTUFBTSxJQUFJLGdCQUFRLENBQUMsV0FBVyxPQUFPLGdCQUFnQixXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0tBQzlFO0lBR0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsd0JBQWEsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBRWxELElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQTtRQUM5QyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qXG4gIGlzdGFuYnVsIGlnbm9yZSBmaWxlXG4gIERvZXNuJ3QgbWFrZSBzZW5zZSB0byB0ZXN0IHRoaXMgZmlsZVxuKi9cblxuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4vdXRpbHMvYXJncydcbmltcG9ydCB7IHRvU3RyaW5nTGlzdCB9IGZyb20gJy4vdXRpbHMvb3V0LW1lc3NhZ2VzJ1xuaW1wb3J0IGxvZyBmcm9tICcuL3V0aWxzL2xvZydcbmltcG9ydCB7IENsaUVycm9yIH0gZnJvbSAnLi91dGlscy9lcnJvcidcbmltcG9ydCB7IENPTU1BTkRTX1BBVEgsIGdldENvbW1hbmRzIH0gZnJvbSAnLi91dGlscy9jb21tYW5kcydcbmltcG9ydCB7IENsaUNvbXBvbmVudHMsIGluaXRDb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBcmdzPlxuICBjb21wb25lbnRzOiBDbGlDb21wb25lbnRzXG59XG5cbi8vIGxlYXZpbmcgYXJncyBhcyBcImFueVwiIHNpbmNlIHdlIGRvbid0IGtub3cgeWV0IGlmIHdlIHdpbGwgdXNlIHRoZW1cbnR5cGUgRmlsZUZuID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cblxuaW50ZXJmYWNlIEZpbGVFeHBvcnRzIHtcbiAgaGVscD86IEZpbGVGblxuICBtYWluPzogRmlsZUZuXG4gIGFyZ3M/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBcmdzPlxufVxuXG5jb25zdCBsaXN0Q29tbWFuZHNTdHIgPSAoY29tbWFuZHM6IHN0cmluZ1tdKSA9PiB0b1N0cmluZ0xpc3QoY29tbWFuZHMubWFwKCgkKSA9PiBgbnB4IEBkY2wvc2RrICR7JH1gKSlcblxuY29uc3QgaGFuZGxlRXJyb3IgPSAoZXJyOiBDbGlFcnJvcikgPT4ge1xuICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGlFcnJvcikpIHtcbiAgICBsb2cud2FybihgRGV2ZWxvcGVyOiBBbGwgZXJyb3JzIHRocm93biBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFwiQ2xpRXJyb3JcImApXG4gIH1cbiAgbG9nLmZhaWwoZXJyLm1lc3NhZ2UpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5jb25zdCBjb21tYW5kRm5zQXJlVmFsaWQgPSAoZm5zOiBGaWxlRXhwb3J0cyk6IGZucyBpcyBSZXF1aXJlZDxGaWxlRXhwb3J0cz4gPT4ge1xuICBjb25zdCB7IGhlbHAsIG1haW4gfSA9IGZuc1xuICBpZiAoIWhlbHAgfHwgIW1haW4pIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoYENvbW1hbmQgZG9lcyBub3QgZm9sbG93IGltcGxlbWVudGF0aW9uIHJ1bGVzOlxuICAgICAgKiBSZXF1aXJlcyBhIFwiaGVscFwiIGZ1bmN0aW9uXG4gICAgICAqIFJlcXVpcmVzIGEgXCJtYWluXCIgZnVuY3Rpb25cbiAgICBgKVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IGFyZ3MgPSBnZXRBcmdzKClcbmNvbnN0IGhlbHBNZXNzYWdlID0gKGNvbW1hbmRzOiBzdHJpbmdbXSkgPT4gYEhlcmUgaXMgdGhlIGxpc3Qgb2YgY29tbWFuZHM6ICR7bGlzdENvbW1hbmRzU3RyKGNvbW1hbmRzKX1gXG5cbjsoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5hcmd2WzJdXG4gIGNvbnN0IG5lZWRzSGVscCA9IGFyZ3NbJy0taGVscCddXG4gIGNvbnN0IGNvbXBvbmVudHM6IENsaUNvbXBvbmVudHMgPSBpbml0Q29tcG9uZW50cygpXG5cbiAgY29uc3QgY29tbWFuZHMgPSBhd2FpdCBnZXRDb21tYW5kcyhjb21wb25lbnRzKVxuXG4gIGlmICghY29tbWFuZHMuaW5jbHVkZXMoY29tbWFuZCkpIHtcbiAgICBpZiAobmVlZHNIZWxwKSB7XG4gICAgICBsb2cuaW5mbyhoZWxwTWVzc2FnZShjb21tYW5kcykpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKGBDb21tYW5kICR7Y29tbWFuZH0gaXMgaW52YWxpZC4gJHtoZWxwTWVzc2FnZShjb21tYW5kcyl9YClcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGNvbnN0IGNtZCA9IHJlcXVpcmUoYCR7Q09NTUFORFNfUEFUSH0vJHtjb21tYW5kfWApXG5cbiAgaWYgKGNvbW1hbmRGbnNBcmVWYWxpZChjbWQpKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgYXJnczogY21kLmFyZ3MsIGNvbXBvbmVudHMgfVxuICAgIG5lZWRzSGVscCA/IGF3YWl0IGNtZC5oZWxwKG9wdGlvbnMpIDogYXdhaXQgY21kLm1haW4ob3B0aW9ucylcbiAgfVxufSkoKS5jYXRjaChoYW5kbGVFcnJvcilcbiJdfQ==
package/cli/index.ts CHANGED
@@ -1,6 +1,12 @@
1
1
  #!/usr/bin/env node
2
2
 
3
+ /*
4
+ istanbul ignore file
5
+ Doesn't make sense to test this file
6
+ */
7
+
3
8
  import { getArgs } from './utils/args'
9
+ import { toStringList } from './utils/out-messages'
4
10
  import log from './utils/log'
5
11
  import { CliError } from './utils/error'
6
12
  import { COMMANDS_PATH, getCommands } from './utils/commands'
@@ -20,13 +26,7 @@ interface FileExports {
20
26
  args?: ReturnType<typeof getArgs>
21
27
  }
22
28
 
23
- const listCommandsStr = (commands: string[]) =>
24
- commands
25
- .map(
26
- ($) => `
27
- * npx sdk ${$}`
28
- )
29
- .join('')
29
+ const listCommandsStr = (commands: string[]) => toStringList(commands.map(($) => `npx @dcl/sdk ${$}`))
30
30
 
31
31
  const handleError = (err: CliError) => {
32
32
  if (!(err instanceof CliError)) {
@@ -48,8 +48,7 @@ const commandFnsAreValid = (fns: FileExports): fns is Required<FileExports> => {
48
48
  }
49
49
 
50
50
  const args = getArgs()
51
- const helpMessage = (commands: string[]) =>
52
- `Here is the list of commands: ${listCommandsStr(commands)}`
51
+ const helpMessage = (commands: string[]) => `Here is the list of commands: ${listCommandsStr(commands)}`
53
52
 
54
53
  ;(async () => {
55
54
  const command = process.argv[2]
@@ -63,7 +62,7 @@ const helpMessage = (commands: string[]) =>
63
62
  log.info(helpMessage(commands))
64
63
  return
65
64
  }
66
- throw new CliError(`Command ${command} is invalid. ${helpMessage}`)
65
+ throw new CliError(`Command ${command} is invalid. ${helpMessage(commands)}`)
67
66
  }
68
67
 
69
68
  // eslint-disable-next-line @typescript-eslint/no-var-requires
package/cli/utils/args.js CHANGED
@@ -10,7 +10,7 @@ exports.DEFAULT_ARGS = {
10
10
  '-h': '--help'
11
11
  };
12
12
  function getArgs(args) {
13
- return (0, arg_1.default)({ ...exports.DEFAULT_ARGS, ...args }, { permissive: true });
13
+ return (0, arg_1.default)(Object.assign(Object.assign({}, exports.DEFAULT_ARGS), args), { permissive: true });
14
14
  }
15
15
  exports.getArgs = getArgs;
16
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQWlDO0FBWXBCLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQTtBQU1ELFNBQWdCLE9BQU8sQ0FBaUIsSUFBUTtJQUM5QyxPQUFPLElBQUEsYUFBRyxFQUFDLEVBQUUsR0FBRyxvQkFBWSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRkQsMEJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJnLCB7IFJlc3VsdCB9IGZyb20gJ2FyZydcblxuZXhwb3J0IHR5cGUgQXJncyA9IHtcbiAgW2tleTogc3RyaW5nXTpcbiAgICB8IHN0cmluZ1xuICAgIHwgU3RyaW5nQ29uc3RydWN0b3JcbiAgICB8IE51bWJlckNvbnN0cnVjdG9yXG4gICAgfCBCb29sZWFuQ29uc3RydWN0b3Jcbn1cblxuLy8gdXBkYXRpbmcgdG8gVFMgNC45IHdpbGwgcHJldmVudCBsb3NpbmcgdHlwZXMgd2hlblxuLy8gZW5mb3JjaW5nIHR5cGUgdG8gYmUgXCJBcmdzXCIgYnkgdXNpbmcgXCJzYXRpc2ZpZXMgQXJnc1wiXG5leHBvcnQgY29uc3QgREVGQVVMVF9BUkdTID0ge1xuICAnLS1oZWxwJzogQm9vbGVhbixcbiAgJy1oJzogJy0taGVscCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFyZ3MoKTogUmVzdWx0PHR5cGVvZiBERUZBVUxUX0FSR1M+XG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJnczxUIGV4dGVuZHMgQXJncz4oXG4gIGFyZ3M6IFRcbik6IFJlc3VsdDx0eXBlb2YgREVGQVVMVF9BUkdTICYgVD5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcmdzPFQgZXh0ZW5kcyBBcmdzPihhcmdzPzogVCkge1xuICByZXR1cm4gYXJnKHsgLi4uREVGQVVMVF9BUkdTLCAuLi5hcmdzIH0sIHsgcGVybWlzc2l2ZTogdHJ1ZSB9KVxufVxuIl19
16
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQWlDO0FBUXBCLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQTtBQUlELFNBQWdCLE9BQU8sQ0FBaUIsSUFBUTtJQUM5QyxPQUFPLElBQUEsYUFBRyxrQ0FBTSxvQkFBWSxHQUFLLElBQUksR0FBSSxFQUFFLFVBQVUsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0FBQ2hFLENBQUM7QUFGRCwwQkFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBhcmcsIHsgUmVzdWx0IH0gZnJvbSAnYXJnJ1xuXG5leHBvcnQgdHlwZSBBcmdzID0ge1xuICBba2V5OiBzdHJpbmddOiBzdHJpbmcgfCBTdHJpbmdDb25zdHJ1Y3RvciB8IE51bWJlckNvbnN0cnVjdG9yIHwgQm9vbGVhbkNvbnN0cnVjdG9yXG59XG5cbi8vIHVwZGF0aW5nIHRvIFRTIDQuOSB3aWxsIHByZXZlbnQgbG9zaW5nIHR5cGVzIHdoZW5cbi8vIGVuZm9yY2luZyB0eXBlIHRvIGJlIFwiQXJnc1wiIGJ5IHVzaW5nIFwic2F0aXNmaWVzIEFyZ3NcIlxuZXhwb3J0IGNvbnN0IERFRkFVTFRfQVJHUyA9IHtcbiAgJy0taGVscCc6IEJvb2xlYW4sXG4gICctaCc6ICctLWhlbHAnXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcmdzKCk6IFJlc3VsdDx0eXBlb2YgREVGQVVMVF9BUkdTPlxuZXhwb3J0IGZ1bmN0aW9uIGdldEFyZ3M8VCBleHRlbmRzIEFyZ3M+KGFyZ3M6IFQpOiBSZXN1bHQ8dHlwZW9mIERFRkFVTFRfQVJHUyAmIFQ+XG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJnczxUIGV4dGVuZHMgQXJncz4oYXJncz86IFQpIHtcbiAgcmV0dXJuIGFyZyh7IC4uLkRFRkFVTFRfQVJHUywgLi4uYXJncyB9LCB7IHBlcm1pc3NpdmU6IHRydWUgfSlcbn1cbiJdfQ==
package/cli/utils/args.ts CHANGED
@@ -1,11 +1,7 @@
1
1
  import arg, { Result } from 'arg'
2
2
 
3
3
  export type Args = {
4
- [key: string]:
5
- | string
6
- | StringConstructor
7
- | NumberConstructor
8
- | BooleanConstructor
4
+ [key: string]: string | StringConstructor | NumberConstructor | BooleanConstructor
9
5
  }
10
6
 
11
7
  // updating to TS 4.9 will prevent losing types when
@@ -16,9 +12,7 @@ export const DEFAULT_ARGS = {
16
12
  }
17
13
 
18
14
  export function getArgs(): Result<typeof DEFAULT_ARGS>
19
- export function getArgs<T extends Args>(
20
- args: T
21
- ): Result<typeof DEFAULT_ARGS & T>
15
+ export function getArgs<T extends Args>(args: T): Result<typeof DEFAULT_ARGS & T>
22
16
  export function getArgs<T extends Args>(args?: T) {
23
17
  return arg({ ...DEFAULT_ARGS, ...args }, { permissive: true })
24
18
  }
@@ -7,7 +7,7 @@ exports.COMMANDS_PATH = (0, path_1.resolve)(__dirname, '../commands');
7
7
  const getCommands = async ({ fs }) => {
8
8
  const commandDirs = await fs.readdir(exports.COMMANDS_PATH);
9
9
  const commands = commandDirs.map(async (dir) => {
10
- const path = `${exports.COMMANDS_PATH}/${dir}`;
10
+ const path = (0, path_1.resolve)(exports.COMMANDS_PATH, dir);
11
11
  const statDir = await fs.stat(path);
12
12
  if (!statDir.isDirectory()) {
13
13
  throw new error_1.CliError('Developer: All commands must be inside a folder');
@@ -21,4 +21,4 @@ const getCommands = async ({ fs }) => {
21
21
  return Promise.all(commands);
22
22
  };
23
23
  exports.getCommands = getCommands;
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFFOUIsbUNBQWtDO0FBRXJCLFFBQUEsYUFBYSxHQUFHLElBQUEsY0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtBQUV2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFDaEMsRUFBRSxFQUN3QixFQUFxQixFQUFFO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxxQkFBYSxDQUFDLENBQUE7SUFFbkQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxxQkFBYSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRXRDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxnQkFBUSxDQUFDLGlEQUFpRCxDQUFDLENBQUE7U0FDdEU7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdCQUFRLENBQ2hCLDZEQUE2RCxDQUM5RCxDQUFBO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzlCLENBQUMsQ0FBQTtBQXpCWSxRQUFBLFdBQVcsZUF5QnZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDbGlDb21wb25lbnRzIH0gZnJvbSAnLi4vY29tcG9uZW50cydcbmltcG9ydCB7IENsaUVycm9yIH0gZnJvbSAnLi9lcnJvcidcblxuZXhwb3J0IGNvbnN0IENPTU1BTkRTX1BBVEggPSByZXNvbHZlKF9fZGlybmFtZSwgJy4uL2NvbW1hbmRzJylcblxuZXhwb3J0IGNvbnN0IGdldENvbW1hbmRzID0gYXN5bmMgKHtcbiAgZnNcbn06IFBpY2s8Q2xpQ29tcG9uZW50cywgJ2ZzJz4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGNvbW1hbmREaXJzID0gYXdhaXQgZnMucmVhZGRpcihDT01NQU5EU19QQVRIKVxuXG4gIGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZERpcnMubWFwKGFzeW5jIChkaXIpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYCR7Q09NTUFORFNfUEFUSH0vJHtkaXJ9YFxuXG4gICAgY29uc3Qgc3RhdERpciA9IGF3YWl0IGZzLnN0YXQocGF0aClcblxuICAgIGlmICghc3RhdERpci5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoJ0RldmVsb3BlcjogQWxsIGNvbW1hbmRzIG11c3QgYmUgaW5zaWRlIGEgZm9sZGVyJylcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0SW5kZXggPSBhd2FpdCBmcy5zdGF0KGAke3BhdGh9L2luZGV4LmpzYClcbiAgICBpZiAoIXN0YXRJbmRleC5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgICAnRGV2ZWxvcGVyOiBBbGwgY29tbWFuZHMgbXVzdCBoYXZlIGFuIFwiaW5kZXguanNcIiBmaWxlIGluc2lkZSdcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyXG4gIH0pXG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGNvbW1hbmRzKVxufVxuIl19
24
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFFOUIsbUNBQWtDO0FBRXJCLFFBQUEsYUFBYSxHQUFHLElBQUEsY0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtBQUV2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQTZCLEVBQXFCLEVBQUU7SUFDeEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLHFCQUFhLENBQUMsQ0FBQTtJQUVuRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQyxxQkFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRXhDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxnQkFBUSxDQUFDLGlEQUFpRCxDQUFDLENBQUE7U0FDdEU7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdCQUFRLENBQUMsNkRBQTZELENBQUMsQ0FBQTtTQUNsRjtRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDOUIsQ0FBQyxDQUFBO0FBckJZLFFBQUEsV0FBVyxlQXFCdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuL2Vycm9yJ1xuXG5leHBvcnQgY29uc3QgQ09NTUFORFNfUEFUSCA9IHJlc29sdmUoX19kaXJuYW1lLCAnLi4vY29tbWFuZHMnKVxuXG5leHBvcnQgY29uc3QgZ2V0Q29tbWFuZHMgPSBhc3luYyAoeyBmcyB9OiBQaWNrPENsaUNvbXBvbmVudHMsICdmcyc+KTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICBjb25zdCBjb21tYW5kRGlycyA9IGF3YWl0IGZzLnJlYWRkaXIoQ09NTUFORFNfUEFUSClcblxuICBjb25zdCBjb21tYW5kcyA9IGNvbW1hbmREaXJzLm1hcChhc3luYyAoZGlyKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IHJlc29sdmUoQ09NTUFORFNfUEFUSCwgZGlyKVxuXG4gICAgY29uc3Qgc3RhdERpciA9IGF3YWl0IGZzLnN0YXQocGF0aClcblxuICAgIGlmICghc3RhdERpci5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoJ0RldmVsb3BlcjogQWxsIGNvbW1hbmRzIG11c3QgYmUgaW5zaWRlIGEgZm9sZGVyJylcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0SW5kZXggPSBhd2FpdCBmcy5zdGF0KGAke3BhdGh9L2luZGV4LmpzYClcbiAgICBpZiAoIXN0YXRJbmRleC5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IENsaUVycm9yKCdEZXZlbG9wZXI6IEFsbCBjb21tYW5kcyBtdXN0IGhhdmUgYW4gXCJpbmRleC5qc1wiIGZpbGUgaW5zaWRlJylcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyXG4gIH0pXG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGNvbW1hbmRzKVxufVxuIl19
@@ -4,13 +4,11 @@ import { CliError } from './error'
4
4
 
5
5
  export const COMMANDS_PATH = resolve(__dirname, '../commands')
6
6
 
7
- export const getCommands = async ({
8
- fs
9
- }: Pick<CliComponents, 'fs'>): Promise<string[]> => {
7
+ export const getCommands = async ({ fs }: Pick<CliComponents, 'fs'>): Promise<string[]> => {
10
8
  const commandDirs = await fs.readdir(COMMANDS_PATH)
11
9
 
12
10
  const commands = commandDirs.map(async (dir) => {
13
- const path = `${COMMANDS_PATH}/${dir}`
11
+ const path = resolve(COMMANDS_PATH, dir)
14
12
 
15
13
  const statDir = await fs.stat(path)
16
14
 
@@ -20,9 +18,7 @@ export const getCommands = async ({
20
18
 
21
19
  const statIndex = await fs.stat(`${path}/index.js`)
22
20
  if (!statIndex.isFile()) {
23
- throw new CliError(
24
- 'Developer: All commands must have an "index.js" file inside'
25
- )
21
+ throw new CliError('Developer: All commands must have an "index.js" file inside')
26
22
  }
27
23
 
28
24
  return dir
@@ -0,0 +1,8 @@
1
+ interface Options {
2
+ env: {
3
+ [key: string]: string;
4
+ };
5
+ silent: boolean;
6
+ }
7
+ export declare function exec(cwd: string, command: string, { env, silent }?: Partial<Options>): Promise<void>;
8
+ export {};
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.exec = void 0;
4
+ const child_process_1 = require("child_process");
5
+ function exec(cwd, command, { env, silent } = {}) {
6
+ return new Promise((resolve, reject) => {
7
+ const [cmd, ...rest] = command.split(' ');
8
+ const child = (0, child_process_1.spawn)(cmd, rest, {
9
+ shell: true,
10
+ cwd,
11
+ env: Object.assign(Object.assign(Object.assign({}, process.env), { NODE_ENV: '' }), env)
12
+ });
13
+ if (!silent) {
14
+ child.stdout.pipe(process.stdout);
15
+ child.stderr.pipe(process.stderr);
16
+ }
17
+ child.stdout.on('data', (data) => {
18
+ if (data.toString().indexOf('The compiler is watching file changes...') !== -1) {
19
+ return resolve(undefined);
20
+ }
21
+ });
22
+ child.on('close', (code) => {
23
+ if (code !== 0) {
24
+ const command = `${cmd} ${rest.join(' ')}`;
25
+ reject(new Error(`Command "${command}" exited with code ${code}. Please try running the command manually`));
26
+ return;
27
+ }
28
+ resolve(undefined);
29
+ });
30
+ });
31
+ }
32
+ exports.exec = exec;
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImV4ZWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsaURBQXFDO0FBT3JDLFNBQWdCLElBQUksQ0FBQyxHQUFXLEVBQUUsT0FBZSxFQUFFLEVBQUUsR0FBRyxFQUFFLE1BQU0sS0FBdUIsRUFBRTtJQUN2RixPQUFPLElBQUksT0FBTyxDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO1FBQ3JDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQ3pDLE1BQU0sS0FBSyxHQUFHLElBQUEscUJBQUssRUFBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1lBQzdCLEtBQUssRUFBRSxJQUFJO1lBQ1gsR0FBRztZQUNILEdBQUcsZ0RBQU8sT0FBTyxDQUFDLEdBQUcsS0FBRSxRQUFRLEVBQUUsRUFBRSxLQUFLLEdBQUcsQ0FBRTtTQUM5QyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ1gsS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFBO1lBQ2pDLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQTtTQUNsQztRQUVELEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxFQUFFO1lBQy9CLElBQUksSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDLE9BQU8sQ0FBQywwQ0FBMEMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFO2dCQUM5RSxPQUFPLE9BQU8sQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUMxQjtRQUNILENBQUMsQ0FBQyxDQUFBO1FBRUYsS0FBSyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxJQUFZLEVBQUUsRUFBRTtZQUNqQyxJQUFJLElBQUksS0FBSyxDQUFDLEVBQUU7Z0JBQ2QsTUFBTSxPQUFPLEdBQUcsR0FBRyxHQUFHLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFBO2dCQUMxQyxNQUFNLENBQUMsSUFBSSxLQUFLLENBQUMsWUFBWSxPQUFPLHNCQUFzQixJQUFJLDJDQUEyQyxDQUFDLENBQUMsQ0FBQTtnQkFDM0csT0FBTTthQUNQO1lBRUQsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFBO1FBQ3BCLENBQUMsQ0FBQyxDQUFBO0lBQ0osQ0FBQyxDQUFDLENBQUE7QUFDSixDQUFDO0FBOUJELG9CQThCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHNwYXduIH0gZnJvbSAnY2hpbGRfcHJvY2VzcydcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBlbnY6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIH1cbiAgc2lsZW50OiBib29sZWFuXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleGVjKGN3ZDogc3RyaW5nLCBjb21tYW5kOiBzdHJpbmcsIHsgZW52LCBzaWxlbnQgfTogUGFydGlhbDxPcHRpb25zPiA9IHt9KTogUHJvbWlzZTx2b2lkPiB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3QgW2NtZCwgLi4ucmVzdF0gPSBjb21tYW5kLnNwbGl0KCcgJylcbiAgICBjb25zdCBjaGlsZCA9IHNwYXduKGNtZCwgcmVzdCwge1xuICAgICAgc2hlbGw6IHRydWUsXG4gICAgICBjd2QsXG4gICAgICBlbnY6IHsgLi4ucHJvY2Vzcy5lbnYsIE5PREVfRU5WOiAnJywgLi4uZW52IH1cbiAgICB9KVxuXG4gICAgaWYgKCFzaWxlbnQpIHtcbiAgICAgIGNoaWxkLnN0ZG91dC5waXBlKHByb2Nlc3Muc3Rkb3V0KVxuICAgICAgY2hpbGQuc3RkZXJyLnBpcGUocHJvY2Vzcy5zdGRlcnIpXG4gICAgfVxuXG4gICAgY2hpbGQuc3Rkb3V0Lm9uKCdkYXRhJywgKGRhdGEpID0+IHtcbiAgICAgIGlmIChkYXRhLnRvU3RyaW5nKCkuaW5kZXhPZignVGhlIGNvbXBpbGVyIGlzIHdhdGNoaW5nIGZpbGUgY2hhbmdlcy4uLicpICE9PSAtMSkge1xuICAgICAgICByZXR1cm4gcmVzb2x2ZSh1bmRlZmluZWQpXG4gICAgICB9XG4gICAgfSlcblxuICAgIGNoaWxkLm9uKCdjbG9zZScsIChjb2RlOiBudW1iZXIpID0+IHtcbiAgICAgIGlmIChjb2RlICE9PSAwKSB7XG4gICAgICAgIGNvbnN0IGNvbW1hbmQgPSBgJHtjbWR9ICR7cmVzdC5qb2luKCcgJyl9YFxuICAgICAgICByZWplY3QobmV3IEVycm9yKGBDb21tYW5kIFwiJHtjb21tYW5kfVwiIGV4aXRlZCB3aXRoIGNvZGUgJHtjb2RlfS4gUGxlYXNlIHRyeSBydW5uaW5nIHRoZSBjb21tYW5kIG1hbnVhbGx5YCkpXG4gICAgICAgIHJldHVyblxuICAgICAgfVxuXG4gICAgICByZXNvbHZlKHVuZGVmaW5lZClcbiAgICB9KVxuICB9KVxufVxuIl19
@@ -0,0 +1,38 @@
1
+ import { spawn } from 'child_process'
2
+
3
+ interface Options {
4
+ env: { [key: string]: string }
5
+ silent: boolean
6
+ }
7
+
8
+ export function exec(cwd: string, command: string, { env, silent }: Partial<Options> = {}): Promise<void> {
9
+ return new Promise((resolve, reject) => {
10
+ const [cmd, ...rest] = command.split(' ')
11
+ const child = spawn(cmd, rest, {
12
+ shell: true,
13
+ cwd,
14
+ env: { ...process.env, NODE_ENV: '', ...env }
15
+ })
16
+
17
+ if (!silent) {
18
+ child.stdout.pipe(process.stdout)
19
+ child.stderr.pipe(process.stderr)
20
+ }
21
+
22
+ child.stdout.on('data', (data) => {
23
+ if (data.toString().indexOf('The compiler is watching file changes...') !== -1) {
24
+ return resolve(undefined)
25
+ }
26
+ })
27
+
28
+ child.on('close', (code: number) => {
29
+ if (code !== 0) {
30
+ const command = `${cmd} ${rest.join(' ')}`
31
+ reject(new Error(`Command "${command}" exited with code ${code}. Please try running the command manually`))
32
+ return
33
+ }
34
+
35
+ resolve(undefined)
36
+ })
37
+ })
38
+ }