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.
Files changed (61) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +213 -0
  3. package/bin/xs-dev +21 -0
  4. package/build/cli.js +22 -0
  5. package/build/commands/include.js +42 -0
  6. package/build/commands/init.js +41 -0
  7. package/build/commands/remove.js +26 -0
  8. package/build/commands/run.js +76 -0
  9. package/build/commands/setup.js +14 -0
  10. package/build/commands/update.js +14 -0
  11. package/build/commands/xs-dev.js +13 -0
  12. package/build/extensions/setup-extension.js +23 -0
  13. package/build/extensions/update-extension.js +23 -0
  14. package/build/templates/main.js.ejs +4 -0
  15. package/build/templates/manifest.json.ejs +8 -0
  16. package/build/toolbox/patching/upsert.js +13 -0
  17. package/build/toolbox/prompt/choices.js +17 -0
  18. package/build/toolbox/setup/constants.js +19 -0
  19. package/build/toolbox/setup/esp32.js +74 -0
  20. package/build/toolbox/setup/esp8266.js +86 -0
  21. package/build/toolbox/setup/linux.js +8 -0
  22. package/build/toolbox/setup/mac.js +77 -0
  23. package/build/toolbox/setup/wasm.js +65 -0
  24. package/build/toolbox/setup/windows.js +8 -0
  25. package/build/toolbox/update/esp32.js +8 -0
  26. package/build/toolbox/update/esp8266.js +8 -0
  27. package/build/toolbox/update/linux.js +8 -0
  28. package/build/toolbox/update/mac.js +27 -0
  29. package/build/toolbox/update/wasm.js +8 -0
  30. package/build/toolbox/update/windows.js +8 -0
  31. package/build/types/cli.d.ts +1 -0
  32. package/build/types/commands/include.d.ts +3 -0
  33. package/build/types/commands/init.d.ts +3 -0
  34. package/build/types/commands/remove.d.ts +3 -0
  35. package/build/types/commands/run.d.ts +4 -0
  36. package/build/types/commands/setup.d.ts +4 -0
  37. package/build/types/commands/update.d.ts +4 -0
  38. package/build/types/commands/xs-dev.d.ts +3 -0
  39. package/build/types/extensions/setup-extension.d.ts +3 -0
  40. package/build/types/extensions/update-extension.d.ts +3 -0
  41. package/build/types/toolbox/patching/upsert.d.ts +1 -0
  42. package/build/types/toolbox/prompt/choices.d.ts +7 -0
  43. package/build/types/toolbox/setup/constants.d.ts +5 -0
  44. package/build/types/toolbox/setup/esp32.d.ts +1 -0
  45. package/build/types/toolbox/setup/esp8266.d.ts +1 -0
  46. package/build/types/toolbox/setup/linux.d.ts +1 -0
  47. package/build/types/toolbox/setup/mac.d.ts +1 -0
  48. package/build/types/toolbox/setup/wasm.d.ts +1 -0
  49. package/build/types/toolbox/setup/windows.d.ts +1 -0
  50. package/build/types/toolbox/update/esp32.d.ts +1 -0
  51. package/build/types/toolbox/update/esp8266.d.ts +1 -0
  52. package/build/types/toolbox/update/linux.d.ts +1 -0
  53. package/build/types/toolbox/update/mac.d.ts +1 -0
  54. package/build/types/toolbox/update/wasm.d.ts +1 -0
  55. package/build/types/toolbox/update/windows.d.ts +1 -0
  56. package/build/types/types.d.ts +6 -0
  57. package/build/types.js +3 -0
  58. package/docs/commands.md +3 -0
  59. package/docs/plugins.md +47 -0
  60. package/package.json +69 -0
  61. 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,3 @@
1
+ import type { GluegunCommand } from 'gluegun';
2
+ declare const command: GluegunCommand;
3
+ export default command;
@@ -0,0 +1,3 @@
1
+ import type { GluegunCommand } from 'gluegun';
2
+ declare const command: GluegunCommand;
3
+ export default command;
@@ -0,0 +1,3 @@
1
+ import type { GluegunCommand } from 'gluegun';
2
+ declare const command: GluegunCommand;
3
+ export default command;
@@ -0,0 +1,4 @@
1
+ import type { GluegunCommand } from 'gluegun';
2
+ import type { XSDevToolbox } from '../types';
3
+ declare const command: GluegunCommand<XSDevToolbox>;
4
+ export default command;
@@ -0,0 +1,4 @@
1
+ import type { GluegunCommand } from 'gluegun';
2
+ import type { XSDevToolbox } from '../types';
3
+ declare const command: GluegunCommand<XSDevToolbox>;
4
+ export default command;
@@ -0,0 +1,4 @@
1
+ import type { GluegunCommand } from 'gluegun';
2
+ import type { XSDevToolbox } from '../types';
3
+ declare const command: GluegunCommand<XSDevToolbox>;
4
+ export default command;
@@ -0,0 +1,3 @@
1
+ import { GluegunCommand } from 'gluegun';
2
+ declare const command: GluegunCommand;
3
+ export default command;
@@ -0,0 +1,3 @@
1
+ import type { XSDevToolbox } from '../types';
2
+ declare const _default: (toolbox: XSDevToolbox) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1,3 @@
1
+ import type { XSDevToolbox } from '../types';
2
+ declare const _default: (toolbox: XSDevToolbox) => Promise<void>;
3
+ export default _default;
@@ -0,0 +1 @@
1
+ export default function (filePath: string, newLine: string): Promise<void>;
@@ -0,0 +1,7 @@
1
+ interface InspectTreeResult {
2
+ name: string;
3
+ type: 'dir' | 'file' | 'symlink';
4
+ children: InspectTreeResult[];
5
+ }
6
+ export declare function collectChoicesFromTree(fd: InspectTreeResult, results?: string[], root?: string): string[];
7
+ export {};
@@ -0,0 +1,5 @@
1
+ export declare const HOME_DIR: string;
2
+ export declare const INSTALL_DIR: string;
3
+ export declare const INSTALL_PATH: string;
4
+ export declare const PROFILE: string;
5
+ export declare const PROFILE_PATH: string;
@@ -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
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -0,0 +1,3 @@
1
+ # Command Reference for xs-dev
2
+
3
+ TODO: Add your command reference here
@@ -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.