xs-dev 0.36.5 → 0.37.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/README.md CHANGED
@@ -10,7 +10,7 @@ The Moddable SDK and associated dev board tooling is incredibly empowering for e
10
10
 
11
11
  ## Requirements
12
12
 
13
- [Node.js >= v16](https://nodejs.org/en/)
13
+ [Node.js](https://nodejs.org/en/), at least the [active LTS version](https://nodejs.org/en/about/previous-releases#nodejs-releases).
14
14
 
15
15
  _If you've never installed Node.js before, check out the [getting started guide for xs-dev](https://hipsterbrown.github.io/xs-dev/guide/00-prepare#nodejs-package-manager-optional)._
16
16
 
@@ -146,6 +146,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
146
146
  <td align="center"><a href="https://github.com/mkellner"><img src="https://avatars.githubusercontent.com/u/6822704?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Michael Kellner</b></sub></a><br /><a href="https://github.com/HipsterBrown/xs-dev/commits?author=mkellner" title="Code">💻</a></td>
147
147
  <td align="center"><a href="http://brainofdane.com/"><img src="https://avatars.githubusercontent.com/u/2007067?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Dane Henson</b></sub></a><br /><a href="https://github.com/HipsterBrown/xs-dev/commits?author=dahenson" title="Code">💻</a></td>
148
148
  <td align="center"><a href="https://github.com/kitazaki"><img src="https://avatars.githubusercontent.com/u/23477407?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Ayachika Kitazaki</b></sub></a><br /><a href="https://github.com/HipsterBrown/xs-dev/commits?author=kitazaki" title="Code">💻</a></td>
149
+ <td align="center"><a href="https://andrew.nonetoohappy.buzz/"><img src="https://avatars.githubusercontent.com/u/18542095?v=4?s=100" width="100px;" alt=""/><br /><sub><b>Andrew Chou</b></sub></a><br /><a href="https://github.com/HipsterBrown/xs-dev/commits?author=achou11" title="Code">💻</a></td>
149
150
  </tr>
150
151
  </table>
151
152
 
@@ -154,4 +155,4 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d
154
155
 
155
156
  <!-- ALL-CONTRIBUTORS-LIST:END -->
156
157
 
157
- This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
158
+ This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xs-dev",
3
- "version": "0.36.5",
3
+ "version": "0.37.1",
4
4
  "description": "CLI for automating the setup and usage of Moddable XS tools",
5
5
  "types": "build/types/types.d.ts",
6
6
  "engines": {
@@ -9,11 +9,11 @@ exports.DEVICE_ALIAS = Object.freeze({
9
9
  windows_nt: 'windows',
10
10
  windows: 'windows',
11
11
  win: 'windows',
12
- linux: 'linux',
13
- lin: 'linux',
12
+ linux: 'lin',
13
+ lin: 'lin',
14
14
  esp32: 'esp32',
15
15
  wasm: 'wasm',
16
16
  pico: 'pico',
17
17
  nrf52: 'nrf52',
18
18
  });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3Byb21wdC9kZXZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVhLFFBQUEsWUFBWSxHQUFtQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hFLEdBQUcsRUFBRSxTQUFTO0lBQ2QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsTUFBTSxFQUFFLEtBQUs7SUFDYixHQUFHLEVBQUUsS0FBSztJQUNWLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEdBQUcsRUFBRSxTQUFTO0lBQ2QsS0FBSyxFQUFFLE9BQU87SUFDZCxHQUFHLEVBQUUsT0FBTztJQUNaLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQyxDQUFBIn0=
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3Byb21wdC9kZXZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVhLFFBQUEsWUFBWSxHQUFtQyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQ3hFLEdBQUcsRUFBRSxTQUFTO0lBQ2QsT0FBTyxFQUFFLFNBQVM7SUFDbEIsTUFBTSxFQUFFLEtBQUs7SUFDYixHQUFHLEVBQUUsS0FBSztJQUNWLFVBQVUsRUFBRSxTQUFTO0lBQ3JCLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLEdBQUcsRUFBRSxTQUFTO0lBQ2QsS0FBSyxFQUFFLEtBQUs7SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07SUFDWixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxPQUFPO0NBQ2YsQ0FBQyxDQUFBIn0=
@@ -1,10 +1,33 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.installDeps = installDeps;
4
- const exec_1 = require("../../system/exec");
5
- // apt-get install git wget flex bison gperf python-is-python3 python3-pip python3-serial python-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util
4
+ const packages_1 = require("../../system/packages");
6
5
  async function installDeps(spinner) {
7
- await (0, exec_1.execWithSudo)('apt-get install --yes git wget flex bison gperf python-is-python3 python3-pip python3-serial python3-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util', { stdout: process.stdout });
6
+ const dependencies = [
7
+ { name: 'bison', packageName: 'bison', type: 'binary' },
8
+ { name: 'ccache', packageName: 'ccache', type: 'binary' },
9
+ { name: 'cmake', packageName: 'cmake', type: 'binary' },
10
+ { name: 'dfu-util', packageName: 'dfu-util', type: 'binary' },
11
+ { name: 'flex', packageName: 'flex', type: 'binary' },
12
+ { name: 'git', packageName: 'git', type: 'binary' },
13
+ { name: 'gperf', packageName: 'gperf', type: 'binary' },
14
+ { name: 'libffi', packageName: 'libffi-dev', type: 'library' },
15
+ { name: 'libssl', packageName: 'libssl-dev', type: 'library' },
16
+ { name: 'ninja', packageName: 'ninja-build', type: 'binary' },
17
+ { name: 'pip', packageName: 'python-pip', type: 'binary' },
18
+ {
19
+ name: 'pyserial-miniterm',
20
+ packageName: 'python3-serial',
21
+ type: 'binary',
22
+ },
23
+ { name: 'python', packageName: 'python-is-python3', type: 'binary' },
24
+ { name: 'setuptools', packageName: 'python3-setuptools', type: 'pylib' },
25
+ { name: 'wget', packageName: 'wget', type: 'binary' },
26
+ ];
27
+ const missingDependencies = await (0, packages_1.findMissingDependencies)(dependencies);
28
+ if (missingDependencies.length !== 0) {
29
+ await (0, packages_1.installPackages)(missingDependencies);
30
+ }
8
31
  spinner.succeed();
9
32
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi9saW51eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLGtDQVFDO0FBWEQsNENBQWdEO0FBRWhELG1LQUFtSztBQUM1SixLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUF5QztJQUV6QyxNQUFNLElBQUEsbUJBQVksRUFDaEIseUtBQXlLLEVBQ3pLLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FDM0IsQ0FBQTtJQUNELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUNuQixDQUFDIn0=
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi9saW51eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUlBLGtDQThCQztBQWhDRCxvREFBZ0Y7QUFFekUsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBeUM7SUFFekMsTUFBTSxZQUFZLEdBQWlCO1FBQ2pDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDdkQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUN6RCxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3ZELEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsVUFBVSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDN0QsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUNyRCxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ25ELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDdkQsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRTtRQUM5RCxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1FBQzlELEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsYUFBYSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDN0QsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtRQUMxRDtZQUNFLElBQUksRUFBRSxtQkFBbUI7WUFDekIsV0FBVyxFQUFFLGdCQUFnQjtZQUM3QixJQUFJLEVBQUUsUUFBUTtTQUNmO1FBQ0QsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLFdBQVcsRUFBRSxtQkFBbUIsRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO1FBQ3BFLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRTtRQUN4RSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFO0tBQ3RELENBQUE7SUFFRCxNQUFNLG1CQUFtQixHQUFHLE1BQU0sSUFBQSxrQ0FBdUIsRUFBQyxZQUFZLENBQUMsQ0FBQTtJQUN2RSxJQUFJLG1CQUFtQixDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUEsMEJBQWUsRUFBQyxtQkFBbUIsQ0FBQyxDQUFBO0lBQzVDLENBQUM7SUFDRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDbkIsQ0FBQyJ9
@@ -19,7 +19,7 @@ async function default_1() {
19
19
  const isWindows = OS === 'windows_nt';
20
20
  const ESP_IDF_REPO = 'https://github.com/espressif/esp-idf.git';
21
21
  const ESP_BRANCH_V4 = 'v4.4.3';
22
- const ESP_BRANCH_V5 = 'v5.3.1';
22
+ const ESP_BRANCH_V5 = 'v5.4';
23
23
  const ESP32_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'esp32');
24
24
  const IDF_PATH = gluegun_1.filesystem.resolve(ESP32_DIR, 'esp-idf');
25
25
  await (0, exec_1.sourceEnvironment)();
@@ -98,4 +98,4 @@ async function default_1() {
98
98
  If there is trouble finding the correct port, pass the "--port" flag to the above command with the ${isWindows ? 'COM Port' : 'path to the /dev.cu.*'} that matches your device.
99
99
  `);
100
100
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVdBLDRCQXVHQztBQWxIRCxxQ0FBMkQ7QUFDM0QsMkJBQXlDO0FBQ3pDLDJDQUE0RDtBQUM1RCx5Q0FBK0Q7QUFDL0QsZ0VBQXVDO0FBQ3ZDLHFDQUEyRDtBQUMzRCx5Q0FBK0Q7QUFDL0QsNkNBQStEO0FBQy9ELHVDQUErRDtBQUMvRCx5Q0FBa0Q7QUFFbkMsS0FBSztJQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFBLFNBQVksR0FBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLEVBQUUsS0FBSyxZQUFZLENBQUE7SUFDckMsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUE7SUFDL0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFBO0lBQzlCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQTtJQUM5QixNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUV6RCxNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6QixNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBRXZDLDRCQUE0QjtJQUM1QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxTQUFTLEVBQUUs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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVdBLDRCQXVHQztBQWxIRCxxQ0FBMkQ7QUFDM0QsMkJBQXlDO0FBQ3pDLDJDQUE0RDtBQUM1RCx5Q0FBK0Q7QUFDL0QsZ0VBQXVDO0FBQ3ZDLHFDQUEyRDtBQUMzRCx5Q0FBK0Q7QUFDL0QsNkNBQStEO0FBQy9ELHVDQUErRDtBQUMvRCx5Q0FBa0Q7QUFFbkMsS0FBSztJQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFBLFNBQVksR0FBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3ZDLE1BQU0sU0FBUyxHQUFHLEVBQUUsS0FBSyxZQUFZLENBQUE7SUFDckMsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUE7SUFDL0QsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFBO0lBQzlCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQTtJQUM1QixNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUV6RCxNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6QixNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBRXZDLDRCQUE0QjtJQUM1QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxTQUFTLEVBQUUs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
@@ -1,10 +1,22 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.installDeps = installDeps;
4
- const exec_1 = require("../../system/exec");
4
+ const packages_1 = require("../../system/packages");
5
5
  async function installDeps(spinner) {
6
6
  spinner.start('Installing python deps with apt-get');
7
- await (0, exec_1.execWithSudo)('apt-get install --yes python-is-python3 python3-pip python3-serial', { stdout: process.stdout });
7
+ const dependencies = [
8
+ { name: 'pip', packageName: 'python-pip', type: 'binary' },
9
+ {
10
+ name: 'pyserial-miniterm',
11
+ packageName: 'python3-serial',
12
+ type: 'binary',
13
+ },
14
+ { name: 'python', packageName: 'python-is-python3', type: 'binary' },
15
+ ];
16
+ const missingDependencies = await (0, packages_1.findMissingDependencies)(dependencies);
17
+ if (missingDependencies.length !== 0) {
18
+ await (0, packages_1.installPackages)(missingDependencies);
19
+ }
8
20
  spinner.succeed();
9
21
  }
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3A4MjY2L2xpbnV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBR0Esa0NBU0M7QUFYRCw0Q0FBZ0Q7QUFFekMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBeUM7SUFFekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sSUFBQSxtQkFBWSxFQUNoQixvRUFBb0UsRUFDcEUsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUMzQixDQUFBO0lBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQ25CLENBQUMifQ==
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3A4MjY2L2xpbnV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsa0NBbUJDO0FBckJELG9EQUFnRjtBQUV6RSxLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUF5QztJQUV6QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7SUFDcEQsTUFBTSxZQUFZLEdBQWlCO1FBQ2pDLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxXQUFXLEVBQUUsWUFBWSxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUU7UUFDMUQ7WUFDRSxJQUFJLEVBQUUsbUJBQW1CO1lBQ3pCLFdBQVcsRUFBRSxnQkFBZ0I7WUFDN0IsSUFBSSxFQUFFLFFBQVE7U0FDZjtRQUNELEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxXQUFXLEVBQUUsbUJBQW1CLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRTtLQUNyRSxDQUFBO0lBRUQsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLElBQUEsa0NBQXVCLEVBQUMsWUFBWSxDQUFDLENBQUE7SUFDdkUsSUFBSSxtQkFBbUIsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDckMsTUFBTSxJQUFBLDBCQUFlLEVBQUMsbUJBQW1CLENBQUMsQ0FBQTtJQUM1QyxDQUFDO0lBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQ25CLENBQUMifQ==
@@ -0,0 +1,126 @@
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
+ exports.default = default_1;
7
+ const os_1 = __importDefault(require("os"));
8
+ const util_1 = require("util");
9
+ const fs_1 = require("fs");
10
+ const gluegun_1 = require("gluegun");
11
+ const constants_1 = require("./constants");
12
+ const upsert_1 = __importDefault(require("../patching/upsert"));
13
+ const exec_1 = require("../system/exec");
14
+ const packages_1 = require("../system/packages");
15
+ const moddable_1 = require("./moddable");
16
+ const chmodPromise = (0, util_1.promisify)(fs_1.chmod);
17
+ async function default_1({ sourceRepo, branch, release, interactive, }) {
18
+ gluegun_1.print.info('Setting up Linux tools!');
19
+ const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'release');
20
+ const DEBUG_BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'debug');
21
+ const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'lin');
22
+ let buildTools = false;
23
+ const spinner = gluegun_1.print.spin();
24
+ spinner.start('Beginning setup...');
25
+ gluegun_1.filesystem.dir(constants_1.INSTALL_DIR);
26
+ // 0. check for the required build tools and libraries
27
+ const dependencies = [
28
+ { name: 'bison', packageName: 'bison', type: 'binary' },
29
+ { name: 'flex', packageName: 'flex', type: 'binary' },
30
+ { name: 'gcc', packageName: 'gcc', type: 'binary' },
31
+ { name: 'git', packageName: 'git', type: 'binary' },
32
+ { name: 'gperf', packageName: 'gperf', type: 'binary' },
33
+ { name: 'make', packageName: 'make', type: 'binary' },
34
+ { name: 'wget', packageName: 'wget', type: 'binary' },
35
+ { name: 'ncurses', packageName: 'libncurses-dev', type: 'library' },
36
+ { name: 'gtk+-3.0', packageName: 'libgtk-3-dev', type: 'library' },
37
+ ];
38
+ spinner.start('Checking for missing dependencies...');
39
+ const missingDependencies = await (0, packages_1.findMissingDependencies)(dependencies);
40
+ // 1. Install or update the packages required to compile:
41
+ spinner.start('Attempting to install dependencies...');
42
+ if (missingDependencies.length !== 0) {
43
+ await (0, packages_1.installPackages)(missingDependencies);
44
+ }
45
+ spinner.succeed();
46
+ // 3. Download the Moddable repository, or use the git command line tool as follows:
47
+ if (gluegun_1.filesystem.exists(constants_1.INSTALL_PATH) !== false) {
48
+ spinner.info('Moddable repo already installed');
49
+ }
50
+ else {
51
+ if (release !== undefined && (branch === undefined || branch === null)) {
52
+ spinner.start('Getting latest Moddable-OpenSource/moddable release');
53
+ const remoteRelease = await (0, moddable_1.fetchRelease)(release);
54
+ if (remoteRelease.assets.length === 0) {
55
+ spinner.stop();
56
+ gluegun_1.print.warning(`Moddable release ${release} does not have any pre-built assets.`);
57
+ buildTools =
58
+ !interactive ||
59
+ (await gluegun_1.prompt.confirm('Would you like to continue setting up and build the SDK locally?', true));
60
+ if (!buildTools) {
61
+ gluegun_1.print.info('Please select another release version with pre-built assets: https://github.com/Moddable-OpenSource/moddable/releases');
62
+ process.exit(0);
63
+ }
64
+ spinner.start();
65
+ }
66
+ await gluegun_1.system.spawn(`git clone ${sourceRepo} ${constants_1.INSTALL_PATH} --depth 1 --branch ${remoteRelease.tag_name} --single-branch`);
67
+ if (!buildTools) {
68
+ gluegun_1.filesystem.dir(BIN_PATH);
69
+ gluegun_1.filesystem.dir(DEBUG_BIN_PATH);
70
+ const isArm = os_1.default.arch() === 'arm64';
71
+ const assetName = isArm
72
+ ? 'moddable-tools-lin64arm.zip'
73
+ : 'moddable-tools-lin64.zip';
74
+ spinner.info('Downloading release tools');
75
+ await (0, moddable_1.downloadReleaseTools)({
76
+ writePath: BIN_PATH,
77
+ assetName,
78
+ release: remoteRelease,
79
+ });
80
+ const tools = gluegun_1.filesystem.list(BIN_PATH) ?? [];
81
+ await Promise.all(tools.map(async (tool) => {
82
+ await chmodPromise(gluegun_1.filesystem.resolve(BIN_PATH, tool), 0o751);
83
+ await gluegun_1.filesystem.copyAsync(gluegun_1.filesystem.resolve(BIN_PATH, tool), gluegun_1.filesystem.resolve(DEBUG_BIN_PATH, tool));
84
+ }));
85
+ }
86
+ }
87
+ else {
88
+ spinner.start(`Cloning ${sourceRepo} repo`);
89
+ await gluegun_1.system.spawn(`git clone ${sourceRepo} ${constants_1.INSTALL_PATH} --depth 1 --branch ${branch} --single-branch`);
90
+ buildTools = true;
91
+ }
92
+ spinner.succeed();
93
+ }
94
+ // 4. Setup the MODDABLE environment variable
95
+ process.env.MODDABLE = constants_1.INSTALL_PATH;
96
+ process.env.PATH = `${String(process.env.PATH)}:${BIN_PATH}`;
97
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `# Generated by xs-dev CLI`);
98
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export MODDABLE=${process.env.MODDABLE}`);
99
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PATH="${BIN_PATH}:$PATH"`);
100
+ // 5. Build the Moddable command line tools, simulator, and debugger from the command line:
101
+ if (buildTools) {
102
+ spinner.start('Building platform tooling');
103
+ await gluegun_1.system.exec('make', { cwd: BUILD_DIR, stdout: process.stdout });
104
+ spinner.succeed();
105
+ }
106
+ // 6. Install the desktop simulator and xsbug debugger applications
107
+ spinner.start('Installing simulator');
108
+ if (release !== undefined && (branch === undefined || branch === null)) {
109
+ gluegun_1.filesystem.dir(gluegun_1.filesystem.resolve(BUILD_DIR, '..', '..', 'tmp', 'lin', 'debug', 'simulator'));
110
+ await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'xsbug', 'manifest.json')}`, { process });
111
+ await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'mcsim', 'manifest.json')}`, { process });
112
+ }
113
+ await (0, exec_1.execWithSudo)('make install', {
114
+ cwd: BUILD_DIR,
115
+ stdout: process.stdout,
116
+ });
117
+ spinner.succeed();
118
+ if (gluegun_1.system.which('npm') !== null) {
119
+ spinner.start('Installing xsbug-log dependencies');
120
+ await gluegun_1.system.exec('npm install', { cwd: constants_1.XSBUG_LOG_PATH });
121
+ spinner.succeed();
122
+ }
123
+ // 7. Profit?
124
+ gluegun_1.print.success('Moddable SDK successfully set up! Start a new terminal session and run the "helloworld example": xs-dev run --example helloworld');
125
+ }
126
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvbGluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBbUJBLDRCQThMQztBQWpORCw0Q0FBbUI7QUFDbkIsK0JBQWdDO0FBQ2hDLDJCQUEwQjtBQUMxQixxQ0FBMkQ7QUFDM0QsMkNBS29CO0FBQ3BCLGdFQUF1QztBQUN2Qyx5Q0FBNkM7QUFDN0MsaURBQTZFO0FBRzdFLHlDQUErRDtBQUUvRCxNQUFNLFlBQVksR0FBRyxJQUFBLGdCQUFTLEVBQUMsVUFBSyxDQUFDLENBQUE7QUFFdEIsS0FBSyxvQkFBVyxFQUM3QixVQUFVLEVBQ1YsTUFBTSxFQUNOLE9BQU8sRUFDUCxXQUFXLEdBQ087SUFDbEIsZUFBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBRXJDLE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNqQyx3QkFBWSxFQUNaLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsQ0FDVixDQUFBO0lBQ0QsTUFBTSxjQUFjLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQ3ZDLHdCQUFZLEVBQ1osT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxDQUNSLENBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FDbEMsd0JBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFBO0lBRUQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFFbkMsb0JBQVUsQ0FBQyxHQUFHLENBQUMsdUJBQVcsQ0FBQyxDQUFBO0lBRTNCLHNEQUFzRDtJQUN0RCxNQUFNLFlBQVksR0FBaUI7UUFDakMs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
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.execWithSudo = execWithSudo;
4
+ exports.pkexec = pkexec;
4
5
  exports.sourceEnvironment = sourceEnvironment;
