@dcl/sdk 7.0.6-4006744889.commit-c6aff5f → 7.0.6-4009020955.commit-08722f5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cli/commands/build/helpers.d.ts +25 -0
- package/cli/commands/build/helpers.js +50 -0
- package/cli/commands/build/helpers.ts +95 -0
- package/cli/commands/build/index.d.ts +19 -0
- package/cli/commands/build/index.js +64 -0
- package/cli/commands/build/index.ts +91 -0
- package/cli/commands/init/index.d.ts +1 -1
- package/cli/commands/init/index.js +8 -14
- package/cli/commands/init/index.ts +8 -18
- package/cli/commands/init/repos.js +1 -1
- package/cli/commands/init/repos.ts +1 -2
- package/cli/commands/preview/bff.d.ts +3 -0
- package/cli/commands/preview/bff.js +50 -0
- package/cli/commands/preview/bff.ts +59 -0
- package/cli/commands/preview/catalyst.d.ts +5 -0
- package/cli/commands/preview/catalyst.js +24 -0
- package/cli/commands/preview/catalyst.ts +31 -0
- package/cli/commands/preview/coordinates.d.ts +20 -0
- package/cli/commands/preview/coordinates.js +90 -0
- package/cli/commands/preview/coordinates.ts +146 -0
- package/cli/commands/preview/endpoints.d.ts +10 -0
- package/cli/commands/preview/endpoints.js +500 -0
- package/cli/commands/preview/endpoints.ts +594 -0
- package/cli/commands/preview/eth.d.ts +2 -0
- package/cli/commands/preview/eth.js +6 -0
- package/cli/commands/preview/eth.ts +3 -0
- package/cli/commands/preview/index.d.ts +18 -0
- package/cli/commands/preview/index.js +75 -0
- package/cli/commands/preview/index.ts +88 -0
- package/cli/commands/preview/port.d.ts +1 -0
- package/cli/commands/preview/port.js +21 -0
- package/cli/commands/preview/port.ts +15 -0
- package/cli/commands/preview/project.d.ts +14 -0
- package/cli/commands/preview/project.js +77 -0
- package/cli/commands/preview/project.ts +112 -0
- package/cli/commands/preview/types.d.ts +13 -0
- package/cli/commands/preview/types.js +3 -0
- package/cli/commands/preview/types.ts +19 -0
- package/cli/commands/preview/wire.d.ts +14 -0
- package/cli/commands/preview/wire.js +28 -0
- package/cli/commands/preview/wire.ts +48 -0
- package/cli/commands/preview/ws.d.ts +7 -0
- package/cli/commands/preview/ws.js +16 -0
- package/cli/commands/preview/ws.ts +24 -0
- package/cli/commands/start/index.d.ts +29 -0
- package/cli/commands/start/index.js +121 -0
- package/cli/commands/start/index.ts +132 -0
- package/cli/components/fs.d.ts +2 -1
- package/cli/components/fs.js +1 -1
- package/cli/components/fs.ts +2 -11
- package/cli/index.js +4 -6
- package/cli/index.ts +9 -10
- package/cli/utils/args.js +2 -2
- package/cli/utils/args.ts +2 -8
- package/cli/utils/commands.js +2 -2
- package/cli/utils/commands.ts +3 -7
- package/cli/utils/exec.d.ts +8 -0
- package/cli/utils/exec.js +33 -0
- package/cli/utils/exec.ts +38 -0
- package/cli/utils/fs.js +1 -1
- package/cli/utils/fs.ts +1 -4
- package/cli/utils/handler.d.ts +6 -0
- package/cli/utils/handler.js +19 -0
- package/cli/utils/handler.ts +23 -0
- package/cli/utils/object.d.ts +9 -0
- package/cli/utils/object.js +45 -0
- package/cli/utils/object.ts +62 -0
- package/cli/utils/out-messages.d.ts +1 -0
- package/cli/utils/out-messages.js +8 -0
- package/cli/utils/out-messages.ts +3 -0
- package/internal/Observable.js +3 -7
- package/internal/provider.js +1 -1
- package/internal/transports/rendererTransport.js +2 -3
- package/messageBus.js +1 -1
- package/observables.js +1 -1
- package/package.json +18 -7
- package/src/internal/Observable.ts +9 -44
- package/src/internal/provider.ts +3 -11
- package/src/internal/transports/rendererTransport.ts +4 -12
- package/src/messageBus.ts +1 -4
- package/src/observables.ts +27 -63
- package/tsconfig.cli.json +10 -1
- package/cli/utils/spinner.d.ts +0 -15
- package/cli/utils/spinner.js +0 -41
- package/cli/utils/spinner.ts +0 -44
@@ -0,0 +1,25 @@
|
|
1
|
+
import { IFileSystemComponent } from '../../components/fs';
|
2
|
+
import { Dict } from '../../utils/object';
|
3
|
+
export declare const REQUIRED_FILES: {
|
4
|
+
PACKAGE_JSON: string;
|
5
|
+
TS_CONFIG_JSON: string;
|
6
|
+
SCENE_JSON: string;
|
7
|
+
};
|
8
|
+
export declare const REQUIRED_PACKAGE_JSON: {};
|
9
|
+
export declare const getProjectStructure: () => string[];
|
10
|
+
export declare const validateProjectStructure: (components: {
|
11
|
+
fs: IFileSystemComponent;
|
12
|
+
}, dir: string, fileList: string[]) => Promise<boolean>;
|
13
|
+
export declare const validatePackageJson: (components: {
|
14
|
+
fs: IFileSystemComponent;
|
15
|
+
}, dir: string, deps: Dict) => Promise<boolean>;
|
16
|
+
export declare const needsDependencies: (components: {
|
17
|
+
fs: IFileSystemComponent;
|
18
|
+
}, dir: string) => Promise<boolean>;
|
19
|
+
export declare const npm: string;
|
20
|
+
export declare function installDependencies(dir: string): Promise<void>;
|
21
|
+
export declare const buildTypescript: ({ dir, watch, production }: {
|
22
|
+
dir: string;
|
23
|
+
watch: boolean;
|
24
|
+
production: boolean;
|
25
|
+
}) => Promise<void>;
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.buildTypescript = exports.installDependencies = exports.npm = exports.needsDependencies = exports.validatePackageJson = exports.validateProjectStructure = exports.getProjectStructure = exports.REQUIRED_PACKAGE_JSON = exports.REQUIRED_FILES = void 0;
|
4
|
+
const path_1 = require("path");
|
5
|
+
const exec_1 = require("../../utils/exec");
|
6
|
+
const object_1 = require("../../utils/object");
|
7
|
+
exports.REQUIRED_FILES = {
|
8
|
+
PACKAGE_JSON: 'package.json',
|
9
|
+
TS_CONFIG_JSON: 'tsconfig.json',
|
10
|
+
SCENE_JSON: 'scene.json'
|
11
|
+
};
|
12
|
+
exports.REQUIRED_PACKAGE_JSON = {};
|
13
|
+
const getProjectStructure = () => Object.values(exports.REQUIRED_FILES);
|
14
|
+
exports.getProjectStructure = getProjectStructure;
|
15
|
+
const validateProjectStructure = async (components, dir, fileList) => {
|
16
|
+
const files = await components.fs.readdir(dir);
|
17
|
+
const requiredFiles = new Set(fileList);
|
18
|
+
for (let i = 0; i < files.length && requiredFiles.size > 0; i++) {
|
19
|
+
if (requiredFiles.has(files[i])) {
|
20
|
+
requiredFiles.delete(files[i]);
|
21
|
+
}
|
22
|
+
}
|
23
|
+
return requiredFiles.size === 0;
|
24
|
+
};
|
25
|
+
exports.validateProjectStructure = validateProjectStructure;
|
26
|
+
const validatePackageJson = async (components, dir, deps) => {
|
27
|
+
const packageJson = JSON.parse(await components.fs.readFile((0, path_1.resolve)(dir, exports.REQUIRED_FILES.PACKAGE_JSON), 'utf-8'));
|
28
|
+
return (0, object_1.hasPrimitiveKeys)(packageJson, deps);
|
29
|
+
};
|
30
|
+
exports.validatePackageJson = validatePackageJson;
|
31
|
+
const needsDependencies = async (components, dir) => {
|
32
|
+
const nodeModulesPath = (0, path_1.resolve)(dir, 'node_modules');
|
33
|
+
const hasNodeModulesFolder = await components.fs.existPath(nodeModulesPath);
|
34
|
+
const isNodeModulesEmpty = hasNodeModulesFolder && (await components.fs.readdir(nodeModulesPath)).length === 0;
|
35
|
+
return !hasNodeModulesFolder || isNodeModulesEmpty;
|
36
|
+
};
|
37
|
+
exports.needsDependencies = needsDependencies;
|
38
|
+
exports.npm = /^win/.test(process.platform) ? 'npm.cmd' : 'npm';
|
39
|
+
async function installDependencies(dir) {
|
40
|
+
await (0, exec_1.exec)(dir, `${exports.npm} install`);
|
41
|
+
}
|
42
|
+
exports.installDependencies = installDependencies;
|
43
|
+
const buildTypescript = async ({ dir, watch, production }) => {
|
44
|
+
const command = watch ? 'watch' : 'build';
|
45
|
+
await (0, exec_1.exec)(dir, `${exports.npm} run ${command}`, {
|
46
|
+
env: { NODE_ENV: production ? 'production' : '' }
|
47
|
+
});
|
48
|
+
};
|
49
|
+
exports.buildTypescript = buildTypescript;
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQThCO0FBRzlCLDJDQUF1QztBQUN2QywrQ0FBMkQ7QUFLOUMsUUFBQSxjQUFjLEdBQUc7SUFDNUIsWUFBWSxFQUFFLGNBQWM7SUFDNUIsY0FBYyxFQUFFLGVBQWU7SUFDL0IsVUFBVSxFQUFFLFlBQVk7Q0FDekIsQ0FBQTtBQUtZLFFBQUEscUJBQXFCLEdBQUcsRUFBRSxDQUFBO0FBS2hDLE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxzQkFBYyxDQUFDLENBQUE7QUFBekQsUUFBQSxtQkFBbUIsdUJBQXNDO0FBSy9ELE1BQU0sd0JBQXdCLEdBQUcsS0FBSyxFQUMzQyxVQUF3QyxFQUN4QyxHQUFXLEVBQ1gsUUFBa0IsRUFDQSxFQUFFO0lBQ3BCLE1BQU0sS0FBSyxHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDOUMsTUFBTSxhQUFhLEdBQUcsSUFBSSxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7SUFFdkMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLElBQUksYUFBYSxDQUFDLElBQUksR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7UUFDL0QsSUFBSSxhQUFhLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQy9CLGFBQWEsQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDL0I7S0FDRjtJQUVELE9BQU8sYUFBYSxDQUFDLElBQUksS0FBSyxDQUFDLENBQUE7QUFDakMsQ0FBQyxDQUFBO0FBZlksUUFBQSx3QkFBd0IsNEJBZXBDO0FBS00sTUFBTSxtQkFBbUIsR0FBRyxLQUFLLEVBQ3RDLFVBQXdDLEVBQ3hDLEdBQVcsRUFDWCxJQUFVLEVBQ1EsRUFBRTtJQUNwQixNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBQSxjQUFPLEVBQUMsR0FBRyxFQUFFLHNCQUFjLENBQUMsWUFBWSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtJQUNoSCxPQUFPLElBQUEseUJBQWdCLEVBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFBO0FBQzVDLENBQUMsQ0FBQTtBQVBZLFFBQUEsbUJBQW1CLHVCQU8vQjtBQUtNLE1BQU0saUJBQWlCLEdBQUcsS0FBSyxFQUFFLFVBQXdDLEVBQUUsR0FBVyxFQUFvQixFQUFFO0lBQ2pILE1BQU0sZUFBZSxHQUFHLElBQUEsY0FBTyxFQUFDLEdBQUcsRUFBRSxjQUFjLENBQUMsQ0FBQTtJQUNwRCxNQUFNLG9CQUFvQixHQUFHLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxTQUFTLENBQUMsZUFBZSxDQUFDLENBQUE7SUFDM0UsTUFBTSxrQkFBa0IsR0FBRyxvQkFBb0IsSUFBSSxDQUFDLE1BQU0sVUFBVSxDQUFDLEVBQUUsQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsQ0FBQyxNQUFNLEtBQUssQ0FBQyxDQUFBO0lBRTlHLE9BQU8sQ0FBQyxvQkFBb0IsSUFBSSxrQkFBa0IsQ0FBQTtBQUNwRCxDQUFDLENBQUE7QUFOWSxRQUFBLGlCQUFpQixxQkFNN0I7QUFHWSxRQUFBLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUE7QUFLN0QsS0FBSyxVQUFVLG1CQUFtQixDQUFDLEdBQVc7SUFDbkQsTUFBTSxJQUFBLFdBQUksRUFBQyxHQUFHLEVBQUUsR0FBRyxXQUFHLFVBQVUsQ0FBQyxDQUFBO0FBQ25DLENBQUM7QUFGRCxrREFFQztBQUtNLE1BQU0sZUFBZSxHQUFHLEtBQUssRUFBRSxFQUNwQyxHQUFHLEVBQ0gsS0FBSyxFQUNMLFVBQVUsRUFLWCxFQUFpQixFQUFFO0lBQ2xCLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUE7SUFDekMsTUFBTSxJQUFBLFdBQUksRUFBQyxHQUFHLEVBQUUsR0FBRyxXQUFHLFFBQVEsT0FBTyxFQUFFLEVBQUU7UUFDdkMsR0FBRyxFQUFFLEVBQUUsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7S0FDbEQsQ0FBQyxDQUFBO0FBQ0osQ0FBQyxDQUFBO0FBYlksUUFBQSxlQUFlLG1CQWEzQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJlc29sdmUgfSBmcm9tICdwYXRoJ1xuXG5pbXBvcnQgeyBJRmlsZVN5c3RlbUNvbXBvbmVudCB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMvZnMnXG5pbXBvcnQgeyBleGVjIH0gZnJvbSAnLi4vLi4vdXRpbHMvZXhlYydcbmltcG9ydCB7IERpY3QsIGhhc1ByaW1pdGl2ZUtleXMgfSBmcm9tICcuLi8uLi91dGlscy9vYmplY3QnXG5cbi8qKlxuICogUmVxdWlyZWQgcHJvamVjdCBkaXJzL2ZpbGVzXG4gKi9cbmV4cG9ydCBjb25zdCBSRVFVSVJFRF9GSUxFUyA9IHtcbiAgUEFDS0FHRV9KU09OOiAncGFja2FnZS5qc29uJyxcbiAgVFNfQ09ORklHX0pTT046ICd0c2NvbmZpZy5qc29uJyxcbiAgU0NFTkVfSlNPTjogJ3NjZW5lLmpzb24nXG59XG5cbi8qKlxuICogUmVxdWlyZWQgXCJwYWNrYWdlLmpzb25cIiBzdHJ1Y3R1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IFJFUVVJUkVEX1BBQ0tBR0VfSlNPTiA9IHt9XG5cbi8qKlxuICogUmV0dXJucyB0aGUgcmVxdWlyZWQgZmlsZXMgZm9yIGEgcHJvamVjdFxuICovXG5leHBvcnQgY29uc3QgZ2V0UHJvamVjdFN0cnVjdHVyZSA9ICgpID0+IE9iamVjdC52YWx1ZXMoUkVRVUlSRURfRklMRVMpXG5cbi8qKlxuICogUmV0dXJucyB0cnVlIGlmIHRoZSBwcm9qZWN0IGZvbGxvd3MgYSB2YWxpZCBzY2VuZSBzdHJ1Y3R1cmVcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUHJvamVjdFN0cnVjdHVyZSA9IGFzeW5jIChcbiAgY29tcG9uZW50czogeyBmczogSUZpbGVTeXN0ZW1Db21wb25lbnQgfSxcbiAgZGlyOiBzdHJpbmcsXG4gIGZpbGVMaXN0OiBzdHJpbmdbXVxuKTogUHJvbWlzZTxib29sZWFuPiA9PiB7XG4gIGNvbnN0IGZpbGVzID0gYXdhaXQgY29tcG9uZW50cy5mcy5yZWFkZGlyKGRpcilcbiAgY29uc3QgcmVxdWlyZWRGaWxlcyA9IG5ldyBTZXQoZmlsZUxpc3QpXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBmaWxlcy5sZW5ndGggJiYgcmVxdWlyZWRGaWxlcy5zaXplID4gMDsgaSsrKSB7XG4gICAgaWYgKHJlcXVpcmVkRmlsZXMuaGFzKGZpbGVzW2ldKSkge1xuICAgICAgcmVxdWlyZWRGaWxlcy5kZWxldGUoZmlsZXNbaV0pXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHJlcXVpcmVkRmlsZXMuc2l6ZSA9PT0gMFxufVxuXG4vKipcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvamVjdCdzIFwicGFja2FnZS5qc29uXCIgaXMgdmFsaWRcbiAqL1xuZXhwb3J0IGNvbnN0IHZhbGlkYXRlUGFja2FnZUpzb24gPSBhc3luYyAoXG4gIGNvbXBvbmVudHM6IHsgZnM6IElGaWxlU3lzdGVtQ29tcG9uZW50IH0sXG4gIGRpcjogc3RyaW5nLFxuICBkZXBzOiBEaWN0XG4pOiBQcm9taXNlPGJvb2xlYW4+ID0+IHtcbiAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGF3YWl0IGNvbXBvbmVudHMuZnMucmVhZEZpbGUocmVzb2x2ZShkaXIsIFJFUVVJUkVEX0ZJTEVTLlBBQ0tBR0VfSlNPTiksICd1dGYtOCcpKVxuICByZXR1cm4gaGFzUHJpbWl0aXZlS2V5cyhwYWNrYWdlSnNvbiwgZGVwcylcbn1cblxuLypcbiAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcHJvamVjdCBjb250YWlucyBhbiBlbXB0eSBub2RlX21vZHVsZXMgZm9sZGVyXG4gKi9cbmV4cG9ydCBjb25zdCBuZWVkc0RlcGVuZGVuY2llcyA9IGFzeW5jIChjb21wb25lbnRzOiB7IGZzOiBJRmlsZVN5c3RlbUNvbXBvbmVudCB9LCBkaXI6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj4gPT4ge1xuICBjb25zdCBub2RlTW9kdWxlc1BhdGggPSByZXNvbHZlKGRpciwgJ25vZGVfbW9kdWxlcycpXG4gIGNvbnN0IGhhc05vZGVNb2R1bGVzRm9sZGVyID0gYXdhaXQgY29tcG9uZW50cy5mcy5leGlzdFBhdGgobm9kZU1vZHVsZXNQYXRoKVxuICBjb25zdCBpc05vZGVNb2R1bGVzRW1wdHkgPSBoYXNOb2RlTW9kdWxlc0ZvbGRlciAmJiAoYXdhaXQgY29tcG9uZW50cy5mcy5yZWFkZGlyKG5vZGVNb2R1bGVzUGF0aCkpLmxlbmd0aCA9PT0gMFxuXG4gIHJldHVybiAhaGFzTm9kZU1vZHVsZXNGb2xkZXIgfHwgaXNOb2RlTW9kdWxlc0VtcHR5XG59XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICovXG5leHBvcnQgY29uc3QgbnBtID0gL153aW4vLnRlc3QocHJvY2Vzcy5wbGF0Zm9ybSkgPyAnbnBtLmNtZCcgOiAnbnBtJ1xuXG4vKlxuICogUnVucyBcIm5wbSBpbnN0YWxsXCIgZm9yIGRlc2lyZWQgcHJvamVjdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gaW5zdGFsbERlcGVuZGVuY2llcyhkaXI6IHN0cmluZyk6IFByb21pc2U8dm9pZD4ge1xuICBhd2FpdCBleGVjKGRpciwgYCR7bnBtfSBpbnN0YWxsYClcbn1cblxuLyoqXG4gKiBCdWlsZCdzIFR5cGVzY3JpcHQgdXNpbmcgXCJ0c2NvbmZpZy5qc29uXCIgZmlsZVxuICovXG5leHBvcnQgY29uc3QgYnVpbGRUeXBlc2NyaXB0ID0gYXN5bmMgKHtcbiAgZGlyLFxuICB3YXRjaCxcbiAgcHJvZHVjdGlvblxufToge1xuICBkaXI6IHN0cmluZ1xuICB3YXRjaDogYm9vbGVhblxuICBwcm9kdWN0aW9uOiBib29sZWFuXG59KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IGNvbW1hbmQgPSB3YXRjaCA/ICd3YXRjaCcgOiAnYnVpbGQnXG4gIGF3YWl0IGV4ZWMoZGlyLCBgJHtucG19IHJ1biAke2NvbW1hbmR9YCwge1xuICAgIGVudjogeyBOT0RFX0VOVjogcHJvZHVjdGlvbiA/ICdwcm9kdWN0aW9uJyA6ICcnIH1cbiAgfSlcbn1cbiJdfQ==
|
@@ -0,0 +1,95 @@
|
|
1
|
+
import { resolve } from 'path'
|
2
|
+
|
3
|
+
import { IFileSystemComponent } from '../../components/fs'
|
4
|
+
import { exec } from '../../utils/exec'
|
5
|
+
import { Dict, hasPrimitiveKeys } from '../../utils/object'
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Required project dirs/files
|
9
|
+
*/
|
10
|
+
export const REQUIRED_FILES = {
|
11
|
+
PACKAGE_JSON: 'package.json',
|
12
|
+
TS_CONFIG_JSON: 'tsconfig.json',
|
13
|
+
SCENE_JSON: 'scene.json'
|
14
|
+
}
|
15
|
+
|
16
|
+
/**
|
17
|
+
* Required "package.json" structure
|
18
|
+
*/
|
19
|
+
export const REQUIRED_PACKAGE_JSON = {}
|
20
|
+
|
21
|
+
/**
|
22
|
+
* Returns the required files for a project
|
23
|
+
*/
|
24
|
+
export const getProjectStructure = () => Object.values(REQUIRED_FILES)
|
25
|
+
|
26
|
+
/**
|
27
|
+
* Returns true if the project follows a valid scene structure
|
28
|
+
*/
|
29
|
+
export const validateProjectStructure = async (
|
30
|
+
components: { fs: IFileSystemComponent },
|
31
|
+
dir: string,
|
32
|
+
fileList: string[]
|
33
|
+
): Promise<boolean> => {
|
34
|
+
const files = await components.fs.readdir(dir)
|
35
|
+
const requiredFiles = new Set(fileList)
|
36
|
+
|
37
|
+
for (let i = 0; i < files.length && requiredFiles.size > 0; i++) {
|
38
|
+
if (requiredFiles.has(files[i])) {
|
39
|
+
requiredFiles.delete(files[i])
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
return requiredFiles.size === 0
|
44
|
+
}
|
45
|
+
|
46
|
+
/**
|
47
|
+
* Returns true if the project's "package.json" is valid
|
48
|
+
*/
|
49
|
+
export const validatePackageJson = async (
|
50
|
+
components: { fs: IFileSystemComponent },
|
51
|
+
dir: string,
|
52
|
+
deps: Dict
|
53
|
+
): Promise<boolean> => {
|
54
|
+
const packageJson = JSON.parse(await components.fs.readFile(resolve(dir, REQUIRED_FILES.PACKAGE_JSON), 'utf-8'))
|
55
|
+
return hasPrimitiveKeys(packageJson, deps)
|
56
|
+
}
|
57
|
+
|
58
|
+
/*
|
59
|
+
* Returns true if the project contains an empty node_modules folder
|
60
|
+
*/
|
61
|
+
export const needsDependencies = async (components: { fs: IFileSystemComponent }, dir: string): Promise<boolean> => {
|
62
|
+
const nodeModulesPath = resolve(dir, 'node_modules')
|
63
|
+
const hasNodeModulesFolder = await components.fs.existPath(nodeModulesPath)
|
64
|
+
const isNodeModulesEmpty = hasNodeModulesFolder && (await components.fs.readdir(nodeModulesPath)).length === 0
|
65
|
+
|
66
|
+
return !hasNodeModulesFolder || isNodeModulesEmpty
|
67
|
+
}
|
68
|
+
|
69
|
+
/* istanbul ignore next */
|
70
|
+
export const npm = /^win/.test(process.platform) ? 'npm.cmd' : 'npm'
|
71
|
+
|
72
|
+
/*
|
73
|
+
* Runs "npm install" for desired project
|
74
|
+
*/
|
75
|
+
export async function installDependencies(dir: string): Promise<void> {
|
76
|
+
await exec(dir, `${npm} install`)
|
77
|
+
}
|
78
|
+
|
79
|
+
/**
|
80
|
+
* Build's Typescript using "tsconfig.json" file
|
81
|
+
*/
|
82
|
+
export const buildTypescript = async ({
|
83
|
+
dir,
|
84
|
+
watch,
|
85
|
+
production
|
86
|
+
}: {
|
87
|
+
dir: string
|
88
|
+
watch: boolean
|
89
|
+
production: boolean
|
90
|
+
}): Promise<void> => {
|
91
|
+
const command = watch ? 'watch' : 'build'
|
92
|
+
await exec(dir, `${npm} run ${command}`, {
|
93
|
+
env: { NODE_ENV: production ? 'production' : '' }
|
94
|
+
})
|
95
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { CliComponents } from '../../components';
|
2
|
+
interface Options {
|
3
|
+
args: Omit<typeof args, '_'>;
|
4
|
+
components: Pick<CliComponents, 'fs'>;
|
5
|
+
}
|
6
|
+
export declare const args: import("arg").Result<{
|
7
|
+
'--help': BooleanConstructor;
|
8
|
+
'-h': string;
|
9
|
+
} & {
|
10
|
+
'--watch': BooleanConstructor;
|
11
|
+
'-w': string;
|
12
|
+
'--production': BooleanConstructor;
|
13
|
+
'-p': string;
|
14
|
+
'--skip-install': BooleanConstructor;
|
15
|
+
'--dir': StringConstructor;
|
16
|
+
}>;
|
17
|
+
export declare function help(): string;
|
18
|
+
export declare const main: (args: Options) => Promise<void>;
|
19
|
+
export {};
|
@@ -0,0 +1,64 @@
|
|
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 out_messages_1 = require("../../utils/out-messages");
|
6
|
+
const log_1 = require("../../utils/log");
|
7
|
+
const args_1 = require("../../utils/args");
|
8
|
+
const error_1 = require("../../utils/error");
|
9
|
+
const helpers_1 = require("./helpers");
|
10
|
+
const handler_1 = require("../../utils/handler");
|
11
|
+
const console_1 = require("console");
|
12
|
+
exports.args = (0, args_1.getArgs)({
|
13
|
+
'--watch': Boolean,
|
14
|
+
'-w': '--watch',
|
15
|
+
'--production': Boolean,
|
16
|
+
'-p': '--production',
|
17
|
+
'--skip-install': Boolean,
|
18
|
+
'--dir': String
|
19
|
+
});
|
20
|
+
function help() {
|
21
|
+
return `
|
22
|
+
Usage: 'dcl build [options]'
|
23
|
+
Options:'
|
24
|
+
-h, --help Displays complete help
|
25
|
+
-w, --watch Watch for file changes and build on change
|
26
|
+
-p, --production Build without sourcemaps
|
27
|
+
--skip-install Skip installing dependencies
|
28
|
+
--dir Path to directory to build
|
29
|
+
|
30
|
+
Example:
|
31
|
+
- Build your scene:
|
32
|
+
'$ dcl build'
|
33
|
+
`;
|
34
|
+
}
|
35
|
+
exports.help = help;
|
36
|
+
exports.main = (0, handler_1.main)(async function main(options) {
|
37
|
+
const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
|
38
|
+
const projectStructure = (0, helpers_1.getProjectStructure)();
|
39
|
+
const hasValidProjectStructure = await (0, helpers_1.validateProjectStructure)(options.components, dir, projectStructure);
|
40
|
+
if (!hasValidProjectStructure) {
|
41
|
+
throw new error_1.CliError(`Invalid scene structure found. Required files:
|
42
|
+
${(0, out_messages_1.toStringList)(projectStructure)}`);
|
43
|
+
}
|
44
|
+
(0, log_1.succeed)('Project has a valid structure');
|
45
|
+
const hasValidPackageJson = await (0, helpers_1.validatePackageJson)(options.components, dir, helpers_1.REQUIRED_PACKAGE_JSON);
|
46
|
+
if (!hasValidPackageJson) {
|
47
|
+
throw new error_1.CliError(`Invalid "package.json" file. Structure required:
|
48
|
+
${JSON.stringify(helpers_1.REQUIRED_PACKAGE_JSON, null, 2)}`);
|
49
|
+
}
|
50
|
+
(0, log_1.succeed)('Project has a valid "package.json"');
|
51
|
+
const shouldInstallDeps = await (0, helpers_1.needsDependencies)(options.components, dir);
|
52
|
+
if (shouldInstallDeps && !options.args['--skip-install']) {
|
53
|
+
(0, console_1.info)('Installing dependencies...');
|
54
|
+
await (0, helpers_1.installDependencies)(dir);
|
55
|
+
}
|
56
|
+
(0, log_1.succeed)('Dependencies installed');
|
57
|
+
await (0, helpers_1.buildTypescript)({
|
58
|
+
dir,
|
59
|
+
watch: !!options.args['--watch'],
|
60
|
+
production: !!options.args['--production']
|
61
|
+
});
|
62
|
+
(0, log_1.succeed)('Project built successfully!');
|
63
|
+
});
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBOEI7QUFHOUIsMkRBQXVEO0FBQ3ZELHlDQUF5QztBQUN6QywyQ0FBMEM7QUFDMUMsNkNBQTRDO0FBQzVDLHVDQVFrQjtBQUNsQixpREFBcUQ7QUFDckQscUNBQThCO0FBT2pCLFFBQUEsSUFBSSxHQUFHLElBQUEsY0FBTyxFQUFDO0lBQzFCLFNBQVMsRUFBRSxPQUFPO0lBQ2xCLElBQUksRUFBRSxTQUFTO0lBQ2YsY0FBYyxFQUFFLE9BQU87SUFDdkIsSUFBSSxFQUFFLGNBQWM7SUFDcEIsZ0JBQWdCLEVBQUUsT0FBTztJQUN6QixPQUFPLEVBQUUsTUFBTTtDQUNoQixDQUFDLENBQUE7QUFFRixTQUFnQixJQUFJO0lBQ2xCLE9BQU87Ozs7Ozs7Ozs7OztHQVlOLENBQUE7QUFDSCxDQUFDO0FBZEQsb0JBY0M7QUFFWSxRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQyxLQUFLLFVBQVUsSUFBSSxDQUFDLE9BQWdCO0lBQzlELE1BQU0sR0FBRyxHQUFHLElBQUEsY0FBTyxFQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFBO0lBQ2hFLE1BQU0sZ0JBQWdCLEdBQUcsSUFBQSw2QkFBbUIsR0FBRSxDQUFBO0lBRTlDLE1BQU0sd0JBQXdCLEdBQUcsTUFBTSxJQUFBLGtDQUF3QixFQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsR0FBRyxFQUFFLGdCQUFnQixDQUFDLENBQUE7SUFFMUcsSUFBSSxDQUFDLHdCQUF3QixFQUFFO1FBQzdCLE1BQU0sSUFBSSxnQkFBUSxDQUFDO1FBQ2YsSUFBQSwyQkFBWSxFQUFDLGdCQUFnQixDQUFDLEVBQUUsQ0FBQyxDQUFBO0tBQ3RDO0lBRUQsSUFBQSxhQUFPLEVBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUV4QyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSw2QkFBbUIsRUFBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRSwrQkFBcUIsQ0FBQyxDQUFBO0lBRXJHLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtRQUN4QixNQUFNLElBQUksZ0JBQVEsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsK0JBQXFCLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQTtLQUN0RDtJQUVELElBQUEsYUFBTyxFQUFDLG9DQUFvQyxDQUFDLENBQUE7SUFFN0MsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLElBQUEsMkJBQWlCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUUxRSxJQUFJLGlCQUFpQixJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFO1FBQ3hELElBQUEsY0FBSSxFQUFDLDRCQUE0QixDQUFDLENBQUE7UUFDbEMsTUFBTSxJQUFBLDZCQUFtQixFQUFDLEdBQUcsQ0FBQyxDQUFBO0tBQy9CO0lBRUQsSUFBQSxhQUFPLEVBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUVqQyxNQUFNLElBQUEseUJBQWUsRUFBQztRQUNwQixHQUFHO1FBQ0gsS0FBSyxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQztRQUNoQyxVQUFVLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO0tBQzNDLENBQUMsQ0FBQTtJQUVGLElBQUEsYUFBTyxFQUFDLDZCQUE2QixDQUFDLENBQUE7QUFJeEMsQ0FBQyxDQUFDLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ2xpQ29tcG9uZW50cyB9IGZyb20gJy4uLy4uL2NvbXBvbmVudHMnXG5pbXBvcnQgeyB0b1N0cmluZ0xpc3QgfSBmcm9tICcuLi8uLi91dGlscy9vdXQtbWVzc2FnZXMnXG5pbXBvcnQgeyBzdWNjZWVkIH0gZnJvbSAnLi4vLi4vdXRpbHMvbG9nJ1xuaW1wb3J0IHsgZ2V0QXJncyB9IGZyb20gJy4uLy4uL3V0aWxzL2FyZ3MnXG5pbXBvcnQgeyBDbGlFcnJvciB9IGZyb20gJy4uLy4uL3V0aWxzL2Vycm9yJ1xuaW1wb3J0IHtcbiAgZ2V0UHJvamVjdFN0cnVjdHVyZSxcbiAgYnVpbGRUeXBlc2NyaXB0LFxuICBpbnN0YWxsRGVwZW5kZW5jaWVzLFxuICBuZWVkc0RlcGVuZGVuY2llcyxcbiAgdmFsaWRhdGVQcm9qZWN0U3RydWN0dXJlLFxuICB2YWxpZGF0ZVBhY2thZ2VKc29uLFxuICBSRVFVSVJFRF9QQUNLQUdFX0pTT05cbn0gZnJvbSAnLi9oZWxwZXJzJ1xuaW1wb3J0IHsgbWFpbiBhcyBoYW5kbGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlcidcbmltcG9ydCB7IGluZm8gfSBmcm9tICdjb25zb2xlJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFyZ3M6IE9taXQ8dHlwZW9mIGFyZ3MsICdfJz5cbiAgY29tcG9uZW50czogUGljazxDbGlDb21wb25lbnRzLCAnZnMnPlxufVxuXG5leHBvcnQgY29uc3QgYXJncyA9IGdldEFyZ3Moe1xuICAnLS13YXRjaCc6IEJvb2xlYW4sXG4gICctdyc6ICctLXdhdGNoJyxcbiAgJy0tcHJvZHVjdGlvbic6IEJvb2xlYW4sXG4gICctcCc6ICctLXByb2R1Y3Rpb24nLFxuICAnLS1za2lwLWluc3RhbGwnOiBCb29sZWFuLFxuICAnLS1kaXInOiBTdHJpbmdcbn0pXG5cbmV4cG9ydCBmdW5jdGlvbiBoZWxwKCkge1xuICByZXR1cm4gYFxuICBVc2FnZTogJ2RjbCBidWlsZCBbb3B0aW9uc10nXG4gICAgT3B0aW9uczonXG4gICAgICAtaCwgLS1oZWxwICAgICAgICAgICAgICAgIERpc3BsYXlzIGNvbXBsZXRlIGhlbHBcbiAgICAgIC13LCAtLXdhdGNoICAgICAgICAgICAgICAgV2F0Y2ggZm9yIGZpbGUgY2hhbmdlcyBhbmQgYnVpbGQgb24gY2hhbmdlXG4gICAgICAtcCwgLS1wcm9kdWN0aW9uICAgICAgICAgIEJ1aWxkIHdpdGhvdXQgc291cmNlbWFwc1xuICAgICAgLS1za2lwLWluc3RhbGwgICAgICAgICAgICBTa2lwIGluc3RhbGxpbmcgZGVwZW5kZW5jaWVzXG4gICAgICAtLWRpciAgICAgICAgICAgICAgICAgICAgIFBhdGggdG8gZGlyZWN0b3J5IHRvIGJ1aWxkXG5cbiAgICBFeGFtcGxlOlxuICAgIC0gQnVpbGQgeW91ciBzY2VuZTpcbiAgICAgICckIGRjbCBidWlsZCdcbiAgYFxufVxuXG5leHBvcnQgY29uc3QgbWFpbiA9IGhhbmRsZXIoYXN5bmMgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBPcHRpb25zKSB7XG4gIGNvbnN0IGRpciA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0aW9ucy5hcmdzWyctLWRpciddIHx8ICcuJylcbiAgY29uc3QgcHJvamVjdFN0cnVjdHVyZSA9IGdldFByb2plY3RTdHJ1Y3R1cmUoKVxuXG4gIGNvbnN0IGhhc1ZhbGlkUHJvamVjdFN0cnVjdHVyZSA9IGF3YWl0IHZhbGlkYXRlUHJvamVjdFN0cnVjdHVyZShvcHRpb25zLmNvbXBvbmVudHMsIGRpciwgcHJvamVjdFN0cnVjdHVyZSlcblxuICBpZiAoIWhhc1ZhbGlkUHJvamVjdFN0cnVjdHVyZSkge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgSW52YWxpZCBzY2VuZSBzdHJ1Y3R1cmUgZm91bmQuIFJlcXVpcmVkIGZpbGVzOlxuICAgICAgJHt0b1N0cmluZ0xpc3QocHJvamVjdFN0cnVjdHVyZSl9YClcbiAgfVxuXG4gIHN1Y2NlZWQoJ1Byb2plY3QgaGFzIGEgdmFsaWQgc3RydWN0dXJlJylcblxuICBjb25zdCBoYXNWYWxpZFBhY2thZ2VKc29uID0gYXdhaXQgdmFsaWRhdGVQYWNrYWdlSnNvbihvcHRpb25zLmNvbXBvbmVudHMsIGRpciwgUkVRVUlSRURfUEFDS0FHRV9KU09OKVxuXG4gIGlmICghaGFzVmFsaWRQYWNrYWdlSnNvbikge1xuICAgIHRocm93IG5ldyBDbGlFcnJvcihgSW52YWxpZCBcInBhY2thZ2UuanNvblwiIGZpbGUuIFN0cnVjdHVyZSByZXF1aXJlZDpcbiAgICAgICR7SlNPTi5zdHJpbmdpZnkoUkVRVUlSRURfUEFDS0FHRV9KU09OLCBudWxsLCAyKX1gKVxuICB9XG5cbiAgc3VjY2VlZCgnUHJvamVjdCBoYXMgYSB2YWxpZCBcInBhY2thZ2UuanNvblwiJylcblxuICBjb25zdCBzaG91bGRJbnN0YWxsRGVwcyA9IGF3YWl0IG5lZWRzRGVwZW5kZW5jaWVzKG9wdGlvbnMuY29tcG9uZW50cywgZGlyKVxuXG4gIGlmIChzaG91bGRJbnN0YWxsRGVwcyAmJiAhb3B0aW9ucy5hcmdzWyctLXNraXAtaW5zdGFsbCddKSB7XG4gICAgaW5mbygnSW5zdGFsbGluZyBkZXBlbmRlbmNpZXMuLi4nKVxuICAgIGF3YWl0IGluc3RhbGxEZXBlbmRlbmNpZXMoZGlyKVxuICB9XG5cbiAgc3VjY2VlZCgnRGVwZW5kZW5jaWVzIGluc3RhbGxlZCcpXG5cbiAgYXdhaXQgYnVpbGRUeXBlc2NyaXB0KHtcbiAgICBkaXIsXG4gICAgd2F0Y2g6ICEhb3B0aW9ucy5hcmdzWyctLXdhdGNoJ10sXG4gICAgcHJvZHVjdGlvbjogISFvcHRpb25zLmFyZ3NbJy0tcHJvZHVjdGlvbiddXG4gIH0pXG5cbiAgc3VjY2VlZCgnUHJvamVjdCBidWlsdCBzdWNjZXNzZnVsbHkhJylcblxuICAvLyB0cmFjayBzdHVmZi4uLlxuICAvLyBodHRwczovL2dpdGh1Yi5jb20vZGVjZW50cmFsYW5kL2NsaS9ibG9iL21haW4vc3JjL2NvbW1hbmRzL2J1aWxkLnRzXG59KVxuIl19
|
@@ -0,0 +1,91 @@
|
|
1
|
+
import { resolve } from 'path'
|
2
|
+
|
3
|
+
import { CliComponents } from '../../components'
|
4
|
+
import { toStringList } from '../../utils/out-messages'
|
5
|
+
import { succeed } from '../../utils/log'
|
6
|
+
import { getArgs } from '../../utils/args'
|
7
|
+
import { CliError } from '../../utils/error'
|
8
|
+
import {
|
9
|
+
getProjectStructure,
|
10
|
+
buildTypescript,
|
11
|
+
installDependencies,
|
12
|
+
needsDependencies,
|
13
|
+
validateProjectStructure,
|
14
|
+
validatePackageJson,
|
15
|
+
REQUIRED_PACKAGE_JSON
|
16
|
+
} from './helpers'
|
17
|
+
import { main as handler } from '../../utils/handler'
|
18
|
+
import { info } from 'console'
|
19
|
+
|
20
|
+
interface Options {
|
21
|
+
args: Omit<typeof args, '_'>
|
22
|
+
components: Pick<CliComponents, 'fs'>
|
23
|
+
}
|
24
|
+
|
25
|
+
export const args = getArgs({
|
26
|
+
'--watch': Boolean,
|
27
|
+
'-w': '--watch',
|
28
|
+
'--production': Boolean,
|
29
|
+
'-p': '--production',
|
30
|
+
'--skip-install': Boolean,
|
31
|
+
'--dir': String
|
32
|
+
})
|
33
|
+
|
34
|
+
export function help() {
|
35
|
+
return `
|
36
|
+
Usage: 'dcl build [options]'
|
37
|
+
Options:'
|
38
|
+
-h, --help Displays complete help
|
39
|
+
-w, --watch Watch for file changes and build on change
|
40
|
+
-p, --production Build without sourcemaps
|
41
|
+
--skip-install Skip installing dependencies
|
42
|
+
--dir Path to directory to build
|
43
|
+
|
44
|
+
Example:
|
45
|
+
- Build your scene:
|
46
|
+
'$ dcl build'
|
47
|
+
`
|
48
|
+
}
|
49
|
+
|
50
|
+
export const main = handler(async function main(options: Options) {
|
51
|
+
const dir = resolve(process.cwd(), options.args['--dir'] || '.')
|
52
|
+
const projectStructure = getProjectStructure()
|
53
|
+
|
54
|
+
const hasValidProjectStructure = await validateProjectStructure(options.components, dir, projectStructure)
|
55
|
+
|
56
|
+
if (!hasValidProjectStructure) {
|
57
|
+
throw new CliError(`Invalid scene structure found. Required files:
|
58
|
+
${toStringList(projectStructure)}`)
|
59
|
+
}
|
60
|
+
|
61
|
+
succeed('Project has a valid structure')
|
62
|
+
|
63
|
+
const hasValidPackageJson = await validatePackageJson(options.components, dir, REQUIRED_PACKAGE_JSON)
|
64
|
+
|
65
|
+
if (!hasValidPackageJson) {
|
66
|
+
throw new CliError(`Invalid "package.json" file. Structure required:
|
67
|
+
${JSON.stringify(REQUIRED_PACKAGE_JSON, null, 2)}`)
|
68
|
+
}
|
69
|
+
|
70
|
+
succeed('Project has a valid "package.json"')
|
71
|
+
|
72
|
+
const shouldInstallDeps = await needsDependencies(options.components, dir)
|
73
|
+
|
74
|
+
if (shouldInstallDeps && !options.args['--skip-install']) {
|
75
|
+
info('Installing dependencies...')
|
76
|
+
await installDependencies(dir)
|
77
|
+
}
|
78
|
+
|
79
|
+
succeed('Dependencies installed')
|
80
|
+
|
81
|
+
await buildTypescript({
|
82
|
+
dir,
|
83
|
+
watch: !!options.args['--watch'],
|
84
|
+
production: !!options.args['--production']
|
85
|
+
})
|
86
|
+
|
87
|
+
succeed('Project built successfully!')
|
88
|
+
|
89
|
+
// track stuff...
|
90
|
+
// https://github.com/decentraland/cli/blob/main/src/commands/build.ts
|
91
|
+
})
|
@@ -12,5 +12,5 @@ export declare const args: import("arg").Result<{
|
|
12
12
|
'--dir': StringConstructor;
|
13
13
|
}>;
|
14
14
|
export declare function help(): Promise<void>;
|
15
|
-
export declare
|
15
|
+
export declare const main: (args: Options) => Promise<void>;
|
16
16
|
export {};
|
@@ -2,11 +2,11 @@
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
3
3
|
exports.main = exports.help = exports.args = void 0;
|
4
4
|
const path_1 = require("path");
|
5
|
-
const error_1 = require("../../utils/error");
|
6
5
|
const args_1 = require("../../utils/args");
|
7
6
|
const prompt_1 = require("../../utils/prompt");
|
8
7
|
const fs_1 = require("../../utils/fs");
|
9
8
|
const repos_1 = require("./repos");
|
9
|
+
const handler_1 = require("../../utils/handler");
|
10
10
|
exports.args = (0, args_1.getArgs)({
|
11
11
|
'--yes': Boolean,
|
12
12
|
'-y': '--yes',
|
@@ -14,7 +14,7 @@ exports.args = (0, args_1.getArgs)({
|
|
14
14
|
});
|
15
15
|
async function help() { }
|
16
16
|
exports.help = help;
|
17
|
-
async function main(options) {
|
17
|
+
exports.main = (0, handler_1.main)(async function main(options) {
|
18
18
|
const dir = (0, path_1.resolve)(process.cwd(), options.args['--dir'] || '.');
|
19
19
|
const isEmpty = await (0, fs_1.isDirectoryEmpty)(options.components, dir);
|
20
20
|
const yes = options.args['--yes'];
|
@@ -23,15 +23,9 @@ async function main(options) {
|
|
23
23
|
if (!answer)
|
24
24
|
return;
|
25
25
|
}
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
catch (e) {
|
33
|
-
throw new error_1.CliError(e.message);
|
34
|
-
}
|
35
|
-
}
|
36
|
-
exports.main = main;
|
37
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBb0M7QUFFcEMsNkNBQTRDO0FBQzVDLDJDQUEwQztBQUMxQywrQ0FBNEM7QUFFNUMsdUNBQW9FO0FBRXBFLG1DQUF3QztBQU8zQixRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQztJQUMxQixPQUFPLEVBQUUsT0FBTztJQUNoQixJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQTtBQUVLLEtBQUssVUFBVSxJQUFJLEtBQUksQ0FBQztBQUEvQixvQkFBK0I7QUFFeEIsS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUN6QyxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEscUJBQWdCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWpDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFPLEVBQzFCLHFEQUFxRCxDQUN0RCxDQUFBO1FBRUQsSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFNO0tBQ3BCO0lBRUQsSUFBSTtRQUNGLE1BQU0sS0FBSyxHQUFHLGdCQUFnQixDQUFBO1FBQzlCLE1BQU0sR0FBRyxHQUFHLE1BQU0sSUFBQSxhQUFRLEVBQ3hCLE9BQU8sQ0FBQyxVQUFVLEVBQ2xCLElBQUEsV0FBTyxFQUFDLEtBQUssQ0FBQyxFQUNkLElBQUEsV0FBSSxFQUFDLEdBQUcsRUFBRSxHQUFHLEtBQUssTUFBTSxDQUFDLENBQzFCLENBQUE7UUFDRCxNQUFNLElBQUEsWUFBTyxFQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQTtRQUN2QixNQUFNLE9BQU8sQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQTtLQUN4QztJQUFDLE9BQU8sQ0FBTSxFQUFFO1FBQ2YsTUFBTSxJQUFJLGdCQUFRLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQzlCO0FBQ0gsQ0FBQztBQXpCRCxvQkF5QkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBqb2luLCByZXNvbHZlIH0gZnJvbSAncGF0aCdcblxuaW1wb3J0IHsgQ2xpRXJyb3IgfSBmcm9tICcuLi8uLi91dGlscy9lcnJvcidcbmltcG9ydCB7IGdldEFyZ3MgfSBmcm9tICcuLi8uLi91dGlscy9hcmdzJ1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb21wdCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgaXNEaXJlY3RvcnlFbXB0eSwgZG93bmxvYWQsIGV4dHJhY3QgfSBmcm9tICcuLi8uLi91dGlscy9mcydcblxuaW1wb3J0IHsgZ2V0IGFzIGdldFJlcG8gfSBmcm9tICcuL3JlcG9zJ1xuXG5pbnRlcmZhY2UgT3B0aW9ucyB7XG4gIGFyZ3M6IHR5cGVvZiBhcmdzXG4gIGNvbXBvbmVudHM6IFBpY2s8Q2xpQ29tcG9uZW50cywgJ2ZldGNoJyB8ICdmcyc+XG59XG5cbmV4cG9ydCBjb25zdCBhcmdzID0gZ2V0QXJncyh7XG4gICctLXllcyc6IEJvb2xlYW4sXG4gICcteSc6ICctLXllcycsXG4gICctLWRpcic6IFN0cmluZ1xufSlcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGhlbHAoKSB7fVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbWFpbihvcHRpb25zOiBPcHRpb25zKSB7XG4gIGNvbnN0IGRpciA9IHJlc29sdmUocHJvY2Vzcy5jd2QoKSwgb3B0aW9ucy5hcmdzWyctLWRpciddIHx8ICcuJylcbiAgY29uc3QgaXNFbXB0eSA9IGF3YWl0IGlzRGlyZWN0b3J5RW1wdHkob3B0aW9ucy5jb21wb25lbnRzLCBkaXIpXG4gIGNvbnN0IHllcyA9IG9wdGlvbnMuYXJnc1snLS15ZXMnXVxuXG4gIGlmICghaXNFbXB0eSAmJiAheWVzKSB7XG4gICAgY29uc3QgYW5zd2VyID0gYXdhaXQgY29uZmlybShcbiAgICAgICdUaGUgZm9sZGVyIHNwZWNpZmllZCBpcyBub3QgZW1wdHksIGNvbnRpbnVlIGFueXdheT8nXG4gICAgKVxuXG4gICAgaWYgKCFhbnN3ZXIpIHJldHVyblxuICB9XG5cbiAgdHJ5IHtcbiAgICBjb25zdCBzY2VuZSA9ICdzY2VuZS10ZW1wbGF0ZSdcbiAgICBjb25zdCB6aXAgPSBhd2FpdCBkb3dubG9hZChcbiAgICAgIG9wdGlvbnMuY29tcG9uZW50cyxcbiAgICAgIGdldFJlcG8oc2NlbmUpLFxuICAgICAgam9pbihkaXIsIGAke3NjZW5lfS56aXBgKVxuICAgIClcbiAgICBhd2FpdCBleHRyYWN0KHppcCwgZGlyKVxuICAgIGF3YWl0IG9wdGlvbnMuY29tcG9uZW50cy5mcy51bmxpbmsoemlwKVxuICB9IGNhdGNoIChlOiBhbnkpIHtcbiAgICB0aHJvdyBuZXcgQ2xpRXJyb3IoZS5tZXNzYWdlKVxuICB9XG59XG4iXX0=
|
26
|
+
const scene = 'scene-template';
|
27
|
+
const zip = await (0, fs_1.download)(options.components, (0, repos_1.get)(scene), (0, path_1.join)(dir, `${scene}.zip`));
|
28
|
+
await (0, fs_1.extract)(zip, dir);
|
29
|
+
await options.components.fs.unlink(zip);
|
30
|
+
});
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrQkFBb0M7QUFFcEMsMkNBQTBDO0FBQzFDLCtDQUE0QztBQUU1Qyx1Q0FBb0U7QUFFcEUsbUNBQXdDO0FBQ3hDLGlEQUFxRDtBQU94QyxRQUFBLElBQUksR0FBRyxJQUFBLGNBQU8sRUFBQztJQUMxQixPQUFPLEVBQUUsT0FBTztJQUNoQixJQUFJLEVBQUUsT0FBTztJQUNiLE9BQU8sRUFBRSxNQUFNO0NBQ2hCLENBQUMsQ0FBQTtBQUVLLEtBQUssVUFBVSxJQUFJLEtBQUksQ0FBQztBQUEvQixvQkFBK0I7QUFFbEIsUUFBQSxJQUFJLEdBQUcsSUFBQSxjQUFPLEVBQUMsS0FBSyxVQUFVLElBQUksQ0FBQyxPQUFnQjtJQUM5RCxNQUFNLEdBQUcsR0FBRyxJQUFBLGNBQU8sRUFBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsQ0FBQTtJQUNoRSxNQUFNLE9BQU8sR0FBRyxNQUFNLElBQUEscUJBQWdCLEVBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxHQUFHLENBQUMsQ0FBQTtJQUMvRCxNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBRWpDLElBQUksQ0FBQyxPQUFPLElBQUksQ0FBQyxHQUFHLEVBQUU7UUFDcEIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFBLGdCQUFPLEVBQUMscURBQXFELENBQUMsQ0FBQTtRQUVuRixJQUFJLENBQUMsTUFBTTtZQUFFLE9BQU07S0FDcEI7SUFFRCxNQUFNLEtBQUssR0FBRyxnQkFBZ0IsQ0FBQTtJQUM5QixNQUFNLEdBQUcsR0FBRyxNQUFNLElBQUEsYUFBUSxFQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBQSxXQUFPLEVBQUMsS0FBSyxDQUFDLEVBQUUsSUFBQSxXQUFJLEVBQUMsR0FBRyxFQUFFLEdBQUcsS0FBSyxNQUFNLENBQUMsQ0FBQyxDQUFBO0lBQ3pGLE1BQU0sSUFBQSxZQUFPLEVBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFBO0lBQ3ZCLE1BQU0sT0FBTyxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0FBQ3pDLENBQUMsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ3BhdGgnXG5cbmltcG9ydCB7IGdldEFyZ3MgfSBmcm9tICcuLi8uLi91dGlscy9hcmdzJ1xuaW1wb3J0IHsgY29uZmlybSB9IGZyb20gJy4uLy4uL3V0aWxzL3Byb21wdCdcbmltcG9ydCB7IENsaUNvbXBvbmVudHMgfSBmcm9tICcuLi8uLi9jb21wb25lbnRzJ1xuaW1wb3J0IHsgaXNEaXJlY3RvcnlFbXB0eSwgZG93bmxvYWQsIGV4dHJhY3QgfSBmcm9tICcuLi8uLi91dGlscy9mcydcblxuaW1wb3J0IHsgZ2V0IGFzIGdldFJlcG8gfSBmcm9tICcuL3JlcG9zJ1xuaW1wb3J0IHsgbWFpbiBhcyBoYW5kbGVyIH0gZnJvbSAnLi4vLi4vdXRpbHMvaGFuZGxlcidcblxuaW50ZXJmYWNlIE9wdGlvbnMge1xuICBhcmdzOiB0eXBlb2YgYXJnc1xuICBjb21wb25lbnRzOiBQaWNrPENsaUNvbXBvbmVudHMsICdmZXRjaCcgfCAnZnMnPlxufVxuXG5leHBvcnQgY29uc3QgYXJncyA9IGdldEFyZ3Moe1xuICAnLS15ZXMnOiBCb29sZWFuLFxuICAnLXknOiAnLS15ZXMnLFxuICAnLS1kaXInOiBTdHJpbmdcbn0pXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBoZWxwKCkge31cblxuZXhwb3J0IGNvbnN0IG1haW4gPSBoYW5kbGVyKGFzeW5jIGZ1bmN0aW9uIG1haW4ob3B0aW9uczogT3B0aW9ucykge1xuICBjb25zdCBkaXIgPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIG9wdGlvbnMuYXJnc1snLS1kaXInXSB8fCAnLicpXG4gIGNvbnN0IGlzRW1wdHkgPSBhd2FpdCBpc0RpcmVjdG9yeUVtcHR5KG9wdGlvbnMuY29tcG9uZW50cywgZGlyKVxuICBjb25zdCB5ZXMgPSBvcHRpb25zLmFyZ3NbJy0teWVzJ11cblxuICBpZiAoIWlzRW1wdHkgJiYgIXllcykge1xuICAgIGNvbnN0IGFuc3dlciA9IGF3YWl0IGNvbmZpcm0oJ1RoZSBmb2xkZXIgc3BlY2lmaWVkIGlzIG5vdCBlbXB0eSwgY29udGludWUgYW55d2F5PycpXG5cbiAgICBpZiAoIWFuc3dlcikgcmV0dXJuXG4gIH1cblxuICBjb25zdCBzY2VuZSA9ICdzY2VuZS10ZW1wbGF0ZSdcbiAgY29uc3QgemlwID0gYXdhaXQgZG93bmxvYWQob3B0aW9ucy5jb21wb25lbnRzLCBnZXRSZXBvKHNjZW5lKSwgam9pbihkaXIsIGAke3NjZW5lfS56aXBgKSlcbiAgYXdhaXQgZXh0cmFjdCh6aXAsIGRpcilcbiAgYXdhaXQgb3B0aW9ucy5jb21wb25lbnRzLmZzLnVubGluayh6aXApXG59KVxuIl19
|
@@ -1,12 +1,12 @@
|
|
1
1
|
import { join, resolve } from 'path'
|
2
2
|
|
3
|
-
import { CliError } from '../../utils/error'
|
4
3
|
import { getArgs } from '../../utils/args'
|
5
4
|
import { confirm } from '../../utils/prompt'
|
6
5
|
import { CliComponents } from '../../components'
|
7
6
|
import { isDirectoryEmpty, download, extract } from '../../utils/fs'
|
8
7
|
|
9
8
|
import { get as getRepo } from './repos'
|
9
|
+
import { main as handler } from '../../utils/handler'
|
10
10
|
|
11
11
|
interface Options {
|
12
12
|
args: typeof args
|
@@ -21,29 +21,19 @@ export const args = getArgs({
|
|
21
21
|
|
22
22
|
export async function help() {}
|
23
23
|
|
24
|
-
export async function main(options: Options) {
|
24
|
+
export const main = handler(async function main(options: Options) {
|
25
25
|
const dir = resolve(process.cwd(), options.args['--dir'] || '.')
|
26
26
|
const isEmpty = await isDirectoryEmpty(options.components, dir)
|
27
27
|
const yes = options.args['--yes']
|
28
28
|
|
29
29
|
if (!isEmpty && !yes) {
|
30
|
-
const answer = await confirm(
|
31
|
-
'The folder specified is not empty, continue anyway?'
|
32
|
-
)
|
30
|
+
const answer = await confirm('The folder specified is not empty, continue anyway?')
|
33
31
|
|
34
32
|
if (!answer) return
|
35
33
|
}
|
36
34
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
join(dir, `${scene}.zip`)
|
43
|
-
)
|
44
|
-
await extract(zip, dir)
|
45
|
-
await options.components.fs.unlink(zip)
|
46
|
-
} catch (e: any) {
|
47
|
-
throw new CliError(e.message)
|
48
|
-
}
|
49
|
-
}
|
35
|
+
const scene = 'scene-template'
|
36
|
+
const zip = await download(options.components, getRepo(scene), join(dir, `${scene}.zip`))
|
37
|
+
await extract(zip, dir)
|
38
|
+
await options.components.fs.unlink(zip)
|
39
|
+
})
|
@@ -6,4 +6,4 @@ exports.REPOS = {
|
|
6
6
|
};
|
7
7
|
const get = (repo) => exports.REPOS[repo];
|
8
8
|
exports.get = get;
|
9
|
-
//# sourceMappingURL=data:application/json;base64,
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVwb3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJyZXBvcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBYSxRQUFBLEtBQUssR0FBRztJQUNuQixnQkFBZ0IsRUFBRSxpRkFBaUY7Q0FDcEcsQ0FBQTtBQUVNLE1BQU0sR0FBRyxHQUFHLENBQUMsSUFBd0IsRUFBRSxFQUFFLENBQUMsYUFBSyxDQUFDLElBQUksQ0FBQyxDQUFBO0FBQS9DLFFBQUEsR0FBRyxPQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjb25zdCBSRVBPUyA9IHtcbiAgJ3NjZW5lLXRlbXBsYXRlJzogJ2h0dHBzOi8vZ2l0aHViLmNvbS9kZWNlbnRyYWxhbmQvc2RrNy1zY2VuZS10ZW1wbGF0ZS9hcmNoaXZlL3JlZnMvaGVhZHMvbWFpbi56aXAnXG59XG5cbmV4cG9ydCBjb25zdCBnZXQgPSAocmVwbzoga2V5b2YgdHlwZW9mIFJFUE9TKSA9PiBSRVBPU1tyZXBvXVxuIl19
|
@@ -1,6 +1,5 @@
|
|
1
1
|
export const REPOS = {
|
2
|
-
'scene-template':
|
3
|
-
'https://github.com/decentraland/sdk7-scene-template/archive/refs/heads/main.zip'
|
2
|
+
'scene-template': 'https://github.com/decentraland/sdk7-scene-template/archive/refs/heads/main.zip'
|
4
3
|
}
|
5
4
|
|
6
5
|
export const get = (repo: keyof typeof REPOS) => REPOS[repo]
|
@@ -0,0 +1,50 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.setupBffAndComms = void 0;
|
4
|
+
const handle_linear_protocol_1 = require("@dcl/mini-comms/dist/logic/handle-linear-protocol");
|
5
|
+
const ws_1 = require("@well-known-components/http-server/dist/ws");
|
6
|
+
async function setupBffAndComms(components, router) {
|
7
|
+
router.get('/about', async (ctx) => {
|
8
|
+
const host = ctx.url.host;
|
9
|
+
const body = {
|
10
|
+
bff: { healthy: false },
|
11
|
+
comms: {
|
12
|
+
healthy: true,
|
13
|
+
protocol: 'v3',
|
14
|
+
fixedAdapter: `ws-room:${ctx.url.protocol.replace(/^http/, 'ws')}//${host}/mini-comms/room-1`
|
15
|
+
},
|
16
|
+
configurations: {
|
17
|
+
realmName: 'LocalPreview'
|
18
|
+
},
|
19
|
+
content: {
|
20
|
+
healthy: true,
|
21
|
+
publicUrl: `${ctx.url.protocol}//${ctx.url.host}/content`
|
22
|
+
},
|
23
|
+
lambdas: {
|
24
|
+
healthy: true,
|
25
|
+
publicUrl: `${ctx.url.protocol}//${ctx.url.host}/lambdas`
|
26
|
+
},
|
27
|
+
healthy: true
|
28
|
+
};
|
29
|
+
return { body };
|
30
|
+
});
|
31
|
+
router.get('/mini-comms/:roomId', async (ctx) => {
|
32
|
+
return (0, ws_1.upgradeWebSocketResponse)((ws) => {
|
33
|
+
if (ws.protocol === 'rfc5' || ws.protocol === 'rfc4') {
|
34
|
+
ws.on('error', (error) => {
|
35
|
+
console.error(error);
|
36
|
+
ws.close();
|
37
|
+
});
|
38
|
+
ws.on('close', () => {
|
39
|
+
console.debug('Websocket closed');
|
40
|
+
});
|
41
|
+
(0, handle_linear_protocol_1.handleSocketLinearProtocol)(components, ws, ctx.params.roomId).catch((err) => {
|
42
|
+
console.info(err);
|
43
|
+
ws.close();
|
44
|
+
});
|
45
|
+
}
|
46
|
+
});
|
47
|
+
});
|
48
|
+
}
|
49
|
+
exports.setupBffAndComms = setupBffAndComms;
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmZmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiYmZmLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDhGQUE4RjtBQUk5RixtRUFBcUY7QUFPOUUsS0FBSyxVQUFVLGdCQUFnQixDQUFDLFVBQTZCLEVBQUUsTUFBaUM7SUFDckcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxFQUFFO1FBQ2pDLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFBO1FBRXpCLE1BQU0sSUFBSSxHQUFrQjtZQUMxQixHQUFHLEVBQUUsRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFO1lBQ3ZCLEtBQUssRUFBRTtnQkFDTCxPQUFPLEVBQUUsSUFBSTtnQkFDYixRQUFRLEVBQUUsSUFBSTtnQkFDZCxZQUFZLEVBQUUsV0FBVyxHQUFHLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxLQUFLLElBQUksb0JBQW9CO2FBQzlGO1lBQ0QsY0FBYyxFQUFFO2dCQUNkLFNBQVMsRUFBRSxjQUFjO2FBQzFCO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVO2FBQzFEO1lBQ0QsT0FBTyxFQUFFO2dCQUNQLE9BQU8sRUFBRSxJQUFJO2dCQUNiLFNBQVMsRUFBRSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxVQUFVO2FBQzFEO1lBQ0QsT0FBTyxFQUFFLElBQUk7U0FDZCxDQUFBO1FBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFBO0lBQ2pCLENBQUMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsR0FBRyxFQUFFLEVBQUU7UUFDOUMsT0FBTyxJQUFBLDZCQUF3QixFQUFDLENBQUMsRUFBTyxFQUFFLEVBQUU7WUFDMUMsSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sSUFBSSxFQUFFLENBQUMsUUFBUSxLQUFLLE1BQU0sRUFBRTtnQkFDcEQsRUFBRSxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFVLEVBQUUsRUFBRTtvQkFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQTtvQkFDcEIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNaLENBQUMsQ0FBQyxDQUFBO2dCQUVGLEVBQUUsQ0FBQyxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRTtvQkFDbEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxDQUFBO2dCQUNuQyxDQUFDLENBQUMsQ0FBQTtnQkFFRixJQUFBLG1EQUEwQixFQUFDLFVBQVUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFRLEVBQUUsRUFBRTtvQkFDL0UsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtvQkFDakIsRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFBO2dCQUNaLENBQUMsQ0FBQyxDQUFBO2FBQ0g7UUFDSCxDQUFDLENBQUMsQ0FBQTtJQUNKLENBQUMsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQS9DRCw0Q0ErQ0MiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBoYW5kbGVTb2NrZXRMaW5lYXJQcm90b2NvbCB9IGZyb20gJ0BkY2wvbWluaS1jb21tcy9kaXN0L2xvZ2ljL2hhbmRsZS1saW5lYXItcHJvdG9jb2wnXG5pbXBvcnQgeyBQcmV2aWV3Q29tcG9uZW50cyB9IGZyb20gJy4vdHlwZXMnXG5pbXBvcnQgeyBBYm91dFJlc3BvbnNlIH0gZnJvbSAnQGRjbC9wcm90b2NvbC9vdXQtdHMvYmZmL2h0dHAtZW5kcG9pbnRzLmdlbidcbmltcG9ydCB7IFJvdXRlciB9IGZyb20gJ0B3ZWxsLWtub3duLWNvbXBvbmVudHMvaHR0cC1zZXJ2ZXInXG5pbXBvcnQgeyB1cGdyYWRlV2ViU29ja2V0UmVzcG9uc2UgfSBmcm9tICdAd2VsbC1rbm93bi1jb21wb25lbnRzL2h0dHAtc2VydmVyL2Rpc3Qvd3MnXG5cbi8qKlxuICogVGhpcyBtb2R1bGUgaGFuZGxlcyB0aGUgQkZGIG1vY2sgYW5kIGNvbW11bmljYXRpb25zIHNlcnZlciBmb3IgdGhlIHByZXZpZXcgbW9kZS5cbiAqIEl0IHJ1bnMgdXNpbmcgQGRjbC9taW5pLWNvbW1zIGltcGxlbWVudGluZyBSRkMtNVxuICovXG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzZXR1cEJmZkFuZENvbW1zKGNvbXBvbmVudHM6IFByZXZpZXdDb21wb25lbnRzLCByb3V0ZXI6IFJvdXRlcjxQcmV2aWV3Q29tcG9uZW50cz4pIHtcbiAgcm91dGVyLmdldCgnL2Fib3V0JywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIGNvbnN0IGhvc3QgPSBjdHgudXJsLmhvc3RcblxuICAgIGNvbnN0IGJvZHk6IEFib3V0UmVzcG9uc2UgPSB7XG4gICAgICBiZmY6IHsgaGVhbHRoeTogZmFsc2UgfSxcbiAgICAgIGNvbW1zOiB7XG4gICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgIHByb3RvY29sOiAndjMnLFxuICAgICAgICBmaXhlZEFkYXB0ZXI6IGB3cy1yb29tOiR7Y3R4LnVybC5wcm90b2NvbC5yZXBsYWNlKC9eaHR0cC8sICd3cycpfS8vJHtob3N0fS9taW5pLWNvbW1zL3Jvb20tMWBcbiAgICAgIH0sXG4gICAgICBjb25maWd1cmF0aW9uczoge1xuICAgICAgICByZWFsbU5hbWU6ICdMb2NhbFByZXZpZXcnXG4gICAgICB9LFxuICAgICAgY29udGVudDoge1xuICAgICAgICBoZWFsdGh5OiB0cnVlLFxuICAgICAgICBwdWJsaWNVcmw6IGAke2N0eC51cmwucHJvdG9jb2x9Ly8ke2N0eC51cmwuaG9zdH0vY29udGVudGBcbiAgICAgIH0sXG4gICAgICBsYW1iZGFzOiB7XG4gICAgICAgIGhlYWx0aHk6IHRydWUsXG4gICAgICAgIHB1YmxpY1VybDogYCR7Y3R4LnVybC5wcm90b2NvbH0vLyR7Y3R4LnVybC5ob3N0fS9sYW1iZGFzYFxuICAgICAgfSxcbiAgICAgIGhlYWx0aHk6IHRydWVcbiAgICB9XG5cbiAgICByZXR1cm4geyBib2R5IH1cbiAgfSlcblxuICByb3V0ZXIuZ2V0KCcvbWluaS1jb21tcy86cm9vbUlkJywgYXN5bmMgKGN0eCkgPT4ge1xuICAgIHJldHVybiB1cGdyYWRlV2ViU29ja2V0UmVzcG9uc2UoKHdzOiBhbnkpID0+IHtcbiAgICAgIGlmICh3cy5wcm90b2NvbCA9PT0gJ3JmYzUnIHx8IHdzLnByb3RvY29sID09PSAncmZjNCcpIHtcbiAgICAgICAgd3Mub24oJ2Vycm9yJywgKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yKVxuICAgICAgICAgIHdzLmNsb3NlKClcbiAgICAgICAgfSlcblxuICAgICAgICB3cy5vbignY2xvc2UnLCAoKSA9PiB7XG4gICAgICAgICAgY29uc29sZS5kZWJ1ZygnV2Vic29ja2V0IGNsb3NlZCcpXG4gICAgICAgIH0pXG5cbiAgICAgICAgaGFuZGxlU29ja2V0TGluZWFyUHJvdG9jb2woY29tcG9uZW50cywgd3MsIGN0eC5wYXJhbXMucm9vbUlkKS5jYXRjaCgoZXJyOiBhbnkpID0+IHtcbiAgICAgICAgICBjb25zb2xlLmluZm8oZXJyKVxuICAgICAgICAgIHdzLmNsb3NlKClcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9KVxuICB9KVxufVxuIl19
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import { handleSocketLinearProtocol } from '@dcl/mini-comms/dist/logic/handle-linear-protocol'
|
2
|
+
import { PreviewComponents } from './types'
|
3
|
+
import { AboutResponse } from '@dcl/protocol/out-ts/bff/http-endpoints.gen'
|
4
|
+
import { Router } from '@well-known-components/http-server'
|
5
|
+
import { upgradeWebSocketResponse } from '@well-known-components/http-server/dist/ws'
|
6
|
+
|
7
|
+
/**
|
8
|
+
* This module handles the BFF mock and communications server for the preview mode.
|
9
|
+
* It runs using @dcl/mini-comms implementing RFC-5
|
10
|
+
*/
|
11
|
+
|
12
|
+
export async function setupBffAndComms(components: PreviewComponents, router: Router<PreviewComponents>) {
|
13
|
+
router.get('/about', async (ctx) => {
|
14
|
+
const host = ctx.url.host
|
15
|
+
|
16
|
+
const body: AboutResponse = {
|
17
|
+
bff: { healthy: false },
|
18
|
+
comms: {
|
19
|
+
healthy: true,
|
20
|
+
protocol: 'v3',
|
21
|
+
fixedAdapter: `ws-room:${ctx.url.protocol.replace(/^http/, 'ws')}//${host}/mini-comms/room-1`
|
22
|
+
},
|
23
|
+
configurations: {
|
24
|
+
realmName: 'LocalPreview'
|
25
|
+
},
|
26
|
+
content: {
|
27
|
+
healthy: true,
|
28
|
+
publicUrl: `${ctx.url.protocol}//${ctx.url.host}/content`
|
29
|
+
},
|
30
|
+
lambdas: {
|
31
|
+
healthy: true,
|
32
|
+
publicUrl: `${ctx.url.protocol}//${ctx.url.host}/lambdas`
|
33
|
+
},
|
34
|
+
healthy: true
|
35
|
+
}
|
36
|
+
|
37
|
+
return { body }
|
38
|
+
})
|
39
|
+
|
40
|
+
router.get('/mini-comms/:roomId', async (ctx) => {
|
41
|
+
return upgradeWebSocketResponse((ws: any) => {
|
42
|
+
if (ws.protocol === 'rfc5' || ws.protocol === 'rfc4') {
|
43
|
+
ws.on('error', (error: any) => {
|
44
|
+
console.error(error)
|
45
|
+
ws.close()
|
46
|
+
})
|
47
|
+
|
48
|
+
ws.on('close', () => {
|
49
|
+
console.debug('Websocket closed')
|
50
|
+
})
|
51
|
+
|
52
|
+
handleSocketLinearProtocol(components, ws, ctx.params.roomId).catch((err: any) => {
|
53
|
+
console.info(err)
|
54
|
+
ws.close()
|
55
|
+
})
|
56
|
+
}
|
57
|
+
})
|
58
|
+
})
|
59
|
+
}
|