@dcl/sdk 7.0.6-3999809037.commit-0a47a3c → 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 +3 -1
- package/cli/commands/init/index.js +9 -15
- package/cli/commands/init/index.ts +12 -16
- 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/fetch.d.ts +5 -0
- package/cli/components/fetch.js +34 -0
- package/cli/components/fetch.ts +11 -0
- package/cli/components/fs.d.ts +11 -0
- package/cli/components/fs.js +58 -0
- package/cli/components/fs.ts +48 -0
- package/cli/components/index.d.ts +7 -0
- package/cli/components/index.js +13 -0
- package/cli/components/index.ts +14 -0
- package/cli/index.d.ts +2 -0
- package/cli/index.js +8 -8
- package/cli/index.ts +15 -12
- package/cli/utils/args.js +2 -2
- package/cli/utils/args.ts +2 -8
- package/cli/utils/commands.d.ts +2 -1
- package/cli/utils/commands.js +8 -8
- package/cli/utils/commands.ts +11 -11
- 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.d.ts +9 -8
- package/cli/utils/fs.js +7 -47
- package/cli/utils/fs.ts +11 -67
- 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
|
+
})
|
@@ -0,0 +1,34 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
exports.createFetchComponent = void 0;
|
27
|
+
const undici = __importStar(require("undici"));
|
28
|
+
function createFetchComponent() {
|
29
|
+
return {
|
30
|
+
fetch: undici.fetch
|
31
|
+
};
|
32
|
+
}
|
33
|
+
exports.createFetchComponent = createFetchComponent;
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmV0Y2guanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmZXRjaC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFnQztBQU1oQyxTQUFnQixvQkFBb0I7SUFDbEMsT0FBTztRQUNMLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztLQUNwQixDQUFBO0FBQ0gsQ0FBQztBQUpELG9EQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgdW5kaWNpIGZyb20gJ3VuZGljaSdcblxuZXhwb3J0IHR5cGUgSUZldGNoQ29tcG9uZW50ID0ge1xuICBmZXRjaCh1cmw6IHN0cmluZywgaW5pdD86IHVuZGljaS5SZXF1ZXN0SW5pdCk6IFByb21pc2U8dW5kaWNpLlJlc3BvbnNlPlxufVxuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRmV0Y2hDb21wb25lbnQoKTogSUZldGNoQ29tcG9uZW50IHtcbiAgcmV0dXJuIHtcbiAgICBmZXRjaDogdW5kaWNpLmZldGNoXG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,11 @@
|
|
1
|
+
/// <reference types="node" />
|
2
|
+
/// <reference types="node" />
|
3
|
+
import * as fs from 'fs';
|
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' | 'readFile' | 'writeFile'> & {
|
6
|
+
constants: Pick<typeof fs.constants, 'F_OK' | 'R_OK'>;
|
7
|
+
} & {
|
8
|
+
existPath(path: string): Promise<boolean>;
|
9
|
+
readdir(path: string): Promise<string[]>;
|
10
|
+
};
|
11
|
+
export declare function createFsComponent(): IFileSystemComponent;
|
@@ -0,0 +1,58 @@
|
|
1
|
+
"use strict";
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
3
|
+
if (k2 === undefined) k2 = k;
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
7
|
+
}
|
8
|
+
Object.defineProperty(o, k2, desc);
|
9
|
+
}) : (function(o, m, k, k2) {
|
10
|
+
if (k2 === undefined) k2 = k;
|
11
|
+
o[k2] = m[k];
|
12
|
+
}));
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
15
|
+
}) : function(o, v) {
|
16
|
+
o["default"] = v;
|
17
|
+
});
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
19
|
+
if (mod && mod.__esModule) return mod;
|
20
|
+
var result = {};
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
22
|
+
__setModuleDefault(result, mod);
|
23
|
+
return result;
|
24
|
+
};
|
25
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
26
|
+
exports.createFsComponent = void 0;
|
27
|
+
const fs = __importStar(require("fs"));
|
28
|
+
const fsPromises = __importStar(require("fs/promises"));
|
29
|
+
async function existPath(path) {
|
30
|
+
try {
|
31
|
+
await fs.promises.access(path, fs.constants.F_OK | fs.constants.R_OK);
|
32
|
+
return true;
|
33
|
+
}
|
34
|
+
catch (error) {
|
35
|
+
return false;
|
36
|
+
}
|
37
|
+
}
|
38
|
+
function createFsComponent() {
|
39
|
+
return {
|
40
|
+
createReadStream: fs.createReadStream,
|
41
|
+
createWriteStream: fs.createWriteStream,
|
42
|
+
access: fsPromises.access,
|
43
|
+
writeFile: fsPromises.writeFile,
|
44
|
+
opendir: fsPromises.opendir,
|
45
|
+
stat: fsPromises.stat,
|
46
|
+
unlink: fsPromises.unlink,
|
47
|
+
mkdir: fsPromises.mkdir,
|
48
|
+
readdir: fsPromises.readdir,
|
49
|
+
readFile: fsPromises.readFile,
|
50
|
+
constants: {
|
51
|
+
F_OK: fs.constants.F_OK,
|
52
|
+
R_OK: fs.constants.R_OK
|
53
|
+
},
|
54
|
+
existPath
|
55
|
+
};
|
56
|
+
}
|
57
|
+
exports.createFsComponent = createFsComponent;
|
58
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF3QjtBQUN4Qix3REFBeUM7QUFnQnpDLEtBQUssVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNuQyxJQUFJO1FBQ0YsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxPQUFPLElBQUksQ0FBQTtLQUNaO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQUtELFNBQWdCLGlCQUFpQjtJQUMvQixPQUFPO1FBQ0wsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtRQUNyQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCO1FBQ3ZDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztRQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1NBQ3hCO1FBQ0QsU0FBUztLQUNWLENBQUE7QUFDSCxDQUFDO0FBbEJELDhDQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcblxuLyoqXG4gKiBAcHVibGljXG4gKlxuICogVGhpcyBtYXkgYmUgbW92ZWQgdG8gd2VsbC1rbm93bi1jb21wb25lbnRzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IHR5cGUgSUZpbGVTeXN0ZW1Db21wb25lbnQgPSBQaWNrPHR5cGVvZiBmcywgJ2NyZWF0ZVJlYWRTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzLCAnY3JlYXRlV3JpdGVTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzUHJvbWlzZXMsICdhY2Nlc3MnIHwgJ29wZW5kaXInIHwgJ3N0YXQnIHwgJ3VubGluaycgfCAnbWtkaXInIHwgJ3JlYWRGaWxlJyB8ICd3cml0ZUZpbGUnPiAmIHtcbiAgICBjb25zdGFudHM6IFBpY2s8dHlwZW9mIGZzLmNvbnN0YW50cywgJ0ZfT0snIHwgJ1JfT0snPlxuICB9ICYge1xuICAgIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+XG4gICAgcmVhZGRpcihwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZ1tdPlxuICB9XG5cbmFzeW5jIGZ1bmN0aW9uIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MocGF0aCwgZnMuY29uc3RhbnRzLkZfT0sgfCBmcy5jb25zdGFudHMuUl9PSylcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDb21wb25lbnQoKTogSUZpbGVTeXN0ZW1Db21wb25lbnQge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJlYWRTdHJlYW06IGZzLmNyZWF0ZVJlYWRTdHJlYW0sXG4gICAgY3JlYXRlV3JpdGVTdHJlYW06IGZzLmNyZWF0ZVdyaXRlU3RyZWFtLFxuICAgIGFjY2VzczogZnNQcm9taXNlcy5hY2Nlc3MsXG4gICAgd3JpdGVGaWxlOiBmc1Byb21pc2VzLndyaXRlRmlsZSxcbiAgICBvcGVuZGlyOiBmc1Byb21pc2VzLm9wZW5kaXIsXG4gICAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICAgIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gICAgbWtkaXI6IGZzUHJvbWlzZXMubWtkaXIsXG4gICAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICAgIHJlYWRGaWxlOiBmc1Byb21pc2VzLnJlYWRGaWxlLFxuICAgIGNvbnN0YW50czoge1xuICAgICAgRl9PSzogZnMuY29uc3RhbnRzLkZfT0ssXG4gICAgICBSX09LOiBmcy5jb25zdGFudHMuUl9PS1xuICAgIH0sXG4gICAgZXhpc3RQYXRoXG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,48 @@
|
|
1
|
+
import * as fs from 'fs'
|
2
|
+
import * as fsPromises from 'fs/promises'
|
3
|
+
|
4
|
+
/**
|
5
|
+
* @public
|
6
|
+
*
|
7
|
+
* This may be moved to well-known-components in the future
|
8
|
+
*/
|
9
|
+
export type IFileSystemComponent = Pick<typeof fs, 'createReadStream'> &
|
10
|
+
Pick<typeof fs, 'createWriteStream'> &
|
11
|
+
Pick<typeof fsPromises, 'access' | 'opendir' | 'stat' | 'unlink' | 'mkdir' | 'readFile' | 'writeFile'> & {
|
12
|
+
constants: Pick<typeof fs.constants, 'F_OK' | 'R_OK'>
|
13
|
+
} & {
|
14
|
+
existPath(path: string): Promise<boolean>
|
15
|
+
readdir(path: string): Promise<string[]>
|
16
|
+
}
|
17
|
+
|
18
|
+
async function existPath(path: string): Promise<boolean> {
|
19
|
+
try {
|
20
|
+
await fs.promises.access(path, fs.constants.F_OK | fs.constants.R_OK)
|
21
|
+
return true
|
22
|
+
} catch (error) {
|
23
|
+
return false
|
24
|
+
}
|
25
|
+
}
|
26
|
+
|
27
|
+
/**
|
28
|
+
* @public
|
29
|
+
*/
|
30
|
+
export function createFsComponent(): IFileSystemComponent {
|
31
|
+
return {
|
32
|
+
createReadStream: fs.createReadStream,
|
33
|
+
createWriteStream: fs.createWriteStream,
|
34
|
+
access: fsPromises.access,
|
35
|
+
writeFile: fsPromises.writeFile,
|
36
|
+
opendir: fsPromises.opendir,
|
37
|
+
stat: fsPromises.stat,
|
38
|
+
unlink: fsPromises.unlink,
|
39
|
+
mkdir: fsPromises.mkdir,
|
40
|
+
readdir: fsPromises.readdir,
|
41
|
+
readFile: fsPromises.readFile,
|
42
|
+
constants: {
|
43
|
+
F_OK: fs.constants.F_OK,
|
44
|
+
R_OK: fs.constants.R_OK
|
45
|
+
},
|
46
|
+
existPath
|
47
|
+
}
|
48
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.initComponents = void 0;
|
4
|
+
const fetch_1 = require("./fetch");
|
5
|
+
const fs_1 = require("./fs");
|
6
|
+
function initComponents() {
|
7
|
+
return {
|
8
|
+
fs: (0, fs_1.createFsComponent)(),
|
9
|
+
fetch: (0, fetch_1.createFetchComponent)()
|
10
|
+
};
|
11
|
+
}
|
12
|
+
exports.initComponents = initComponents;
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtQ0FBK0Q7QUFDL0QsNkJBQThEO0FBTzlELFNBQWdCLGNBQWM7SUFDNUIsT0FBTztRQUNMLEVBQUUsRUFBRSxJQUFBLHNCQUFpQixHQUFFO1FBQ3ZCLEtBQUssRUFBRSxJQUFBLDRCQUFvQixHQUFFO0tBQzlCLENBQUE7QUFDSCxDQUFDO0FBTEQsd0NBS0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVGZXRjaENvbXBvbmVudCwgSUZldGNoQ29tcG9uZW50IH0gZnJvbSAnLi9mZXRjaCdcbmltcG9ydCB7IGNyZWF0ZUZzQ29tcG9uZW50LCBJRmlsZVN5c3RlbUNvbXBvbmVudCB9IGZyb20gJy4vZnMnXG5cbmV4cG9ydCB0eXBlIENsaUNvbXBvbmVudHMgPSB7XG4gIGZzOiBJRmlsZVN5c3RlbUNvbXBvbmVudFxuICBmZXRjaDogSUZldGNoQ29tcG9uZW50XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29tcG9uZW50cygpOiBDbGlDb21wb25lbnRzIHtcbiAgcmV0dXJuIHtcbiAgICBmczogY3JlYXRlRnNDb21wb25lbnQoKSxcbiAgICBmZXRjaDogY3JlYXRlRmV0Y2hDb21wb25lbnQoKVxuICB9XG59XG4iXX0=
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import { createFetchComponent, IFetchComponent } from './fetch'
|
2
|
+
import { createFsComponent, IFileSystemComponent } from './fs'
|
3
|
+
|
4
|
+
export type CliComponents = {
|
5
|
+
fs: IFileSystemComponent
|
6
|
+
fetch: IFetchComponent
|
7
|
+
}
|
8
|
+
|
9
|
+
export function initComponents(): CliComponents {
|
10
|
+
return {
|
11
|
+
fs: createFsComponent(),
|
12
|
+
fetch: createFetchComponent()
|
13
|
+
}
|
14
|
+
}
|
package/cli/index.d.ts
CHANGED
package/cli/index.js
CHANGED
@@ -5,13 +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
|
-
const
|
12
|
-
|
13
|
-
* npx sdk ${$}`)
|
14
|
-
.join('');
|
12
|
+
const components_1 = require("./components");
|
13
|
+
const listCommandsStr = (commands) => (0, out_messages_1.toStringList)(commands.map(($) => `npx @dcl/sdk ${$}`));
|
15
14
|
const handleError = (err) => {
|
16
15
|
if (!(err instanceof error_1.CliError)) {
|
17
16
|
log_1.default.warn(`Developer: All errors thrown must be an instance of "CliError"`);
|
@@ -34,18 +33,19 @@ const helpMessage = (commands) => `Here is the list of commands: ${listCommandsS
|
|
34
33
|
(async () => {
|
35
34
|
const command = process.argv[2];
|
36
35
|
const needsHelp = args['--help'];
|
37
|
-
const
|
36
|
+
const components = (0, components_1.initComponents)();
|
37
|
+
const commands = await (0, commands_1.getCommands)(components);
|
38
38
|
if (!commands.includes(command)) {
|
39
39
|
if (needsHelp) {
|
40
40
|
log_1.default.info(helpMessage(commands));
|
41
41
|
return;
|
42
42
|
}
|
43
|
-
throw new error_1.CliError(`Command ${command} is invalid. ${helpMessage}`);
|
43
|
+
throw new error_1.CliError(`Command ${command} is invalid. ${helpMessage(commands)}`);
|
44
44
|
}
|
45
45
|
const cmd = require(`${commands_1.COMMANDS_PATH}/${command}`);
|
46
46
|
if (commandFnsAreValid(cmd)) {
|
47
|
-
const options = { args: cmd.args };
|
47
|
+
const options = { args: cmd.args, components };
|
48
48
|
needsHelp ? await cmd.help(options) : await cmd.main(options);
|
49
49
|
}
|
50
50
|
})().catch(handleError);
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFPQSx1Q0FBc0M7QUFDdEMsdURBQW1EO0FBQ25ELHNEQUE2QjtBQUM3Qix5Q0FBd0M7QUFDeEMsK0NBQTZEO0FBQzdELDZDQUE0RDtBQWdCNUQsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxJQUFBLDJCQUFZLEVBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtBQUV0RyxNQUFNLFdBQVcsR0FBRyxDQUFDLEdBQWEsRUFBRSxFQUFFO0lBQ3BDLElBQUksQ0FBQyxDQUFDLEdBQUcsWUFBWSxnQkFBUSxDQUFDLEVBQUU7UUFDOUIsYUFBRyxDQUFDLElBQUksQ0FBQyxnRUFBZ0UsQ0FBQyxDQUFBO0tBQzNFO0lBQ0QsYUFBRyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDckIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUNqQixDQUFDLENBQUE7QUFFRCxNQUFNLGtCQUFrQixHQUFHLENBQUMsR0FBZ0IsRUFBZ0MsRUFBRTtJQUM1RSxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxHQUFHLEdBQUcsQ0FBQTtJQUMxQixJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1FBQ2xCLE1BQU0sSUFBSSxnQkFBUSxDQUFDOzs7S0FHbEIsQ0FBQyxDQUFBO0tBQ0g7SUFDRCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUMsQ0FBQTtBQUVELE1BQU0sSUFBSSxHQUFHLElBQUEsY0FBTyxHQUFFLENBQUE7QUFDdEIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FBQyxpQ0FBaUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBRXZHO0FBQUEsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNYLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sVUFBVSxHQUFrQixJQUFBLDJCQUFjLEdBQUUsQ0FBQTtJQUVsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsc0JBQVcsRUFBQyxVQUFVLENBQUMsQ0FBQTtJQUU5QyxJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRTtRQUMvQixJQUFJLFNBQVMsRUFBRTtZQUNiLGFBQUcsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUE7WUFDL0IsT0FBTTtTQUNQO1FBQ0QsTUFBTSxJQUFJLGdCQUFRLENBQUMsV0FBVyxPQUFPLGdCQUFnQixXQUFXLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0tBQzlFO0lBR0QsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsd0JBQWEsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFBO0lBRWxELElBQUksa0JBQWtCLENBQUMsR0FBRyxDQUFDLEVBQUU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsQ0FBQTtRQUM5QyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbi8qXG4gIGlzdGFuYnVsIGlnbm9yZSBmaWxlXG4gIERvZXNuJ3QgbWFrZSBzZW5zZSB0byB0ZXN0IHRoaXMgZmlsZVxuKi9cblxuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4vdXRpbHMvYXJncydcbmltcG9ydCB7IHRvU3RyaW5nTGlzdCB9IGZyb20gJy4vdXRpbHMvb3V0LW1lc3NhZ2VzJ1xuaW1wb3J0IGxvZyBmcm9tICcuL3V0aWxzL2xvZydcbmltcG9ydCB7IENsaUVycm9yIH0gZnJvbSAnLi91dGlscy9lcnJvcidcbmltcG9ydCB7IENPTU1BTkRTX1BBVEgsIGdldENvbW1hbmRzIH0gZnJvbSAnLi91dGlscy9jb21tYW5kcydcbmltcG9ydCB7IENsaUNvbXBvbmVudHMsIGluaXRDb21wb25lbnRzIH0gZnJvbSAnLi9jb21wb25lbnRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBcmdzPlxuICBjb21wb25lbnRzOiBDbGlDb21wb25lbnRzXG59XG5cbi8vIGxlYXZpbmcgYXJncyBhcyBcImFueVwiIHNpbmNlIHdlIGRvbid0IGtub3cgeWV0IGlmIHdlIHdpbGwgdXNlIHRoZW1cbnR5cGUgRmlsZUZuID0gKG9wdGlvbnM6IE9wdGlvbnMpID0+IFByb21pc2U8dm9pZD5cblxuaW50ZXJmYWNlIEZpbGVFeHBvcnRzIHtcbiAgaGVscD86IEZpbGVGblxuICBtYWluPzogRmlsZUZuXG4gIGFyZ3M/OiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBcmdzPlxufVxuXG5jb25zdCBsaXN0Q29tbWFuZHNTdHIgPSAoY29tbWFuZHM6IHN0cmluZ1tdKSA9PiB0b1N0cmluZ0xpc3QoY29tbWFuZHMubWFwKCgkKSA9PiBgbnB4IEBkY2wvc2RrICR7JH1gKSlcblxuY29uc3QgaGFuZGxlRXJyb3IgPSAoZXJyOiBDbGlFcnJvcikgPT4ge1xuICBpZiAoIShlcnIgaW5zdGFuY2VvZiBDbGlFcnJvcikpIHtcbiAgICBsb2cud2FybihgRGV2ZWxvcGVyOiBBbGwgZXJyb3JzIHRocm93biBtdXN0IGJlIGFuIGluc3RhbmNlIG9mIFwiQ2xpRXJyb3JcImApXG4gIH1cbiAgbG9nLmZhaWwoZXJyLm1lc3NhZ2UpXG4gIHByb2Nlc3MuZXhpdCgxKVxufVxuXG5jb25zdCBjb21tYW5kRm5zQXJlVmFsaWQgPSAoZm5zOiBGaWxlRXhwb3J0cyk6IGZucyBpcyBSZXF1aXJlZDxGaWxlRXhwb3J0cz4gPT4ge1xuICBjb25zdCB7IGhlbHAsIG1haW4gfSA9IGZuc1xuICBpZiAoIWhlbHAgfHwgIW1haW4pIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoYENvbW1hbmQgZG9lcyBub3QgZm9sbG93IGltcGxlbWVudGF0aW9uIHJ1bGVzOlxuICAgICAgKiBSZXF1aXJlcyBhIFwiaGVscFwiIGZ1bmN0aW9uXG4gICAgICAqIFJlcXVpcmVzIGEgXCJtYWluXCIgZnVuY3Rpb25cbiAgICBgKVxuICB9XG4gIHJldHVybiB0cnVlXG59XG5cbmNvbnN0IGFyZ3MgPSBnZXRBcmdzKClcbmNvbnN0IGhlbHBNZXNzYWdlID0gKGNvbW1hbmRzOiBzdHJpbmdbXSkgPT4gYEhlcmUgaXMgdGhlIGxpc3Qgb2YgY29tbWFuZHM6ICR7bGlzdENvbW1hbmRzU3RyKGNvbW1hbmRzKX1gXG5cbjsoYXN5bmMgKCkgPT4ge1xuICBjb25zdCBjb21tYW5kID0gcHJvY2Vzcy5hcmd2WzJdXG4gIGNvbnN0IG5lZWRzSGVscCA9IGFyZ3NbJy0taGVscCddXG4gIGNvbnN0IGNvbXBvbmVudHM6IENsaUNvbXBvbmVudHMgPSBpbml0Q29tcG9uZW50cygpXG5cbiAgY29uc3QgY29tbWFuZHMgPSBhd2FpdCBnZXRDb21tYW5kcyhjb21wb25lbnRzKVxuXG4gIGlmICghY29tbWFuZHMuaW5jbHVkZXMoY29tbWFuZCkpIHtcbiAgICBpZiAobmVlZHNIZWxwKSB7XG4gICAgICBsb2cuaW5mbyhoZWxwTWVzc2FnZShjb21tYW5kcykpXG4gICAgICByZXR1cm5cbiAgICB9XG4gICAgdGhyb3cgbmV3IENsaUVycm9yKGBDb21tYW5kICR7Y29tbWFuZH0gaXMgaW52YWxpZC4gJHtoZWxwTWVzc2FnZShjb21tYW5kcyl9YClcbiAgfVxuXG4gIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdmFyLXJlcXVpcmVzXG4gIGNvbnN0IGNtZCA9IHJlcXVpcmUoYCR7Q09NTUFORFNfUEFUSH0vJHtjb21tYW5kfWApXG5cbiAgaWYgKGNvbW1hbmRGbnNBcmVWYWxpZChjbWQpKSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHsgYXJnczogY21kLmFyZ3MsIGNvbXBvbmVudHMgfVxuICAgIG5lZWRzSGVscCA/IGF3YWl0IGNtZC5oZWxwKG9wdGlvbnMpIDogYXdhaXQgY21kLm1haW4ob3B0aW9ucylcbiAgfVxufSkoKS5jYXRjaChoYW5kbGVFcnJvcilcbiJdfQ==
|