5
6
  exports.sourceIdf = sourceIdf;
6
7
  exports.sourceIdfPythonEnv = sourceIdfPythonEnv;
@@ -34,6 +35,12 @@ async function execWithSudo(command, options = {}) {
34
35
  }
35
36
  await gluegun_1.system.exec(`sudo --askpass --preserve-env ${command}`, options);
36
37
  }
38
+ /**
39
+ * Use Policykit pkexec to run the command as an admin user
40
+ */
41
+ async function pkexec(command, options = {}) {
42
+ await gluegun_1.system.exec(`pkexec ${command}`, options);
43
+ }
37
44
  /**
38
45
  * Utility for updating in-memory process.env after running a command
39
46
  */
@@ -76,4 +83,4 @@ async function sourceIdf() {
76
83
  async function sourceIdfPythonEnv() {
77
84
  await updateProcessEnv(`source ${process.env.IDF_PYTHON_ENV_PATH ?? ''}/bin/activate`);
78
85
  }
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3N5c3RlbS9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQW1CQztBQWlDRCw4Q0FFQztBQUtELDhCQUVDO0FBS0QsZ0RBSUM7QUF4RkQscUNBQThDO0FBQzlDLHFDQUF1QztBQUN2QyxrREFBc0Q7QUFHdEQsU0FBUyxhQUFhO0lBQ3BCLE1BQU0sWUFBWSxHQUFHLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEsQ0FBQyxDQUFBO0lBQ2hELElBQUksWUFBWSxLQUFLLElBQUksSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDeEQsZUFBSyxDQUFDLE9BQU8sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFBO1FBQzVELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQTtBQUN6QyxDQUFDO0FBRUQ7OztJQUdJO0FBQ0csS0FBSyxVQUFVLFlBQVksQ0FDaEMsT0FBZSxFQUNmLFVBQW1DLEVBQUU7SUFFckMsSUFBSSxDQUFDO1FBQ0gsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FDZix5Q0FBeUMsT0FBTyxFQUFFLEVBQ2xELE9BQU8sQ0FDUixDQUFBO1FBQ0QsT0FBTTtJQUNSLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsSUFBSSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ25ELGFBQWEsRUFBRSxDQUFBO1FBQ2pCLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxLQUFjLENBQUE7UUFDdEIsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN4RSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsT0FBZTtJQUM3QyxNQUFNLEVBQUUsR0FBRyxJQUFBLGNBQVksR0FBRSxDQUFDLFdBQVcsRUFBWSxDQUFBO0lBRWpELElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLFNBQVMsRUFBRTtnQkFDckQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSzthQUN6QixDQUFDLENBQUE7WUFDRixJQUNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO2dCQUNqQyxNQUFNLENBQUMsTUFBTSxZQUFZLE1BQU0sRUFDL0IsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBYTtxQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDWCxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDN0MsQ0FBQTtnQkFDRCxJQUFJLE1BQU0sSUFBSSxRQUFRO29CQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFBO1lBQ2hELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLE1BQU0sZ0JBQWdCLENBQUMsVUFBVSw2QkFBaUIsRUFBRSxDQUFDLENBQUE7QUFDdkQsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFNBQVM7SUFDN0IsTUFBTSxnQkFBZ0IsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO0FBQ25FLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsTUFBTSxnQkFBZ0IsQ0FDcEIsVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsZUFBZSxDQUMvRCxDQUFBO0FBQ0gsQ0FBQyJ9
86
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3N5c3RlbS9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9DQW1CQztBQUtELHdCQUtDO0FBaUNELDhDQUVDO0FBS0QsOEJBRUM7QUFLRCxnREFJQztBQWxHRCxxQ0FBOEM7QUFDOUMscUNBQXVDO0FBQ3ZDLGtEQUFzRDtBQUd0RCxTQUFTLGFBQWE7SUFDcEIsTUFBTSxZQUFZLEdBQUcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDaEQsSUFBSSxZQUFZLEtBQUssSUFBSSxJQUFJLFlBQVksS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUN4RCxlQUFLLENBQUMsT0FBTyxDQUFDLDZDQUE2QyxDQUFDLENBQUE7UUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0FBQ3pDLENBQUM7QUFFRDs7O0lBR0k7QUFDRyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxPQUFlLEVBQ2YsVUFBbUMsRUFBRTtJQUVyQyxJQUFJLENBQUM7UUFDSCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUNmLHlDQUF5QyxPQUFPLEVBQUUsRUFDbEQsT0FBTyxDQUNSLENBQUE7UUFDRCxPQUFNO0lBQ1IsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDbkQsYUFBYSxFQUFFLENBQUE7UUFDakIsQ0FBQzthQUFNLENBQUM7WUFDTixNQUFNLEtBQWMsQ0FBQTtRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLE9BQU8sRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0FBQ3hFLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxNQUFNLENBQzFCLE9BQWUsRUFDZixVQUFtQyxFQUFFO0lBRXJDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUNqRCxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxLQUFLLFVBQVUsZ0JBQWdCLENBQUMsT0FBZTtJQUM3QyxNQUFNLEVBQUUsR0FBRyxJQUFBLGNBQVksR0FBRSxDQUFDLFdBQVcsRUFBWSxDQUFBO0lBRWpELElBQUksRUFBRSxLQUFLLFlBQVksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQztZQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxPQUFPLFNBQVMsRUFBRTtnQkFDckQsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSzthQUN6QixDQUFDLENBQUE7WUFDRixJQUNFLE9BQU8sTUFBTSxDQUFDLE1BQU0sS0FBSyxRQUFRO2dCQUNqQyxNQUFNLENBQUMsTUFBTSxZQUFZLE1BQU0sRUFDL0IsQ0FBQztnQkFDRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsV0FBVyxDQUNoQyxNQUFNLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBYTtxQkFDakMsS0FBSyxDQUFDLElBQUksQ0FBQztxQkFDWCxHQUFHLENBQUMsQ0FBQyxLQUFhLEVBQUUsRUFBRSxDQUFDLEtBQUssRUFBRSxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FDN0MsQ0FBQTtnQkFDRCxJQUFJLE1BQU0sSUFBSSxRQUFRO29CQUFFLE9BQU8sQ0FBQyxHQUFHLEdBQUcsUUFBUSxDQUFBO1lBQ2hELENBQUM7UUFDSCxDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLEVBQUUsS0FBSyxDQUFDLENBQUE7UUFDdEQsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCO0lBQ3JDLE1BQU0sZ0JBQWdCLENBQUMsVUFBVSw2QkFBaUIsRUFBRSxDQUFDLENBQUE7QUFDdkQsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLFNBQVM7SUFDN0IsTUFBTSxnQkFBZ0IsQ0FBQyx5Q0FBeUMsQ0FBQyxDQUFBO0FBQ25FLENBQUM7QUFFRDs7R0FFRztBQUNJLEtBQUssVUFBVSxrQkFBa0I7SUFDdEMsTUFBTSxnQkFBZ0IsQ0FDcEIsVUFBVSxPQUFPLENBQUMsR0FBRyxDQUFDLG1CQUFtQixJQUFJLEVBQUUsZUFBZSxDQUMvRCxDQUFBO0FBQ0gsQ0FBQyJ9
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findMissingDependencies = findMissingDependencies;
4
+ exports.installPackages = installPackages;
5
+ const exec_1 = require("../system/exec");
6
+ const gluegun_1 = require("gluegun");
7
+ /**
8
+ * Check if the list of dependencies are installed on the system.
9
+ **/
10
+ async function findMissingDependencies(dependencies) {
11
+ const missingDependencies = [];
12
+ for (const dep of dependencies) {
13
+ if (dep.type === 'binary') {
14
+ if (gluegun_1.system.which(dep.name) === null) {
15
+ missingDependencies.push(dep);
16
+ }
17
+ }
18
+ if (dep.type === 'library') {
19
+ try {
20
+ await gluegun_1.system.run(`pkg-config --exists ${dep.name}`);
21
+ }
22
+ catch (error) {
23
+ missingDependencies.push(dep);
24
+ }
25
+ }
26
+ if (dep.type === 'pylib') {
27
+ try {
28
+ await gluegun_1.system.run(`pip3 show ${dep.name}`);
29
+ }
30
+ catch (error) {
31
+ missingDependencies.push(dep);
32
+ }
33
+ }
34
+ }
35
+ return missingDependencies;
36
+ }
37
+ /**
38
+ * Attempt to install packages on the linux platform.
39
+ **/
40
+ async function installPackages(packages) {
41
+ const packageManager = gluegun_1.system.which('apt');
42
+ if (packageManager !== null && packageManager !== undefined) {
43
+ await (0, exec_1.pkexec)(`${packageManager} install --yes ${packages.map((p) => p.packageName).join(' ')}`, { stdout: process.stdout });
44
+ }
45
+ else {
46
+ gluegun_1.print.warning('xs-dev attempted to install dependencies, but does not yet support your package manager');
47
+ gluegun_1.print.warning(`Please install these dependencies before running this command again: ${packages.map((p) => p.packageName).join(', ')}`);
48
+ process.exit(1);
49
+ }
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zeXN0ZW0vcGFja2FnZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFPQSwwREE0QkM7QUFLRCwwQ0FpQkM7QUF4REQseUNBQXVDO0FBQ3ZDLHFDQUF1QztBQUV2Qzs7SUFFSTtBQUNHLEtBQUssVUFBVSx1QkFBdUIsQ0FDM0MsWUFBMEI7SUFFMUIsTUFBTSxtQkFBbUIsR0FBaUIsRUFBRSxDQUFBO0lBRTVDLEtBQUssTUFBTSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7UUFDL0IsSUFBSSxHQUFHLENBQUMsSUFBSSxLQUFLLFFBQVEsRUFBRSxDQUFDO1lBQzFCLElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUNwQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUE7WUFDL0IsQ0FBQztRQUNILENBQUM7UUFDRCxJQUFJLEdBQUcsQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDM0IsSUFBSSxDQUFDO2dCQUNILE1BQU0sZ0JBQU0sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQ3JELENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMvQixDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLElBQUksS0FBSyxPQUFPLEVBQUUsQ0FBQztZQUN6QixJQUFJLENBQUM7Z0JBQ0gsTUFBTSxnQkFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBQzNDLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLG1CQUFtQixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtZQUMvQixDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLG1CQUFtQixDQUFBO0FBQzVCLENBQUM7QUFFRDs7SUFFSTtBQUNHLEtBQUssVUFBVSxlQUFlLENBQUMsUUFBc0I7SUFDMUQsTUFBTSxjQUFjLEdBQUcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFMUMsSUFBSSxjQUFjLEtBQUssSUFBSSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUUsQ0FBQztRQUM1RCxNQUFNLElBQUEsYUFBTSxFQUNWLEdBQUcsY0FBYyxrQkFBa0IsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUNqRixFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQzNCLENBQUE7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLGVBQUssQ0FBQyxPQUFPLENBQ1gseUZBQXlGLENBQzFGLENBQUE7UUFDRCxlQUFLLENBQUMsT0FBTyxDQUNYLHdFQUF3RSxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsV0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQ3hILENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7QUFDSCxDQUFDIn0=
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zeXN0ZW0vdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -15,7 +15,7 @@ const exec_1 = require("../system/exec");
15
15
  async function default_1() {
16
16
  const OS = (0, os_1.type)().toLowerCase();
17
17
  const ESP_BRANCH_V4 = 'v4.4.3';
18
- const ESP_BRANCH_V5 = 'v5.3.1';
18
+ const ESP_BRANCH_V5 = 'v5.4';
19
19
  const ESP32_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'esp32');
20
20
  const IDF_PATH = gluegun_1.filesystem.resolve(ESP32_DIR, 'esp-idf');
21
21
  await (0, exec_1.sourceEnvironment)();
@@ -98,4 +98,4 @@ async function default_1() {
98
98
  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.
99
99
  `);
100
100
  }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvZXNwMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw0QkE4SEM7QUF2SUQscUNBQXFFO0FBQ3JFLDJCQUF5QztBQUN6QyxrREFBbUU7QUFDbkUsZ0RBQXNFO0FBQ3RFLGdFQUF1QztBQUN2Qyw0Q0FBa0U7QUFDbEUsZ0RBQXNFO0FBQ3RFLHlDQUFrRDtBQUVuQyxLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFBO0lBQzlCLE1BQU0sYUFBYSxHQUFHLFFBQVEsQ0FBQTtJQUM5QixNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUV6RCxNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6QixNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBRXhDLDRCQUE0QjtJQUM1QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUNoRCxJQUNFLG9CQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUs7UUFDdEMsb0JBQVUs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
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvZXNwMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFTQSw0QkE4SEM7QUF2SUQscUNBQXFFO0FBQ3JFLDJCQUF5QztBQUN6QyxrREFBbUU7QUFDbkUsZ0RBQXNFO0FBQ3RFLGdFQUF1QztBQUN2Qyw0Q0FBa0U7QUFDbEUsZ0RBQXNFO0FBQ3RFLHlDQUFrRDtBQUVuQyxLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxhQUFhLEdBQUcsUUFBUSxDQUFBO0lBQzlCLE1BQU0sYUFBYSxHQUFHLE1BQU0sQ0FBQTtJQUM1QixNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUV6RCxNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6QixNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBRXhDLDRCQUE0QjtJQUM1QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBRUQsMkNBQTJDO0lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUNoRCxJQUNFLG9CQUFVLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxLQUFLLEtBQUs7UUFDdEMsb0JBQVUs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
@@ -0,0 +1,129 @@
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
+ exports.default = default_1;
7
+ const os_1 = __importDefault(require("os"));
8
+ const util_1 = require("util");
9
+ const fs_1 = require("fs");
10
+ const gluegun_1 = require("gluegun");
11
+ const constants_1 = require("../setup/constants");
12
+ const moddable_1 = require("../setup/moddable");
13
+ const exec_1 = require("../system/exec");
14
+ const chmodPromise = (0, util_1.promisify)(fs_1.chmod);
15
+ async function default_1({ branch, release, interactive, }) {
16
+ await (0, exec_1.sourceEnvironment)();
17
+ // 0. ensure Moddable exists
18
+ if (!(0, moddable_1.moddableExists)()) {
19
+ gluegun_1.print.error('Moddable tooling required. Run `xs-dev setup` before trying again.');
20
+ process.exit(1);
21
+ }
22
+ gluegun_1.print.info('Checking for SDK changes');
23
+ const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'lin');
24
+ let rebuildTools = false;
25
+ if (release !== undefined && (branch === undefined || branch === null)) {
26
+ // get tag for current repo
27
+ const currentTag = await gluegun_1.system.exec('git tag', {
28
+ cwd: process.env.MODDABLE,
29
+ });
30
+ // get latest release tag
31
+ const remoteRelease = await (0, moddable_1.fetchRelease)(release);
32
+ if (currentTag.trim() === remoteRelease.tag_name) {
33
+ gluegun_1.print.success('Moddable SDK already up to date!');
34
+ process.exit(0);
35
+ }
36
+ if (remoteRelease.assets.length === 0) {
37
+ gluegun_1.print.warning(`Moddable release ${release} does not have any pre-built assets.`);
38
+ rebuildTools =
39
+ !interactive ||
40
+ (await gluegun_1.prompt.confirm('Would you like to continue updating and build the SDK locally?', false));
41
+ if (!rebuildTools) {
42
+ gluegun_1.print.info('Please select another release version with pre-built assets: https://github.com/Moddable-OpenSource/moddable/releases');
43
+ process.exit(0);
44
+ }
45
+ }
46
+ const spinner = gluegun_1.print.spin();
47
+ spinner.start('Updating Moddable SDK!');
48
+ gluegun_1.filesystem.remove(process.env.MODDABLE);
49
+ await gluegun_1.system.spawn(`git clone ${constants_1.MODDABLE_REPO} ${constants_1.INSTALL_PATH} --depth 1 --branch ${remoteRelease.tag_name} --single-branch`);
50
+ if (!rebuildTools) {
51
+ const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'release');
52
+ const DEBUG_BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'debug');
53
+ gluegun_1.filesystem.dir(BIN_PATH);
54
+ gluegun_1.filesystem.dir(DEBUG_BIN_PATH);
55
+ const isArm = os_1.default.arch() === 'arm64';
56
+ const assetName = isArm
57
+ ? 'moddable-tools-lin64arm.zip'
58
+ : 'moddable-tools-lin64.zip';
59
+ spinner.info('Downloading release tools');
60
+ await (0, moddable_1.downloadReleaseTools)({
61
+ writePath: BIN_PATH,
62
+ assetName,
63
+ release: remoteRelease,
64
+ });
65
+ spinner.info('Updating tool permissions');
66
+ const tools = gluegun_1.filesystem.list(BIN_PATH) ?? [];
67
+ await Promise.all(tools.map(async (tool) => {
68
+ await chmodPromise(gluegun_1.filesystem.resolve(BIN_PATH, tool), 0o751);
69
+ await gluegun_1.filesystem.copyAsync(gluegun_1.filesystem.resolve(BIN_PATH, tool), gluegun_1.filesystem.resolve(DEBUG_BIN_PATH, tool));
70
+ }));
71
+ spinner.info('Reinstalling simulator');
72
+ gluegun_1.filesystem.dir(gluegun_1.filesystem.resolve(BUILD_DIR, '..', '..', 'tmp', 'lin', 'debug', 'simulator'));
73
+ await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'xsbug', 'manifest.json')}`, { process });
74
+ await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'mcsim', 'manifest.json')}`, { process });
75
+ await (0, exec_1.execWithSudo)('make install', {
76
+ cwd: BUILD_DIR,
77
+ stdout: process.stdout,
78
+ });
79
+ if (gluegun_1.system.which('npm') !== null) {
80
+ spinner.start('Installing xsbug-log dependencies');
81
+ await gluegun_1.system.exec('npm install', { cwd: constants_1.XSBUG_LOG_PATH });
82
+ spinner.succeed();
83
+ }
84
+ spinner.succeed('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
85
+ }
86
+ }
87
+ if (typeof branch === 'string') {
88
+ const currentRev = await gluegun_1.system.exec(`git rev-parse ${branch}`, {
89
+ cwd: process.env.MODDABLE,
90
+ });
91
+ const remoteRev = await gluegun_1.system.exec(`git ls-remote origin refs/heads/${branch}`, { cwd: process.env.MODDABLE });
92
+ if (remoteRev.split('\t').shift() === currentRev.trim()) {
93
+ gluegun_1.print.success('Moddable SDK already up to date!');
94
+ process.exit(0);
95
+ }
96
+ const spinner = gluegun_1.print.spin();
97
+ spinner.start('Updating Moddable SDK!');
98
+ spinner.info('Stashing any unsaved changes before committing');
99
+ await gluegun_1.system.exec('git stash', { cwd: process.env.MODDABLE });
100
+ await gluegun_1.system.exec(`git pull origin ${branch}`, {
101
+ cwd: process.env.MODDABLE,
102
+ });
103
+ rebuildTools = true;
104
+ spinner.succeed();
105
+ }
106
+ if (rebuildTools) {
107
+ const spinner = gluegun_1.print.spin();
108
+ spinner.start('Rebuilding platform tools');
109
+ await gluegun_1.system.exec('rm -rf build/{tmp,bin}', { cwd: process.env.MODDABLE });
110
+ await gluegun_1.system.exec('make', {
111
+ cwd: BUILD_DIR,
112
+ stdout: process.stdout,
113
+ });
114
+ spinner.succeed();
115
+ spinner.start('Reinstalling simulator');
116
+ await (0, exec_1.execWithSudo)('make install', {
117
+ cwd: BUILD_DIR,
118
+ stdout: process.stdout,
119
+ });
120
+ spinner.succeed();
121
+ if (gluegun_1.system.which('npm') !== null) {
122
+ spinner.start('Installing xsbug-log dependencies');
123
+ await gluegun_1.system.exec('npm install', { cwd: constants_1.XSBUG_LOG_PATH });
124
+ spinner.succeed();
125
+ }
126
+ gluegun_1.print.success('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
127
+ }
128
+ }
129
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGluLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xib3gvdXBkYXRlL2xpbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWVBLDRCQWdOQztBQS9ORCw0Q0FBbUI7QUFDbkIsK0JBQWdDO0FBQ2hDLDJCQUEwQjtBQUMxQixxQ0FBMkQ7QUFDM0Qsa0RBQWdGO0FBRWhGLGdEQUkwQjtBQUMxQix5Q0FBZ0U7QUFFaEUsTUFBTSxZQUFZLEdBQUcsSUFBQSxnQkFBUyxFQUFDLFVBQUssQ0FBQyxDQUFBO0FBRXRCLEtBQUssb0JBQVcsRUFDN0IsTUFBTSxFQUNOLE9BQU8sRUFDUCxXQUFXLEdBQ0Q7SUFDVixNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6Qiw0QkFBNEI7SUFDNUIsSUFBSSxDQUFDLElBQUEseUJBQWMsR0FBRSxFQUFFLENBQUM7UUFDdEIsZUFBSyxDQUFDLEtBQUssQ0FDVCxvRUFBb0UsQ0FDckUsQ0FBQTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakIsQ0FBQztJQUVELGVBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUV0QyxNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FDbEMsd0JBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFBO0lBQ0QsSUFBSSxZQUFZLEdBQUcsS0FBSyxDQUFBO0lBRXhCLElBQUksT0FBTyxLQUFLLFNBQVMsSUFBSSxDQUFDLE1BQU0sS0FBSyxTQUFTLElBQUksTUFBTSxLQUFLLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDdkUsMkJBQTJCO1FBQzNCLE1BQU0sVUFBVSxHQUFXLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFO1lBQ3RELEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFBO1FBQ0YseUJBQXlC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
@@ -3,6 +3,10 @@
3
3
  * first attempting as non-interactive before falling back to ssh-askpass prompt
4
4
  **/
5
5
  export declare function execWithSudo(command: string, options?: Record<string, unknown>): Promise<void>;
6
+ /**
7
+ * Use Policykit pkexec to run the command as an admin user
8
+ */
9
+ export declare function pkexec(command: string, options?: Record<string, unknown>): Promise<void>;
6
10
  /**
7
11
  * Set updated env from user shell as process.env
8
12
  */
@@ -0,0 +1,9 @@
1
+ import type { Dependency } from './types';
2
+ /**
3
+ * Check if the list of dependencies are installed on the system.
4
+ **/
5
+ export declare function findMissingDependencies(dependencies: Dependency[]): Promise<Dependency[]>;
6
+ /**
7
+ * Attempt to install packages on the linux platform.
8
+ **/
9
+ export declare function installPackages(packages: Dependency[]): Promise<void>;
@@ -0,0 +1,5 @@
1
+ export interface Dependency {
2
+ name: string;
3
+ packageName: string;
4
+ type: 'binary' | 'library' | 'pylib';
5
+ }
@@ -15,12 +15,12 @@ This should output something like this:
15
15
 
16
16
  ```
