@dcl/sdk-commands 7.1.10-4886202833.commit-21822d4 → 7.1.10-4886282447.commit-e92323e
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/dist/commands/init/index.d.ts +3 -0
- package/dist/commands/init/index.js +41 -26
- package/dist/commands/init/index.js.map +1 -1
- package/dist/commands/init/repos.d.ts +4 -9
- package/dist/commands/init/repos.js +16 -8
- package/dist/commands/init/repos.js.map +1 -1
- package/dist/logic/fs.d.ts +4 -1
- package/dist/logic/fs.js +9 -2
- package/dist/logic/fs.js.map +1 -1
- package/package.json +3 -3
@@ -9,7 +9,10 @@ export declare const args: {
|
|
9
9
|
'-y': string;
|
10
10
|
'--dir': StringConstructor;
|
11
11
|
'--skip-install': BooleanConstructor;
|
12
|
+
'--template': StringConstructor;
|
13
|
+
'--project': StringConstructor;
|
12
14
|
};
|
13
15
|
export declare function help(): Promise<void>;
|
14
16
|
export declare function main(options: Options): Promise<void>;
|
17
|
+
export declare function downloadAndUnzipUrlContainFolder(url: string, dest: string, options: Options): Promise<void>;
|
15
18
|
export {};
|
@@ -1,54 +1,69 @@
|
|
1
1
|
"use strict";
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
4
|
+
};
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.main = exports.help = exports.args = void 0;
|
4
|
-
const path_1 = require("path");
|
6
|
+
exports.downloadAndUnzipUrlContainFolder = exports.main = exports.help = exports.args = void 0;
|
7
|
+
const path_1 = __importDefault(require("path"));
|
5
8
|
const args_1 = require("../../logic/args");
|
6
9
|
const error_1 = require("../../logic/error");
|
7
10
|
const fs_1 = require("../../logic/fs");
|
8
|
-
const repos_1 = require("./repos");
|
9
11
|
const project_validations_1 = require("../../logic/project-validations");
|
12
|
+
const repos_1 = require("./repos");
|
10
13
|
exports.args = (0, args_1.declareArgs)({
|
11
14
|
'--yes': Boolean,
|
12
15
|
'-y': '--yes',
|
13
16
|
'--dir': String,
|
14
|
-
'--skip-install': Boolean
|
17
|
+
'--skip-install': Boolean,
|
18
|
+
'--template': String,
|
19
|
+
'--project': String
|
15
20
|
});
|
16
21
|
async function help() { }
|
17
22
|
exports.help = help;
|
18
23
|
async function main(options) {
|
19
|
-
const dir =
|
24
|
+
const dir = path_1.default.resolve(process.cwd(), options.args['--dir'] || '.');
|
20
25
|
const isEmpty = await (0, fs_1.isDirectoryEmpty)(options.components, dir);
|
21
26
|
const yes = options.args['--yes'];
|
27
|
+
const requestedTemplateZipUrl = options.args['--template'];
|
28
|
+
const requestedProjectTemplate = options.args['--project'];
|
22
29
|
if (!isEmpty && !yes) {
|
23
30
|
throw new error_1.CliError('The target directory specified is not empty. Run this command with --yes to override.');
|
24
31
|
}
|
32
|
+
if (requestedTemplateZipUrl && requestedProjectTemplate) {
|
33
|
+
throw new error_1.CliError(`Specifying --template and --project at the same time is not allowed. Please specify only one of them.`);
|
34
|
+
}
|
35
|
+
if (requestedProjectTemplate && !(0, repos_1.existScaffoldedProject)(requestedProjectTemplate)) {
|
36
|
+
throw new error_1.CliError(`The requested scene doesn't exist empty. Valid options are: ${(0, repos_1.scaffoldedProjectOptions)().join(', ')}`);
|
37
|
+
}
|
25
38
|
// download and extract template project
|
26
|
-
const
|
27
|
-
const
|
28
|
-
|
29
|
-
await (0, fs_1.extract)(zip, dir);
|
30
|
-
await options.components.fs.unlink(zip);
|
31
|
-
await moveFilesFromDirs(options.components, dir, contentFolders);
|
39
|
+
const projectTemplate = requestedProjectTemplate || 'scene-template';
|
40
|
+
const url = requestedTemplateZipUrl || (0, repos_1.getScaffoldedProjectUrl)(projectTemplate);
|
41
|
+
await downloadAndUnzipUrlContainFolder(url, dir, options);
|
32
42
|
// npm install
|
33
43
|
const shouldInstallDeps = await (0, project_validations_1.needsDependencies)(options.components, dir);
|
34
44
|
if (shouldInstallDeps && !options.args['--skip-install']) {
|
35
45
|
await (0, project_validations_1.installDependencies)(options.components, dir);
|
36
46
|
}
|
37
|
-
options.components.analytics.track('Scene created', {
|
47
|
+
options.components.analytics.track('Scene created', {
|
48
|
+
projectType: requestedTemplateZipUrl ? 'custom-template-url' : projectTemplate,
|
49
|
+
url
|
50
|
+
});
|
38
51
|
}
|
39
52
|
exports.main = main;
|
40
|
-
|
41
|
-
const
|
42
|
-
await
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
const
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
53
|
+
async function downloadAndUnzipUrlContainFolder(url, dest, options) {
|
54
|
+
const zipFilePath = path_1.default.resolve(dest, 'temp-zip-project.zip');
|
55
|
+
const zip = await (0, fs_1.download)(options.components, url, zipFilePath);
|
56
|
+
const zipExtracted = await (0, fs_1.extract)(zip, dest);
|
57
|
+
if (zipExtracted.topLevelFolders.length !== 1) {
|
58
|
+
throw new Error('The zip downloaded has many folder on the root, make sure it has only one folder on the root.');
|
59
|
+
}
|
60
|
+
const extractedPath = path_1.default.resolve(dest, zipExtracted.topLevelFolders[0]);
|
61
|
+
const filesToMove = await options.components.fs.readdir(extractedPath);
|
62
|
+
for (const filePath of filesToMove) {
|
63
|
+
await options.components.fs.rename(path_1.default.resolve(extractedPath, filePath), path_1.default.resolve(dest, filePath));
|
64
|
+
}
|
65
|
+
await options.components.fs.rmdir(extractedPath);
|
66
|
+
await options.components.fs.unlink(zipFilePath);
|
67
|
+
}
|
68
|
+
exports.downloadAndUnzipUrlContainFolder = downloadAndUnzipUrlContainFolder;
|
54
69
|
//# sourceMappingURL=index.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/init/index.ts"],"names":[],"mappings":"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"}
|
@@ -1,9 +1,4 @@
|
|
1
|
-
type
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
contentFolders: string[];
|
6
|
-
};
|
7
|
-
};
|
8
|
-
export declare const get: (scene: Scene) => Repos[Scene];
|
9
|
-
export {};
|
1
|
+
export type ScaffoldedProject = 'scene-template' | 'editor-scene-template';
|
2
|
+
export declare function getScaffoldedProjectUrl(scene: ScaffoldedProject): string;
|
3
|
+
export declare function existScaffoldedProject(maybeProject: string): boolean;
|
4
|
+
export declare function scaffoldedProjectOptions(): ScaffoldedProject[];
|
@@ -1,12 +1,20 @@
|
|
1
1
|
"use strict";
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
-
exports.
|
4
|
-
const
|
5
|
-
'scene-template':
|
6
|
-
|
7
|
-
contentFolders: ['sdk7-scene-template-main']
|
8
|
-
}
|
3
|
+
exports.scaffoldedProjectOptions = exports.existScaffoldedProject = exports.getScaffoldedProjectUrl = void 0;
|
4
|
+
const scaffoldedProjectUrls = {
|
5
|
+
'scene-template': 'https://github.com/decentraland/sdk7-scene-template/archive/refs/heads/main.zip',
|
6
|
+
'editor-scene-template': 'https://github.com/decentraland/editor-sdk7-scene-template/archive/refs/heads/main.zip'
|
9
7
|
};
|
10
|
-
|
11
|
-
|
8
|
+
function getScaffoldedProjectUrl(scene) {
|
9
|
+
return scaffoldedProjectUrls[scene];
|
10
|
+
}
|
11
|
+
exports.getScaffoldedProjectUrl = getScaffoldedProjectUrl;
|
12
|
+
function existScaffoldedProject(maybeProject) {
|
13
|
+
return maybeProject in scaffoldedProjectUrls;
|
14
|
+
}
|
15
|
+
exports.existScaffoldedProject = existScaffoldedProject;
|
16
|
+
function scaffoldedProjectOptions() {
|
17
|
+
return Object.keys(scaffoldedProjectUrls);
|
18
|
+
}
|
19
|
+
exports.scaffoldedProjectOptions = scaffoldedProjectOptions;
|
12
20
|
//# sourceMappingURL=repos.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../../src/commands/init/repos.ts"],"names":[],"mappings":";;;
|
1
|
+
{"version":3,"file":"repos.js","sourceRoot":"","sources":["../../../src/commands/init/repos.ts"],"names":[],"mappings":";;;AAEA,MAAM,qBAAqB,GAAsC;IAC/D,gBAAgB,EAAE,iFAAiF;IACnG,uBAAuB,EAAE,wFAAwF;CAClH,CAAA;AAED,SAAgB,uBAAuB,CAAC,KAAwB;IAC9D,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAA;AACrC,CAAC;AAFD,0DAEC;AAED,SAAgB,sBAAsB,CAAC,YAAoB;IACzD,OAAO,YAAY,IAAI,qBAAqB,CAAA;AAC9C,CAAC;AAFD,wDAEC;AAED,SAAgB,wBAAwB;IACtC,OAAO,MAAM,CAAC,IAAI,CAAC,qBAAqB,CAAwB,CAAA;AAClE,CAAC;AAFD,4DAEC"}
|
package/dist/logic/fs.d.ts
CHANGED
@@ -22,7 +22,10 @@ export declare function download(components: {
|
|
22
22
|
* @param url Path of the zip file
|
23
23
|
* @param dest Path to where to extract the zip file
|
24
24
|
*/
|
25
|
-
export declare function extract(path: string, dest: string): Promise<
|
25
|
+
export declare function extract(path: string, dest: string): Promise<{
|
26
|
+
destPath: string;
|
27
|
+
topLevelFolders: string[];
|
28
|
+
}>;
|
26
29
|
/**
|
27
30
|
* Reads a file and parses it's JSON content
|
28
31
|
* @param path The path to the subject json file
|
package/dist/logic/fs.js
CHANGED
@@ -35,8 +35,15 @@ exports.download = download;
|
|
35
35
|
*/
|
36
36
|
async function extract(path, dest) {
|
37
37
|
const destPath = (0, path_1.resolve)(dest);
|
38
|
-
|
39
|
-
|
38
|
+
const topLevelFolders = new Set();
|
39
|
+
await (0, extract_zip_1.default)((0, path_1.resolve)(path), {
|
40
|
+
dir: destPath,
|
41
|
+
onEntry(entry, _zipfile) {
|
42
|
+
const topLevel = entry.fileName.split('/')[0];
|
43
|
+
topLevelFolders.add(topLevel);
|
44
|
+
}
|
45
|
+
});
|
46
|
+
return { destPath, topLevelFolders: Array.from(topLevelFolders) };
|
40
47
|
}
|
41
48
|
exports.extract = extract;
|
42
49
|
/**
|
package/dist/logic/fs.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/logic/fs.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAoC;AACpC,+BAA8B;AAK9B;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CAAC,UAAwC,EAAE,GAAW;IAC1F,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA;AACtB,CAAC;AAHD,4CAGC;AAED;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAC5B,UAAgE,EAChE,GAAW,EACX,IAAY;IAEZ,qEAAqE;IACrE,qFAAqF;IACrF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACpE,MAAM,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,OAAO,IAAI,CAAA;AACb,CAAC;AAVD,4BAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,IAAY;IACtD,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,IAAA,qBAAU,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE,
|
1
|
+
{"version":3,"file":"fs.js","sourceRoot":"","sources":["../../src/logic/fs.ts"],"names":[],"mappings":";;;;;;AAAA,8DAAoC;AACpC,+BAA8B;AAK9B;;;GAGG;AACI,KAAK,UAAU,gBAAgB,CAAC,UAAwC,EAAE,GAAW;IAC1F,MAAM,KAAK,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC9C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAA;AACtB,CAAC;AAHD,4CAGC;AAED;;;;GAIG;AACI,KAAK,UAAU,QAAQ,CAC5B,UAAgE,EAChE,GAAW,EACX,IAAY;IAEZ,qEAAqE;IACrE,qFAAqF;IACrF,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IACpE,MAAM,UAAU,CAAC,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;IACtD,OAAO,IAAI,CAAA;AACb,CAAC;AAVD,4BAUC;AAED;;;;GAIG;AACI,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,IAAY;IACtD,MAAM,QAAQ,GAAG,IAAA,cAAO,EAAC,IAAI,CAAC,CAAA;IAC9B,MAAM,eAAe,GAAG,IAAI,GAAG,EAAU,CAAA;IACzC,MAAM,IAAA,qBAAU,EAAC,IAAA,cAAO,EAAC,IAAI,CAAC,EAAE;QAC9B,GAAG,EAAE,QAAQ;QACb,OAAO,CAAC,KAAK,EAAE,QAAQ;YACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;YAC7C,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAA;QAC/B,CAAC;KACF,CAAC,CAAA;IACF,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,EAAE,CAAA;AACnE,CAAC;AAXD,0BAWC;AAED;;;GAGG;AACI,KAAK,UAAU,QAAQ,CAAI,UAAqC,EAAE,IAAY;IACnF,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IAC3D,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAM,CAAA;AACjC,CAAC;AAHD,4BAGC"}
|
package/package.json
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
{
|
2
2
|
"name": "@dcl/sdk-commands",
|
3
3
|
"description": "",
|
4
|
-
"version": "7.1.10-
|
4
|
+
"version": "7.1.10-4886282447.commit-e92323e",
|
5
5
|
"author": "Decentraland",
|
6
6
|
"bin": {
|
7
7
|
"sdk-commands": "./dist/index.js"
|
8
8
|
},
|
9
9
|
"dependencies": {
|
10
10
|
"@dcl/hashing": "1.1.3",
|
11
|
-
"@dcl/inspector": "7.1.10-
|
11
|
+
"@dcl/inspector": "7.1.10-4886282447.commit-e92323e",
|
12
12
|
"@dcl/linker-dapp": "0.7.0",
|
13
13
|
"@dcl/mini-comms": "1.0.1-20230216163137.commit-a4c75be",
|
14
14
|
"@dcl/protocol": "1.0.0-4810686946.commit-7c034e3",
|
@@ -64,5 +64,5 @@
|
|
64
64
|
"displayName": "SDK",
|
65
65
|
"tsconfig": "./tsconfig.json"
|
66
66
|
},
|
67
|
-
"commit": "
|
67
|
+
"commit": "e92323ee24f2fb610a00e6de21f038842736ea84"
|
68
68
|
}
|