@dcl/sdk 7.0.6-3999809037.commit-0a47a3c → 7.0.6-4006744889.commit-c6aff5f
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 +2 -0
- package/cli/commands/init/index.js +4 -4
- package/cli/commands/init/index.ts +10 -4
- 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 +10 -0
- package/cli/components/fs.js +58 -0
- package/cli/components/fs.ts +57 -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 +5 -3
- package/cli/index.ts +6 -2
- package/cli/utils/commands.d.ts +2 -1
- package/cli/utils/commands.js +7 -7
- package/cli/utils/commands.ts +11 -7
- package/cli/utils/fs.d.ts +9 -8
- package/cli/utils/fs.js +7 -47
- package/cli/utils/fs.ts +14 -67
- package/package.json +6 -6
@@ -16,7 +16,7 @@ async function help() { }
|
|
16
16
|
exports.help = help;
|
17
17
|
async function main(options) {
|
18
18
|
const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
|
19
|
-
const isEmpty = await (0, fs_1.isDirectoryEmpty)(dir);
|
19
|
+
const isEmpty = await (0, fs_1.isDirectoryEmpty)(options.components, dir);
|
20
20
|
const yes = options.args['--yes'];
|
21
21
|
if (!isEmpty && !yes) {
|
22
22
|
const answer = await (0, prompt_1.confirm)('The folder specified is not empty, continue anyway?');
|
@@ -25,13 +25,13 @@ async function main(options) {
|
|
25
25
|
}
|
26
26
|
try {
|
27
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`));
|
28
|
+
const zip = await (0, fs_1.download)(options.components, (0, repos_1.get)(scene), (0, path_1.join)(dir, `${scene}.zip`));
|
29
29
|
await (0, fs_1.extract)(zip, dir);
|
30
|
-
await
|
30
|
+
await options.components.fs.unlink(zip);
|
31
31
|
}
|
32
32
|
catch (e) {
|
33
33
|
throw new error_1.CliError(e.message);
|
34
34
|
}
|
35
35
|
}
|
36
36
|
exports.main = main;
|
37
|
-
//# sourceMappingURL=data:application/json;base64,
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBb0M7QUFFcEMsNkNBQTRDO0FBQzVDLDJDQUEwQztBQUMxQywrQ0FBNEM7QUFFNUMsdUNBQW9FO0FBRXBFLG1DQUF3QztBQU8zQixRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQztJQUMxQixPQUFPLEVBQUUsT0FBTztJQUNoQixJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQTtBQUVLLEtBQUssVUFBVSxJQUFJLEtBQUksQ0FBQztBQUEvQixvQkFBK0I7QUFFeEIsS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEscUJBQWdCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWpDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFPLEVBQzFCLHFEQUFxRCxDQUN0RCxDQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFNO0tBQ3BCO0lBRUQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFBO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxhQUFRLEVBQ3hCLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLElBQUEsV0FBTyxFQUFDLEtBQUssQ0FBQyxFQUNkLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQzFCLENBQUE7UUFDRCxNQUFNLElBQUEsWUFBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN2QixNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtLQUN4QztJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YsTUFBTSxJQUFJLGdCQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlCO0FBQ0gsQ0FBQztBQXpCRCxvQkF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcidcbmltcG9ydCB7IGdldEFyZ3MgfSBmcm9tICcuLi8uLi91dGlscy9hcmdzJ1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb21wdCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgaXNEaXJlY3RvcnlFbXB0eSwgZG93bmxvYWQsIGV4dHJhY3QgfSBmcm9tICcuLi8uLi91dGlscy9mcydcblxuaW1wb3J0IHsgZ2V0IGFzIGdldFJlcG8gfSBmcm9tICcuL3JlcG9zJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFyZ3M6IHR5cGVvZiBhcmdzXG4gIGNvbXBvbmVudHM6IFBpY2s8Q2xpQ29tcG9uZW50cywgJ2ZldGNoJyB8ICdmcyc+XG59XG5cbmV4cG9ydCBjb25zdCBhcmdzID0gZ2V0QXJncyh7XG4gICctLXllcyc6IEJvb2xlYW4sXG4gICcteSc6ICctLXllcycsXG4gICctLWRpcic6IFN0cmluZ1xufSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhlbHAoKSB7fVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBPcHRpb25zKSB7XG4gIGNvbnN0IGRpciA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0aW9ucy5hcmdzWyctLWRpciddIHx8ICcuJylcbiAgY29uc3QgaXNFbXB0eSA9IGF3YWl0IGlzRGlyZWN0b3J5RW1wdHkob3B0aW9ucy5jb21wb25lbnRzLCBkaXIpXG4gIGNvbnN0IHllcyA9IG9wdGlvbnMuYXJnc1snLS15ZXMnXVxuXG4gIGlmICghaXNFbXB0eSAmJiAheWVzKSB7XG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY29uZmlybShcbiAgICAgICdUaGUgZm9sZGVyIHNwZWNpZmllZCBpcyBub3QgZW1wdHksIGNvbnRpbnVlIGFueXdheT8nXG4gICAgKVxuXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzY2VuZSA9ICdzY2VuZS10ZW1wbGF0ZSdcbiAgICBjb25zdCB6aXAgPSBhd2FpdCBkb3dubG9hZChcbiAgICAgIG9wdGlvbnMuY29tcG9uZW50cyxcbiAgICAgIGdldFJlcG8oc2NlbmUpLFxuICAgICAgam9pbihkaXIsIGAke3NjZW5lfS56aXBgKVxuICAgIClcbiAgICBhd2FpdCBleHRyYWN0KHppcCwgZGlyKVxuICAgIGF3YWl0IG9wdGlvbnMuY29tcG9uZW50cy5mcy51bmxpbmsoemlwKVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoZS5tZXNzYWdlKVxuICB9XG59XG4iXX0=
|
@@ -3,12 +3,14 @@ import { join, resolve } from 'path'
|
|
3
3
|
import { CliError } from '../../utils/error'
|
4
4
|
import { getArgs } from '../../utils/args'
|
5
5
|
import { confirm } from '../../utils/prompt'
|
6
|
-
import {
|
6
|
+
import { CliComponents } from '../../components'
|
7
|
+
import { isDirectoryEmpty, download, extract } from '../../utils/fs'
|
7
8
|
|
8
9
|
import { get as getRepo } from './repos'
|
9
10
|
|
10
11
|
interface Options {
|
11
12
|
args: typeof args
|
13
|
+
components: Pick<CliComponents, 'fetch' | 'fs'>
|
12
14
|
}
|
13
15
|
|
14
16
|
export const args = getArgs({
|
@@ -21,7 +23,7 @@ export async function help() {}
|
|
21
23
|
|
22
24
|
export async function main(options: Options) {
|
23
25
|
const dir = resolve(process.cwd(), options.args['--dir'] || '.')
|
24
|
-
const isEmpty = await isDirectoryEmpty(dir)
|
26
|
+
const isEmpty = await isDirectoryEmpty(options.components, dir)
|
25
27
|
const yes = options.args['--yes']
|
26
28
|
|
27
29
|
if (!isEmpty && !yes) {
|
@@ -34,9 +36,13 @@ export async function main(options: Options) {
|
|
34
36
|
|
35
37
|
try {
|
36
38
|
const scene = 'scene-template'
|
37
|
-
const zip = await download(
|
39
|
+
const zip = await download(
|
40
|
+
options.components,
|
41
|
+
getRepo(scene),
|
42
|
+
join(dir, `${scene}.zip`)
|
43
|
+
)
|
38
44
|
await extract(zip, dir)
|
39
|
-
await
|
45
|
+
await options.components.fs.unlink(zip)
|
40
46
|
} catch (e: any) {
|
41
47
|
throw new CliError(e.message)
|
42
48
|
}
|
@@ -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,10 @@
|
|
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' | 'readdir' | 'readFile' | 'writeFile'> & {
|
6
|
+
constants: Pick<typeof fs.constants, 'F_OK' | 'R_OK'>;
|
7
|
+
} & {
|
8
|
+
existPath(path: string): Promise<boolean>;
|
9
|
+
};
|
10
|
+
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLHVDQUF3QjtBQUN4Qix3REFBeUM7QUF5QnpDLEtBQUssVUFBVSxTQUFTLENBQUMsSUFBWTtJQUNuQyxJQUFJO1FBQ0YsTUFBTSxFQUFFLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUNyRSxPQUFPLElBQUksQ0FBQTtLQUNaO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxPQUFPLEtBQUssQ0FBQTtLQUNiO0FBQ0gsQ0FBQztBQUtELFNBQWdCLGlCQUFpQjtJQUMvQixPQUFPO1FBQ0wsZ0JBQWdCLEVBQUUsRUFBRSxDQUFDLGdCQUFnQjtRQUNyQyxpQkFBaUIsRUFBRSxFQUFFLENBQUMsaUJBQWlCO1FBQ3ZDLE1BQU0sRUFBRSxVQUFVLENBQUMsTUFBTTtRQUN6QixTQUFTLEVBQUUsVUFBVSxDQUFDLFNBQVM7UUFDL0IsT0FBTyxFQUFFLFVBQVUsQ0FBQyxPQUFPO1FBQzNCLElBQUksRUFBRSxVQUFVLENBQUMsSUFBSTtRQUNyQixNQUFNLEVBQUUsVUFBVSxDQUFDLE1BQU07UUFDekIsS0FBSyxFQUFFLFVBQVUsQ0FBQyxLQUFLO1FBQ3ZCLE9BQU8sRUFBRSxVQUFVLENBQUMsT0FBTztRQUMzQixRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVE7UUFDN0IsU0FBUyxFQUFFO1lBQ1QsSUFBSSxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSTtZQUN2QixJQUFJLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxJQUFJO1NBQ3hCO1FBQ0QsU0FBUztLQUNWLENBQUE7QUFDSCxDQUFDO0FBbEJELDhDQWtCQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJ1xuaW1wb3J0ICogYXMgZnNQcm9taXNlcyBmcm9tICdmcy9wcm9taXNlcydcblxuLyoqXG4gKiBAcHVibGljXG4gKlxuICogVGhpcyBtYXkgYmUgbW92ZWQgdG8gd2VsbC1rbm93bi1jb21wb25lbnRzIGluIHRoZSBmdXR1cmVcbiAqL1xuZXhwb3J0IHR5cGUgSUZpbGVTeXN0ZW1Db21wb25lbnQgPSBQaWNrPHR5cGVvZiBmcywgJ2NyZWF0ZVJlYWRTdHJlYW0nPiAmXG4gIFBpY2s8dHlwZW9mIGZzLCAnY3JlYXRlV3JpdGVTdHJlYW0nPiAmXG4gIFBpY2s8XG4gICAgdHlwZW9mIGZzUHJvbWlzZXMsXG4gICAgfCAnYWNjZXNzJ1xuICAgIHwgJ29wZW5kaXInXG4gICAgfCAnc3RhdCdcbiAgICB8ICd1bmxpbmsnXG4gICAgfCAnbWtkaXInXG4gICAgfCAncmVhZGRpcidcbiAgICB8ICdyZWFkRmlsZSdcbiAgICB8ICd3cml0ZUZpbGUnXG4gID4gJiB7XG4gICAgY29uc3RhbnRzOiBQaWNrPHR5cGVvZiBmcy5jb25zdGFudHMsICdGX09LJyB8ICdSX09LJz5cbiAgfSAmIHtcbiAgICBleGlzdFBhdGgocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPlxuICB9XG5cbmFzeW5jIGZ1bmN0aW9uIGV4aXN0UGF0aChwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgdHJ5IHtcbiAgICBhd2FpdCBmcy5wcm9taXNlcy5hY2Nlc3MocGF0aCwgZnMuY29uc3RhbnRzLkZfT0sgfCBmcy5jb25zdGFudHMuUl9PSylcbiAgICByZXR1cm4gdHJ1ZVxuICB9IGNhdGNoIChlcnJvcikge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogQHB1YmxpY1xuICovXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRnNDb21wb25lbnQoKTogSUZpbGVTeXN0ZW1Db21wb25lbnQge1xuICByZXR1cm4ge1xuICAgIGNyZWF0ZVJlYWRTdHJlYW06IGZzLmNyZWF0ZVJlYWRTdHJlYW0sXG4gICAgY3JlYXRlV3JpdGVTdHJlYW06IGZzLmNyZWF0ZVdyaXRlU3RyZWFtLFxuICAgIGFjY2VzczogZnNQcm9taXNlcy5hY2Nlc3MsXG4gICAgd3JpdGVGaWxlOiBmc1Byb21pc2VzLndyaXRlRmlsZSxcbiAgICBvcGVuZGlyOiBmc1Byb21pc2VzLm9wZW5kaXIsXG4gICAgc3RhdDogZnNQcm9taXNlcy5zdGF0LFxuICAgIHVubGluazogZnNQcm9taXNlcy51bmxpbmssXG4gICAgbWtkaXI6IGZzUHJvbWlzZXMubWtkaXIsXG4gICAgcmVhZGRpcjogZnNQcm9taXNlcy5yZWFkZGlyLFxuICAgIHJlYWRGaWxlOiBmc1Byb21pc2VzLnJlYWRGaWxlLFxuICAgIGNvbnN0YW50czoge1xuICAgICAgRl9PSzogZnMuY29uc3RhbnRzLkZfT0ssXG4gICAgICBSX09LOiBmcy5jb25zdGFudHMuUl9PS1xuICAgIH0sXG4gICAgZXhpc3RQYXRoXG4gIH1cbn1cbiJdfQ==
|
@@ -0,0 +1,57 @@
|
|
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<
|
12
|
+
typeof fsPromises,
|
13
|
+
| 'access'
|
14
|
+
| 'opendir'
|
15
|
+
| 'stat'
|
16
|
+
| 'unlink'
|
17
|
+
| 'mkdir'
|
18
|
+
| 'readdir'
|
19
|
+
| 'readFile'
|
20
|
+
| 'writeFile'
|
21
|
+
> & {
|
22
|
+
constants: Pick<typeof fs.constants, 'F_OK' | 'R_OK'>
|
23
|
+
} & {
|
24
|
+
existPath(path: string): Promise<boolean>
|
25
|
+
}
|
26
|
+
|
27
|
+
async function existPath(path: string): Promise<boolean> {
|
28
|
+
try {
|
29
|
+
await fs.promises.access(path, fs.constants.F_OK | fs.constants.R_OK)
|
30
|
+
return true
|
31
|
+
} catch (error) {
|
32
|
+
return false
|
33
|
+
}
|
34
|
+
}
|
35
|
+
|
36
|
+
/**
|
37
|
+
* @public
|
38
|
+
*/
|
39
|
+
export function createFsComponent(): IFileSystemComponent {
|
40
|
+
return {
|
41
|
+
createReadStream: fs.createReadStream,
|
42
|
+
createWriteStream: fs.createWriteStream,
|
43
|
+
access: fsPromises.access,
|
44
|
+
writeFile: fsPromises.writeFile,
|
45
|
+
opendir: fsPromises.opendir,
|
46
|
+
stat: fsPromises.stat,
|
47
|
+
unlink: fsPromises.unlink,
|
48
|
+
mkdir: fsPromises.mkdir,
|
49
|
+
readdir: fsPromises.readdir,
|
50
|
+
readFile: fsPromises.readFile,
|
51
|
+
constants: {
|
52
|
+
F_OK: fs.constants.F_OK,
|
53
|
+
R_OK: fs.constants.R_OK
|
54
|
+
},
|
55
|
+
existPath
|
56
|
+
}
|
57
|
+
}
|
@@ -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
@@ -8,6 +8,7 @@ const args_1 = require("./utils/args");
|
|
8
8
|
const log_1 = __importDefault(require("./utils/log"));
|
9
9
|
const error_1 = require("./utils/error");
|
10
10
|
const commands_1 = require("./utils/commands");
|
11
|
+
const components_1 = require("./components");
|
11
12
|
const listCommandsStr = (commands) => commands
|
12
13
|
.map(($) => `
|
13
14
|
* npx sdk ${$}`)
|
@@ -34,7 +35,8 @@ const helpMessage = (commands) => `Here is the list of commands: ${listCommandsS
|
|
34
35
|
(async () => {
|
35
36
|
const command = process.argv[2];
|
36
37
|
const needsHelp = args['--help'];
|
37
|
-
const
|
38
|
+
const components = (0, components_1.initComponents)();
|
39
|
+
const commands = await (0, commands_1.getCommands)(components);
|
38
40
|
if (!commands.includes(command)) {
|
39
41
|
if (needsHelp) {
|
40
42
|
log_1.default.info(helpMessage(commands));
|
@@ -44,8 +46,8 @@ const helpMessage = (commands) => `Here is the list of commands: ${listCommandsS
|
|
44
46
|
}
|
45
47
|
const cmd = require(`${commands_1.COMMANDS_PATH}/${command}`);
|
46
48
|
if (commandFnsAreValid(cmd)) {
|
47
|
-
const options = { args: cmd.args };
|
49
|
+
const options = { args: cmd.args, components };
|
48
50
|
needsHelp ? await cmd.help(options) : await cmd.main(options);
|
49
51
|
}
|
50
52
|
})().catch(handleError);
|
51
|
-
//# sourceMappingURL=data:application/json;base64,
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFFQSx1Q0FBc0M7QUFDdEMsc0RBQTZCO0FBQzdCLHlDQUF3QztBQUN4QywrQ0FBNkQ7QUFDN0QsNkNBQTREO0FBZ0I1RCxNQUFNLGVBQWUsR0FBRyxDQUFDLFFBQWtCLEVBQUUsRUFBRSxDQUM3QyxRQUFRO0tBQ0wsR0FBRyxDQUNGLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQztjQUNDLENBQUMsRUFBRSxDQUNaO0tBQ0EsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFBO0FBRWIsTUFBTSxXQUFXLEdBQUcsQ0FBQyxHQUFhLEVBQUUsRUFBRTtJQUNwQyxJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksZ0JBQVEsQ0FBQyxFQUFFO1FBQzlCLGFBQUcsQ0FBQyxJQUFJLENBQUMsZ0VBQWdFLENBQUMsQ0FBQTtLQUMzRTtJQUNELGFBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7QUFDakIsQ0FBQyxDQUFBO0FBRUQsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLEdBQWdCLEVBQWdDLEVBQUU7SUFDNUUsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsR0FBRyxHQUFHLENBQUE7SUFDMUIsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRTtRQUNsQixNQUFNLElBQUksZ0JBQVEsQ0FBQzs7O0tBR2xCLENBQUMsQ0FBQTtLQUNIO0lBQ0QsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDLENBQUE7QUFFRCxNQUFNLElBQUksR0FBRyxJQUFBLGNBQU8sR0FBRSxDQUFBO0FBQ3RCLE1BQU0sV0FBVyxHQUFHLENBQUMsUUFBa0IsRUFBRSxFQUFFLENBQ3pDLGlDQUFpQyxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FFN0Q7QUFBQSxDQUFDLEtBQUssSUFBSSxFQUFFO0lBQ1gsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMvQixNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDaEMsTUFBTSxVQUFVLEdBQWtCLElBQUEsMkJBQWMsR0FBRSxDQUFBO0lBRWxELE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxzQkFBVyxFQUFDLFVBQVUsQ0FBQyxDQUFBO0lBRTlDLElBQUksQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQy9CLElBQUksU0FBUyxFQUFFO1lBQ2IsYUFBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQTtZQUMvQixPQUFNO1NBQ1A7UUFDRCxNQUFNLElBQUksZ0JBQVEsQ0FBQyxXQUFXLE9BQU8sZ0JBQWdCLFdBQVcsRUFBRSxDQUFDLENBQUE7S0FDcEU7SUFHRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsR0FBRyx3QkFBYSxJQUFJLE9BQU8sRUFBRSxDQUFDLENBQUE7SUFFbEQsSUFBSSxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsRUFBRTtRQUMzQixNQUFNLE9BQU8sR0FBRyxFQUFFLElBQUksRUFBRSxHQUFHLENBQUMsSUFBSSxFQUFFLFVBQVUsRUFBRSxDQUFBO1FBQzlDLFNBQVMsQ0FBQyxDQUFDLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLENBQUE7S0FDOUQ7QUFDSCxDQUFDLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxXQUFXLENBQUMsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbIiMhL3Vzci9iaW4vZW52IG5vZGVcblxuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4vdXRpbHMvYXJncydcbmltcG9ydCBsb2cgZnJvbSAnLi91dGlscy9sb2cnXG5pbXBvcnQgeyBDbGlFcnJvciB9IGZyb20gJy4vdXRpbHMvZXJyb3InXG5pbXBvcnQgeyBDT01NQU5EU19QQVRILCBnZXRDb21tYW5kcyB9IGZyb20gJy4vdXRpbHMvY29tbWFuZHMnXG5pbXBvcnQgeyBDbGlDb21wb25lbnRzLCBpbml0Q29tcG9uZW50cyB9IGZyb20gJy4vY29tcG9uZW50cydcblxuZXhwb3J0IGludGVyZmFjZSBPcHRpb25zIHtcbiAgYXJnczogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QXJncz5cbiAgY29tcG9uZW50czogQ2xpQ29tcG9uZW50c1xufVxuXG4vLyBsZWF2aW5nIGFyZ3MgYXMgXCJhbnlcIiBzaW5jZSB3ZSBkb24ndCBrbm93IHlldCBpZiB3ZSB3aWxsIHVzZSB0aGVtXG50eXBlIEZpbGVGbiA9IChvcHRpb25zOiBPcHRpb25zKSA9PiBQcm9taXNlPHZvaWQ+XG5cbmludGVyZmFjZSBGaWxlRXhwb3J0cyB7XG4gIGhlbHA/OiBGaWxlRm5cbiAgbWFpbj86IEZpbGVGblxuICBhcmdzPzogUmV0dXJuVHlwZTx0eXBlb2YgZ2V0QXJncz5cbn1cblxuY29uc3QgbGlzdENvbW1hbmRzU3RyID0gKGNvbW1hbmRzOiBzdHJpbmdbXSkgPT5cbiAgY29tbWFuZHNcbiAgICAubWFwKFxuICAgICAgKCQpID0+IGBcbiAgKiBucHggc2RrICR7JH1gXG4gICAgKVxuICAgIC5qb2luKCcnKVxuXG5jb25zdCBoYW5kbGVFcnJvciA9IChlcnI6IENsaUVycm9yKSA9PiB7XG4gIGlmICghKGVyciBpbnN0YW5jZW9mIENsaUVycm9yKSkge1xuICAgIGxvZy53YXJuKGBEZXZlbG9wZXI6IEFsbCBlcnJvcnMgdGhyb3duIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgXCJDbGlFcnJvclwiYClcbiAgfVxuICBsb2cuZmFpbChlcnIubWVzc2FnZSlcbiAgcHJvY2Vzcy5leGl0KDEpXG59XG5cbmNvbnN0IGNvbW1hbmRGbnNBcmVWYWxpZCA9IChmbnM6IEZpbGVFeHBvcnRzKTogZm5zIGlzIFJlcXVpcmVkPEZpbGVFeHBvcnRzPiA9PiB7XG4gIGNvbnN0IHsgaGVscCwgbWFpbiB9ID0gZm5zXG4gIGlmICghaGVscCB8fCAhbWFpbikge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgQ29tbWFuZCBkb2VzIG5vdCBmb2xsb3cgaW1wbGVtZW50YXRpb24gcnVsZXM6XG4gICAgICAqIFJlcXVpcmVzIGEgXCJoZWxwXCIgZnVuY3Rpb25cbiAgICAgICogUmVxdWlyZXMgYSBcIm1haW5cIiBmdW5jdGlvblxuICAgIGApXG4gIH1cbiAgcmV0dXJuIHRydWVcbn1cblxuY29uc3QgYXJncyA9IGdldEFyZ3MoKVxuY29uc3QgaGVscE1lc3NhZ2UgPSAoY29tbWFuZHM6IHN0cmluZ1tdKSA9PlxuICBgSGVyZSBpcyB0aGUgbGlzdCBvZiBjb21tYW5kczogJHtsaXN0Q29tbWFuZHNTdHIoY29tbWFuZHMpfWBcblxuOyhhc3luYyAoKSA9PiB7XG4gIGNvbnN0IGNvbW1hbmQgPSBwcm9jZXNzLmFyZ3ZbMl1cbiAgY29uc3QgbmVlZHNIZWxwID0gYXJnc1snLS1oZWxwJ11cbiAgY29uc3QgY29tcG9uZW50czogQ2xpQ29tcG9uZW50cyA9IGluaXRDb21wb25lbnRzKClcblxuICBjb25zdCBjb21tYW5kcyA9IGF3YWl0IGdldENvbW1hbmRzKGNvbXBvbmVudHMpXG5cbiAgaWYgKCFjb21tYW5kcy5pbmNsdWRlcyhjb21tYW5kKSkge1xuICAgIGlmIChuZWVkc0hlbHApIHtcbiAgICAgIGxvZy5pbmZvKGhlbHBNZXNzYWdlKGNvbW1hbmRzKSlcbiAgICAgIHJldHVyblxuICAgIH1cbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoYENvbW1hbmQgJHtjb21tYW5kfSBpcyBpbnZhbGlkLiAke2hlbHBNZXNzYWdlfWApXG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLXZhci1yZXF1aXJlc1xuICBjb25zdCBjbWQgPSByZXF1aXJlKGAke0NPTU1BTkRTX1BBVEh9LyR7Y29tbWFuZH1gKVxuXG4gIGlmIChjb21tYW5kRm5zQXJlVmFsaWQoY21kKSkge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7IGFyZ3M6IGNtZC5hcmdzLCBjb21wb25lbnRzIH1cbiAgICBuZWVkc0hlbHAgPyBhd2FpdCBjbWQuaGVscChvcHRpb25zKSA6IGF3YWl0IGNtZC5tYWluKG9wdGlvbnMpXG4gIH1cbn0pKCkuY2F0Y2goaGFuZGxlRXJyb3IpXG4iXX0=
|
package/cli/index.ts
CHANGED
@@ -4,9 +4,11 @@ import { getArgs } from './utils/args'
|
|
4
4
|
import log from './utils/log'
|
5
5
|
import { CliError } from './utils/error'
|
6
6
|
import { COMMANDS_PATH, getCommands } from './utils/commands'
|
7
|
+
import { CliComponents, initComponents } from './components'
|
7
8
|
|
8
9
|
export interface Options {
|
9
10
|
args: ReturnType<typeof getArgs>
|
11
|
+
components: CliComponents
|
10
12
|
}
|
11
13
|
|
12
14
|
// leaving args as "any" since we don't know yet if we will use them
|
@@ -52,7 +54,9 @@ const helpMessage = (commands: string[]) =>
|
|
52
54
|
;(async () => {
|
53
55
|
const command = process.argv[2]
|
54
56
|
const needsHelp = args['--help']
|
55
|
-
const
|
57
|
+
const components: CliComponents = initComponents()
|
58
|
+
|
59
|
+
const commands = await getCommands(components)
|
56
60
|
|
57
61
|
if (!commands.includes(command)) {
|
58
62
|
if (needsHelp) {
|
@@ -66,7 +70,7 @@ const helpMessage = (commands: string[]) =>
|
|
66
70
|
const cmd = require(`${COMMANDS_PATH}/${command}`)
|
67
71
|
|
68
72
|
if (commandFnsAreValid(cmd)) {
|
69
|
-
const options = { args: cmd.args }
|
73
|
+
const options = { args: cmd.args, components }
|
70
74
|
needsHelp ? await cmd.help(options) : await cmd.main(options)
|
71
75
|
}
|
72
76
|
})().catch(handleError)
|
package/cli/utils/commands.d.ts
CHANGED
package/cli/utils/commands.js
CHANGED
@@ -2,18 +2,18 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.getCommands = exports.COMMANDS_PATH = void 0;
|
4
4
|
const path_1 = require("path");
|
5
|
-
const promises_1 = require("fs/promises");
|
6
|
-
const fs_1 = require("./fs");
|
7
5
|
const error_1 = require("./error");
|
8
6
|
exports.COMMANDS_PATH = (0, path_1.resolve)(__dirname, '../commands');
|
9
|
-
const getCommands = async () => {
|
10
|
-
const commandDirs = await
|
7
|
+
const getCommands = async ({ fs }) => {
|
8
|
+
const commandDirs = await fs.readdir(exports.COMMANDS_PATH);
|
11
9
|
const commands = commandDirs.map(async (dir) => {
|
12
10
|
const path = `${exports.COMMANDS_PATH}/${dir}`;
|
13
|
-
|
11
|
+
const statDir = await fs.stat(path);
|
12
|
+
if (!statDir.isDirectory()) {
|
14
13
|
throw new error_1.CliError('Developer: All commands must be inside a folder');
|
15
14
|
}
|
16
|
-
|
15
|
+
const statIndex = await fs.stat(`${path}/index.js`);
|
16
|
+
if (!statIndex.isFile()) {
|
17
17
|
throw new error_1.CliError('Developer: All commands must have an "index.js" file inside');
|
18
18
|
}
|
19
19
|
return dir;
|
@@ -21,4 +21,4 @@ const getCommands = async () => {
|
|
21
21
|
return Promise.all(commands);
|
22
22
|
};
|
23
23
|
exports.getCommands = getCommands;
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tbWFuZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJjb21tYW5kcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFFOUIsbUNBQWtDO0FBRXJCLFFBQUEsYUFBYSxHQUFHLElBQUEsY0FBTyxFQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQTtBQUV2RCxNQUFNLFdBQVcsR0FBRyxLQUFLLEVBQUUsRUFDaEMsRUFBRSxFQUN3QixFQUFxQixFQUFFO0lBQ2pELE1BQU0sV0FBVyxHQUFHLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxxQkFBYSxDQUFDLENBQUE7SUFFbkQsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDN0MsTUFBTSxJQUFJLEdBQUcsR0FBRyxxQkFBYSxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBRXRDLE1BQU0sT0FBTyxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUVuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQzFCLE1BQU0sSUFBSSxnQkFBUSxDQUFDLGlEQUFpRCxDQUFDLENBQUE7U0FDdEU7UUFFRCxNQUFNLFNBQVMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxDQUFBO1FBQ25ELElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDdkIsTUFBTSxJQUFJLGdCQUFRLENBQ2hCLDZEQUE2RCxDQUM5RCxDQUFBO1NBQ0Y7UUFFRCxPQUFPLEdBQUcsQ0FBQTtJQUNaLENBQUMsQ0FBQyxDQUFBO0lBRUYsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0FBQzlCLENBQUMsQ0FBQTtBQXpCWSxRQUFBLFdBQVcsZUF5QnZCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBDbGlDb21wb25lbnRzIH0gZnJvbSAnLi4vY29tcG9uZW50cydcbmltcG9ydCB7IENsaUVycm9yIH0gZnJvbSAnLi9lcnJvcidcblxuZXhwb3J0IGNvbnN0IENPTU1BTkRTX1BBVEggPSByZXNvbHZlKF9fZGlybmFtZSwgJy4uL2NvbW1hbmRzJylcblxuZXhwb3J0IGNvbnN0IGdldENvbW1hbmRzID0gYXN5bmMgKHtcbiAgZnNcbn06IFBpY2s8Q2xpQ29tcG9uZW50cywgJ2ZzJz4pOiBQcm9taXNlPHN0cmluZ1tdPiA9PiB7XG4gIGNvbnN0IGNvbW1hbmREaXJzID0gYXdhaXQgZnMucmVhZGRpcihDT01NQU5EU19QQVRIKVxuXG4gIGNvbnN0IGNvbW1hbmRzID0gY29tbWFuZERpcnMubWFwKGFzeW5jIChkaXIpID0+IHtcbiAgICBjb25zdCBwYXRoID0gYCR7Q09NTUFORFNfUEFUSH0vJHtkaXJ9YFxuXG4gICAgY29uc3Qgc3RhdERpciA9IGF3YWl0IGZzLnN0YXQocGF0aClcblxuICAgIGlmICghc3RhdERpci5pc0RpcmVjdG9yeSgpKSB7XG4gICAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoJ0RldmVsb3BlcjogQWxsIGNvbW1hbmRzIG11c3QgYmUgaW5zaWRlIGEgZm9sZGVyJylcbiAgICB9XG5cbiAgICBjb25zdCBzdGF0SW5kZXggPSBhd2FpdCBmcy5zdGF0KGAke3BhdGh9L2luZGV4LmpzYClcbiAgICBpZiAoIXN0YXRJbmRleC5pc0ZpbGUoKSkge1xuICAgICAgdGhyb3cgbmV3IENsaUVycm9yKFxuICAgICAgICAnRGV2ZWxvcGVyOiBBbGwgY29tbWFuZHMgbXVzdCBoYXZlIGFuIFwiaW5kZXguanNcIiBmaWxlIGluc2lkZSdcbiAgICAgIClcbiAgICB9XG5cbiAgICByZXR1cm4gZGlyXG4gIH0pXG5cbiAgcmV0dXJuIFByb21pc2UuYWxsKGNvbW1hbmRzKVxufVxuIl19
|
package/cli/utils/commands.ts
CHANGED
@@ -1,21 +1,25 @@
|
|
1
1
|
import { resolve } from 'path'
|
2
|
-
import {
|
3
|
-
|
4
|
-
import { isDirectory, isFile } from './fs'
|
2
|
+
import { CliComponents } from '../components'
|
5
3
|
import { CliError } from './error'
|
6
4
|
|
7
5
|
export const COMMANDS_PATH = resolve(__dirname, '../commands')
|
8
6
|
|
9
|
-
export const getCommands = async (
|
10
|
-
|
7
|
+
export const getCommands = async ({
|
8
|
+
fs
|
9
|
+
}: Pick<CliComponents, 'fs'>): Promise<string[]> => {
|
10
|
+
const commandDirs = await fs.readdir(COMMANDS_PATH)
|
11
11
|
|
12
12
|
const commands = commandDirs.map(async (dir) => {
|
13
13
|
const path = `${COMMANDS_PATH}/${dir}`
|
14
|
-
|
14
|
+
|
15
|
+
const statDir = await fs.stat(path)
|
16
|
+
|
17
|
+
if (!statDir.isDirectory()) {
|
15
18
|
throw new CliError('Developer: All commands must be inside a folder')
|
16
19
|
}
|
17
20
|
|
18
|
-
|
21
|
+
const statIndex = await fs.stat(`${path}/index.js`)
|
22
|
+
if (!statIndex.isFile()) {
|
19
23
|
throw new CliError(
|
20
24
|
'Developer: All commands must have an "index.js" file inside'
|
21
25
|
)
|
package/cli/utils/fs.d.ts
CHANGED
@@ -1,9 +1,10 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
export declare function isDirectoryEmpty(
|
4
|
-
|
5
|
-
|
6
|
-
export declare function
|
7
|
-
|
1
|
+
import { IFileSystemComponent } from '../components/fs';
|
2
|
+
import { IFetchComponent } from '../components/fetch';
|
3
|
+
export declare function isDirectoryEmpty(components: {
|
4
|
+
fs: IFileSystemComponent;
|
5
|
+
}, dir: string): Promise<boolean>;
|
6
|
+
export declare function download(components: {
|
7
|
+
fs: IFileSystemComponent;
|
8
|
+
fetch: IFetchComponent;
|
9
|
+
}, url: string, dest: string): Promise<string>;
|
8
10
|
export declare function extract(path: string, dest: string): Promise<string>;
|
9
|
-
export declare function remove(path: string): Promise<void>;
|
package/cli/utils/fs.js
CHANGED
@@ -3,53 +3,17 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
4
|
};
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
6
|
-
exports.
|
7
|
-
const promises_1 = __importDefault(require("fs/promises"));
|
6
|
+
exports.extract = exports.download = exports.isDirectoryEmpty = void 0;
|
8
7
|
const extract_zip_1 = __importDefault(require("extract-zip"));
|
9
8
|
const path_1 = require("path");
|
10
|
-
|
11
|
-
const
|
12
|
-
async function createDirIfNotExists(path) {
|
13
|
-
if (!path || (await _this.exists(path)))
|
14
|
-
return;
|
15
|
-
await promises_1.default.mkdir(path);
|
16
|
-
}
|
17
|
-
exports.createDirIfNotExists = createDirIfNotExists;
|
18
|
-
async function ensureFolder(path) {
|
19
|
-
if (!Array.isArray(path))
|
20
|
-
return _this.createDirIfNotExists(path);
|
21
|
-
if (path.length <= 1)
|
22
|
-
return _this.createDirIfNotExists(path[0]);
|
23
|
-
await _this.createDirIfNotExists(path[0]);
|
24
|
-
await _this.ensureFolder(path.slice(1));
|
25
|
-
}
|
26
|
-
exports.ensureFolder = ensureFolder;
|
27
|
-
async function isDirectoryEmpty(dir) {
|
28
|
-
const files = await promises_1.default.readdir(dir);
|
9
|
+
async function isDirectoryEmpty(components, dir) {
|
10
|
+
const files = await components.fs.readdir(dir);
|
29
11
|
return !files.length;
|
30
12
|
}
|
31
13
|
exports.isDirectoryEmpty = isDirectoryEmpty;
|
32
|
-
async function
|
33
|
-
|
34
|
-
|
35
|
-
exports.isDirectory = isDirectory;
|
36
|
-
async function isFile(path) {
|
37
|
-
return (await _this.exists(path)) && (await promises_1.default.lstat(path)).isFile();
|
38
|
-
}
|
39
|
-
exports.isFile = isFile;
|
40
|
-
async function exists(path) {
|
41
|
-
try {
|
42
|
-
await promises_1.default.access(path);
|
43
|
-
return true;
|
44
|
-
}
|
45
|
-
catch (_) {
|
46
|
-
return false;
|
47
|
-
}
|
48
|
-
}
|
49
|
-
exports.exists = exists;
|
50
|
-
async function download(url, dest) {
|
51
|
-
const data = await (await (0, undici_1.fetch)(url)).arrayBuffer();
|
52
|
-
await promises_1.default.writeFile(dest, Buffer.from(data));
|
14
|
+
async function download(components, url, dest) {
|
15
|
+
const data = await (await components.fetch.fetch(url)).arrayBuffer();
|
16
|
+
await components.fs.writeFile(dest, Buffer.from(data));
|
53
17
|
return dest;
|
54
18
|
}
|
55
19
|
exports.download = download;
|
@@ -59,8 +23,4 @@ async function extract(path, dest) {
|
|
59
23
|
return destPath;
|
60
24
|
}
|
61
25
|
exports.extract = extract;
|
62
|
-
|
63
|
-
await promises_1.default.rm(path);
|
64
|
-
}
|
65
|
-
exports.remove = remove;
|
66
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBNEI7QUFDNUIsOERBQW9DO0FBQ3BDLCtCQUE4QjtBQUM5QixtQ0FBOEI7QUFFOUIsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFBO0FBTWQsS0FBSyxVQUFVLG9CQUFvQixDQUFDLElBQVk7SUFDckQsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLE1BQU0sS0FBSyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUFFLE9BQU07SUFDL0MsTUFBTSxrQkFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQTtBQUN0QixDQUFDO0FBSEQsb0RBR0M7QUFNTSxLQUFLLFVBQVUsWUFBWSxDQUFDLElBQXVCO0lBQ3hELElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQztRQUFFLE9BQU8sS0FBSyxDQUFDLG9CQUFvQixDQUFDLElBQUksQ0FBQyxDQUFBO0lBQ2pFLElBQUksSUFBSSxDQUFDLE1BQU0sSUFBSSxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFFaEUsTUFBTSxLQUFLLENBQUMsb0JBQW9CLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDekMsTUFBTSxLQUFLLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtBQUN6QyxDQUFDO0FBTkQsb0NBTUM7QUFNTSxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsR0FBVztJQUNoRCxNQUFNLEtBQUssR0FBRyxNQUFNLGtCQUFFLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFBO0FBQ3RCLENBQUM7QUFIRCw0Q0FHQztBQU1NLEtBQUssVUFBVSxXQUFXLENBQUMsSUFBWTtJQUM1QyxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxNQUFNLGtCQUFFLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsV0FBVyxFQUFFLENBQUE7QUFDM0UsQ0FBQztBQUZELGtDQUVDO0FBTU0sS0FBSyxVQUFVLE1BQU0sQ0FBQyxJQUFZO0lBQ3ZDLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsSUFBSSxDQUFDLE1BQU0sa0JBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQTtBQUN0RSxDQUFDO0FBRkQsd0JBRUM7QUFNTSxLQUFLLFVBQVUsTUFBTSxDQUFDLElBQVk7SUFDdkMsSUFBSTtRQUNGLE1BQU0sa0JBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFDckIsT0FBTyxJQUFJLENBQUE7S0FDWjtJQUFDLE9BQU8sQ0FBQyxFQUFFO1FBQ1YsT0FBTyxLQUFLLENBQUE7S0FDYjtBQUNILENBQUM7QUFQRCx3QkFPQztBQU9NLEtBQUssVUFBVSxRQUFRLENBQUMsR0FBVyxFQUFFLElBQVk7SUFHdEQsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLE1BQU0sSUFBQSxjQUFLLEVBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUNuRCxNQUFNLGtCQUFFLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7SUFDM0MsT0FBTyxJQUFJLENBQUE7QUFDYixDQUFDO0FBTkQsNEJBTUM7QUFPTSxLQUFLLFVBQVUsT0FBTyxDQUFDLElBQVksRUFBRSxJQUFZO0lBQ3RELE1BQU0sUUFBUSxHQUFHLElBQUEsY0FBTyxFQUFDLElBQUksQ0FBQyxDQUFBO0lBQzlCLE1BQU0sSUFBQSxxQkFBVSxFQUFDLElBQUksRUFBRSxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQ3pDLE9BQU8sUUFBUSxDQUFBO0FBQ2pCLENBQUM7QUFKRCwwQkFJQztBQU1NLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBWTtJQUN2QyxNQUFNLGtCQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQ25CLENBQUM7QUFGRCx3QkFFQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBmcyBmcm9tICdmcy9wcm9taXNlcydcbmltcG9ydCBleHRyYWN0WmlwIGZyb20gJ2V4dHJhY3QtemlwJ1xuaW1wb3J0IHsgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5pbXBvcnQgeyBmZXRjaCB9IGZyb20gJ3VuZGljaSdcblxuY29uc3QgX3RoaXMgPSBleHBvcnRzXG5cbi8qKlxuICogQ3JlYXRlJ3MgYSBkaXJlY3RvcnkgaWYgbm90IGV4aXN0c1xuICogQHBhcmFtIHBhdGggTmV3IGRpcmVjdG9yeSBwYXRoXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVEaXJJZk5vdEV4aXN0cyhwYXRoOiBzdHJpbmcpOiBQcm9taXNlPHZvaWQ+IHtcbiAgaWYgKCFwYXRoIHx8IChhd2FpdCBfdGhpcy5leGlzdHMocGF0aCkpKSByZXR1cm5cbiAgYXdhaXQgZnMubWtkaXIocGF0aClcbn1cblxuLyoqXG4gKiBDaGVja3MgaWYgYSBmb2xkZXIgZXhpc3RzIGFuZCBjcmVhdGVzIGl0IGlmIG5lY2Vzc2FyeS5cbiAqIEBwYXJhbSBwYXRoIE9uZSBvciBtdWx0aXBsZSBwYXRocyB0byBiZSBjaGVja2VkLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW5zdXJlRm9sZGVyKHBhdGg6IHN0cmluZyB8IHN0cmluZ1tdKTogUHJvbWlzZTx2b2lkPiB7XG4gIGlmICghQXJyYXkuaXNBcnJheShwYXRoKSkgcmV0dXJuIF90aGlzLmNyZWF0ZURpcklmTm90RXhpc3RzKHBhdGgpXG4gIGlmIChwYXRoLmxlbmd0aCA8PSAxKSByZXR1cm4gX3RoaXMuY3JlYXRlRGlySWZOb3RFeGlzdHMocGF0aFswXSlcblxuICBhd2FpdCBfdGhpcy5jcmVhdGVEaXJJZk5vdEV4aXN0cyhwYXRoWzBdKVxuICBhd2FpdCBfdGhpcy5lbnN1cmVGb2xkZXIocGF0aC5zbGljZSgxKSlcbn1cblxuLyoqXG4gKiBDaGVjaydzIGlmIGRpcmVjdG9yeSBpcyBlbXB0eVxuICogQHBhcmFtIGRpciBEaXJlY3RvcnkgdG8gY2hlY2sgZm9yIGVtcHR5bmVzc1xuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNEaXJlY3RvcnlFbXB0eShkaXI6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICBjb25zdCBmaWxlcyA9IGF3YWl0IGZzLnJlYWRkaXIoZGlyKVxuICByZXR1cm4gIWZpbGVzLmxlbmd0aFxufVxuXG4vKipcbiAqIENoZWNrJ3MgaWYgcGF0aCBpcyBhIGRpcmVjdG9yeVxuICogQHBhcmFtIHBhdGggUGF0aCB0byBzb21lIGZpbGUvZGlyZWN0b3J5XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBpc0RpcmVjdG9yeShwYXRoOiBzdHJpbmcpOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgcmV0dXJuIChhd2FpdCBfdGhpcy5leGlzdHMocGF0aCkpICYmIChhd2FpdCBmcy5sc3RhdChwYXRoKSkuaXNEaXJlY3RvcnkoKVxufVxuXG4vKipcbiAqIENoZWNrJ3MgaWYgcGF0aCBpcyBhIGZpbGVcbiAqIEBwYXJhbSBwYXRoIFBhdGggdG8gc29tZSBmaWxlL2RpcmVjdG9yeVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaXNGaWxlKHBhdGg6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4ge1xuICByZXR1cm4gKGF3YWl0IF90aGlzLmV4aXN0cyhwYXRoKSkgJiYgKGF3YWl0IGZzLmxzdGF0KHBhdGgpKS5pc0ZpbGUoKVxufVxuXG4vKipcbiAqIENoZWNrJ3MgaWYgZGlyZWN0b3J5IGV4aXN0c1xuICogQHBhcmFtIHBhdGggUGF0aCB0byBjaGVjayBmb3IgZXhpc3RlbmNlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleGlzdHMocGF0aDogc3RyaW5nKTogUHJvbWlzZTxib29sZWFuPiB7XG4gIHRyeSB7XG4gICAgYXdhaXQgZnMuYWNjZXNzKHBhdGgpXG4gICAgcmV0dXJuIHRydWVcbiAgfSBjYXRjaCAoXykge1xuICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbi8qKlxuICogRG93bmxvYWQgYSBmaWxlXG4gKiBAcGFyYW0gdXJsIFVSTCBvZiB0aGUgZmlsZVxuICogQHBhcmFtIGRlc3QgUGF0aCB0byB3aGVyZSB0byBzYXZlIHRoZSBmaWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBkb3dubG9hZCh1cmw6IHN0cmluZywgZGVzdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgLy8gd2Ugc2hvdWxkIHJlbW92ZSB0aGlzIHBhY2thZ2UgYW5kIHVzZSB0aGUgbmF0aXZlIFwiZmV0Y2hcIiB3aGVuIE5vZGVcbiAgLy8gcmVsZWFzZXMgaXQgYXMgc3RhYmxlOiBodHRwczovL25vZGVqcy5vcmcvZG9jcy9sYXRlc3QtdjE4LngvYXBpL2dsb2JhbHMuaHRtbCNmZXRjaFxuICBjb25zdCBkYXRhID0gYXdhaXQgKGF3YWl0IGZldGNoKHVybCkpLmFycmF5QnVmZmVyKClcbiAgYXdhaXQgZnMud3JpdGVGaWxlKGRlc3QsIEJ1ZmZlci5mcm9tKGRhdGEpKVxuICByZXR1cm4gZGVzdFxufVxuXG4vKipcbiAqIEV4dHJhY3RzIGEgLnppcCBmaWxlXG4gKiBAcGFyYW0gdXJsIFBhdGggb2YgdGhlIHppcCBmaWxlXG4gKiBAcGFyYW0gZGVzdCBQYXRoIHRvIHdoZXJlIHRvIGV4dHJhY3QgdGhlIHppcCBmaWxlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBleHRyYWN0KHBhdGg6IHN0cmluZywgZGVzdDogc3RyaW5nKTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgY29uc3QgZGVzdFBhdGggPSByZXNvbHZlKGRlc3QpXG4gIGF3YWl0IGV4dHJhY3RaaXAocGF0aCwgeyBkaXI6IGRlc3RQYXRoIH0pXG4gIHJldHVybiBkZXN0UGF0aFxufVxuXG4vKipcbiAqIFJlbW92ZXMgYSBmaWxlXG4gKiBAcGFyYW0gdXJsIFBhdGggdG8gdGhlIGZpbGUgdG8gZGVsZXRlXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZW1vdmUocGF0aDogc3RyaW5nKTogUHJvbWlzZTx2b2lkPiB7XG4gIGF3YWl0IGZzLnJtKHBhdGgpXG59XG4iXX0=
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJmcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4REFBb0M7QUFDcEMsK0JBQThCO0FBUXZCLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsVUFBd0MsRUFDeEMsR0FBVztJQUVYLE1BQU0sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDOUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUE7QUFDdEIsQ0FBQztBQU5ELDRDQU1DO0FBT00sS0FBSyxVQUFVLFFBQVEsQ0FDNUIsVUFBZ0UsRUFDaEUsR0FBVyxFQUNYLElBQVk7SUFJWixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxVQUFVLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3BFLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQTtJQUN0RCxPQUFPLElBQUksQ0FBQTtBQUNiLENBQUM7QUFWRCw0QkFVQztBQU9NLEtBQUssVUFBVSxPQUFPLENBQUMsSUFBWSxFQUFFLElBQVk7SUFDdEQsTUFBTSxRQUFRLEdBQUcsSUFBQSxjQUFPLEVBQUMsSUFBSSxDQUFDLENBQUE7SUFDOUIsTUFBTSxJQUFBLHFCQUFVLEVBQUMsSUFBSSxFQUFFLEVBQUUsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDekMsT0FBTyxRQUFRLENBQUE7QUFDakIsQ0FBQztBQUpELDBCQUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGV4dHJhY3RaaXAgZnJvbSAnZXh0cmFjdC16aXAnXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcbmltcG9ydCB7IElGaWxlU3lzdGVtQ29tcG9uZW50IH0gZnJvbSAnLi4vY29tcG9uZW50cy9mcydcbmltcG9ydCB7IElGZXRjaENvbXBvbmVudCB9IGZyb20gJy4uL2NvbXBvbmVudHMvZmV0Y2gnXG5cbi8qKlxuICogQ2hlY2sncyBpZiBkaXJlY3RvcnkgaXMgZW1wdHlcbiAqIEBwYXJhbSBkaXIgRGlyZWN0b3J5IHRvIGNoZWNrIGZvciBlbXB0eW5lc3NcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGlzRGlyZWN0b3J5RW1wdHkoXG4gIGNvbXBvbmVudHM6IHsgZnM6IElGaWxlU3lzdGVtQ29tcG9uZW50IH0sXG4gIGRpcjogc3RyaW5nXG4pOiBQcm9taXNlPGJvb2xlYW4+IHtcbiAgY29uc3QgZmlsZXMgPSBhd2FpdCBjb21wb25lbnRzLmZzLnJlYWRkaXIoZGlyKVxuICByZXR1cm4gIWZpbGVzLmxlbmd0aFxufVxuXG4vKipcbiAqIERvd25sb2FkIGEgZmlsZVxuICogQHBhcmFtIHVybCBVUkwgb2YgdGhlIGZpbGVcbiAqIEBwYXJhbSBkZXN0IFBhdGggdG8gd2hlcmUgdG8gc2F2ZSB0aGUgZmlsZVxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZG93bmxvYWQoXG4gIGNvbXBvbmVudHM6IHsgZnM6IElGaWxlU3lzdGVtQ29tcG9uZW50OyBmZXRjaDogSUZldGNoQ29tcG9uZW50IH0sXG4gIHVybDogc3RyaW5nLFxuICBkZXN0OiBzdHJpbmdcbik6IFByb21pc2U8c3RyaW5nPiB7XG4gIC8vIHdlIHNob3VsZCByZW1vdmUgdGhpcyBwYWNrYWdlIGFuZCB1c2UgdGhlIG5hdGl2ZSBcImZldGNoXCIgd2hlbiBOb2RlXG4gIC8vIHJlbGVhc2VzIGl0IGFzIHN0YWJsZTogaHR0cHM6Ly9ub2RlanMub3JnL2RvY3MvbGF0ZXN0LXYxOC54L2FwaS9nbG9iYWxzLmh0bWwjZmV0Y2hcbiAgY29uc3QgZGF0YSA9IGF3YWl0IChhd2FpdCBjb21wb25lbnRzLmZldGNoLmZldGNoKHVybCkpLmFycmF5QnVmZmVyKClcbiAgYXdhaXQgY29tcG9uZW50cy5mcy53cml0ZUZpbGUoZGVzdCwgQnVmZmVyLmZyb20oZGF0YSkpXG4gIHJldHVybiBkZXN0XG59XG5cbi8qKlxuICogRXh0cmFjdHMgYSAuemlwIGZpbGVcbiAqIEBwYXJhbSB1cmwgUGF0aCBvZiB0aGUgemlwIGZpbGVcbiAqIEBwYXJhbSBkZXN0IFBhdGggdG8gd2hlcmUgdG8gZXh0cmFjdCB0aGUgemlwIGZpbGVcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGV4dHJhY3QocGF0aDogc3RyaW5nLCBkZXN0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICBjb25zdCBkZXN0UGF0aCA9IHJlc29sdmUoZGVzdClcbiAgYXdhaXQgZXh0cmFjdFppcChwYXRoLCB7IGRpcjogZGVzdFBhdGggfSlcbiAgcmV0dXJuIGRlc3RQYXRoXG59XG4iXX0=
|
package/cli/utils/fs.ts
CHANGED
@@ -1,79 +1,34 @@
|
|
1
|
-
import fs from 'fs/promises'
|
2
1
|
import extractZip from 'extract-zip'
|
3
2
|
import { resolve } from 'path'
|
4
|
-
import {
|
5
|
-
|
6
|
-
const _this = exports
|
7
|
-
|
8
|
-
/**
|
9
|
-
* Create's a directory if not exists
|
10
|
-
* @param path New directory path
|
11
|
-
*/
|
12
|
-
export async function createDirIfNotExists(path: string): Promise<void> {
|
13
|
-
if (!path || (await _this.exists(path))) return
|
14
|
-
await fs.mkdir(path)
|
15
|
-
}
|
16
|
-
|
17
|
-
/**
|
18
|
-
* Checks if a folder exists and creates it if necessary.
|
19
|
-
* @param path One or multiple paths to be checked.
|
20
|
-
*/
|
21
|
-
export async function ensureFolder(path: string | string[]): Promise<void> {
|
22
|
-
if (!Array.isArray(path)) return _this.createDirIfNotExists(path)
|
23
|
-
if (path.length <= 1) return _this.createDirIfNotExists(path[0])
|
24
|
-
|
25
|
-
await _this.createDirIfNotExists(path[0])
|
26
|
-
await _this.ensureFolder(path.slice(1))
|
27
|
-
}
|
3
|
+
import { IFileSystemComponent } from '../components/fs'
|
4
|
+
import { IFetchComponent } from '../components/fetch'
|
28
5
|
|
29
6
|
/**
|
30
7
|
* Check's if directory is empty
|
31
8
|
* @param dir Directory to check for emptyness
|
32
9
|
*/
|
33
|
-
export async function isDirectoryEmpty(
|
34
|
-
|
10
|
+
export async function isDirectoryEmpty(
|
11
|
+
components: { fs: IFileSystemComponent },
|
12
|
+
dir: string
|
13
|
+
): Promise<boolean> {
|
14
|
+
const files = await components.fs.readdir(dir)
|
35
15
|
return !files.length
|
36
16
|
}
|
37
17
|
|
38
|
-
/**
|
39
|
-
* Check's if path is a directory
|
40
|
-
* @param path Path to some file/directory
|
41
|
-
*/
|
42
|
-
export async function isDirectory(path: string): Promise<boolean> {
|
43
|
-
return (await _this.exists(path)) && (await fs.lstat(path)).isDirectory()
|
44
|
-
}
|
45
|
-
|
46
|
-
/**
|
47
|
-
* Check's if path is a file
|
48
|
-
* @param path Path to some file/directory
|
49
|
-
*/
|
50
|
-
export async function isFile(path: string): Promise<boolean> {
|
51
|
-
return (await _this.exists(path)) && (await fs.lstat(path)).isFile()
|
52
|
-
}
|
53
|
-
|
54
|
-
/**
|
55
|
-
* Check's if directory exists
|
56
|
-
* @param path Path to check for existence
|
57
|
-
*/
|
58
|
-
export async function exists(path: string): Promise<boolean> {
|
59
|
-
try {
|
60
|
-
await fs.access(path)
|
61
|
-
return true
|
62
|
-
} catch (_) {
|
63
|
-
return false
|
64
|
-
}
|
65
|
-
}
|
66
|
-
|
67
18
|
/**
|
68
19
|
* Download a file
|
69
20
|
* @param url URL of the file
|
70
21
|
* @param dest Path to where to save the file
|
71
22
|
*/
|
72
|
-
export async function download(
|
23
|
+
export async function download(
|
24
|
+
components: { fs: IFileSystemComponent; fetch: IFetchComponent },
|
25
|
+
url: string,
|
26
|
+
dest: string
|
27
|
+
): Promise<string> {
|
73
28
|
// we should remove this package and use the native "fetch" when Node
|
74
29
|
// releases it as stable: https://nodejs.org/docs/latest-v18.x/api/globals.html#fetch
|
75
|
-
const data = await (await fetch(url)).arrayBuffer()
|
76
|
-
await fs.writeFile(dest, Buffer.from(data))
|
30
|
+
const data = await (await components.fetch.fetch(url)).arrayBuffer()
|
31
|
+
await components.fs.writeFile(dest, Buffer.from(data))
|
77
32
|
return dest
|
78
33
|
}
|
79
34
|
|
@@ -87,11 +42,3 @@ export async function extract(path: string, dest: string): Promise<string> {
|
|
87
42
|
await extractZip(path, { dir: destPath })
|
88
43
|
return destPath
|
89
44
|
}
|
90
|
-
|
91
|
-
/**
|
92
|
-
* Removes a file
|
93
|
-
* @param url Path to the file to delete
|
94
|
-
*/
|
95
|
-
export async function remove(path: string): Promise<void> {
|
96
|
-
await fs.rm(path)
|
97
|
-
}
|
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-4006744889.commit-c6aff5f",
|
4
4
|
"description": "",
|
5
5
|
"main": "./index.js",
|
6
6
|
"typings": "./index.d.ts",
|
@@ -20,12 +20,12 @@
|
|
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-4006744889.commit-c6aff5f",
|
24
|
+
"@dcl/ecs": "7.0.6-4006744889.commit-c6aff5f",
|
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-4006744889.commit-c6aff5f",
|
27
27
|
"@dcl/kernel": "2.0.0-3766760530.commit-239d2a9",
|
28
|
-
"@dcl/react-ecs": "7.0.6-
|
28
|
+
"@dcl/react-ecs": "7.0.6-4006744889.commit-c6aff5f",
|
29
29
|
"@dcl/unity-renderer": "1.0.68557-20221221195847.commit-f743b85",
|
30
30
|
"arg": "5.0.2",
|
31
31
|
"extract-zip": "2.0.1",
|
@@ -43,5 +43,5 @@
|
|
43
43
|
"displayName": "SDK",
|
44
44
|
"tsconfig": "./tsconfig.json"
|
45
45
|
},
|
46
|
-
"commit": "
|
46
|
+
"commit": "c6aff5f2e439d5af79c1e38d02ff90d3604670f3"
|
47
47
|
}
|