xs-dev 0.0.1
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/LICENSE +22 -0
- package/README.md +213 -0
- package/bin/xs-dev +21 -0
- package/build/cli.js +22 -0
- package/build/commands/include.js +42 -0
- package/build/commands/init.js +41 -0
- package/build/commands/remove.js +26 -0
- package/build/commands/run.js +76 -0
- package/build/commands/setup.js +14 -0
- package/build/commands/update.js +14 -0
- package/build/commands/xs-dev.js +13 -0
- package/build/extensions/setup-extension.js +23 -0
- package/build/extensions/update-extension.js +23 -0
- package/build/templates/main.js.ejs +4 -0
- package/build/templates/manifest.json.ejs +8 -0
- package/build/toolbox/patching/upsert.js +13 -0
- package/build/toolbox/prompt/choices.js +17 -0
- package/build/toolbox/setup/constants.js +19 -0
- package/build/toolbox/setup/esp32.js +74 -0
- package/build/toolbox/setup/esp8266.js +86 -0
- package/build/toolbox/setup/linux.js +8 -0
- package/build/toolbox/setup/mac.js +77 -0
- package/build/toolbox/setup/wasm.js +65 -0
- package/build/toolbox/setup/windows.js +8 -0
- package/build/toolbox/update/esp32.js +8 -0
- package/build/toolbox/update/esp8266.js +8 -0
- package/build/toolbox/update/linux.js +8 -0
- package/build/toolbox/update/mac.js +27 -0
- package/build/toolbox/update/wasm.js +8 -0
- package/build/toolbox/update/windows.js +8 -0
- package/build/types/cli.d.ts +1 -0
- package/build/types/commands/include.d.ts +3 -0
- package/build/types/commands/init.d.ts +3 -0
- package/build/types/commands/remove.d.ts +3 -0
- package/build/types/commands/run.d.ts +4 -0
- package/build/types/commands/setup.d.ts +4 -0
- package/build/types/commands/update.d.ts +4 -0
- package/build/types/commands/xs-dev.d.ts +3 -0
- package/build/types/extensions/setup-extension.d.ts +3 -0
- package/build/types/extensions/update-extension.d.ts +3 -0
- package/build/types/toolbox/patching/upsert.d.ts +1 -0
- package/build/types/toolbox/prompt/choices.d.ts +7 -0
- package/build/types/toolbox/setup/constants.d.ts +5 -0
- package/build/types/toolbox/setup/esp32.d.ts +1 -0
- package/build/types/toolbox/setup/esp8266.d.ts +1 -0
- package/build/types/toolbox/setup/linux.d.ts +1 -0
- package/build/types/toolbox/setup/mac.d.ts +1 -0
- package/build/types/toolbox/setup/wasm.d.ts +1 -0
- package/build/types/toolbox/setup/windows.d.ts +1 -0
- package/build/types/toolbox/update/esp32.d.ts +1 -0
- package/build/types/toolbox/update/esp8266.d.ts +1 -0
- package/build/types/toolbox/update/linux.d.ts +1 -0
- package/build/types/toolbox/update/mac.d.ts +1 -0
- package/build/types/toolbox/update/wasm.d.ts +1 -0
- package/build/types/toolbox/update/windows.d.ts +1 -0
- package/build/types/types.d.ts +6 -0
- package/build/types.js +3 -0
- package/docs/commands.md +3 -0
- package/docs/plugins.md +47 -0
- package/package.json +69 -0
- package/tsconfig.json +24 -0
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const gluegun_1 = require("gluegun");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
9
|
+
async function default_1() {
|
|
10
|
+
const ESP_IDF_REPO = 'https://github.com/espressif/esp-idf.git';
|
|
11
|
+
const ESP_BRANCH = 'v4.3.1';
|
|
12
|
+
const ESP32_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'esp32');
|
|
13
|
+
const IDF_PATH = gluegun_1.filesystem.resolve(ESP32_DIR, 'esp-idf');
|
|
14
|
+
gluegun_1.print.info('Setting up esp32 tools');
|
|
15
|
+
// 0. ensure Moddable exists
|
|
16
|
+
if (process.env.MODDABLE === undefined) {
|
|
17
|
+
gluegun_1.print.warning('Moddable tooling required. Run `xs-dev setup` before trying again.');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
// 1. ensure ~/.local/share/esp32 directory
|
|
21
|
+
gluegun_1.print.info('Ensuring esp32 install directory');
|
|
22
|
+
gluegun_1.filesystem.dir(ESP32_DIR);
|
|
23
|
+
// 2. clone esp-idf into ~/.local/share/esp32/esp-idf
|
|
24
|
+
if (gluegun_1.filesystem.exists(IDF_PATH) === false) {
|
|
25
|
+
gluegun_1.print.info('Cloning esp-idf repo');
|
|
26
|
+
await gluegun_1.system.spawn(`git clone -b ${ESP_BRANCH} --recursive ${ESP_IDF_REPO} ${IDF_PATH}`);
|
|
27
|
+
}
|
|
28
|
+
// 3. brew install python3, cmake, ninja, dfu-util
|
|
29
|
+
gluegun_1.print.info('Installing build dependencies: python, cmake, ninja, dfu-util');
|
|
30
|
+
if (gluegun_1.system.which('python') === null ||
|
|
31
|
+
// get python verion, check if v3
|
|
32
|
+
gluegun_1.semver.satisfies((await gluegun_1.system.exec('python --version', { trim: true }))
|
|
33
|
+
.toString()
|
|
34
|
+
.split(' ')
|
|
35
|
+
.pop(), '>= 3.x.x')) {
|
|
36
|
+
await gluegun_1.system.spawn('brew install python');
|
|
37
|
+
}
|
|
38
|
+
if (gluegun_1.system.which('cmake') === null) {
|
|
39
|
+
await gluegun_1.system.spawn('brew install cmake');
|
|
40
|
+
}
|
|
41
|
+
if (gluegun_1.system.which('ninja') === null) {
|
|
42
|
+
await gluegun_1.system.spawn('brew install ninja');
|
|
43
|
+
}
|
|
44
|
+
if (gluegun_1.system.which('dfu-util') === null) {
|
|
45
|
+
await gluegun_1.system.spawn('brew install dfu-util');
|
|
46
|
+
}
|
|
47
|
+
// 4. install pip, if needed
|
|
48
|
+
if (gluegun_1.system.which('pip3') === null) {
|
|
49
|
+
gluegun_1.print.info('Installing pip3');
|
|
50
|
+
await gluegun_1.system.spawn('python3 -m ensurepip --user');
|
|
51
|
+
}
|
|
52
|
+
// 5. pip install pyserial, if needed
|
|
53
|
+
gluegun_1.print.info('Installing pyserial through pip3');
|
|
54
|
+
await gluegun_1.system.spawn('python3 -m pip install pyserial');
|
|
55
|
+
// 6. append IDF_PATH env export to shell profile
|
|
56
|
+
if (process.env.IDF_PATH === undefined) {
|
|
57
|
+
gluegun_1.print.info('Configuring $IDF_PATH');
|
|
58
|
+
process.env.IDF_PATH = IDF_PATH;
|
|
59
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `export IDF_PATH=${IDF_PATH}`);
|
|
60
|
+
}
|
|
61
|
+
// 7. cd to IDF_PATH, run install.sh
|
|
62
|
+
gluegun_1.print.info('Installing esp-idf tooling');
|
|
63
|
+
await gluegun_1.system.spawn('./install.sh', { cwd: IDF_PATH });
|
|
64
|
+
// 8. append 'source $IDF_PATH/export.sh' to shell profile
|
|
65
|
+
gluegun_1.print.info('Sourcing esp-idf environment');
|
|
66
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `source $IDF_PATH/export.sh`);
|
|
67
|
+
gluegun_1.print.success(`
|
|
68
|
+
Successfully set up esp32 platform support for Moddable!
|
|
69
|
+
Test out the setup by plugging in your device and running: xs-dev run --example helloworld --device=esp32
|
|
70
|
+
If there is trouble finding the correct port, pass the "--port" flag to the above command with the path to the "/dev.cu.*" that matches your device.
|
|
71
|
+
`);
|
|
72
|
+
}
|
|
73
|
+
exports.default = default_1;
|
|
74
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUEyRDtBQUMzRCwyQ0FBdUQ7QUFDdkQsZ0VBQXVDO0FBRXhCLEtBQUs7SUFDbEIsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUE7SUFDL0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFBO0lBQzNCLE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDMUQsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBQ3pELGVBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUVwQyw0QkFBNEI7SUFDNUIsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7UUFDdEMsZUFBSyxDQUFDLE9BQU8sQ0FDWCxvRUFBb0UsQ0FDckUsQ0FBQTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7SUFFRCwyQ0FBMkM7SUFDM0MsZUFBSyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQzlDLG9CQUFVLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBRXpCLHFEQUFxRDtJQUNyRCxJQUFJLG9CQUFVLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUN6QyxlQUFLLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLENBQUE7UUFDbEMsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FDaEIsZ0JBQWdCLFVBQVUsZ0JBQWdCLFlBQVksSUFBSSxRQUFRLEVBQUUsQ0FDckUsQ0FBQTtLQUNGO0lBRUQsa0RBQWtEO0lBQ2xELGVBQUssQ0FBQyxJQUFJLENBQUMsK0RBQStELENBQUMsQ0FBQTtJQUUzRSxJQUNFLGdCQUFNLENBQUMsS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUk7UUFDL0IsaUNBQWlDO1FBQ2pDLGdCQUFNLENBQUMsU0FBUyxDQUNkLENBQUMsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO2FBQ3BELFFBQVEsRUFBRTthQUNWLEtBQUssQ0FBQyxHQUFHLENBQUM7YUFDVixHQUFHLEVBQUUsRUFDUixVQUFVLENBQ1gsRUFDRDtRQUNBLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMscUJBQXFCLENBQUMsQ0FBQTtLQUMxQztJQUVELElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtLQUN6QztJQUVELElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ2xDLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtLQUN6QztJQUVELElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ3JDLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtLQUM1QztJQUVELDRCQUE0QjtJQUM1QixJQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNqQyxlQUFLLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7UUFDN0IsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FBQyw2QkFBNkIsQ0FBQyxDQUFBO0tBQ2xEO0lBRUQscUNBQXFDO0lBQ3JDLGVBQUssQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUM5QyxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7SUFFckQsaURBQWlEO0lBQ2pELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQ3RDLGVBQUssQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDL0IsTUFBTSxJQUFBLGdCQUFNLEVBQUMsd0JBQVksRUFBRSxtQkFBbUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUMxRDtJQUVELG9DQUFvQztJQUNwQyxlQUFLLENBQUMsSUFBSSxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDeEMsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxjQUFjLEVBQUUsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUVyRCwwREFBMEQ7SUFDMUQsZUFBSyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sSUFBQSxnQkFBTSxFQUFDLHdCQUFZLEVBQUUsNEJBQTRCLENBQUMsQ0FBQTtJQUV4RCxlQUFLLENBQUMsT0FBTyxDQUFDOzs7O0dBSWIsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQXRGRCw0QkFzRkMifQ==
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const gluegun_1 = require("gluegun");
|
|
7
|
+
const axios_1 = __importDefault(require("axios"));
|
|
8
|
+
const promises_1 = require("stream/promises");
|
|
9
|
+
const tar_fs_1 = require("tar-fs");
|
|
10
|
+
const zlib_1 = require("zlib");
|
|
11
|
+
const unzip_stream_1 = require("unzip-stream");
|
|
12
|
+
const constants_1 = require("./constants");
|
|
13
|
+
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
14
|
+
async function default_1() {
|
|
15
|
+
const TOOLCHAIN = 'https://www.moddable.com/private/esp8266.toolchain.darwin.tgz';
|
|
16
|
+
const ARDUINO_CORE = 'https://github.com/esp8266/Arduino/releases/download/2.3.0/esp8266-2.3.0.zip';
|
|
17
|
+
const ESP_RTOS_REPO = 'https://github.com/espressif/ESP8266_RTOS_SDK.git';
|
|
18
|
+
const ESP_BRANCH = 'release/v3.2';
|
|
19
|
+
const ESP_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'esp');
|
|
20
|
+
const RTOS_PATH = gluegun_1.filesystem.resolve(ESP_DIR, 'ESP8266_RTOS_SDK');
|
|
21
|
+
const TOOLCHAIN_PATH = gluegun_1.filesystem.resolve(ESP_DIR, 'toolchain');
|
|
22
|
+
const ARDUINO_CORE_PATH = gluegun_1.filesystem.resolve(ESP_DIR, 'esp8266-2.3.0');
|
|
23
|
+
gluegun_1.print.info('Setting up esp8266 tools');
|
|
24
|
+
// 0. ensure Moddable exists
|
|
25
|
+
if (process.env.MODDABLE === undefined) {
|
|
26
|
+
gluegun_1.print.warning('Moddable tooling required. Run `xs-dev setup` before trying again.');
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
// 1. ensure ~/.local/share/esp directory
|
|
30
|
+
gluegun_1.print.info('Ensuring esp directory');
|
|
31
|
+
gluegun_1.filesystem.dir(ESP_DIR);
|
|
32
|
+
// 2. download and untar xtensa toolchain
|
|
33
|
+
if (gluegun_1.filesystem.exists(TOOLCHAIN_PATH) === false) {
|
|
34
|
+
const spinner = gluegun_1.print.spin();
|
|
35
|
+
spinner.start('Downloading xtensa toolchain');
|
|
36
|
+
const writer = (0, tar_fs_1.extract)(ESP_DIR, { readable: true });
|
|
37
|
+
const gunzip = (0, zlib_1.createGunzip)();
|
|
38
|
+
const response = await axios_1.default.get(TOOLCHAIN, {
|
|
39
|
+
responseType: 'stream',
|
|
40
|
+
});
|
|
41
|
+
response.data.pipe(gunzip).pipe(writer);
|
|
42
|
+
await (0, promises_1.finished)(writer);
|
|
43
|
+
spinner.succeed();
|
|
44
|
+
}
|
|
45
|
+
// 3. download and unzip esp8266 core for arduino
|
|
46
|
+
if (gluegun_1.filesystem.exists(ARDUINO_CORE_PATH) === false) {
|
|
47
|
+
const spinner = gluegun_1.print.spin();
|
|
48
|
+
spinner.start('Downloading arduino core tooling');
|
|
49
|
+
const writer = (0, unzip_stream_1.Extract)({ path: ESP_DIR });
|
|
50
|
+
const response = await axios_1.default.get(ARDUINO_CORE, {
|
|
51
|
+
responseType: 'stream',
|
|
52
|
+
});
|
|
53
|
+
response.data.pipe(writer);
|
|
54
|
+
await (0, promises_1.finished)(writer);
|
|
55
|
+
spinner.succeed();
|
|
56
|
+
}
|
|
57
|
+
// 4. clone esp8266 RTOS SDK
|
|
58
|
+
if (gluegun_1.filesystem.exists(RTOS_PATH) === false) {
|
|
59
|
+
gluegun_1.print.info('Cloning esp8266 RTOS SDK repo');
|
|
60
|
+
await gluegun_1.system.spawn(`git clone -b ${ESP_BRANCH} ${ESP_RTOS_REPO} ${RTOS_PATH}`);
|
|
61
|
+
}
|
|
62
|
+
// 5. ensure python, pip, and pyserial are installed
|
|
63
|
+
if (gluegun_1.system.which('python') === null) {
|
|
64
|
+
gluegun_1.print.info('Installing python from homebrew');
|
|
65
|
+
await gluegun_1.system.spawn('brew install python');
|
|
66
|
+
}
|
|
67
|
+
if (gluegun_1.system.which('pip') === null) {
|
|
68
|
+
gluegun_1.print.info('Installing pip through easy_install');
|
|
69
|
+
await gluegun_1.system.spawn('sudo easy_install pip');
|
|
70
|
+
}
|
|
71
|
+
gluegun_1.print.info('Installing pyserial through pip');
|
|
72
|
+
await gluegun_1.system.spawn('python -m pip install pyserial');
|
|
73
|
+
// 7. create ESP_BARE env export in shell profile
|
|
74
|
+
if (process.env.ESP_BASE === undefined) {
|
|
75
|
+
gluegun_1.print.info('Configuring $ESP_BASE');
|
|
76
|
+
process.env.ESP_BASE = ESP_DIR;
|
|
77
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `export ESP_BASE=${process.env.ESP_BASE}`);
|
|
78
|
+
}
|
|
79
|
+
gluegun_1.print.success(`
|
|
80
|
+
Successfully set up esp8266 platform support for moddable!
|
|
81
|
+
Test out the setup by plugging in your device and running: xs-dev run --example helloworld --device esp8266
|
|
82
|
+
If there is trouble finding the correct port, pass the "--port" flag to the above command with the path to the "/dev.cu.*" that matches your device.
|
|
83
|
+
`);
|
|
84
|
+
}
|
|
85
|
+
exports.default = default_1;
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwODI2Ni5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL2VzcDgyNjYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxQ0FBbUQ7QUFDbkQsa0RBQXlCO0FBQ3pCLDhDQUEwQztBQUMxQyxtQ0FBZ0M7QUFDaEMsK0JBQW1DO0FBQ25DLCtDQUFvRDtBQUNwRCwyQ0FBdUQ7QUFDdkQsZ0VBQXVDO0FBRXhCLEtBQUs7SUFDbEIsTUFBTSxTQUFTLEdBQ2IsK0RBQStELENBQUE7SUFDakUsTUFBTSxZQUFZLEdBQ2hCLDhFQUE4RSxDQUFBO0lBQ2hGLE1BQU0sYUFBYSxHQUFHLG1EQUFtRCxDQUFBO0lBQ3pFLE1BQU0sVUFBVSxHQUFHLGNBQWMsQ0FBQTtJQUNqQyxNQUFNLE9BQU8sR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLEtBQUssQ0FBQyxDQUFBO0lBQ3RELE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxrQkFBa0IsQ0FBQyxDQUFBO0lBQ2pFLE1BQU0sY0FBYyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxXQUFXLENBQUMsQ0FBQTtJQUMvRCxNQUFNLGlCQUFpQixHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxlQUFlLENBQUMsQ0FBQTtJQUV0RSxlQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUE7SUFFdEMsNEJBQTRCO0lBQzVCLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQ3RDLGVBQUssQ0FBQyxPQUFPLENBQ1gsb0VBQW9FLENBQ3JFLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQseUNBQXlDO0lBQ3pDLGVBQUssQ0FBQyxJQUFJLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJ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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('Linux setup is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9saW51eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUErQjtBQUVoQixLQUFLO0lBQ2xCLGVBQUssQ0FBQyxPQUFPLENBQUMsd0NBQXdDLENBQUMsQ0FBQTtBQUN6RCxDQUFDO0FBRkQsNEJBRUMifQ==
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const gluegun_1 = require("gluegun");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
9
|
+
async function default_1() {
|
|
10
|
+
gluegun_1.print.info('Setting up the mac tools!');
|
|
11
|
+
const MODDABLE_REPO = 'https://github.com/Moddable-OpenSource/moddable';
|
|
12
|
+
const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'mac', 'release');
|
|
13
|
+
const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'mac');
|
|
14
|
+
// 0. ensure xcode command line tools are available (?)
|
|
15
|
+
try {
|
|
16
|
+
await gluegun_1.system.spawn('xcode-select -p');
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
gluegun_1.print.error('Xcode command line tools are required to build the SDK: https://developer.apple.com/xcode/');
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
// 1. clone moddable repo into ./local/share directory if it does not exist yet
|
|
23
|
+
try {
|
|
24
|
+
gluegun_1.filesystem.dir(constants_1.INSTALL_DIR);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
gluegun_1.print.error(`Error setting up install directory: ${String(error)}`);
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
if (gluegun_1.filesystem.exists(constants_1.INSTALL_PATH) !== false) {
|
|
31
|
+
gluegun_1.print.info('Moddable repo already installed');
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
try {
|
|
35
|
+
await gluegun_1.system.spawn(`git clone ${MODDABLE_REPO} ${constants_1.INSTALL_PATH}`);
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
gluegun_1.print.error(`Error cloning moddable repo: ${String(error)}`);
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// 2. configure MODDABLE env variable, add release binaries dir to PATH
|
|
43
|
+
if (process.env.MODDABLE === undefined) {
|
|
44
|
+
process.env.MODDABLE = constants_1.INSTALL_PATH;
|
|
45
|
+
process.env.PATH = `${String(process.env.PATH)}:${BIN_PATH}`;
|
|
46
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `export MODDABLE=${process.env.MODDABLE}`);
|
|
47
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `export PATH="${BIN_PATH}:$PATH"`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
gluegun_1.print.info(`Using current MODDABLE env: ${process.env.MODDABLE}`);
|
|
51
|
+
}
|
|
52
|
+
// 3. cd into makefiles dir for platform, run `make`
|
|
53
|
+
try {
|
|
54
|
+
const dir = gluegun_1.filesystem.cwd(gluegun_1.filesystem.resolve(BUILD_DIR));
|
|
55
|
+
await gluegun_1.system.spawn('make', { cwd: dir.cwd() });
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
gluegun_1.print.error(`Error building mac tooling: ${String(error)}`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
// 4. symlink xsbug.app into user applications directory
|
|
62
|
+
try {
|
|
63
|
+
gluegun_1.filesystem.symlink(gluegun_1.filesystem.resolve(BIN_PATH, 'xsbug.app'), '/Applications/xsbug.app');
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
if (!String(error).includes('exists')) {
|
|
67
|
+
gluegun_1.print.error(`Issue creating symlink for xsbug.app: ${String(error)}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
gluegun_1.print.info('xsbug.app symlink already exists');
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
gluegun_1.print.success('Moddable SDK successfully set up! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
|
|
75
|
+
}
|
|
76
|
+
exports.default = default_1;
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvbWFjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUNBQW1EO0FBQ25ELDJDQUFxRTtBQUNyRSxnRUFBdUM7QUFFeEIsS0FBSztJQUNsQixlQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDdkMsTUFBTSxhQUFhLEdBQUcsaURBQWlELENBQUE7SUFFdkUsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQ2pDLHdCQUFZLEVBQ1osT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsU0FBUyxDQUNWLENBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FDbEMsd0JBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFBO0lBRUQsdURBQXVEO0lBQ3ZELElBQUk7UUFDRixNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLGlCQUFpQixDQUFDLENBQUE7S0FDdEM7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLGVBQUssQ0FBQyxLQUFLLENBQ1QsNEZBQTRGLENBQzdGLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsK0VBQStFO0lBQy9FLElBQUk7UUFDRixvQkFBVSxDQUFDLEdBQUcsQ0FBQyx1QkFBVyxDQUFDLENBQUE7S0FDNUI7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLGVBQUssQ0FBQyxLQUFLLENBQUMsdUNBQXVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDbkUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsd0JBQVksQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUM3QyxlQUFLLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7S0FDOUM7U0FBTTtRQUNMLElBQUk7WUFDRixNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsYUFBYSxJQUFJLHdCQUFZLEVBQUUsQ0FBQyxDQUFBO1NBQ2pFO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxlQUFLLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDaEI7S0FDRjtJQUVELHVFQUF1RTtJQUN2RSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxLQUFLLFNBQVMsRUFBRTtRQUN0QyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyx3QkFBWSxDQUFBO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUE7UUFFNUQsTUFBTSxJQUFBLGdCQUFNLEVBQUMsd0JBQVksRUFBRSxtQkFBbUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBQ3JFLE1BQU0sSUFBQSxnQkFBTSxFQUFDLHdCQUFZLEVBQUUsZ0JBQWdCLFFBQVEsU0FBUyxDQUFDLENBQUE7S0FDOUQ7U0FBTTtRQUNMLGVBQUssQ0FBQyxJQUFJLENBQUMsK0JBQStCLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUNsRTtJQUVELG9EQUFvRDtJQUNwRCxJQUFJO1FBQ0YsTUFBTSxHQUFHLEdBQUcsb0JBQVUsQ0FBQyxHQUFHLENBQUMsb0JBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQTtRQUN6RCxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0tBQy9DO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxlQUFLLENBQUMsS0FBSyxDQUFDLCtCQUErQixNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQzNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7SUFFRCx3REFBd0Q7SUFDeEQsSUFBSTtRQUNGLG9CQUFVLENBQUMsT0FBTyxDQUNoQixvQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsV0FBVyxDQUFDLEVBQ3pDLHlCQUF5QixDQUMxQixDQUFBO0tBQ0Y7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO1lBQ3JDLGVBQUssQ0FBQyxLQUFLLENBQUMseUNBQXlDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7WUFDckUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtTQUNoQjthQUFNO1lBQ0wsZUFBSyxDQUFDLElBQUksQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1NBQy9DO0tBQ0Y7SUFFRCxlQUFLLENBQUMsT0FBTyxDQUNYLHlIQUF5SCxDQUMxSCxDQUFBO0FBQ0gsQ0FBQztBQXJGRCw0QkFxRkMifQ==
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const gluegun_1 = require("gluegun");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
9
|
+
async function default_1() {
|
|
10
|
+
const EMSDK_REPO = 'https://github.com/emscripten-core/emsdk.git';
|
|
11
|
+
const BINARYEN_REPO = 'https://github.com/WebAssembly/binaryen.git';
|
|
12
|
+
const WASM_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'wasm');
|
|
13
|
+
const EMSDK_PATH = gluegun_1.filesystem.resolve(WASM_DIR, 'emsdk');
|
|
14
|
+
const BINARYEN_PATH = gluegun_1.filesystem.resolve(WASM_DIR, 'binaryen');
|
|
15
|
+
gluegun_1.print.info('Setting up wasm simulator tools');
|
|
16
|
+
// 0. ensure wasm instal directory and Moddable exists
|
|
17
|
+
if (process.env.MODDABLE === undefined) {
|
|
18
|
+
gluegun_1.print.warning('Moddable tooling required. Run `xs-dev setup` before trying again.');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
gluegun_1.print.info('Ensuring wasm directory');
|
|
22
|
+
gluegun_1.filesystem.dir(WASM_DIR);
|
|
23
|
+
// 1. Clone EM_SDK repo, install, and activate latest version
|
|
24
|
+
if (gluegun_1.filesystem.exists(EMSDK_PATH) === false) {
|
|
25
|
+
gluegun_1.print.info('Cloning emsdk repo');
|
|
26
|
+
try {
|
|
27
|
+
await gluegun_1.system.spawn(`git clone ${EMSDK_REPO} ${EMSDK_PATH}`);
|
|
28
|
+
await gluegun_1.system.spawn('./emsdk install latest', {
|
|
29
|
+
cwd: EMSDK_PATH,
|
|
30
|
+
});
|
|
31
|
+
await gluegun_1.system.spawn('./emsdk activate latest', {
|
|
32
|
+
cwd: EMSDK_PATH,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
gluegun_1.print.error(`Error activating emsdk: ${String(error)}`);
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// 2. Clone Binaryen repo and build
|
|
41
|
+
if (gluegun_1.filesystem.exists(BINARYEN_PATH) === false) {
|
|
42
|
+
gluegun_1.print.info('Cloning binaryen repo');
|
|
43
|
+
await gluegun_1.system.spawn(`git clone ${BINARYEN_REPO} ${BINARYEN_PATH}`);
|
|
44
|
+
if (gluegun_1.system.which('cmake') === null) {
|
|
45
|
+
gluegun_1.print.info('Cmake required, installing with Homebrew');
|
|
46
|
+
await gluegun_1.system.spawn('brew install cmake');
|
|
47
|
+
}
|
|
48
|
+
await gluegun_1.system.spawn('cmake . && make', {
|
|
49
|
+
cwd: BINARYEN_PATH,
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// 3. Setup PATH and env variables for EM_SDK and Binaryen
|
|
53
|
+
gluegun_1.print.info('Sourcing emsdk environment and adding binaryen to PATH');
|
|
54
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `source ${gluegun_1.filesystem.resolve(EMSDK_PATH, 'emsdk_env.sh')}`);
|
|
55
|
+
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `export PATH=${gluegun_1.filesystem.resolve(BINARYEN_PATH, 'bin')}:$PATH`);
|
|
56
|
+
process.env.PATH = `${String(process.env.PATH)}:${gluegun_1.filesystem.resolve(BINARYEN_PATH, 'bin')}`;
|
|
57
|
+
// 4. Build Moddable WASM tools
|
|
58
|
+
gluegun_1.print.info('Building Moddable wasm tools');
|
|
59
|
+
await gluegun_1.system.spawn(`make`, {
|
|
60
|
+
cwd: gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'build', 'makefiles', 'wasm'),
|
|
61
|
+
});
|
|
62
|
+
gluegun_1.print.success(`Successfully set up wasm platform support for Moddable! Test out the setup by plugging in your device and running: xs-dev run --example helloworld --device wasm`);
|
|
63
|
+
}
|
|
64
|
+
exports.default = default_1;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL3dhc20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxQ0FBbUQ7QUFDbkQsMkNBQXVEO0FBQ3ZELGdFQUF1QztBQUV4QixLQUFLO0lBQ2xCLE1BQU0sVUFBVSxHQUFHLDhDQUE4QyxDQUFBO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLDZDQUE2QyxDQUFBO0lBQ25FLE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsTUFBTSxDQUFDLENBQUE7SUFDeEQsTUFBTSxVQUFVLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3hELE1BQU0sYUFBYSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUU5RCxlQUFLLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7SUFFN0Msc0RBQXNEO0lBQ3RELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQ3RDLGVBQUssQ0FBQyxPQUFPLENBQ1gsb0VBQW9FLENBQ3JFLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBQ0QsZUFBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBQ3JDLG9CQUFVLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFBO0lBRXhCLDZEQUE2RDtJQUM3RCxJQUFJLG9CQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUMzQyxlQUFLLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7UUFDaEMsSUFBSTtZQUNGLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxVQUFVLElBQUksVUFBVSxFQUFFLENBQUMsQ0FBQTtZQUMzRCxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFO2dCQUMzQyxHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUE7WUFDRixNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLHlCQUF5QixFQUFFO2dCQUM1QyxHQUFHLEVBQUUsVUFBVTthQUNoQixDQUFDLENBQUE7U0FDSDtRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsZUFBSyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN2RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2hCO0tBQ0Y7SUFFRCxtQ0FBbUM7SUFDbkMsSUFBSSxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDOUMsZUFBSyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQ25DLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxhQUFhLElBQUksYUFBYSxFQUFFLENBQUMsQ0FBQTtRQUVqRSxJQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtZQUNsQyxlQUFLLENBQUMsSUFBSSxDQUFDLDBDQUEwQyxDQUFDLENBQUE7WUFDdEQsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO1NBQ3pDO1FBRUQsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsRUFBRTtZQUNwQyxHQUFHLEVBQUUsYUFBYTtTQUNuQixDQUFDLENBQUE7S0FDSDtJQUVELDBEQUEwRDtJQUMxRCxlQUFLLENBQUMsSUFBSSxDQUFDLHdEQUF3RCxDQUFDLENBQUE7SUFDcEUsTUFBTSxJQUFBLGdCQUFNLEVBQ1Ysd0JBQVksRUFDWixVQUFVLG9CQUFVLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsRUFBRSxDQUMzRCxDQUFBO0lBQ0QsTUFBTSxJQUFBLGdCQUFNLEVBQ1Ysd0JBQVksRUFDWixlQUFlLG9CQUFVLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUNoRSxDQUFBO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxvQkFBVSxDQUFDLE9BQU8sQ0FDbEUsYUFBYSxFQUNiLEtBQUssQ0FDTixFQUFFLENBQUE7SUFFSCwrQkFBK0I7SUFDL0IsZUFBSyxDQUFDLElBQUksQ0FBQyw4QkFBOEIsQ0FBQyxDQUFBO0lBQzFDLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFO1FBQ3pCLEdBQUcsRUFBRSxvQkFBVSxDQUFDLE9BQU8sQ0FDckIsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQzVCLE9BQU8sRUFDUCxXQUFXLEVBQ1gsTUFBTSxDQUNQO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsZUFBSyxDQUFDLE9BQU8sQ0FDWCxrS0FBa0ssQ0FDbkssQ0FBQTtBQUNILENBQUM7QUFoRkQsNEJBZ0ZDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('Windows setup is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL3dpbmRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBK0I7QUFFaEIsS0FBSztJQUNsQixlQUFLLENBQUMsT0FBTyxDQUFDLDBDQUEwQyxDQUFDLENBQUE7QUFDM0QsQ0FBQztBQUZELDRCQUVDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('ESP32 update is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvZXNwMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBK0I7QUFFaEIsS0FBSztJQUNsQixlQUFLLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUZELDRCQUVDIn0=
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('ESP8266 update is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwODI2Ni5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3VwZGF0ZS9lc3A4MjY2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQStCO0FBRWhCLEtBQUs7SUFDbEIsZUFBSyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0FBQzVELENBQUM7QUFGRCw0QkFFQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('Linux update is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvbGludXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBK0I7QUFFaEIsS0FBSztJQUNsQixlQUFLLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUZELDRCQUVDIn0=
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.info('Checking for SDK changes');
|
|
6
|
+
const currentRev = await gluegun_1.system.exec('git rev-parse public', {
|
|
7
|
+
cwd: process.env.MODDABLE,
|
|
8
|
+
});
|
|
9
|
+
const remoteRev = await gluegun_1.system.exec('git ls-remote origin refs/heads/public', { cwd: process.env.MODDABLE });
|
|
10
|
+
if (remoteRev.split('\t').shift() === currentRev.trim()) {
|
|
11
|
+
gluegun_1.print.success('Moddable SDK already up to date!');
|
|
12
|
+
process.exit(0);
|
|
13
|
+
}
|
|
14
|
+
const spinner = gluegun_1.print.spin();
|
|
15
|
+
spinner.start('Updating Moddable SDK!');
|
|
16
|
+
spinner.info('Stashing any unsaved changes before committing');
|
|
17
|
+
await gluegun_1.system.exec('git stash', { cwd: process.env.MODDABLE });
|
|
18
|
+
await gluegun_1.system.exec('git pull origin public', { cwd: process.env.MODDABLE });
|
|
19
|
+
await gluegun_1.system.exec('rm -rf build/{tmp,bin}', { cwd: process.env.MODDABLE });
|
|
20
|
+
spinner.info('Rebuilding platform tools');
|
|
21
|
+
await gluegun_1.system.exec('make', {
|
|
22
|
+
cwd: gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'build', 'makefiles', 'mac'),
|
|
23
|
+
});
|
|
24
|
+
spinner.succeed('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
|
|
25
|
+
}
|
|
26
|
+
exports.default = default_1;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvdXBkYXRlL21hYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFtRDtBQUVwQyxLQUFLO0lBQ2xCLGVBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUV0QyxNQUFNLFVBQVUsR0FBVyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1FBQ25FLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLEdBQVcsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FDekMsd0NBQXdDLEVBQ3hDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQzlCLENBQUE7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3ZELGVBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUV2QyxPQUFPLENBQUMsSUFBSSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDOUQsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRTFFLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRTFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkJBQTJCLENBQUMsQ0FBQTtJQUN6QyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtRQUN4QixHQUFHLEVBQUUsb0JBQVUsQ0FBQyxPQUFPLENBQ3JCLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUM1QixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssQ0FDTjtLQUNGLENBQUMsQ0FBQTtJQUVGLE9BQU8sQ0FBQyxPQUFPLENBQ2IsMEhBQTBILENBQzNILENBQUE7QUFDSCxDQUFDO0FBdENELDRCQXNDQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('Wasm update is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3VwZGF0ZS93YXNtLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQStCO0FBRWhCLEtBQUs7SUFDbEIsZUFBSyxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFBO0FBQ3pELENBQUM7QUFGRCw0QkFFQyJ9
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const gluegun_1 = require("gluegun");
|
|
4
|
+
async function default_1() {
|
|
5
|
+
gluegun_1.print.warning('Windows update is not currently supported');
|
|
6
|
+
}
|
|
7
|
+
exports.default = default_1;
|
|
8
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3VwZGF0ZS93aW5kb3dzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEscUNBQStCO0FBRWhCLEtBQUs7SUFDbEIsZUFBSyxDQUFDLE9BQU8sQ0FBQywyQ0FBMkMsQ0FBQyxDQUFBO0FBQzVELENBQUM7QUFGRCw0QkFFQyJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (filePath: string, newLine: string): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export default function (): Promise<void>;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { GluegunToolbox } from 'gluegun';
|
|
2
|
+
export declare type Device = 'darwin' | 'linux' | 'windows_nt' | 'esp' | 'esp8266' | 'esp32' | 'wasm';
|
|
3
|
+
export interface XSDevToolbox extends GluegunToolbox {
|
|
4
|
+
setup: Record<Device, () => Promise<void>>;
|
|
5
|
+
update: Record<Device, () => Promise<void>>;
|
|
6
|
+
}
|
package/build/types.js
ADDED
package/docs/commands.md
ADDED
package/docs/plugins.md
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Plugin guide for xs-dev
|
|
2
|
+
|
|
3
|
+
Plugins allow you to add features to xs-dev, such as commands and
|
|
4
|
+
extensions to the `toolbox` object that provides the majority of the functionality
|
|
5
|
+
used by xs-dev.
|
|
6
|
+
|
|
7
|
+
Creating a xs-dev plugin is easy. Just create a repo with two folders:
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
commands/
|
|
11
|
+
extensions/
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
A command is a file that looks something like this:
|
|
15
|
+
|
|
16
|
+
```js
|
|
17
|
+
// commands/foo.js
|
|
18
|
+
|
|
19
|
+
module.exports = {
|
|
20
|
+
run: (toolbox) => {
|
|
21
|
+
const { print, filesystem } = toolbox
|
|
22
|
+
|
|
23
|
+
const desktopDirectories = filesystem.subdirectories(`~/Desktop`)
|
|
24
|
+
print.info(desktopDirectories)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
An extension lets you add additional features to the `toolbox`.
|
|
30
|
+
|
|
31
|
+
```js
|
|
32
|
+
// extensions/bar-extension.js
|
|
33
|
+
|
|
34
|
+
module.exports = (toolbox) => {
|
|
35
|
+
const { print } = toolbox
|
|
36
|
+
|
|
37
|
+
toolbox.bar = () => { print.info('Bar!') }
|
|
38
|
+
}
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
This is then accessible in your plugin's commands as `toolbox.bar`.
|
|
42
|
+
|
|
43
|
+
# Loading a plugin
|
|
44
|
+
|
|
45
|
+
To load a particular plugin (which has to start with `xs-dev-*`),
|
|
46
|
+
install it to your project using `npm install --save-dev xs-dev-PLUGINNAME`,
|
|
47
|
+
and xs-dev will pick it up automatically.
|