17
17
  xs-dev environment info:
18
- CLI Version 0.19.3
18
+ CLI Version 0.36.5
19
19
  OS Darwin
20
20
  Arch arm64
21
- NodeJS Version v16.14.0 (/path/to/node)
22
- Python Version 3.10.9 (/path/to/python)
23
- Moddable SDK Version 3.5.0 (/path/to/moddable)
21
+ NodeJS Version v22.10.0 (/path/to/node)
22
+ Python Version 3.12.8 (/path/to/python)
23
+ Moddable SDK Version 5.3.3 (/path/to/moddable)
24
24
  Supported target devices mac, esp32, esp8266, pico
25
25
  ESP32 IDF Directory /path/to/esp32/esp-idf
26
26
  ESP8266 Base Directory /path/to/esp
@@ -34,9 +34,9 @@ These are not the only available editors, so feel free to do your own research a
34
34
 
35
35
  ## NodeJS & Package Manager (optional)
36
36
 
37
- While [NodeJS](https://nodejs.org/en/) is not required for [Moddable XS](https://github.com/Moddable-OpenSource/moddable) projects, it is a dependency for installing and using the [`xs-dev` CLI](https://xs-dev.js.org/).
37
+ While [NodeJS](https://nodejs.org/en/) is not required for [Moddable XS](https://github.com/Moddable-OpenSource/moddable) projects, it is a dependency for installing and using the [`xs-dev` CLI](https://xs-dev.js.org/). It supports at least the [active Long Term Support (LTS) version](https://nodejs.org/en/about/previous-releases#nodejs-releases).
38
38
 
39
- Node can be [downloaded directly from the website](https://nodejs.org/en/download/), however using one of the following version managers can help with quickly switching to recommended versions of the tooling in the future:
39
+ NodeJS can be [downloaded directly from the website](https://nodejs.org/en/download/), however using one of the following version managers can help with quickly switching to recommended versions of the tooling in the future:
40
40
 
41
41
  - [mise](https://mise.jdx.dev/getting-started.html#_1-install-mise-cli)
42
42
  - [`pnpm env`](https://pnpm.io/cli/env)
@@ -44,7 +44,7 @@ Node can be [downloaded directly from the website](https://nodejs.org/en/downloa
44
44
  - [fnm](https://github.com/Schniz/fnm)
45
45
  - [asdf](https://asdf-vm.com/guide/getting-started.html#_4-install-a-plugin)
46
46
 
47
- Node comes with [npm](https://docs.npmjs.com/cli/v8/commands/npm) as the included package manager, but there are other options available if needed:
47
+ NodeJS comes with [npm](https://docs.npmjs.com/cli/v8/commands/npm) as the included package manager, but there are other options available if needed:
48
48
 
49
49
  - [pnpm](https://pnpm.io/installation)
50
50
  - [yarn](https://yarnpkg.com/)
@@ -72,6 +72,7 @@ Simulators are fun and everything, but controlling hardware with JavaScript is e
72
72
  - [ESP8266](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp8266.md)
73
73
  - [ESP32](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md)
74
74
  - [Raspberry Pi Pico](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/pico.md)
75
+ - [Nordic nRF52840](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/nrf52.md)
75
76
 
76
77
  Each platform has a variety of features and form factors to support whatever you might dream up. This guide will do its best to provide code and diagrams that match the expectations of your chosen device(s) but cannot promise comprehensive coverage of every piece of hardware in existence.
77
78
 
@@ -96,12 +96,12 @@ Running [`xs-dev doctor` command](/features/doctor) will display relevant info a
96
96
 
97
97
  ```
98
98
  xs-dev environment info:
99
- CLI Version 0.19.3
99
+ CLI Version 0.36.5
100
100
  OS Darwin
101
101
  Arch arm64
102
- NodeJS Version v16.14.0 (/path/to/node)
103
- Python Version 3.10.9 (/path/to/python)
104
- Moddable SDK Version 3.5.0 (/path/to/moddable)
102
+ NodeJS Version v22.10.0 (/path/to/node)
103
+ Python Version 3.12.8 (/path/to/python)
104
+ Moddable SDK Version 5.3.3 (/path/to/moddable)
105
105
  Supported target devices mac
106
106
 
107
107
  If this is related to an error when using the CLI, please create an issue at "https://github.com/hipsterbrown/xs-dev/issues/new" with the above info.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xs-dev",
3
- "version": "0.36.5",
3
+ "version": "0.37.1",
4
4
  "description": "CLI for automating the setup and usage of Moddable XS tools",
5
5
  "types": "build/types/types.d.ts",
6
6
  "engines": {
@@ -1,116 +0,0 @@
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
- exports.default = default_1;
7
- const os_1 = __importDefault(require("os"));
8
- const util_1 = require("util");
9
- const fs_1 = require("fs");
10
- const gluegun_1 = require("gluegun");
11
- const constants_1 = require("./constants");
12
- const upsert_1 = __importDefault(require("../patching/upsert"));
13
- const exec_1 = require("../system/exec");
14
- const moddable_1 = require("./moddable");
15
- const chmodPromise = (0, util_1.promisify)(fs_1.chmod);
16
- async function default_1({ sourceRepo, branch, release, interactive, }) {
17
- gluegun_1.print.info('Setting up Linux tools!');
18
- const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'release');
19
- const DEBUG_BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'debug');
20
- const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'lin');
21
- let buildTools = false;
22
- const spinner = gluegun_1.print.spin();
23
- spinner.start('Beginning setup...');
24
- // 0. clone moddable repo into ./local/share directory if it does not exist yet
25
- gluegun_1.filesystem.dir(constants_1.INSTALL_DIR);
26
- await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `# Generated by xs-dev CLI`);
27
- // 1. Install or update the packages required to compile:
28
- spinner.start('Installing dependencies...');
29
- await (0, exec_1.execWithSudo)('apt-get install --yes gcc git wget make libncurses-dev flex bison gperf', { stdout: process.stdout });
30
- spinner.succeed();
31
- // 2. Install the development version of the GTK+ 3 library
32
- spinner.start('Installing GTK+ 3...');
33
- await (0, exec_1.execWithSudo)('apt-get --yes install libgtk-3-dev', {
34
- stdout: process.stdout,
35
- });
36
- spinner.succeed();
37
- // 3. Download the Moddable repository, or use the git command line tool as follows:
38
- if (gluegun_1.filesystem.exists(constants_1.INSTALL_PATH) !== false) {
39
- spinner.info('Moddable repo already installed');
40
- }
41
- else {
42
- if (release !== undefined && (branch === undefined || branch === null)) {
43
- spinner.start('Getting latest Moddable-OpenSource/moddable release');
44
- const remoteRelease = await (0, moddable_1.fetchRelease)(release);
45
- if (remoteRelease.assets.length === 0) {
46
- spinner.stop();
47
- gluegun_1.print.warning(`Moddable release ${release} does not have any pre-built assets.`);
48
- buildTools =
49
- !interactive ||
50
- (await gluegun_1.prompt.confirm('Would you like to continue setting up and build the SDK locally?', true));
51
- if (!buildTools) {
52
- gluegun_1.print.info('Please select another release version with pre-built assets: https://github.com/Moddable-OpenSource/moddable/releases');
53
- process.exit(0);
54
- }
55
- spinner.start();
56
- }
57
- await gluegun_1.system.spawn(`git clone ${sourceRepo} ${constants_1.INSTALL_PATH} --depth 1 --branch ${remoteRelease.tag_name} --single-branch`);
58
- if (!buildTools) {
59
- gluegun_1.filesystem.dir(BIN_PATH);
60
- gluegun_1.filesystem.dir(DEBUG_BIN_PATH);
61
- const isArm = os_1.default.arch() === 'arm64';
62
- const assetName = isArm
63
- ? 'moddable-tools-lin64arm.zip'
64
- : 'moddable-tools-lin64.zip';
65
- spinner.info('Downloading release tools');
66
- await (0, moddable_1.downloadReleaseTools)({
67
- writePath: BIN_PATH,
68
- assetName,
69
- release: remoteRelease,
70
- });
71
- const tools = gluegun_1.filesystem.list(BIN_PATH) ?? [];
72
- await Promise.all(tools.map(async (tool) => {
73
- await chmodPromise(gluegun_1.filesystem.resolve(BIN_PATH, tool), 0o751);
74
- await gluegun_1.filesystem.copyAsync(gluegun_1.filesystem.resolve(BIN_PATH, tool), gluegun_1.filesystem.resolve(DEBUG_BIN_PATH, tool));
75
- }));
76
- }
77
- }
78
- else {
79
- spinner.start(`Cloning ${sourceRepo} repo`);
80
- await gluegun_1.system.spawn(`git clone ${sourceRepo} ${constants_1.INSTALL_PATH} --depth 1 --branch ${branch} --single-branch`);
81
- buildTools = true;
82
- }
83
- spinner.succeed();
84
- }
85
- // 4. Setup the MODDABLE environment variable
86
- process.env.MODDABLE = constants_1.INSTALL_PATH;
87
- process.env.PATH = `${String(process.env.PATH)}:${BIN_PATH}`;
88
- await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export MODDABLE=${process.env.MODDABLE}`);
89
- await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PATH="${BIN_PATH}:$PATH"`);
90
- // 5. Build the Moddable command line tools, simulator, and debugger from the command line:
91
- if (buildTools) {
92
- spinner.start('Building platform tooling');
93
- await gluegun_1.system.exec('make', { cwd: BUILD_DIR, stdout: process.stdout });
94
- spinner.succeed();
95
- }
96
- // 6. Install the desktop simulator and xsbug debugger applications
97
- spinner.start('Installing simulator');
98
- if (release !== undefined && (branch === undefined || branch === null)) {
99
- gluegun_1.filesystem.dir(gluegun_1.filesystem.resolve(BUILD_DIR, '..', '..', 'tmp', 'lin', 'debug', 'simulator'));
100
- await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'xsbug', 'manifest.json')}`, { process });
101
- await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'mcsim', 'manifest.json')}`, { process });
102
- }
103
- await (0, exec_1.execWithSudo)('make install', {
104
- cwd: BUILD_DIR,
105
- stdout: process.stdout,
106
- });
107
- spinner.succeed();
108
- if (gluegun_1.system.which('npm') !== null) {
109
- spinner.start('Installing xsbug-log dependencies');
110
- await gluegun_1.system.exec('npm install', { cwd: constants_1.XSBUG_LOG_PATH });
111
- spinner.succeed();
112
- }
113
- // 7. Profit?
114
- gluegun_1.print.success('Moddable SDK successfully set up! Start a new terminal session and run the "helloworld example": xs-dev run --example helloworld');
115
- }
116
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9saW51eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQWlCQSw0QkF3TEM7QUF6TUQsNENBQW1CO0FBQ25CLCtCQUFnQztBQUNoQywyQkFBMEI7QUFDMUIscUNBQTJEO0FBQzNELDJDQUtvQjtBQUNwQixnRUFBdUM7QUFDdkMseUNBQTZDO0FBRTdDLHlDQUErRDtBQUUvRCxNQUFNLFlBQVksR0FBRyxJQUFBLGdCQUFTLEVBQUMsVUFBSyxDQUFDLENBQUE7QUFFdEIsS0FBSyxvQkFBVyxFQUM3QixVQUFVLEVBQ1YsTUFBTSxFQUNOLE9BQU8sRUFDUCxXQUFXLEdBQ087SUFDbEIsZUFBSyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO0lBRXJDLE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNqQyx3QkFBWSxFQUNaLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsQ0FDVixDQUFBO0lBQ0QsTUFBTSxjQUFjLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQ3ZDLHdCQUFZLEVBQ1osT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxDQUNSLENBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FDbEMsd0JBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFBO0lBRUQsSUFBSSxVQUFVLEdBQUcsS0FBSyxDQUFBO0lBQ3RCLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7SUFFbkMsK0VBQStFO0lBQy9FLG9CQUFVLENBQUMsR0FBRyxDQUFDLHVCQUFXLENBQUMsQ0FBQTtJQUUzQixNQUFNLElBQUEsZ0JBQU0sRUFBQyw2QkFBaUIsRUFB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
@@ -1,129 +0,0 @@
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
- exports.default = default_1;
7
- const os_1 = __importDefault(require("os"));
8
- const util_1 = require("util");
9
- const fs_1 = require("fs");
10
- const gluegun_1 = require("gluegun");
11
- const constants_1 = require("../setup/constants");
12
- const moddable_1 = require("../setup/moddable");
13
- const exec_1 = require("../system/exec");
14
- const chmodPromise = (0, util_1.promisify)(fs_1.chmod);
15
- async function default_1({ branch, release, interactive, }) {
16
- await (0, exec_1.sourceEnvironment)();
17
- // 0. ensure Moddable exists
18
- if (!(0, moddable_1.moddableExists)()) {
19
- gluegun_1.print.error('Moddable tooling required. Run `xs-dev setup` before trying again.');
20
- process.exit(1);
21
- }
22
- gluegun_1.print.info('Checking for SDK changes');
23
- const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'lin');
24
- let rebuildTools = false;
25
- if (release !== undefined && (branch === undefined || branch === null)) {
26
- // get tag for current repo
27
- const currentTag = await gluegun_1.system.exec('git tag', {
28
- cwd: process.env.MODDABLE,
29
- });
30
- // get latest release tag
31
- const remoteRelease = await (0, moddable_1.fetchRelease)(release);
32
- if (currentTag.trim() === remoteRelease.tag_name) {
33
- gluegun_1.print.success('Moddable SDK already up to date!');
34
- process.exit(0);
35
- }
36
- if (remoteRelease.assets.length === 0) {
37
- gluegun_1.print.warning(`Moddable release ${release} does not have any pre-built assets.`);
38
- rebuildTools =
39
- !interactive ||
40
- (await gluegun_1.prompt.confirm('Would you like to continue updating and build the SDK locally?', false));
41
- if (!rebuildTools) {
42
- gluegun_1.print.info('Please select another release version with pre-built assets: https://github.com/Moddable-OpenSource/moddable/releases');
43
- process.exit(0);
44
- }
45
- }
46
- const spinner = gluegun_1.print.spin();
47
- spinner.start('Updating Moddable SDK!');
48
- gluegun_1.filesystem.remove(process.env.MODDABLE);
49
- await gluegun_1.system.spawn(`git clone ${constants_1.MODDABLE_REPO} ${constants_1.INSTALL_PATH} --depth 1 --branch ${remoteRelease.tag_name} --single-branch`);
50
- if (!rebuildTools) {
51
- const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'release');
52
- const DEBUG_BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'debug');
53
- gluegun_1.filesystem.dir(BIN_PATH);
54
- gluegun_1.filesystem.dir(DEBUG_BIN_PATH);
55
- const isArm = os_1.default.arch() === 'arm64';
56
- const assetName = isArm
57
- ? 'moddable-tools-lin64arm.zip'
58
- : 'moddable-tools-lin64.zip';
59
- spinner.info('Downloading release tools');
60
- await (0, moddable_1.downloadReleaseTools)({
61
- writePath: BIN_PATH,
62
- assetName,
63
- release: remoteRelease,
64
- });
65
- spinner.info('Updating tool permissions');
66
- const tools = gluegun_1.filesystem.list(BIN_PATH) ?? [];
67
- await Promise.all(tools.map(async (tool) => {
68
- await chmodPromise(gluegun_1.filesystem.resolve(BIN_PATH, tool), 0o751);
69
- await gluegun_1.filesystem.copyAsync(gluegun_1.filesystem.resolve(BIN_PATH, tool), gluegun_1.filesystem.resolve(DEBUG_BIN_PATH, tool));
70
- }));
71
- spinner.info('Reinstalling simulator');
72
- gluegun_1.filesystem.dir(gluegun_1.filesystem.resolve(BUILD_DIR, '..', '..', 'tmp', 'lin', 'debug', 'simulator'));
73
- await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'xsbug', 'manifest.json')}`, { process });
74
- await gluegun_1.system.exec(`mcconfig -m -p x-lin ${gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'tools', 'mcsim', 'manifest.json')}`, { process });
75
- await (0, exec_1.execWithSudo)('make install', {
76
- cwd: BUILD_DIR,
77
- stdout: process.stdout,
78
- });
79
- if (gluegun_1.system.which('npm') !== null) {
80
- spinner.start('Installing xsbug-log dependencies');
81
- await gluegun_1.system.exec('npm install', { cwd: constants_1.XSBUG_LOG_PATH });
82
- spinner.succeed();
83
- }
84
- spinner.succeed('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
85
- }
86
- }
87
- if (typeof branch === 'string') {
88
- const currentRev = await gluegun_1.system.exec(`git rev-parse ${branch}`, {
89
- cwd: process.env.MODDABLE,
90
- });
91
- const remoteRev = await gluegun_1.system.exec(`git ls-remote origin refs/heads/${branch}`, { cwd: process.env.MODDABLE });
92
- if (remoteRev.split('\t').shift() === currentRev.trim()) {
93
- gluegun_1.print.success('Moddable SDK already up to date!');
94
- process.exit(0);
95
- }
96
- const spinner = gluegun_1.print.spin();
97
- spinner.start('Updating Moddable SDK!');
98
- spinner.info('Stashing any unsaved changes before committing');
99
- await gluegun_1.system.exec('git stash', { cwd: process.env.MODDABLE });
100
- await gluegun_1.system.exec(`git pull origin ${branch}`, {
101
- cwd: process.env.MODDABLE,
102
- });
103
- rebuildTools = true;
104
- spinner.succeed();
105
- }
106
- if (rebuildTools) {
107
- const spinner = gluegun_1.print.spin();
108
- spinner.start('Rebuilding platform tools');
109
- await gluegun_1.system.exec('rm -rf build/{tmp,bin}', { cwd: process.env.MODDABLE });
110
- await gluegun_1.system.exec('make', {
111
- cwd: BUILD_DIR,
112
- stdout: process.stdout,
113
- });
114
- spinner.succeed();
115
- spinner.start('Reinstalling simulator');
116
- await (0, exec_1.execWithSudo)('make install', {
117
- cwd: BUILD_DIR,
118
- stdout: process.stdout,
119
- });
120
- spinner.succeed();
121
- if (gluegun_1.system.which('npm') !== null) {
122
- spinner.start('Installing xsbug-log dependencies');
123
- await gluegun_1.system.exec('npm install', { cwd: constants_1.XSBUG_LOG_PATH });
124
- spinner.succeed();
125
- }
126
- gluegun_1.print.success('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
127
- }
128
- }
129
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvbGludXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFlQSw0QkFnTkM7QUEvTkQsNENBQW1CO0FBQ25CLCtCQUFnQztBQUNoQywyQkFBMEI7QUFDMUIscUNBQTJEO0FBQzNELGtEQUFnRjtBQUVoRixnREFJMEI7QUFDMUIseUNBQWdFO0FBRWhFLE1BQU0sWUFBWSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxVQUFLLENBQUMsQ0FBQTtBQUV0QixLQUFLLG9CQUFXLEVBQzdCLE1BQU0sRUFDTixPQUFPLEVBQ1AsV0FBVyxHQUNEO0lBQ1YsTUFBTSxJQUFBLHdCQUFpQixHQUFFLENBQUE7SUFFekIsNEJBQTRCO0lBQzVCLElBQUksQ0FBQyxJQUFBLHlCQUFjLEdBQUUsRUFBRSxDQUFDO1FBQ3RCLGVBQUssQ0FBQyxLQUFLLENBQ1Qsb0VBQW9FLENBQ3JFLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFFRCxlQUFLLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUE7SUFFdEMsTUFBTSxTQUFTLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQ2xDLHdCQUFZLEVBQ1osT0FBTyxFQUNQLFdBQVcsRUFDWCxLQUFLLENBQ04sQ0FBQTtJQUNELElBQUksWUFBWSxHQUFHLEtBQUssQ0FBQTtJQUV4QixJQUFJLE9BQU8sS0FBSyxTQUFTLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxJQUFJLE1BQU0sS0FBSyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3ZFLDJCQUEyQjtRQUMzQixNQUFNLFVBQVUsR0FBVyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRTtZQUN0RCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRO1NBQzFCLENBQUMsQ0FBQTtRQUNGLHlCQUF5QjtRQUN6QixNQUFNLGFBQWEsR0FBRyxNQUFNLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsQ0FBQTtRQUVqRCxJQUFJLFVBQVUsQ0FBQyxJQUFJLEVBQUUsS0FBSyxhQUFhLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDakQsZUFBSyxDQUFDLE9BQU8sQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1lBQ2pELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDakIsQ0FBQztRQUVELElBQUksYUFBYSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDdEMsZUFBSyxDQUFDLE9BQU8sQ0FDWCxvQkFBb0IsT0FBTyxzQ0FBc0MsQ0FDbEUsQ0FBQTtZQUNELFlBQVk7Z0JBQ1YsQ0FBQyxXQUFXO29CQUNaLENBQUMsTUFBTSxnQkFBTSxDQUFDLE9BQU8sQ0FDbkIsZ0VBQWdFLEVBQ2hFLEtBQUssQ0FDTixDQUFDLENBQUE7WUFFSixJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7Z0JBQ2xCLGVBQUssQ0FBQyxJQUFJLENBQ1IsdUhBQXVILENBQ3hILENBQUE7Z0JBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtZQUNqQixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFFdkMsb0JBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUN2QyxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUNoQixhQUFhLHlCQUFhLElBQUksd0JBQVksdUJBQXVCLGFBQWEsQ0FBQyxRQUFRLGtCQUFrQixDQUMxRyxDQUFBO1FBRUQsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1lBQ2xCLE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNqQyx3QkFBWSxFQUNaLE9BQU8sRUFDUCxLQUFLLEVBQ0wsS0FBSyxFQUNMLFNBQVMsQ0FDVixDQUFBO1lBQ0QsTUFBTSxjQUFjLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQ3ZDLHdCQUFZLEVBQ1osT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxDQUNSLENBQUE7WUFFRCxvQkFBVSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQTtZQUN4QixvQkFBVSxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsQ0FBQTtZQUU5QixNQUFNLEtBQUssR0FBRyxZQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssT0FBTyxDQUFBO1lBQ25DLE1BQU0sU0FBUyxHQUFHLEtBQUs7Z0JBQ3JCLENBQUMsQ0FBQyw2QkFBNkI7Z0JBQy9CLENBQUMsQ0FBQywwQkFBMEIsQ0FBQTtZQUU5QixPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7WUFDekMsTUFBTSxJQUFBLCtCQUFvQixFQUFDO2dCQUN6QixTQUFTLEVBQUUsUUFBUTtnQkFDbkIsU0FBUztnQkFDVCxPQUFPLEVBQUUsYUFBYTthQUN2QixDQUFDLENBQUE7WUFFRixPQUFPLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7WUFDekMsTUFBTSxLQUFLLEdBQUcsb0JBQVUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO1lBQzdDLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixLQUFLLENBQUMsR0FBRyxDQUFDLEtBQUssRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDdkIsTUFBTSxZQUFZLENBQUMsb0JBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFBO2dCQUM3RCxNQUFNLG9CQUFVLENBQUMsU0FBUyxDQUN4QixvQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQ2xDLG9CQUFVLENBQUMsT0FBTyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FDekMsQ0FBQTtZQUNILENBQUMsQ0FBQyxDQUNILENBQUE7WUFFRCxPQUFPLENBQUMsSUFBSSxDQUFDLHdCQUF3QixDQUFDLENBQUE7WUFDdEMsb0JBQVUsQ0FBQyxHQUFHLENBQ1osb0JBQVUsQ0FBQyxPQUFPLENBQ2hCLFNBQVMsRUFDVCxJQUFJLEVBQ0osSUFBSSxFQUNKLEtBQUssRUFDTCxLQUFLLEVBQ0wsT0FBTyxFQUNQLFdBQVcsQ0FDWixDQUNGLENBQUE7WUFDRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUNmLHdCQUF3QixvQkFBVSxDQUFDLE9BQU8sQ0FDeEMsd0JBQVksRUFDWixPQUFPLEVBQ1AsT0FBTyxFQUNQLGVBQWUsQ0FDaEIsRUFBRSxFQUNILEVBQUUsT0FBTyxFQUFFLENBQ1osQ0FBQTtZQUNELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQ2Ysd0JBQXdCLG9CQUFVLENBQUMsT0FBTyxDQUN4Qyx3QkFBWSxFQUNaLE9BQU8sRUFDUCxPQUFPLEVBQ1AsZUFBZSxDQUNoQixFQUFFLEVBQ0gsRUFBRSxPQUFPLEVBQUUsQ0FDWixDQUFBO1lBQ0QsTUFBTSxJQUFBLG1CQUFZLEVBQUMsY0FBYyxFQUFFO2dCQUNqQyxHQUFHLEVBQUUsU0FBUztnQkFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07YUFDdkIsQ0FBQyxDQUFBO1lBQ0YsSUFBSSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztnQkFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFBO2dCQUNsRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSwwQkFBYyxFQUFFLENBQUMsQ0FBQTtnQkFDekQsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1lBQ25CLENBQUM7WUFDRCxPQUFPLENBQUMsT0FBTyxDQUNiLDBIQUEwSCxDQUMzSCxDQUFBO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxJQUFJLE9BQU8sTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQy9CLE1BQU0sVUFBVSxHQUFXLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsaUJBQWlCLE1BQU0sRUFBRSxFQUFFO1lBQ3RFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7U0FDMUIsQ0FBQyxDQUFBO1FBQ0YsTUFBTSxTQUFTLEdBQVcsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FDekMsbUNBQW1DLE1BQU0sRUFBRSxFQUMzQyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUM5QixDQUFBO1FBRUQsSUFBSSxTQUFTLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssRUFBRSxLQUFLLFVBQVUsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO1lBQ3hELGVBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtZQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ2pCLENBQUM7UUFFRCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO1FBRXZDLE9BQU8sQ0FBQyxJQUFJLENBQUMsZ0RBQWdELENBQUMsQ0FBQTtRQUM5RCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7UUFDN0QsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxtQkFBbUIsTUFBTSxFQUFFLEVBQUU7WUFDN0MsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUTtTQUMxQixDQUFDLENBQUE7UUFDRixZQUFZLEdBQUcsSUFBSSxDQUFBO1FBQ25CLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUNuQixDQUFDO0lBRUQsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUNqQixNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQywyQkFBMkIsQ0FBQyxDQUFBO1FBRTFDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO1FBRTFFLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1lBQ3hCLEdBQUcsRUFBRSxTQUFTO1lBQ2QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3ZCLENBQUMsQ0FBQTtRQUNGLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVqQixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7UUFDdkMsTUFBTSxJQUFBLG1CQUFZLEVBQUMsY0FBYyxFQUFFO1lBQ2pDLEdBQUcsRUFBRSxTQUFTO1lBQ2QsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNO1NBQ3ZCLENBQUMsQ0FBQTtRQUNGLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUVqQixJQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO1lBQ2pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtZQUNsRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxFQUFFLEdBQUcsRUFBRSwwQkFBYyxFQUFFLENBQUMsQ0FBQTtZQUN6RCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7UUFDbkIsQ0FBQztRQUVELGVBQUssQ0FBQyxPQUFPLENBQ1gsMEhBQTBILENBQzNILENBQUE7SUFDSCxDQUFDO0FBQ0gsQ0FBQyJ9