@dcl/sdk 7.0.6-3832283592.commit-1c3d2d6 → 7.0.6-3849904041.commit-fa1984a
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/init/index.d.ts +14 -0
- package/cli/commands/init/index.js +37 -0
- package/cli/commands/init/index.ts +43 -0
- package/cli/commands/init/repos.d.ts +4 -0
- package/cli/commands/init/repos.js +9 -0
- package/cli/commands/init/repos.ts +6 -0
- package/cli/index.d.ts +4 -1
- package/cli/index.js +26 -31
- package/cli/index.ts +35 -40
- package/cli/utils/args.d.ts +10 -0
- package/cli/utils/args.js +16 -0
- package/cli/utils/args.ts +24 -0
- package/cli/utils/commands.d.ts +2 -0
- package/cli/utils/commands.js +24 -0
- package/cli/utils/commands.ts +28 -0
- package/cli/{error.d.ts → utils/error.d.ts} +0 -0
- package/cli/{error.js → utils/error.js} +0 -0
- package/cli/{error.ts → utils/error.ts} +0 -0
- package/cli/utils/fs.d.ts +9 -0
- package/cli/utils/fs.js +64 -0
- package/cli/utils/fs.ts +95 -0
- package/cli/utils/log.d.ts +13 -0
- package/cli/utils/log.js +31 -0
- package/cli/utils/log.ts +27 -0
- package/cli/utils/prompt.d.ts +1 -0
- package/cli/utils/prompt.js +17 -0
- package/cli/utils/prompt.ts +11 -0
- package/cli/utils/spinner.d.ts +15 -0
- package/cli/utils/spinner.js +41 -0
- package/cli/utils/spinner.ts +44 -0
- package/package.json +8 -7
- package/cli/commands/init.d.ts +0 -0
- package/cli/commands/init.js +0 -3
- package/cli/commands/init.ts +0 -1
@@ -0,0 +1,14 @@
|
|
1
|
+
interface Options {
|
2
|
+
args: typeof args;
|
3
|
+
}
|
4
|
+
export declare const args: import("arg").Result<{
|
5
|
+
'--help': BooleanConstructor;
|
6
|
+
'-h': string;
|
7
|
+
} & {
|
8
|
+
'--yes': BooleanConstructor;
|
9
|
+
'-y': string;
|
10
|
+
'--dir': StringConstructor;
|
11
|
+
}>;
|
12
|
+
export declare function help(): Promise<void>;
|
13
|
+
export declare function main(options: Options): Promise<void>;
|
14
|
+
export {};
|
@@ -0,0 +1,37 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.main = exports.help = exports.args = void 0;
|
4
|
+
const path_1 = require("path");
|
5
|
+
const error_1 = require("../../utils/error");
|
6
|
+
const args_1 = require("../../utils/args");
|
7
|
+
const prompt_1 = require("../../utils/prompt");
|
8
|
+
const fs_1 = require("../../utils/fs");
|
9
|
+
const repos_1 = require("./repos");
|
10
|
+
exports.args = (0, args_1.getArgs)({
|
11
|
+
'--yes': Boolean,
|
12
|
+
'-y': '--yes',
|
13
|
+
'--dir': String
|
14
|
+
});
|
15
|
+
async function help() { }
|
16
|
+
exports.help = help;
|
17
|
+
async function main(options) {
|
18
|
+
const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
|
19
|
+
const isEmpty = await (0, fs_1.isDirectoryEmpty)(dir);
|
20
|
+
const yes = options.args['--yes'];
|
21
|
+
if (!isEmpty && !yes) {
|
22
|
+
const answer = await (0, prompt_1.confirm)('The folder specified is not empty, continue anyway?');
|
23
|
+
if (!answer)
|
24
|
+
return;
|
25
|
+
}
|
26
|
+
try {
|
27
|
+
const scene = 'scene-template';
|
28
|
+
const zip = await (0, fs_1.download)((0, repos_1.get)(scene), (0, path_1.join)(dir, `${scene}.zip`));
|
29
|
+
await (0, fs_1.extract)(zip, dir);
|
30
|
+
await (0, fs_1.remove)(zip);
|
31
|
+
}
|
32
|
+
catch (e) {
|
33
|
+
throw new error_1.CliError(e.message);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
exports.main = main;
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBb0M7QUFFcEMsNkNBQTRDO0FBQzVDLDJDQUEwQztBQUMxQywrQ0FBNEM7QUFDNUMsdUNBQTRFO0FBRTVFLG1DQUF3QztBQU0zQixRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQztJQUMxQixPQUFPLEVBQUUsT0FBTztJQUNoQixJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQTtBQUVLLEtBQUssVUFBVSxJQUFJLEtBQUksQ0FBQztBQUEvQixvQkFBK0I7QUFFeEIsS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEscUJBQWdCLEVBQUMsR0FBRyxDQUFDLENBQUE7SUFDM0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUVqQyxJQUFJLENBQUMsT0FBTyxJQUFJLENBQUMsR0FBRyxFQUFFO1FBQ3BCLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSxnQkFBTyxFQUMxQixxREFBcUQsQ0FDdEQsQ0FBQTtRQUVELElBQUksQ0FBQyxNQUFNO1lBQUUsT0FBTTtLQUNwQjtJQUVELElBQUk7UUFDRixNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQTtRQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsYUFBUSxFQUFDLElBQUEsV0FBTyxFQUFDLEtBQUssQ0FBQyxFQUFFLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUNyRSxNQUFNLElBQUEsWUFBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN2QixNQUFNLElBQUEsV0FBTSxFQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQ2xCO0lBQUMsT0FBTyxDQUFNLEVBQUU7UUFDZixNQUFNLElBQUksZ0JBQVEsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUE7S0FDOUI7QUFDSCxDQUFDO0FBckJELG9CQXFCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpvaW4sIHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBDbGlFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2Vycm9yJ1xuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4uLy4uL3V0aWxzL2FyZ3MnXG5pbXBvcnQgeyBjb25maXJtIH0gZnJvbSAnLi4vLi4vdXRpbHMvcHJvbXB0J1xuaW1wb3J0IHsgaXNEaXJlY3RvcnlFbXB0eSwgZG93bmxvYWQsIGV4dHJhY3QsIHJlbW92ZSB9IGZyb20gJy4uLy4uL3V0aWxzL2ZzJ1xuXG5pbXBvcnQgeyBnZXQgYXMgZ2V0UmVwbyB9IGZyb20gJy4vcmVwb3MnXG5cbmludGVyZmFjZSBPcHRpb25zIHtcbiAgYXJnczogdHlwZW9mIGFyZ3Ncbn1cblxuZXhwb3J0IGNvbnN0IGFyZ3MgPSBnZXRBcmdzKHtcbiAgJy0teWVzJzogQm9vbGVhbixcbiAgJy15JzogJy0teWVzJyxcbiAgJy0tZGlyJzogU3RyaW5nXG59KVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaGVscCgpIHt9XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtYWluKG9wdGlvbnM6IE9wdGlvbnMpIHtcbiAgY29uc3QgZGlyID0gcmVzb2x2ZShwcm9jZXNzLmN3ZCgpLCBvcHRpb25zLmFyZ3NbJy0tZGlyJ10gfHwgJy4nKVxuICBjb25zdCBpc0VtcHR5ID0gYXdhaXQgaXNEaXJlY3RvcnlFbXB0eShkaXIpXG4gIGNvbnN0IHllcyA9IG9wdGlvbnMuYXJnc1snLS15ZXMnXVxuXG4gIGlmICghaXNFbXB0eSAmJiAheWVzKSB7XG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY29uZmlybShcbiAgICAgICdUaGUgZm9sZGVyIHNwZWNpZmllZCBpcyBub3QgZW1wdHksIGNvbnRpbnVlIGFueXdheT8nXG4gICAgKVxuXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzY2VuZSA9ICdzY2VuZS10ZW1wbGF0ZSdcbiAgICBjb25zdCB6aXAgPSBhd2FpdCBkb3dubG9hZChnZXRSZXBvKHNjZW5lKSwgam9pbihkaXIsIGAke3NjZW5lfS56aXBgKSlcbiAgICBhd2FpdCBleHRyYWN0KHppcCwgZGlyKVxuICAgIGF3YWl0IHJlbW92ZSh6aXApXG4gIH0gY2F0Y2ggKGU6IGFueSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihlLm1lc3NhZ2UpXG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,43 @@
|
|
1
|
+
import { join, resolve } from 'path'
|
2
|
+
|
3
|
+
import { CliError } from '../../utils/error'
|
4
|
+
import { getArgs } from '../../utils/args'
|
5
|
+
import { confirm } from '../../utils/prompt'
|
6
|
+
import { isDirectoryEmpty, download, extract, remove } from '../../utils/fs'
|
7
|
+
|
8
|
+
import { get as getRepo } from './repos'
|
9
|
+
|
10
|
+
interface Options {
|
11
|
+
args: typeof args
|
12
|
+
}
|
13
|
+
|
14
|
+
export const args = getArgs({
|
15
|
+
'--yes': Boolean,
|
16
|
+
'-y': '--yes',
|
17
|
+
'--dir': String
|
18
|
+
})
|
19
|
+
|
20
|
+
export async function help() {}
|
21
|
+
|
22
|
+
export async function main(options: Options) {
|
23
|
+
const dir = resolve(process.cwd(), options.args['--dir'] || '.')
|
24
|
+
const isEmpty = await isDirectoryEmpty(dir)
|
25
|
+
const yes = options.args['--yes']
|
26
|
+
|
27
|
+
if (!isEmpty && !yes) {
|
28
|
+
const answer = await confirm(
|
29
|
+
'The folder specified is not empty, continue anyway?'
|
30
|
+
)
|
31
|
+
|
32
|
+
if (!answer) return
|
33
|
+
}
|
34
|
+
|
35
|
+
try {
|
36
|
+
const scene = 'scene-template'
|
37
|
+
const zip = await download(getRepo(scene), join(dir, `${scene}.zip`))
|
38
|
+
await extract(zip, dir)
|
39
|
+
await remove(zip)
|
40
|
+
} catch (e: any) {
|
41
|
+
throw new CliError(e.message)
|
42
|
+
}
|
43
|
+
}
|
@@ -0,0 +1,9 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.get = exports.REPOS = void 0;
|
4
|
+
exports.REPOS = {
|
5
|
+
'scene-template': 'https://github.com/decentraland/sdk7-scene-template/archive/refs/heads/main.zip'
|
6
|
+
};
|
7
|
+
const get = (repo) => exports.REPOS[repo];
|
8
|
+
exports.get = get;
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLEtBQUssR0FBRztJQUNuQixnQkFBZ0IsRUFDZCxpRkFBaUY7Q0FDcEYsQ0FBQTtBQUVNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBd0IsRUFBRSxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQS9DLFFBQUEsR0FBRyxPQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBSRVBPUyA9IHtcbiAgJ3NjZW5lLXRlbXBsYXRlJzpcbiAgICAnaHR0cHM6Ly9naXRodWIuY29tL2RlY2VudHJhbGFuZC9zZGs3LXNjZW5lLXRlbXBsYXRlL2FyY2hpdmUvcmVmcy9oZWFkcy9tYWluLnppcCdcbn1cblxuZXhwb3J0IGNvbnN0IGdldCA9IChyZXBvOiBrZXlvZiB0eXBlb2YgUkVQT1MpID0+IFJFUE9TW3JlcG9dXG4iXX0=
|
package/cli/index.d.ts
CHANGED
package/cli/index.js
CHANGED
@@ -4,53 +4,48 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
4
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
5
5
|
};
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
7
|
-
const
|
8
|
-
const
|
9
|
-
const
|
10
|
-
const
|
11
|
-
const
|
12
|
-
const COMMANDS_PATH = (0, path_1.resolve)(__dirname, './commands');
|
13
|
-
const isJSFile = (file) => file.slice(-3) === JS_EXT;
|
14
|
-
const commands = new Set((0, fs_1.readdirSync)(COMMANDS_PATH)
|
15
|
-
.filter((fileName) => isJSFile(fileName))
|
16
|
-
.map((fileName) => fileName.slice(0, -3)));
|
17
|
-
const listCommandsStr = () => Array.from(commands)
|
7
|
+
const args_1 = require("./utils/args");
|
8
|
+
const log_1 = __importDefault(require("./utils/log"));
|
9
|
+
const error_1 = require("./utils/error");
|
10
|
+
const commands_1 = require("./utils/commands");
|
11
|
+
const listCommandsStr = (commands) => commands
|
18
12
|
.map(($) => `
|
19
13
|
* npx sdk ${$}`)
|
20
14
|
.join('');
|
21
15
|
const handleError = (err) => {
|
22
|
-
|
23
|
-
|
16
|
+
if (!(err instanceof error_1.CliError)) {
|
17
|
+
log_1.default.warn(`Developer: All errors thrown must be an instance of "CliError"`);
|
18
|
+
}
|
19
|
+
log_1.default.fail(err.message);
|
24
20
|
process.exit(1);
|
25
21
|
};
|
26
|
-
const
|
27
|
-
const { help,
|
28
|
-
if (!help || !
|
29
|
-
throw new error_1.CliError(`
|
30
|
-
|
31
|
-
|
32
|
-
* Requires a "default" function
|
22
|
+
const commandFnsAreValid = (fns) => {
|
23
|
+
const { help, main } = fns;
|
24
|
+
if (!help || !main) {
|
25
|
+
throw new error_1.CliError(`Command does not follow implementation rules:
|
26
|
+
* Requires a "help" function
|
27
|
+
* Requires a "main" function
|
33
28
|
`);
|
34
29
|
}
|
35
30
|
return true;
|
36
31
|
};
|
37
|
-
const args = (0,
|
38
|
-
|
39
|
-
'-h': '--help'
|
40
|
-
});
|
32
|
+
const args = (0, args_1.getArgs)();
|
33
|
+
const helpMessage = (commands) => `Here is the list of commands: ${listCommandsStr(commands)}`;
|
41
34
|
(async () => {
|
42
35
|
const command = process.argv[2];
|
43
36
|
const needsHelp = args['--help'];
|
44
|
-
|
37
|
+
const commands = await (0, commands_1.getCommands)();
|
38
|
+
if (!commands.includes(command)) {
|
45
39
|
if (needsHelp) {
|
46
|
-
|
40
|
+
log_1.default.info(helpMessage(commands));
|
47
41
|
return;
|
48
42
|
}
|
49
|
-
throw new error_1.CliError(`
|
43
|
+
throw new error_1.CliError(`Command ${command} is invalid. ${helpMessage}`);
|
50
44
|
}
|
51
|
-
const
|
52
|
-
if (
|
53
|
-
|
45
|
+
const cmd = require(`${commands_1.COMMANDS_PATH}/${command}`);
|
46
|
+
if (commandFnsAreValid(cmd)) {
|
47
|
+
const options = { args: cmd.args };
|
48
|
+
needsHelp ? await cmd.help(options) : await cmd.main(options);
|
54
49
|
}
|
55
50
|
})().catch(handleError);
|
56
|
-
//# sourceMappingURL=data:application/json;base64,
|
51
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSx1Q0FBc0M7QUFDdEMsc0RBQTZCO0FBQzdCLHlDQUF3QztBQUN4QywrQ0FBNkQ7QUFlN0QsTUFBTSxlQUFlLEdBQUcsQ0FBQyxRQUFrQixFQUFFLEVBQUUsQ0FDN0MsUUFBUTtLQUNMLEdBQUcsQ0FDRixDQUFDLENBQUMsRUFBRSxFQUFFLENBQUM7Y0FDQyxDQUFDLEVBQUUsQ0FDWjtLQUNBLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQTtBQUViLE1BQU0sV0FBVyxHQUFHLENBQUMsR0FBYSxFQUFFLEVBQUU7SUFDcEMsSUFBSSxDQUFDLENBQUMsR0FBRyxZQUFZLGdCQUFRLENBQUMsRUFBRTtRQUM5QixhQUFHLENBQUMsSUFBSSxDQUFDLGdFQUFnRSxDQUFDLENBQUE7S0FDM0U7SUFDRCxhQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNyQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ2pCLENBQUMsQ0FBQTtBQUVELE1BQU0sa0JBQWtCLEdBQUcsQ0FBQyxHQUFnQixFQUFnQyxFQUFFO0lBQzVFLE1BQU0sRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFBO0lBQzFCLElBQUksQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUU7UUFDbEIsTUFBTSxJQUFJLGdCQUFRLENBQUM7OztLQUdsQixDQUFDLENBQUE7S0FDSDtJQUNELE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQyxDQUFBO0FBRUQsTUFBTSxJQUFJLEdBQUcsSUFBQSxjQUFPLEdBQUUsQ0FBQTtBQUN0QixNQUFNLFdBQVcsR0FBRyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUN6QyxpQ0FBaUMsZUFBZSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBRTdEO0FBQUEsQ0FBQyxLQUFLLElBQUksRUFBRTtJQUNYLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDL0IsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxzQkFBVyxHQUFFLENBQUE7SUFFcEMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUU7UUFDL0IsSUFBSSxTQUFTLEVBQUU7WUFDYixhQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFBO1lBQy9CLE9BQU07U0FDUDtRQUNELE1BQU0sSUFBSSxnQkFBUSxDQUFDLFdBQVcsT0FBTyxnQkFBZ0IsV0FBVyxFQUFFLENBQUMsQ0FBQTtLQUNwRTtJQUdELE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLHdCQUFhLElBQUksT0FBTyxFQUFFLENBQUMsQ0FBQTtJQUVsRCxJQUFJLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFO1FBQzNCLE1BQU0sT0FBTyxHQUFHLEVBQUUsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNsQyxTQUFTLENBQUMsQ0FBQyxDQUFDLE1BQU0sR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlEO0FBQ0gsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsV0FBVyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IGdldEFyZ3MgfSBmcm9tICcuL3V0aWxzL2FyZ3MnXG5pbXBvcnQgbG9nIGZyb20gJy4vdXRpbHMvbG9nJ1xuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuL3V0aWxzL2Vycm9yJ1xuaW1wb3J0IHsgQ09NTUFORFNfUEFUSCwgZ2V0Q29tbWFuZHMgfSBmcm9tICcuL3V0aWxzL2NvbW1hbmRzJ1xuXG5leHBvcnQgaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiBSZXR1cm5UeXBlPHR5cGVvZiBnZXRBcmdzPlxufVxuXG4vLyBsZWF2aW5nIGFyZ3MgYXMgXCJhbnlcIiBzaW5jZSB3ZSBkb24ndCBrbm93IHlldCBpZiB3ZSB3aWxsIHVzZSB0aGVtXG50eXBlIEZpbGVGbiA9IChvcHRpb25zOiBPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG5cbmludGVyZmFjZSBGaWxlRXhwb3J0cyB7XG4gIGhlbHA/OiBGaWxlRm5cbiAgbWFpbj86IEZpbGVGblxuICBhcmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QXJncz5cbn1cblxuY29uc3QgbGlzdENvbW1hbmRzU3RyID0gKGNvbW1hbmRzOiBzdHJpbmdbXSkgPT5cbiAgY29tbWFuZHNcbiAgICAubWFwKFxuICAgICAgKCQpID0+IGBcbiAgKiBucHggc2RrICR7JH1gXG4gICAgKVxuICAgIC5qb2luKCcnKVxuXG5jb25zdCBoYW5kbGVFcnJvciA9IChlcnI6IENsaUVycm9yKSA9PiB7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIENsaUVycm9yKSkge1xuICAgIGxvZy53YXJuKGBEZXZlbG9wZXI6IEFsbCBlcnJvcnMgdGhyb3duIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgXCJDbGlFcnJvclwiYClcbiAgfVxuICBsb2cuZmFpbChlcnIubWVzc2FnZSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5cbmNvbnN0IGNvbW1hbmRGbnNBcmVWYWxpZCA9IChmbnM6IEZpbGVFeHBvcnRzKTogZm5zIGlzIFJlcXVpcmVkPEZpbGVFeHBvcnRzPiA9PiB7XG4gIGNvbnN0IHsgaGVscCwgbWFpbiB9ID0gZm5zXG4gIGlmICghaGVscCB8fCAhbWFpbikge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgQ29tbWFuZCBkb2VzIG5vdCBmb2xsb3cgaW1wbGVtZW50YXRpb24gcnVsZXM6XG4gICAgICAqIFJlcXVpcmVzIGEgXCJoZWxwXCIgZnVuY3Rpb25cbiAgICAgICogUmVxdWlyZXMgYSBcIm1haW5cIiBmdW5jdGlvblxuICAgIGApXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgYXJncyA9IGdldEFyZ3MoKVxuY29uc3QgaGVscE1lc3NhZ2UgPSAoY29tbWFuZHM6IHN0cmluZ1tdKSA9PlxuICBgSGVyZSBpcyB0aGUgbGlzdCBvZiBjb21tYW5kczogJHtsaXN0Q29tbWFuZHNTdHIoY29tbWFuZHMpfWBcblxuOyhhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLmFyZ3ZbMl1cbiAgY29uc3QgbmVlZHNIZWxwID0gYXJnc1snLS1oZWxwJ11cbiAgY29uc3QgY29tbWFuZHMgPSBhd2FpdCBnZXRDb21tYW5kcygpXG5cbiAgaWYgKCFjb21tYW5kcy5pbmNsdWRlcyhjb21tYW5kKSkge1xuICAgIGlmIChuZWVkc0hlbHApIHtcbiAgICAgIGxvZy5pbmZvKGhlbHBNZXNzYWdlKGNvbW1hbmRzKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoYENvbW1hbmQgJHtjb21tYW5kfSBpcyBpbnZhbGlkLiAke2hlbHBNZXNzYWdlfWApXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCBjbWQgPSByZXF1aXJlKGAke0NPTU1BTkRTX1BBVEh9LyR7Y29tbWFuZH1gKVxuXG4gIGlmIChjb21tYW5kRm5zQXJlVmFsaWQoY21kKSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGFyZ3M6IGNtZC5hcmdzIH1cbiAgICBuZWVkc0hlbHAgPyBhd2FpdCBjbWQuaGVscChvcHRpb25zKSA6IGF3YWl0IGNtZC5tYWluKG9wdGlvbnMpXG4gIH1cbn0pKCkuY2F0Y2goaGFuZGxlRXJyb3IpXG4iXX0=
|
package/cli/index.ts
CHANGED
@@ -1,77 +1,72 @@
|
|
1
1
|
#!/usr/bin/env node
|
2
2
|
|
3
|
-
import
|
4
|
-
import
|
5
|
-
import {
|
3
|
+
import { getArgs } from './utils/args'
|
4
|
+
import log from './utils/log'
|
5
|
+
import { CliError } from './utils/error'
|
6
|
+
import { COMMANDS_PATH, getCommands } from './utils/commands'
|
6
7
|
|
7
|
-
|
8
|
+
export interface Options {
|
9
|
+
args: ReturnType<typeof getArgs>
|
10
|
+
}
|
8
11
|
|
9
12
|
// leaving args as "any" since we don't know yet if we will use them
|
10
|
-
type FileFn = (
|
13
|
+
type FileFn = (options: Options) => Promise<void>
|
11
14
|
|
12
|
-
interface
|
15
|
+
interface FileExports {
|
13
16
|
help?: FileFn
|
14
|
-
|
17
|
+
main?: FileFn
|
18
|
+
args?: ReturnType<typeof getArgs>
|
15
19
|
}
|
16
20
|
|
17
|
-
const
|
18
|
-
|
19
|
-
|
20
|
-
const isJSFile = (file: string): boolean => file.slice(-3) === JS_EXT
|
21
|
-
|
22
|
-
const commands = new Set(
|
23
|
-
readdirSync(COMMANDS_PATH)
|
24
|
-
.filter((fileName) => isJSFile(fileName))
|
25
|
-
.map((fileName) => fileName.slice(0, -3))
|
26
|
-
)
|
27
|
-
|
28
|
-
const listCommandsStr = () =>
|
29
|
-
Array.from(commands)
|
21
|
+
const listCommandsStr = (commands: string[]) =>
|
22
|
+
commands
|
30
23
|
.map(
|
31
24
|
($) => `
|
32
25
|
* npx sdk ${$}`
|
33
26
|
)
|
34
27
|
.join('')
|
35
28
|
|
36
|
-
const handleError = (err:
|
37
|
-
|
38
|
-
|
29
|
+
const handleError = (err: CliError) => {
|
30
|
+
if (!(err instanceof CliError)) {
|
31
|
+
log.warn(`Developer: All errors thrown must be an instance of "CliError"`)
|
32
|
+
}
|
33
|
+
log.fail(err.message)
|
39
34
|
process.exit(1)
|
40
35
|
}
|
41
36
|
|
42
|
-
const
|
43
|
-
const { help,
|
44
|
-
if (!help || !
|
45
|
-
throw new CliError(`
|
46
|
-
|
47
|
-
|
48
|
-
* Requires a "default" function
|
37
|
+
const commandFnsAreValid = (fns: FileExports): fns is Required<FileExports> => {
|
38
|
+
const { help, main } = fns
|
39
|
+
if (!help || !main) {
|
40
|
+
throw new CliError(`Command does not follow implementation rules:
|
41
|
+
* Requires a "help" function
|
42
|
+
* Requires a "main" function
|
49
43
|
`)
|
50
44
|
}
|
51
45
|
return true
|
52
46
|
}
|
53
47
|
|
54
|
-
const args =
|
55
|
-
|
56
|
-
|
57
|
-
})
|
48
|
+
const args = getArgs()
|
49
|
+
const helpMessage = (commands: string[]) =>
|
50
|
+
`Here is the list of commands: ${listCommandsStr(commands)}`
|
58
51
|
|
59
52
|
;(async () => {
|
60
53
|
const command = process.argv[2]
|
61
54
|
const needsHelp = args['--help']
|
55
|
+
const commands = await getCommands()
|
62
56
|
|
63
|
-
if (!commands.
|
57
|
+
if (!commands.includes(command)) {
|
64
58
|
if (needsHelp) {
|
65
|
-
|
59
|
+
log.info(helpMessage(commands))
|
66
60
|
return
|
67
61
|
}
|
68
|
-
throw new CliError(`
|
62
|
+
throw new CliError(`Command ${command} is invalid. ${helpMessage}`)
|
69
63
|
}
|
70
64
|
|
71
65
|
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
72
|
-
const
|
66
|
+
const cmd = require(`${COMMANDS_PATH}/${command}`)
|
73
67
|
|
74
|
-
if (
|
75
|
-
|
68
|
+
if (commandFnsAreValid(cmd)) {
|
69
|
+
const options = { args: cmd.args }
|
70
|
+
needsHelp ? await cmd.help(options) : await cmd.main(options)
|
76
71
|
}
|
77
72
|
})().catch(handleError)
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { Result } from 'arg';
|
2
|
+
export declare type Args = {
|
3
|
+
[key: string]: string | StringConstructor | NumberConstructor | BooleanConstructor;
|
4
|
+
};
|
5
|
+
export declare const DEFAULT_ARGS: {
|
6
|
+
'--help': BooleanConstructor;
|
7
|
+
'-h': string;
|
8
|
+
};
|
9
|
+
export declare function getArgs(): Result<typeof DEFAULT_ARGS>;
|
10
|
+
export declare function getArgs<T extends Args>(args: T): Result<typeof DEFAULT_ARGS & T>;
|
@@ -0,0 +1,16 @@
|
|
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.getArgs = exports.DEFAULT_ARGS = void 0;
|
7
|
+
const arg_1 = __importDefault(require("arg"));
|
8
|
+
exports.DEFAULT_ARGS = {
|
9
|
+
'--help': Boolean,
|
10
|
+
'-h': '--help'
|
11
|
+
};
|
12
|
+
function getArgs(args) {
|
13
|
+
return (0, arg_1.default)({ ...exports.DEFAULT_ARGS, ...args }, { permissive: true });
|
14
|
+
}
|
15
|
+
exports.getArgs = getArgs;
|
16
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXJncy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImFyZ3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsOENBQWlDO0FBWXBCLFFBQUEsWUFBWSxHQUFHO0lBQzFCLFFBQVEsRUFBRSxPQUFPO0lBQ2pCLElBQUksRUFBRSxRQUFRO0NBQ2YsQ0FBQTtBQU1ELFNBQWdCLE9BQU8sQ0FBaUIsSUFBUTtJQUM5QyxPQUFPLElBQUEsYUFBRyxFQUFDLEVBQUUsR0FBRyxvQkFBWSxFQUFFLEdBQUcsSUFBSSxFQUFFLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQTtBQUNoRSxDQUFDO0FBRkQsMEJBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgYXJnLCB7IFJlc3VsdCB9IGZyb20gJ2FyZydcblxuZXhwb3J0IHR5cGUgQXJncyA9IHtcbiAgW2tleTogc3RyaW5nXTpcbiAgICB8IHN0cmluZ1xuICAgIHwgU3RyaW5nQ29uc3RydWN0b3JcbiAgICB8IE51bWJlckNvbnN0cnVjdG9yXG4gICAgfCBCb29sZWFuQ29uc3RydWN0b3Jcbn1cblxuLy8gdXBkYXRpbmcgdG8gVFMgNC45IHdpbGwgcHJldmVudCBsb3NpbmcgdHlwZXMgd2hlblxuLy8gZW5mb3JjaW5nIHR5cGUgdG8gYmUgXCJBcmdzXCIgYnkgdXNpbmcgXCJzYXRpc2ZpZXMgQXJnc1wiXG5leHBvcnQgY29uc3QgREVGQVVMVF9BUkdTID0ge1xuICAnLS1oZWxwJzogQm9vbGVhbixcbiAgJy1oJzogJy0taGVscCdcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEFyZ3MoKTogUmVzdWx0PHR5cGVvZiBERUZBVUxUX0FSR1M+XG5leHBvcnQgZnVuY3Rpb24gZ2V0QXJnczxUIGV4dGVuZHMgQXJncz4oXG4gIGFyZ3M6IFRcbik6IFJlc3VsdDx0eXBlb2YgREVGQVVMVF9BUkdTICYgVD5cbmV4cG9ydCBmdW5jdGlvbiBnZXRBcmdzPFQgZXh0ZW5kcyBBcmdzPihhcmdzPzogVCkge1xuICByZXR1cm4gYXJnKHsgLi4uREVGQVVMVF9BUkdTLCAuLi5hcmdzIH0sIHsgcGVybWlzc2l2ZTogdHJ1ZSB9KVxufVxuIl19
|
@@ -0,0 +1,24 @@
|
|
1
|
+
import arg, { Result } from 'arg'
|
2
|
+
|
3
|
+
export type Args = {
|
4
|
+
[key: string]:
|
5
|
+
| string
|
6
|
+
| StringConstructor
|
7
|
+
| NumberConstructor
|
8
|
+
| BooleanConstructor
|
9
|
+
}
|
10
|
+
|
11
|
+
// updating to TS 4.9 will prevent losing types when
|
12
|
+
// enforcing type to be "Args" by using "satisfies Args"
|
13
|
+
export const DEFAULT_ARGS = {
|
14
|
+
'--help': Boolean,
|
15
|
+
'-h': '--help'
|
16
|
+
}
|
17
|
+
|
18
|
+
export function getArgs(): Result<typeof DEFAULT_ARGS>
|
19
|
+
export function getArgs<T extends Args>(
|
20
|
+
args: T
|
21
|
+
): Result<typeof DEFAULT_ARGS & T>
|
22
|
+
export function getArgs<T extends Args>(args?: T) {
|
23
|
+
return arg({ ...DEFAULT_ARGS, ...args }, { permissive: true })
|
24
|
+
}
|
@@ -0,0 +1,24 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.getCommands = exports.COMMANDS_PATH = void 0;
|
4
|
+
const path_1 = require("path");
|
5
|
+
const promises_1 = require("fs/promises");
|
6
|
+
const fs_1 = require("./fs");
|
7
|
+
const error_1 = require("./error");
|
8
|
+
exports.COMMANDS_PATH = (0, path_1.resolve)(__dirname, '../commands');
|
9
|
+
const getCommands = async () => {
|
10
|
+
const commandDirs = await (0, promises_1.readdir)(exports.COMMANDS_PATH);
|
11
|
+
const commands = commandDirs.map(async (dir) => {
|
12
|
+
const path = `${exports.COMMANDS_PATH}/${dir}`;
|
13
|
+
if (!(await (0, fs_1.isDirectory)(path))) {
|
14
|
+
throw new error_1.CliError('Developer: All commands must be inside a folder');
|
15
|
+
}
|
16
|
+
if (!(await (0, fs_1.isFile)(`${path}/index.js`))) {
|
17
|
+
throw new error_1.CliError('Developer: All commands must have an "index.js" file inside');
|
18
|
+
}
|
19
|
+
return dir;
|
20
|
+
});
|
21
|
+
return Promise.all(commands);
|
22
|
+
};
|
23
|
+
exports.getCommands = getCommands;
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFDOUIsMENBQXFDO0FBRXJDLDZCQUEwQztBQUMxQyxtQ0FBa0M7QUFFckIsUUFBQSxhQUFhLEdBQUcsSUFBQSxjQUFPLEVBQUMsU0FBUyxFQUFFLGFBQWEsQ0FBQyxDQUFBO0FBRXZELE1BQU0sV0FBVyxHQUFHLEtBQUssSUFBdUIsRUFBRTtJQUN2RCxNQUFNLFdBQVcsR0FBRyxNQUFNLElBQUEsa0JBQU8sRUFBQyxxQkFBYSxDQUFDLENBQUE7SUFFaEQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxxQkFBYSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3RDLElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBQSxnQkFBVyxFQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7WUFDOUIsTUFBTSxJQUFJLGdCQUFRLENBQUMsaURBQWlELENBQUMsQ0FBQTtTQUN0RTtRQUVELElBQUksQ0FBQyxDQUFDLE1BQU0sSUFBQSxXQUFNLEVBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFDLEVBQUU7WUFDdkMsTUFBTSxJQUFJLGdCQUFRLENBQ2hCLDZEQUE2RCxDQUM5RCxDQUFBO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzlCLENBQUMsQ0FBQTtBQW5CWSxRQUFBLFdBQVcsZUFtQnZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyByZWFkZGlyIH0gZnJvbSAnZnMvcHJvbWlzZXMnXG5cbmltcG9ydCB7IGlzRGlyZWN0b3J5LCBpc0ZpbGUgfSBmcm9tICcuL2ZzJ1xuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuL2Vycm9yJ1xuXG5leHBvcnQgY29uc3QgQ09NTUFORFNfUEFUSCA9IHJlc29sdmUoX19kaXJuYW1lLCAnLi4vY29tbWFuZHMnKVxuXG5leHBvcnQgY29uc3QgZ2V0Q29tbWFuZHMgPSBhc3luYyAoKTogUHJvbWlzZTxzdHJpbmdbXT4gPT4ge1xuICBjb25zdCBjb21tYW5kRGlycyA9IGF3YWl0IHJlYWRkaXIoQ09NTUFORFNfUEFUSClcblxuICBjb25zdCBjb21tYW5kcyA9IGNvbW1hbmREaXJzLm1hcChhc3luYyAoZGlyKSA9PiB7XG4gICAgY29uc3QgcGF0aCA9IGAke0NPTU1BTkRTX1BBVEh9LyR7ZGlyfWBcbiAgICBpZiAoIShhd2FpdCBpc0RpcmVjdG9yeShwYXRoKSkpIHtcbiAgICAgIHRocm93IG5ldyBDbGlFcnJvcignRGV2ZWxvcGVyOiBBbGwgY29tbWFuZHMgbXVzdCBiZSBpbnNpZGUgYSBmb2xkZXInKVxuICAgIH1cblxuICAgIGlmICghKGF3YWl0IGlzRmlsZShgJHtwYXRofS9pbmRleC5qc2ApKSkge1xuICAgICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgICAnRGV2ZWxvcGVyOiBBbGwgY29tbWFuZHMgbXVzdCBoYXZlIGFuIFwiaW5kZXguanNcIiBmaWxlIGluc2lkZSdcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyXG4gIH0pXG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGNvbW1hbmRzKVxufVxuIl19
|
@@ -0,0 +1,28 @@
|
|
1
|
+
import { resolve } from 'path'
|
2
|
+
import { readdir } from 'fs/promises'
|
3
|
+
|
4
|
+
import { isDirectory, isFile } from './fs'
|
5
|
+
import { CliError } from './error'
|
6
|
+
|
7
|
+
export const COMMANDS_PATH = resolve(__dirname, '../commands')
|
8
|
+
|
9
|
+
export const getCommands = async (): Promise<string[]> => {
|
10
|
+
const commandDirs = await readdir(COMMANDS_PATH)
|
11
|
+
|
12
|
+
const commands = commandDirs.map(async (dir) => {
|
13
|
+
const path = `${COMMANDS_PATH}/${dir}`
|
14
|
+
if (!(await isDirectory(path))) {
|
15
|
+
throw new CliError('Developer: All commands must be inside a folder')
|
16
|
+
}
|
17
|
+
|
18
|
+
if (!(await isFile(`${path}/index.js`))) {
|
19
|
+
throw new CliError(
|
20
|
+
'Developer: All commands must have an "index.js" file inside'
|
21
|
+
)
|
22
|
+
}
|
23
|
+
|
24
|
+
return dir
|
25
|
+
})
|
26
|
+
|
27
|
+
return Promise.all(commands)
|
28
|
+
}
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,9 @@
|
|
1
|
+
export declare function createDirIfNotExists(path: string): Promise<void>;
|
2
|
+
export declare function ensureFolder(path: string | string[]): Promise<void>;
|
3
|
+
export declare function isDirectoryEmpty(dir: string): Promise<boolean>;
|
4
|
+
export declare function isDirectory(path: string): Promise<boolean>;
|
5
|
+
export declare function isFile(path: string): Promise<boolean>;
|
6
|
+
export declare function exists(path: string): Promise<boolean>;
|
7
|
+
export declare function download(url: string, dest: string): Promise<string>;
|
8
|
+
export declare function extract(path: string, dest: string): Promise<string>;
|
9
|
+
export declare function remove(path: string): Promise<void>;
|
package/cli/utils/fs.js
ADDED
@@ -0,0 +1,64 @@
|
|
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.remove = exports.extract = exports.download = exports.exists = exports.isFile = exports.isDirectory = exports.isDirectoryEmpty = exports.ensureFolder = exports.createDirIfNotExists = void 0;
|
7
|
+
const promises_1 = __importDefault(require("fs/promises"));
|
8
|
+
const extract_zip_1 = __importDefault(require("extract-zip"));
|
9
|
+
const undici_1 = require("undici");
|
10
|
+
const _this = exports;
|
11
|
+
async function createDirIfNotExists(path) {
|
12
|
+
if (!path || (await _this.exists(path)))
|
13
|
+
return;
|
14
|
+
await promises_1.default.mkdir(path);
|
15
|
+
}
|
16
|
+
exports.createDirIfNotExists = createDirIfNotExists;
|
17
|
+
async function ensureFolder(path) {
|
18
|
+
if (!Array.isArray(path))
|
19
|
+
return _this.createDirIfNotExists(path);
|
20
|
+
if (path.length <= 1)
|
21
|
+
return _this.createDirIfNotExists(path[0]);
|
22
|
+
await _this.createDirIfNotExists(path[0]);
|
23
|
+
await _this.ensureFolder(path.slice(1));
|
24
|
+
}
|
25
|
+
exports.ensureFolder = ensureFolder;
|
26
|
+
async function isDirectoryEmpty(dir) {
|
27
|
+
const files = await promises_1.default.readdir(dir);
|
28
|
+
return !files.length;
|
29
|
+
}
|
30
|
+
exports.isDirectoryEmpty = isDirectoryEmpty;
|
31
|
+
async function isDirectory(path) {
|
32
|
+
return (await _this.exists(path)) && (await promises_1.default.lstat(path)).isDirectory();
|
33
|
+
}
|
34
|
+
exports.isDirectory = isDirectory;
|
35
|
+
async function isFile(path) {
|
36
|
+
return (await _this.exists(path)) && (await promises_1.default.lstat(path)).isFile();
|
37
|
+
}
|
38
|
+
exports.isFile = isFile;
|
39
|
+
async function exists(path) {
|
40
|
+
try {
|
41
|
+
await promises_1.default.access(path);
|
42
|
+
return true;
|
43
|
+
}
|
44
|
+
catch (_) {
|
45
|
+
return false;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
exports.exists = exists;
|
49
|
+
async function download(url, dest) {
|
50
|
+
const data = await (await (0, undici_1.fetch)(url)).arrayBuffer();
|
51
|
+
await promises_1.default.writeFile(dest, Buffer.from(data));
|
52
|
+
return dest;
|
53
|
+
}
|
54
|
+
exports.download = download;
|
55
|
+
async function extract(path, dest) {
|
56
|
+
await (0, extract_zip_1.default)(path, { dir: dest });
|
57
|
+
return dest;
|
58
|
+
}
|
59
|
+
exports.extract = extract;
|
60
|
+
async function remove(path) {
|
61
|
+
await promises_1.default.rm(path);
|
62
|
+
}
|
63
|
+
exports.remove = remove;
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNEI7QUFDNUIsOERBQW9DO0FBQ3BDLG1DQUE4QjtBQUU5QixNQUFNLEtBQUssR0FBRyxPQUFPLENBQUE7QUFNZCxLQUFLLFVBQVUsb0JBQW9CLENBQUMsSUFBWTtJQUNyRCxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQUUsT0FBTTtJQUMvQyxNQUFNLGtCQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ3RCLENBQUM7QUFIRCxvREFHQztBQU1NLEtBQUssVUFBVSxZQUFZLENBQUMsSUFBdUI7SUFDeEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUE7SUFDakUsSUFBSSxJQUFJLENBQUMsTUFBTSxJQUFJLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVoRSxNQUFNLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUN6QyxNQUFNLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3pDLENBQUM7QUFORCxvQ0FNQztBQU1NLEtBQUssVUFBVSxnQkFBZ0IsQ0FBQyxHQUFXO0lBQ2hELE1BQU0sS0FBSyxHQUFHLE1BQU0sa0JBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7QUFDdEIsQ0FBQztBQUhELDRDQUdDO0FBTU0sS0FBSyxVQUFVLFdBQVcsQ0FBQyxJQUFZO0lBQzVDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sa0JBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtBQUMzRSxDQUFDO0FBRkQsa0NBRUM7QUFNTSxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQVk7SUFDdkMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxrQkFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFBO0FBQ3RFLENBQUM7QUFGRCx3QkFFQztBQU1NLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBWTtJQUN2QyxJQUFJO1FBQ0YsTUFBTSxrQkFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyQixPQUFPLElBQUksQ0FBQTtLQUNaO0lBQUMsT0FBTyxDQUFDLEVBQUU7UUFDVixPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQVBELHdCQU9DO0FBT00sS0FBSyxVQUFVLFFBQVEsQ0FBQyxHQUFXLEVBQUUsSUFBWTtJQUd0RCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxJQUFBLGNBQUssRUFBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ25ELE1BQU0sa0JBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUMzQyxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFORCw0QkFNQztBQU9NLEtBQUssVUFBVSxPQUFPLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDdEQsTUFBTSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUE7SUFDckMsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBSEQsMEJBR0M7QUFNTSxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQVk7SUFDdkMsTUFBTSxrQkFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUNuQixDQUFDO0FBRkQsd0JBRUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgZnMgZnJvbSAnZnMvcHJvbWlzZXMnXG5pbXBvcnQgZXh0cmFjdFppcCBmcm9tICdleHRyYWN0LXppcCdcbmltcG9ydCB7IGZldGNoIH0gZnJvbSAndW5kaWNpJ1xuXG5jb25zdCBfdGhpcyA9IGV4cG9ydHNcblxuLyoqXG4gKiBDcmVhdGUncyBhIGRpcmVjdG9yeSBpZiBub3QgZXhpc3RzXG4gKiBAcGFyYW0gcGF0aCBOZXcgZGlyZWN0b3J5IHBhdGhcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGNyZWF0ZURpcklmTm90RXhpc3RzKHBhdGg6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBpZiAoIXBhdGggfHwgKGF3YWl0IF90aGlzLmV4aXN0cyhwYXRoKSkpIHJldHVyblxuICBhd2FpdCBmcy5ta2RpcihwYXRoKVxufVxuXG4vKipcbiAqIENoZWNrcyBpZiBhIGZvbGRlciBleGlzdHMgYW5kIGNyZWF0ZXMgaXQgaWYgbmVjZXNzYXJ5LlxuICogQHBhcmFtIHBhdGggT25lIG9yIG11bHRpcGxlIHBhdGhzIHRvIGJlIGNoZWNrZWQuXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBlbnN1cmVGb2xkZXIocGF0aDogc3RyaW5nIHwgc3RyaW5nW10pOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFBcnJheS5pc0FycmF5KHBhdGgpKSByZXR1cm4gX3RoaXMuY3JlYXRlRGlySWZOb3RFeGlzdHMocGF0aClcbiAgaWYgKHBhdGgubGVuZ3RoIDw9IDEpIHJldHVybiBfdGhpcy5jcmVhdGVEaXJJZk5vdEV4aXN0cyhwYXRoWzBdKVxuXG4gIGF3YWl0IF90aGlzLmNyZWF0ZURpcklmTm90RXhpc3RzKHBhdGhbMF0pXG4gIGF3YWl0IF90aGlzLmVuc3VyZUZvbGRlcihwYXRoLnNsaWNlKDEpKVxufVxuXG4vKipcbiAqIENoZWNrJ3MgaWYgZGlyZWN0b3J5IGlzIGVtcHR5XG4gKiBAcGFyYW0gZGlyIERpcmVjdG9yeSB0byBjaGVjayBmb3IgZW1wdHluZXNzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeUVtcHR5KGRpcjogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgZnMucmVhZGRpcihkaXIpXG4gIHJldHVybiAhZmlsZXMubGVuZ3RoXG59XG5cbi8qKlxuICogQ2hlY2sncyBpZiBwYXRoIGlzIGEgZGlyZWN0b3J5XG4gKiBAcGFyYW0gcGF0aCBQYXRoIHRvIHNvbWUgZmlsZS9kaXJlY3RvcnlcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRGlyZWN0b3J5KHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gKGF3YWl0IF90aGlzLmV4aXN0cyhwYXRoKSkgJiYgKGF3YWl0IGZzLmxzdGF0KHBhdGgpKS5pc0RpcmVjdG9yeSgpXG59XG5cbi8qKlxuICogQ2hlY2sncyBpZiBwYXRoIGlzIGEgZmlsZVxuICogQHBhcmFtIHBhdGggUGF0aCB0byBzb21lIGZpbGUvZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0ZpbGUocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHJldHVybiAoYXdhaXQgX3RoaXMuZXhpc3RzKHBhdGgpKSAmJiAoYXdhaXQgZnMubHN0YXQocGF0aCkpLmlzRmlsZSgpXG59XG5cbi8qKlxuICogQ2hlY2sncyBpZiBkaXJlY3RvcnkgZXhpc3RzXG4gKiBAcGFyYW0gcGF0aCBQYXRoIHRvIGNoZWNrIGZvciBleGlzdGVuY2VcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4aXN0cyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5hY2Nlc3MocGF0aClcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChfKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuLyoqXG4gKiBEb3dubG9hZCBhIGZpbGVcbiAqIEBwYXJhbSB1cmwgVVJMIG9mIHRoZSBmaWxlXG4gKiBAcGFyYW0gZGVzdCBQYXRoIHRvIHdoZXJlIHRvIHNhdmUgdGhlIGZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGRvd25sb2FkKHVybDogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAvLyB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgcGFja2FnZSBhbmQgdXNlIHRoZSBuYXRpdmUgXCJmZXRjaFwiIHdoZW4gTm9kZVxuICAvLyByZWxlYXNlcyBpdCBhcyBzdGFibGU6IGh0dHBzOi8vbm9kZWpzLm9yZy9kb2NzL2xhdGVzdC12MTgueC9hcGkvZ2xvYmFscy5odG1sI2ZldGNoXG4gIGNvbnN0IGRhdGEgPSBhd2FpdCAoYXdhaXQgZmV0Y2godXJsKSkuYXJyYXlCdWZmZXIoKVxuICBhd2FpdCBmcy53cml0ZUZpbGUoZGVzdCwgQnVmZmVyLmZyb20oZGF0YSkpXG4gIHJldHVybiBkZXN0XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSAuemlwIGZpbGVcbiAqIEBwYXJhbSB1cmwgUGF0aCBvZiB0aGUgemlwIGZpbGVcbiAqIEBwYXJhbSBkZXN0IFBhdGggdG8gd2hlcmUgdG8gZXh0cmFjdCB0aGUgemlwIGZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3QocGF0aDogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBhd2FpdCBleHRyYWN0WmlwKHBhdGgsIHsgZGlyOiBkZXN0IH0pXG4gIHJldHVybiBkZXN0XG59XG5cbi8qKlxuICogUmVtb3ZlcyBhIGZpbGVcbiAqIEBwYXJhbSB1cmwgUGF0aCB0byB0aGUgZmlsZSB0byBkZWxldGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJlbW92ZShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgYXdhaXQgZnMucm0ocGF0aClcbn1cbiJdfQ==
|
package/cli/utils/fs.ts
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
import fs from 'fs/promises'
|
2
|
+
import extractZip from 'extract-zip'
|
3
|
+
import { fetch } from 'undici'
|
4
|
+
|
5
|
+
const _this = exports
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Create's a directory if not exists
|
9
|
+
* @param path New directory path
|
10
|
+
*/
|
11
|
+
export async function createDirIfNotExists(path: string): Promise<void> {
|
12
|
+
if (!path || (await _this.exists(path))) return
|
13
|
+
await fs.mkdir(path)
|
14
|
+
}
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Checks if a folder exists and creates it if necessary.
|
18
|
+
* @param path One or multiple paths to be checked.
|
19
|
+
*/
|
20
|
+
export async function ensureFolder(path: string | string[]): Promise<void> {
|
21
|
+
if (!Array.isArray(path)) return _this.createDirIfNotExists(path)
|
22
|
+
if (path.length <= 1) return _this.createDirIfNotExists(path[0])
|
23
|
+
|
24
|
+
await _this.createDirIfNotExists(path[0])
|
25
|
+
await _this.ensureFolder(path.slice(1))
|
26
|
+
}
|
27
|
+
|
28
|
+
/**
|
29
|
+
* Check's if directory is empty
|
30
|
+
* @param dir Directory to check for emptyness
|
31
|
+
*/
|
32
|
+
export async function isDirectoryEmpty(dir: string): Promise<boolean> {
|
33
|
+
const files = await fs.readdir(dir)
|
34
|
+
return !files.length
|
35
|
+
}
|
36
|
+
|
37
|
+
/**
|
38
|
+
* Check's if path is a directory
|
39
|
+
* @param path Path to some file/directory
|
40
|
+
*/
|
41
|
+
export async function isDirectory(path: string): Promise<boolean> {
|
42
|
+
return (await _this.exists(path)) && (await fs.lstat(path)).isDirectory()
|
43
|
+
}
|
44
|
+
|
45
|
+
/**
|
46
|
+
* Check's if path is a file
|
47
|
+
* @param path Path to some file/directory
|
48
|
+
*/
|
49
|
+
export async function isFile(path: string): Promise<boolean> {
|
50
|
+
return (await _this.exists(path)) && (await fs.lstat(path)).isFile()
|
51
|
+
}
|
52
|
+
|
53
|
+
/**
|
54
|
+
* Check's if directory exists
|
55
|
+
* @param path Path to check for existence
|
56
|
+
*/
|
57
|
+
export async function exists(path: string): Promise<boolean> {
|
58
|
+
try {
|
59
|
+
await fs.access(path)
|
60
|
+
return true
|
61
|
+
} catch (_) {
|
62
|
+
return false
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
/**
|
67
|
+
* Download a file
|
68
|
+
* @param url URL of the file
|
69
|
+
* @param dest Path to where to save the file
|
70
|
+
*/
|
71
|
+
export async function download(url: string, dest: string): Promise<string> {
|
72
|
+
// we should remove this package and use the native "fetch" when Node
|
73
|
+
// releases it as stable: https://nodejs.org/docs/latest-v18.x/api/globals.html#fetch
|
74
|
+
const data = await (await fetch(url)).arrayBuffer()
|
75
|
+
await fs.writeFile(dest, Buffer.from(data))
|
76
|
+
return dest
|
77
|
+
}
|
78
|
+
|
79
|
+
/**
|
80
|
+
* Extracts a .zip file
|
81
|
+
* @param url Path of the zip file
|
82
|
+
* @param dest Path to where to extract the zip file
|
83
|
+
*/
|
84
|
+
export async function extract(path: string, dest: string): Promise<string> {
|
85
|
+
await extractZip(path, { dir: dest })
|
86
|
+
return dest
|
87
|
+
}
|
88
|
+
|
89
|
+
/**
|
90
|
+
* Removes a file
|
91
|
+
* @param url Path to the file to delete
|
92
|
+
*/
|
93
|
+
export async function remove(path: string): Promise<void> {
|
94
|
+
await fs.rm(path)
|
95
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
export declare function raw(message: string): void;
|
2
|
+
export declare function fail(message: string): void;
|
3
|
+
export declare function warn(message: string): void;
|
4
|
+
export declare function info(message: string): void;
|
5
|
+
export declare function succeed(message: string): void;
|
6
|
+
declare const _default: {
|
7
|
+
raw: typeof raw;
|
8
|
+
fail: typeof fail;
|
9
|
+
warn: typeof warn;
|
10
|
+
info: typeof info;
|
11
|
+
succeed: typeof succeed;
|
12
|
+
};
|
13
|
+
export default _default;
|
package/cli/utils/log.js
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.succeed = exports.info = exports.warn = exports.fail = exports.raw = void 0;
|
4
|
+
function raw(message) {
|
5
|
+
console.log(message);
|
6
|
+
}
|
7
|
+
exports.raw = raw;
|
8
|
+
function fail(message) {
|
9
|
+
console.log(`🔴 ${message}`);
|
10
|
+
}
|
11
|
+
exports.fail = fail;
|
12
|
+
function warn(message) {
|
13
|
+
console.log(`🟠 ${message}`);
|
14
|
+
}
|
15
|
+
exports.warn = warn;
|
16
|
+
function info(message) {
|
17
|
+
console.log(`🔵 ${message}`);
|
18
|
+
}
|
19
|
+
exports.info = info;
|
20
|
+
function succeed(message) {
|
21
|
+
console.log(`🟢 ${message}`);
|
22
|
+
}
|
23
|
+
exports.succeed = succeed;
|
24
|
+
exports.default = {
|
25
|
+
raw,
|
26
|
+
fail,
|
27
|
+
warn,
|
28
|
+
info,
|
29
|
+
succeed
|
30
|
+
};
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsibG9nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLFNBQWdCLEdBQUcsQ0FBQyxPQUFlO0lBQ2pDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDdEIsQ0FBQztBQUZELGtCQUVDO0FBRUQsU0FBZ0IsSUFBSSxDQUFDLE9BQWU7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUZELG9CQUVDO0FBRUQsU0FBZ0IsSUFBSSxDQUFDLE9BQWU7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUZELG9CQUVDO0FBRUQsU0FBZ0IsSUFBSSxDQUFDLE9BQWU7SUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUZELG9CQUVDO0FBRUQsU0FBZ0IsT0FBTyxDQUFDLE9BQWU7SUFDckMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDOUIsQ0FBQztBQUZELDBCQUVDO0FBRUQsa0JBQWU7SUFDYixHQUFHO0lBQ0gsSUFBSTtJQUNKLElBQUk7SUFDSixJQUFJO0lBQ0osT0FBTztDQUNSLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgZnVuY3Rpb24gcmF3KG1lc3NhZ2U6IHN0cmluZykge1xuICBjb25zb2xlLmxvZyhtZXNzYWdlKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gZmFpbChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgY29uc29sZS5sb2coYPCflLQgJHttZXNzYWdlfWApXG59XG5cbmV4cG9ydCBmdW5jdGlvbiB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICBjb25zb2xlLmxvZyhg8J+foCAke21lc3NhZ2V9YClcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluZm8obWVzc2FnZTogc3RyaW5nKSB7XG4gIGNvbnNvbGUubG9nKGDwn5S1ICR7bWVzc2FnZX1gKVxufVxuXG5leHBvcnQgZnVuY3Rpb24gc3VjY2VlZChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgY29uc29sZS5sb2coYPCfn6IgJHttZXNzYWdlfWApXG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgcmF3LFxuICBmYWlsLFxuICB3YXJuLFxuICBpbmZvLFxuICBzdWNjZWVkXG59XG4iXX0=
|
package/cli/utils/log.ts
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
export function raw(message: string) {
|
2
|
+
console.log(message)
|
3
|
+
}
|
4
|
+
|
5
|
+
export function fail(message: string) {
|
6
|
+
console.log(`🔴 ${message}`)
|
7
|
+
}
|
8
|
+
|
9
|
+
export function warn(message: string) {
|
10
|
+
console.log(`🟠 ${message}`)
|
11
|
+
}
|
12
|
+
|
13
|
+
export function info(message: string) {
|
14
|
+
console.log(`🔵 ${message}`)
|
15
|
+
}
|
16
|
+
|
17
|
+
export function succeed(message: string) {
|
18
|
+
console.log(`🟢 ${message}`)
|
19
|
+
}
|
20
|
+
|
21
|
+
export default {
|
22
|
+
raw,
|
23
|
+
fail,
|
24
|
+
warn,
|
25
|
+
info,
|
26
|
+
succeed
|
27
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare function confirm(message: string): Promise<boolean>;
|
@@ -0,0 +1,17 @@
|
|
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.confirm = void 0;
|
7
|
+
const inquirer_1 = __importDefault(require("inquirer"));
|
8
|
+
async function confirm(message) {
|
9
|
+
const { answer } = await inquirer_1.default.prompt({
|
10
|
+
name: 'answer',
|
11
|
+
message,
|
12
|
+
type: 'confirm'
|
13
|
+
});
|
14
|
+
return answer;
|
15
|
+
}
|
16
|
+
exports.confirm = confirm;
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsicHJvbXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHdEQUErQjtBQUV4QixLQUFLLFVBQVUsT0FBTyxDQUFDLE9BQWU7SUFDM0MsTUFBTSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sa0JBQVEsQ0FBQyxNQUFNLENBQUM7UUFDdkMsSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPO1FBQ1AsSUFBSSxFQUFFLFNBQVM7S0FDaEIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxNQUFNLENBQUE7QUFDZixDQUFDO0FBUkQsMEJBUUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgaW5xdWlyZXIgZnJvbSAnaW5xdWlyZXInXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjb25maXJtKG1lc3NhZ2U6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCB7IGFuc3dlciB9ID0gYXdhaXQgaW5xdWlyZXIucHJvbXB0KHtcbiAgICBuYW1lOiAnYW5zd2VyJyxcbiAgICBtZXNzYWdlLFxuICAgIHR5cGU6ICdjb25maXJtJ1xuICB9KVxuXG4gIHJldHVybiBhbnN3ZXJcbn1cbiJdfQ==
|
@@ -0,0 +1,15 @@
|
|
1
|
+
import { Ora } from 'ora';
|
2
|
+
import log from './log';
|
3
|
+
declare class Spinner {
|
4
|
+
spinner: Ora | typeof log;
|
5
|
+
constructor();
|
6
|
+
private log;
|
7
|
+
start(message: string): void;
|
8
|
+
stop(): void;
|
9
|
+
fail(message: string): void;
|
10
|
+
warn(message: string): void;
|
11
|
+
info(message: string): void;
|
12
|
+
succeed(message: string): void;
|
13
|
+
}
|
14
|
+
declare const spinner: Spinner;
|
15
|
+
export default spinner;
|
@@ -0,0 +1,41 @@
|
|
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
|
+
const ora_1 = __importDefault(require("ora"));
|
7
|
+
const log_1 = __importDefault(require("./log"));
|
8
|
+
class Spinner {
|
9
|
+
constructor() {
|
10
|
+
if (!process.stdout.isTTY && process.env.DEBUG) {
|
11
|
+
this.spinner = log_1.default;
|
12
|
+
return;
|
13
|
+
}
|
14
|
+
this.spinner = (0, ora_1.default)();
|
15
|
+
}
|
16
|
+
log(method, message) {
|
17
|
+
const fn = this.spinner[method] || log_1.default.raw;
|
18
|
+
fn(message);
|
19
|
+
}
|
20
|
+
start(message) {
|
21
|
+
this.log('start', message);
|
22
|
+
}
|
23
|
+
stop() {
|
24
|
+
this.log('stop', '');
|
25
|
+
}
|
26
|
+
fail(message) {
|
27
|
+
this.log('fail', message);
|
28
|
+
}
|
29
|
+
warn(message) {
|
30
|
+
this.log('warn', message);
|
31
|
+
}
|
32
|
+
info(message) {
|
33
|
+
this.log('info', message);
|
34
|
+
}
|
35
|
+
succeed(message) {
|
36
|
+
this.log('succeed', message);
|
37
|
+
}
|
38
|
+
}
|
39
|
+
const spinner = new Spinner();
|
40
|
+
exports.default = spinner;
|
41
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bpbm5lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNwaW5uZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw4Q0FBOEI7QUFFOUIsZ0RBQXVCO0FBRXZCLE1BQU0sT0FBTztJQUdYO1FBQ0UsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFO1lBQzlDLElBQUksQ0FBQyxPQUFPLEdBQUcsYUFBRyxDQUFBO1lBQ2xCLE9BQU07U0FDUDtRQUVELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSxhQUFHLEdBQUUsQ0FBQTtJQUN0QixDQUFDO0lBRU8sR0FBRyxDQUFDLE1BQWlCLEVBQUUsT0FBZTtRQUM1QyxNQUFNLEVBQUUsR0FBSSxJQUFJLENBQUMsT0FBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLGFBQUcsQ0FBQyxHQUFHLENBQUE7UUFDbkQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ2IsQ0FBQztJQUVELEtBQUssQ0FBQyxPQUFlO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFDRCxJQUFJO1FBQ0YsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDdEIsQ0FBQztJQUNELElBQUksQ0FBQyxPQUFlO1FBQ2xCLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzNCLENBQUM7SUFDRCxJQUFJLENBQUMsT0FBZTtRQUNsQixJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQTtJQUMzQixDQUFDO0lBQ0QsSUFBSSxDQUFDLE9BQWU7UUFDbEIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDM0IsQ0FBQztJQUNELE9BQU8sQ0FBQyxPQUFlO1FBQ3JCLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzlCLENBQUM7Q0FDRjtBQUVELE1BQU0sT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUE7QUFFN0Isa0JBQWUsT0FBTyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IG9yYSwgeyBPcmEgfSBmcm9tICdvcmEnXG5cbmltcG9ydCBsb2cgZnJvbSAnLi9sb2cnXG5cbmNsYXNzIFNwaW5uZXIge1xuICBzcGlubmVyOiBPcmEgfCB0eXBlb2YgbG9nXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgaWYgKCFwcm9jZXNzLnN0ZG91dC5pc1RUWSAmJiBwcm9jZXNzLmVudi5ERUJVRykge1xuICAgICAgdGhpcy5zcGlubmVyID0gbG9nXG4gICAgICByZXR1cm5cbiAgICB9XG5cbiAgICB0aGlzLnNwaW5uZXIgPSBvcmEoKVxuICB9XG5cbiAgcHJpdmF0ZSBsb2cobWV0aG9kOiBrZXlvZiBPcmEsIG1lc3NhZ2U6IHN0cmluZykge1xuICAgIGNvbnN0IGZuID0gKHRoaXMuc3Bpbm5lciBhcyBhbnkpW21ldGhvZF0gfHwgbG9nLnJhd1xuICAgIGZuKG1lc3NhZ2UpXG4gIH1cblxuICBzdGFydChtZXNzYWdlOiBzdHJpbmcpIHtcbiAgICB0aGlzLmxvZygnc3RhcnQnLCBtZXNzYWdlKVxuICB9XG4gIHN0b3AoKSB7XG4gICAgdGhpcy5sb2coJ3N0b3AnLCAnJylcbiAgfVxuICBmYWlsKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMubG9nKCdmYWlsJywgbWVzc2FnZSlcbiAgfVxuICB3YXJuKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMubG9nKCd3YXJuJywgbWVzc2FnZSlcbiAgfVxuICBpbmZvKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMubG9nKCdpbmZvJywgbWVzc2FnZSlcbiAgfVxuICBzdWNjZWVkKG1lc3NhZ2U6IHN0cmluZykge1xuICAgIHRoaXMubG9nKCdzdWNjZWVkJywgbWVzc2FnZSlcbiAgfVxufVxuXG5jb25zdCBzcGlubmVyID0gbmV3IFNwaW5uZXIoKVxuXG5leHBvcnQgZGVmYXVsdCBzcGlubmVyXG4iXX0=
|
@@ -0,0 +1,44 @@
|
|
1
|
+
import ora, { Ora } from 'ora'
|
2
|
+
|
3
|
+
import log from './log'
|
4
|
+
|
5
|
+
class Spinner {
|
6
|
+
spinner: Ora | typeof log
|
7
|
+
|
8
|
+
constructor() {
|
9
|
+
if (!process.stdout.isTTY && process.env.DEBUG) {
|
10
|
+
this.spinner = log
|
11
|
+
return
|
12
|
+
}
|
13
|
+
|
14
|
+
this.spinner = ora()
|
15
|
+
}
|
16
|
+
|
17
|
+
private log(method: keyof Ora, message: string) {
|
18
|
+
const fn = (this.spinner as any)[method] || log.raw
|
19
|
+
fn(message)
|
20
|
+
}
|
21
|
+
|
22
|
+
start(message: string) {
|
23
|
+
this.log('start', message)
|
24
|
+
}
|
25
|
+
stop() {
|
26
|
+
this.log('stop', '')
|
27
|
+
}
|
28
|
+
fail(message: string) {
|
29
|
+
this.log('fail', message)
|
30
|
+
}
|
31
|
+
warn(message: string) {
|
32
|
+
this.log('warn', message)
|
33
|
+
}
|
34
|
+
info(message: string) {
|
35
|
+
this.log('info', message)
|
36
|
+
}
|
37
|
+
succeed(message: string) {
|
38
|
+
this.log('succeed', message)
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
const spinner = new Spinner()
|
43
|
+
|
44
|
+
export default spinner
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@dcl/sdk",
|
3
|
-
"version": "7.0.6-
|
3
|
+
"version": "7.0.6-3849904041.commit-fa1984a",
|
4
4
|
"description": "",
|
5
5
|
"main": "./index.js",
|
6
6
|
"typings": "./index.d.ts",
|
@@ -20,14 +20,15 @@
|
|
20
20
|
"author": "Decentraland",
|
21
21
|
"license": "Apache-2.0",
|
22
22
|
"dependencies": {
|
23
|
-
"@dcl/dcl-rollup": "7.0.6-
|
24
|
-
"@dcl/ecs": "7.0.6-
|
23
|
+
"@dcl/dcl-rollup": "7.0.6-3849904041.commit-fa1984a",
|
24
|
+
"@dcl/ecs": "7.0.6-3849904041.commit-fa1984a",
|
25
25
|
"@dcl/ecs-math": "2.0.1-20221129185242.commit-40495c1",
|
26
|
-
"@dcl/js-runtime": "7.0.6-
|
26
|
+
"@dcl/js-runtime": "7.0.6-3849904041.commit-fa1984a",
|
27
27
|
"@dcl/kernel": "2.0.0-3766760530.commit-239d2a9",
|
28
|
-
"@dcl/react-ecs": "7.0.6-
|
28
|
+
"@dcl/react-ecs": "7.0.6-3849904041.commit-fa1984a",
|
29
29
|
"@dcl/unity-renderer": "1.0.68557-20221221195847.commit-f743b85",
|
30
|
-
"arg": "5.0.2"
|
30
|
+
"arg": "5.0.2",
|
31
|
+
"ora": "6.1.2"
|
31
32
|
},
|
32
33
|
"minCliVersion": "3.14.1",
|
33
34
|
"typedoc": {
|
@@ -36,5 +37,5 @@
|
|
36
37
|
"displayName": "SDK",
|
37
38
|
"tsconfig": "./tsconfig.json"
|
38
39
|
},
|
39
|
-
"commit": "
|
40
|
+
"commit": "fa1984abd150e8fef64f425b04a94fe2da914e2d"
|
40
41
|
}
|
package/cli/commands/init.d.ts
DELETED
File without changes
|
package/cli/commands/init.js
DELETED
@@ -1,3 +0,0 @@
|
|
1
|
-
"use strict";
|
2
|
-
console.log('init');
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImluaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJjb25zb2xlLmxvZygnaW5pdCcpXG4iXX0=
|
package/cli/commands/init.ts
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
console.log('init')
|