@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.
- package/cli/commands/build/helpers.d.ts +25 -0
- package/cli/commands/build/helpers.js +50 -0
- package/cli/commands/build/helpers.ts +95 -0
- package/cli/commands/build/index.d.ts +19 -0
- package/cli/commands/build/index.js +64 -0
- package/cli/commands/build/index.ts +91 -0
- package/cli/commands/init/index.d.ts +1 -1
- package/cli/commands/init/index.js +8 -14
- package/cli/commands/init/index.ts +8 -18
- package/cli/commands/init/repos.js +1 -1
- package/cli/commands/init/repos.ts +1 -2
- package/cli/commands/preview/bff.d.ts +3 -0
- package/cli/commands/preview/bff.js +50 -0
- package/cli/commands/preview/bff.ts +59 -0
- package/cli/commands/preview/catalyst.d.ts +5 -0
- package/cli/commands/preview/catalyst.js +24 -0
- package/cli/commands/preview/catalyst.ts +31 -0
- package/cli/commands/preview/coordinates.d.ts +20 -0
- package/cli/commands/preview/coordinates.js +90 -0
- package/cli/commands/preview/coordinates.ts +146 -0
- package/cli/commands/preview/endpoints.d.ts +10 -0
- package/cli/commands/preview/endpoints.js +500 -0
- package/cli/commands/preview/endpoints.ts +594 -0
- package/cli/commands/preview/eth.d.ts +2 -0
- package/cli/commands/preview/eth.js +6 -0
- package/cli/commands/preview/eth.ts +3 -0
- package/cli/commands/preview/index.d.ts +18 -0
- package/cli/commands/preview/index.js +75 -0
- package/cli/commands/preview/index.ts +88 -0
- package/cli/commands/preview/port.d.ts +1 -0
- package/cli/commands/preview/port.js +21 -0
- package/cli/commands/preview/port.ts +15 -0
- package/cli/commands/preview/project.d.ts +14 -0
- package/cli/commands/preview/project.js +77 -0
- package/cli/commands/preview/project.ts +112 -0
- package/cli/commands/preview/types.d.ts +13 -0
- package/cli/commands/preview/types.js +3 -0
- package/cli/commands/preview/types.ts +19 -0
- package/cli/commands/preview/wire.d.ts +14 -0
- package/cli/commands/preview/wire.js +28 -0
- package/cli/commands/preview/wire.ts +48 -0
- package/cli/commands/preview/ws.d.ts +7 -0
- package/cli/commands/preview/ws.js +16 -0
- package/cli/commands/preview/ws.ts +24 -0
- package/cli/commands/start/index.d.ts +29 -0
- package/cli/commands/start/index.js +121 -0
- package/cli/commands/start/index.ts +132 -0
- package/cli/components/fs.d.ts +2 -1
- package/cli/components/fs.js +1 -1
- package/cli/components/fs.ts +2 -11
- package/cli/index.js +4 -6
- package/cli/index.ts +9 -10
- package/cli/utils/args.js +2 -2
- package/cli/utils/args.ts +2 -8
- package/cli/utils/commands.js +2 -2
- package/cli/utils/commands.ts +3 -7
- package/cli/utils/exec.d.ts +8 -0
- package/cli/utils/exec.js +33 -0
- package/cli/utils/exec.ts +38 -0
- package/cli/utils/fs.js +1 -1
- package/cli/utils/fs.ts +1 -4
- package/cli/utils/handler.d.ts +6 -0
- package/cli/utils/handler.js +19 -0
- package/cli/utils/handler.ts +23 -0
- package/cli/utils/object.d.ts +9 -0
- package/cli/utils/object.js +45 -0
- package/cli/utils/object.ts +62 -0
- package/cli/utils/out-messages.d.ts +1 -0
- package/cli/utils/out-messages.js +8 -0
- package/cli/utils/out-messages.ts +3 -0
- package/internal/Observable.js +3 -7
- package/internal/provider.js +1 -1
- package/internal/transports/rendererTransport.js +2 -3
- package/messageBus.js +1 -1
- package/observables.js +1 -1
- package/package.json +18 -7
- package/src/internal/Observable.ts +9 -44
- package/src/internal/provider.ts +3 -11
- package/src/internal/transports/rendererTransport.ts +4 -12
- package/src/messageBus.ts +1 -4
- package/src/observables.ts +27 -63
- package/tsconfig.cli.json +10 -1
- package/cli/utils/spinner.d.ts +0 -15
- package/cli/utils/spinner.js +0 -41
- 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw0Q0FBbUI7QUFDbkIsK0JBQThCO0FBQzlCLGdEQUF1QjtBQUd2QixvQ0FBd0M7QUFDeEMsd0NBQTRDO0FBQzVDLDBDQUE2QztBQUM3QywyQ0FBMEM7QUFDMUMsaURBQXFEO0FBTXhDLFFBQUEsSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDO0lBQzFCLE9BQU8sRUFBRSxNQUFNO0lBQ2YsUUFBUSxFQUFFLE9BQU87SUFDakIsUUFBUSxFQUFFLE1BQU07SUFDaEIsWUFBWSxFQUFFLE9BQU87SUFDckIsY0FBYyxFQUFFLE9BQU87SUFDdkIsWUFBWSxFQUFFLE9BQU87SUFDckIsTUFBTSxFQUFFLE9BQU87SUFDZixnQkFBZ0IsRUFBRSxPQUFPO0lBQ3pCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLElBQUksRUFBRSxRQUFRO0lBQ2QsSUFBSSxFQUFFLFFBQVE7SUFDZCxJQUFJLEVBQUUsWUFBWTtJQUNsQixJQUFJLEVBQUUsY0FBYztJQUNwQixJQUFJLEVBQUUsWUFBWTtJQUNsQixjQUFjLEVBQUUsT0FBTztJQUN2QixrQkFBa0IsRUFBRSxPQUFPO0NBQzVCLENBQUMsQ0FBQTtBQUVGLFNBQWdCLElBQUk7SUFDbEIsT0FBTzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBd0JSLENBQUE7QUFDRCxDQUFDO0FBMUJELG9CQTBCQztBQUVZLFFBQUEsSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDLEtBQUssVUFBVSxJQUFJLENBQUMsT0FBZ0I7SUFDOUQsTUFBTSxHQUFHLEdBQUcsSUFBQSxjQUFPLEVBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7SUFDaEUsTUFBTSxJQUFJLEdBQUcsWUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLE9BQU8sQ0FB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LENBQUMsQ0FBQTtJQUVGLEtBQUssTUFBTSxJQUFJLElBQUksVUFBVSxFQUFFO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0tBQzNCO0lBRUQsSUFBSSxZQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRTtRQUM1QixPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUE7UUFDcEMsS0FBSyxNQUFNLElBQUksSUFBSSxVQUFVLEVBQUU7WUFDN0IsTUFBTSxZQUFZLEdBQUcsSUFBSSxlQUFlLEVBQUUsQ0FBQTtZQUMxQyxZQUFZLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQTtZQUN6QyxPQUFPLENBQUMsR0FBRyxDQUFDLGFBQWEsWUFBWSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQTtTQUNyRDtLQUNGO0lBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFBO0lBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUd2QyxJQUFJLFdBQVcsSUFBSSxVQUFVLENBQUMsTUFBTSxJQUFJLENBQUMsWUFBSSxDQUFDLGtCQUFrQixDQUFDLEVBQUU7UUFDakUsSUFBSTtZQUNGLE1BQU0sSUFBQSxjQUFJLEVBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDMUI7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUNBQXVDLENBQUMsQ0FBQTtTQUNyRDtLQUNGO0FBQ0gsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgb3MgZnJvbSAnb3MnXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCBvcGVuIGZyb20gJ29wZW4nXG5cbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgbWFpbiBhcyBidWlsZCB9IGZyb20gJy4uL2J1aWxkJ1xuaW1wb3J0IHsgbWFpbiBhcyBwcmV2aWV3IH0gZnJvbSAnLi4vcHJldmlldydcbmltcG9ydCB7IHByZXZpZXdQb3J0IH0gZnJvbSAnLi4vcHJldmlldy9wb3J0J1xuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4uLy4uL3V0aWxzL2FyZ3MnXG5pbXBvcnQgeyBtYWluIGFzIGhhbmRsZXIgfSBmcm9tICcuLi8uLi91dGlscy9oYW5kbGVyJ1xuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiB0eXBlb2YgYXJnc1xuICBjb21wb25lbnRzOiBQaWNrPENsaUNvbXBvbmVudHMsICdmZXRjaCcgfCAnZnMnPlxufVxuXG5leHBvcnQgY29uc3QgYXJncyA9IGdldEFyZ3Moe1xuICAnLS1kaXInOiBTdHJpbmcsXG4gICctLWhlbHAnOiBCb29sZWFuLFxuICAnLS1wb3J0JzogU3RyaW5nLFxuICAnLS1uby1kZWJ1Zyc6IEJvb2xlYW4sXG4gICctLW5vLWJyb3dzZXInOiBCb29sZWFuLFxuICAnLS1uby13YXRjaCc6IEJvb2xlYW4sXG4gICctLWNpJzogQm9vbGVhbixcbiAgJy0tc2tpcC1pbnN0YWxsJzogQm9vbGVhbixcbiAgJy0td2ViMyc6IEJvb2xlYW4sXG4gICctaCc6ICctLWhlbHAnLFxuICAnLXAnOiAnLS1wb3J0JyxcbiAgJy1kJzogJy0tbm8tZGVidWcnLFxuICAnLWInOiAnLS1uby1icm93c2VyJyxcbiAgJy13JzogJy0tbm8td2F0Y2gnLFxuICAnLS1za2lwLWJ1aWxkJzogQm9vbGVhbixcbiAgJy0tZGVza3RvcC1jbGllbnQnOiBCb29sZWFuXG59KVxuXG5leHBvcnQgZnVuY3Rpb24gaGVscCgpIHtcbiAgcmV0dXJuIGBcbiAgVXNhZ2U6IGRjbCBzdGFydCBbb3B0aW9uc11cblxuICAgIE9wdGlvbnM6XG5cbiAgICAgIC1oLCAtLWhlbHAgICAgICAgICAgICAgICAgRGlzcGxheXMgY29tcGxldGUgaGVscFxuICAgICAgLXAsIC0tcG9ydCAgICAgICAgW3BvcnRdICBTZWxlY3QgYSBjdXN0b20gcG9ydCBmb3IgdGhlIGRldmVsb3BtZW50IHNlcnZlclxuICAgICAgLWQsIC0tbm8tZGVidWcgICAgICAgICAgICBEaXNhYmxlIGRlYnVnZ2luZyBwYW5lbFxuICAgICAgLWIsIC0tbm8tYnJvd3NlciAgICAgICAgICBEbyBub3Qgb3BlbiBhIG5ldyBicm93c2VyIHdpbmRvd1xuICAgICAgLXcsIC0tbm8td2F0Y2ggICAgICAgICAgICBEbyBub3Qgb3BlbiB3YXRjaCBmb3IgZmlsZXN5c3RlbSBjaGFuZ2VzXG4gICAgICAtYywgLS1jaSAgICAgICAgICAgICAgICAgIFJ1biB0aGUgcGFyY2VsIHByZXZpZXdlciBvbiBhIHJlbW90ZSB1bml4IHNlcnZlclxuICAgICAgLS13ZWIzICAgICAgICAgICAgICAgICAgICBDb25uZWN0cyBwcmV2aWV3IHRvIGJyb3dzZXIgd2FsbGV0IHRvIHVzZSB0aGUgYXNzb2NpYXRlZCBhdmF0YXIgYW5kIGFjY291bnRcbiAgICAgIC0tc2tpcC1idWlsZCAgICAgICAgICAgICAgU2tpcCBidWlsZCBhbmQgb25seSBzZXJ2ZSB0aGUgZmlsZXMgaW4gcHJldmlldyBtb2RlXG4gICAgICAtLWRlc2t0b3AtY2xpZW50ICAgICAgICAgIFNob3cgVVJMIHRvIGxhdW5jaCBwcmV2aWV3IGluIHRoZSBkZXNrdG9wIGNsaWVudCAoQkVUQSlcblxuICAgIEV4YW1wbGVzOlxuXG4gICAgLSBTdGFydCBhIGxvY2FsIGRldmVsb3BtZW50IHNlcnZlciBmb3IgYSBEZWNlbnRyYWxhbmQgU2NlbmUgYXQgcG9ydCAzNTAwXG5cbiAgICAgICQgZGNsIHN0YXJ0IC1wIDM1MDBcblxuICAgIC0gU3RhcnQgYSBsb2NhbCBkZXZlbG9wbWVudCBzZXJ2ZXIgZm9yIGEgRGVjZW50cmFsYW5kIFNjZW5lIGF0IGEgZG9ja2VyIGNvbnRhaW5lclxuXG4gICAgICAkIGRjbCBzdGFydCAtLWNpXG5gXG59XG5cbmV4cG9ydCBjb25zdCBtYWluID0gaGFuZGxlcihhc3luYyBmdW5jdGlvbiBtYWluKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgY29uc3QgZGlyID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvcHRpb25zLmFyZ3NbJy0tZGlyJ10gfHwgJy4nKVxuICBjb25zdCBpc0NpID0gYXJnc1snLS1jaSddIHx8IHByb2Nlc3MuZW52LkNJIHx8IGZhbHNlXG4gIGNvbnN0IGRlYnVnID0gIWFyZ3NbJy0tbm8tZGVidWcnXSAmJiAhaXNDaVxuICBjb25zdCBvcGVuQnJvd3NlciA9ICFhcmdzWyctLW5vLWJyb3dzZXInXSAmJiAhaXNDaVxuICBjb25zdCBza2lwQnVpbGQgPSBhcmdzWyctLXNraXAtYnVpbGQnXVxuICBjb25zdCB3YXRjaCA9ICFhcmdzWyctLW5vLXdhdGNoJ10gJiYgIWlzQ2kgJiYgIXNraXBCdWlsZFxuICBjb25zdCBlbmFibGVXZWIzID0gYXJnc1snLS13ZWIzJ11cbiAgY29uc3QgcG9ydCA9IHBhcnNlSW50KGFyZ3NbJy0tcG9ydCddISwgMTApIHx8IChhd2FpdCBwcmV2aWV3UG9ydCgpKVxuICBjb25zdCBiYXNlQ29vcmRzID0geyB4OiAwLCB5OiAwIH1cbiAgY29uc3QgaGFzUG9ydGFibGVFeHBlcmllbmNlID0gZmFsc2VcblxuICBjb25zdCBjb21wcyA9IHsgY29tcG9uZW50czogb3B0aW9ucy5jb21wb25lbnRzIH1cbiAgaWYgKCFza2lwQnVpbGQpIHtcbiAgICBhd2FpdCBidWlsZCh7IGFyZ3M6IHsgJy0tZGlyJzogZGlyLCAnLS13YXRjaCc6IHdhdGNoIH0sIC4uLmNvbXBzIH0pXG4gIH1cbiAgYXdhaXQgcHJldmlldyh7IGFyZ3M6IHsgJy0tZGlyJzogZGlyLCAnLS1wb3J0JzogcG9ydCB9LCAuLi5jb21wcyB9KVxuXG4gIGNvbnN0IGlmYWNlcyA9IG9zLm5ldHdvcmtJbnRlcmZhY2VzKClcbiAgY29uc3QgYXZhaWxhYmxlVVJMczogc3RyaW5nW10gPSBbXVxuXG4gIGNvbnNvbGUubG9nKGBcXG5QcmV2aWV3IHNlcnZlciBpcyBub3cgcnVubmluZyFgKVxuICBjb25zb2xlLmxvZygnQXZhaWxhYmxlIG9uOlxcbicpXG5cbiAgT2JqZWN0LmtleXMoaWZhY2VzKS5mb3JFYWNoKChkZXYpID0+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
|
+
})
|
package/cli/components/fs.d.ts
CHANGED
@@ -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' | '
|
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;
|
package/cli/components/fs.js
CHANGED
@@ -55,4 +55,4 @@ function createFsComponent() {
|
|
55
55
|
};
|
56
56
|
}
|
57
57
|
exports.createFsComponent = createFsComponent;
|
58
|
-
//# sourceMappingURL=data:application/json;base64,
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF3QjtBQUN4Qix3REFBeUM7QUFnQnpDLEtBQUssVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNuQyxJQUFJO1FBQ0YsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxPQUFPLElBQUksQ0FBQTtLQUNaO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQUtELFNBQWdCLGlCQUFpQjtJQUMvQixPQUFPO1FBQ0wsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtRQUNyQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCO1FBQ3ZDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztRQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1NBQ3hCO1FBQ0QsU0FBUztLQUNWLENBQUE7QUFDSCxDQUFDO0FBbEJELDhDQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcblxuLyoqXG4gKiBAcHVibGljXG4gKlxuICogVGhpcyBtYXkgYmUgbW92ZWQgdG8gd2VsbC1rbm93bi1jb21wb25lbnRzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IHR5cGUgSUZpbGVTeXN0ZW1Db21wb25lbnQgPSBQaWNrPHR5cGVvZiBmcywgJ2NyZWF0ZVJlYWRTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzLCAnY3JlYXRlV3JpdGVTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzUHJvbWlzZXMsICdhY2Nlc3MnIHwgJ29wZW5kaXInIHwgJ3N0YXQnIHwgJ3VubGluaycgfCAnbWtkaXInIHwgJ3JlYWRGaWxlJyB8ICd3cml0ZUZpbGUnPiAmIHtcbiAgICBjb25zdGFudHM6IFBpY2s8dHlwZW9mIGZzLmNvbnN0YW50cywgJ0ZfT0snIHwgJ1JfT0snPlxuICB9ICYge1xuICAgIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+XG4gICAgcmVhZGRpcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPlxuICB9XG5cbmFzeW5jIGZ1bmN0aW9uIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MocGF0aCwgZnMuY29uc3RhbnRzLkZfT0sgfCBmcy5jb25zdGFudHMuUl9PSylcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDb21wb25lbnQoKTogSUZpbGVTeXN0ZW1Db21wb25lbnQge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJlYWRTdHJlYW06IGZzLmNyZWF0ZVJlYWRTdHJlYW0sXG4gICAgY3JlYXRlV3JpdGVTdHJlYW06IGZzLmNyZWF0ZVdyaXRlU3RyZWFtLFxuICAgIGFjY2VzczogZnNQcm9taXNlcy5hY2Nlc3MsXG4gICAgd3JpdGVGaWxlOiBmc1Byb21pc2VzLndyaXRlRmlsZSxcbiAgICBvcGVuZGlyOiBmc1Byb21pc2VzLm9wZW5kaXIsXG4gICAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICAgIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gICAgbWtkaXI6IGZzUHJvbWlzZXMubWtkaXIsXG4gICAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICAgIHJlYWRGaWxlOiBmc1Byb21pc2VzLnJlYWRGaWxlLFxuICAgIGNvbnN0YW50czoge1xuICAgICAgRl9PSzogZnMuY29uc3RhbnRzLkZfT0ssXG4gICAgICBSX09LOiBmcy5jb25zdGFudHMuUl9PS1xuICAgIH0sXG4gICAgZXhpc3RQYXRoXG4gIH1cbn1cbiJdfQ==
|
package/cli/components/fs.ts
CHANGED
@@ -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,
|
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)({
|
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,
|
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
|
}
|
package/cli/utils/commands.js
CHANGED
@@ -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 =
|
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,
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFFOUIsbUNBQWtDO0FBRXJCLFFBQUEsYUFBYSxHQUFHLElBQUEsY0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtBQUV2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFBRSxFQUFFLEVBQTZCLEVBQXFCLEVBQUU7SUFDeEYsTUFBTSxXQUFXLEdBQUcsTUFBTSxFQUFFLENBQUMsT0FBTyxDQUFDLHFCQUFhLENBQUMsQ0FBQTtJQUVuRCxNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxHQUFHLEVBQUUsRUFBRTtRQUM3QyxNQUFNLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQyxxQkFBYSxFQUFFLEdBQUcsQ0FBQyxDQUFBO1FBRXhDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxnQkFBUSxDQUFDLGlEQUFpRCxDQUFDLENBQUE7U0FDdEU7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdCQUFRLENBQUMsNkRBQTZELENBQUMsQ0FBQTtTQUNsRjtRQUVELE9BQU8sR0FBRyxDQUFBO0lBQ1osQ0FBQyxDQUFDLENBQUE7SUFFRixPQUFPLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7QUFDOUIsQ0FBQyxDQUFBO0FBckJZLFFBQUEsV0FBVyxlQXFCdkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuL2Vycm9yJ1xuXG5leHBvcnQgY29uc3QgQ09NTUFORFNfUEFUSCA9IHJlc29sdmUoX19kaXJuYW1lLCAnLi4vY29tbWFuZHMnKVxuXG5leHBvcnQgY29uc3QgZ2V0Q29tbWFuZHMgPSBhc3luYyAoeyBmcyB9OiBQaWNrPENsaUNvbXBvbmVudHMsICdmcyc+KTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICBjb25zdCBjb21tYW5kRGlycyA9IGF3YWl0IGZzLnJlYWRkaXIoQ09NTUFORFNfUEFUSClcblxuICBjb25zdCBjb21tYW5kcyA9IGNvbW1hbmREaXJzLm1hcChhc3luYyAoZGlyKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IHJlc29sdmUoQ09NTUFORFNfUEFUSCwgZGlyKVxuXG4gICAgY29uc3Qgc3RhdERpciA9IGF3YWl0IGZzLnN0YXQocGF0aClcblxuICAgIGlmICghc3RhdERpci5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoJ0RldmVsb3BlcjogQWxsIGNvbW1hbmRzIG11c3QgYmUgaW5zaWRlIGEgZm9sZGVyJylcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0SW5kZXggPSBhd2FpdCBmcy5zdGF0KGAke3BhdGh9L2luZGV4LmpzYClcbiAgICBpZiAoIXN0YXRJbmRleC5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IENsaUVycm9yKCdEZXZlbG9wZXI6IEFsbCBjb21tYW5kcyBtdXN0IGhhdmUgYW4gXCJpbmRleC5qc1wiIGZpbGUgaW5zaWRlJylcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyXG4gIH0pXG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGNvbW1hbmRzKVxufVxuIl19
|
package/cli/utils/commands.ts
CHANGED
@@ -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 =
|
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,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
|
+
}
|