xs-dev 0.26.0 → 0.27.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
@@ -14,9 +14,24 @@ The Moddable SDK and associated dev board tooling is incredibly empowering for e
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
 
17
+ [XZ utils](https://tukaani.org/xz/) are required to install the CLI due to a dependency for decompressing the ARM toolchain used for nrf52 development.
18
+
19
+ It can be installed with Homebrew on MacOS:
20
+
21
+ ```
22
+ brew install xz
23
+ ```
24
+
25
+ Or as `xz-utils` on Linux distributions like [Ubunutu](https://packages.ubuntu.com/search?keywords=xz-utils):
26
+
27
+ ```
28
+ apt-get install xz-utils
29
+ ```
30
+
17
31
  **On Linux:**
18
32
 
19
- Setup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/bionic/ssh-askpass) to prompt for permission when installing other tools and dependencies.
33
+ Setup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/focal/ssh-askpass) to prompt for permission when installing other tools and dependencies.
34
+
20
35
 
21
36
  ## Install
22
37
 
@@ -5,6 +5,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  const os_1 = require("os");
7
7
  const fontbm_1 = __importDefault(require("../toolbox/setup/fontbm"));
8
+ const ejectfix_1 = __importDefault(require("../toolbox/setup/ejectfix"));
8
9
  const devices_1 = require("../toolbox/prompt/devices");
9
10
  const constants_1 = require("../toolbox/setup/constants");
10
11
  const command = {
@@ -20,6 +21,7 @@ const command = {
20
21
  'esp32',
21
22
  'pico',
22
23
  'wasm',
24
+ 'nrf52',
23
25
  devices_1.DEVICE_ALIAS[currentPlatform],
24
26
  ];
25
27
  const { device: selectedDevice } = await prompt.ask([
@@ -39,11 +41,14 @@ const command = {
39
41
  }
40
42
  }
41
43
  if (tool !== undefined) {
42
- if (tool !== 'fontbm') {
44
+ if (!['fontbm', 'ejectfix'].includes(tool)) {
43
45
  print.warning(`Unknown tool ${tool}`);
44
- process.exit(0);
46
+ process.exit(1);
45
47
  }
46
- await (0, fontbm_1.default)();
48
+ if (tool === 'fontbm')
49
+ await (0, fontbm_1.default)();
50
+ if (tool === 'ejectfix')
51
+ await (0, ejectfix_1.default)();
47
52
  return;
48
53
  }
49
54
  const platformDevices = [
@@ -63,4 +68,4 @@ const command = {
63
68
  },
64
69
  };
65
70
  exports.default = command;
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwyQkFBeUM7QUFFekMscUVBQWlEO0FBQ2pELHVEQUF3RDtBQUN4RCwwREFBMEQ7QUFXMUQsTUFBTSxPQUFPLEdBQWlDO0lBQzVDLElBQUksRUFBRSxPQUFPO0lBQ2IsV0FBVyxFQUNULGtFQUFrRTtJQUNwRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNsRCxNQUFNLGVBQWUsR0FBVyxJQUFBLFNBQVksR0FBRSxDQUFDLFdBQVcsRUFBWSxDQUFBO1FBQ3RFLE1BQU0sRUFDSixNQUFNLEVBQ04sV0FBVyxHQUFHLEtBQUssRUFDbkIsSUFBSSxFQUNKLFlBQVksR0FBRyxnQkFBZ0IsRUFDL0IsVUFBVSxHQUFHLHlCQUFhLEdBQzNCLEdBQWlCLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFDcEMsSUFBSSxNQUFNLEdBQVcsTUFBTSxhQUFOLE1BQU0sY0FBTixNQUFNLEdBQUksZUFBZSxDQUFBO1FBRTlDLElBQUksTUFBTSxLQUFLLFNBQVMsSUFBSSxXQUFXLEVBQUU7WUFDdkMsTUFBTSxPQUFPLEdBQUc7Z0JBQ2QsU0FBUztnQkFDVCxPQUFPO2dCQUNQLE1BQU07Z0JBQ04sTUFBTTtnQkFDTixzQkFBWSxDQUFDLGVBQWUsQ0FBQzthQUM5QixDQUFBO1lBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ2xEO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxPQUFPLEVBQUUsd0NBQXdDO29CQUNqRCxPQUFPO2lCQUNSO2FBQ0YsQ0FBQyxDQUFBO1lBRUYsSUFBSSxjQUFjLEtBQUssRUFBRSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pELE1BQU0sR0FBRyxjQUF3QixDQUFBO2FBQ2xDO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtnQkFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNoQjtTQUNGO1FBRUQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLElBQUksSUFBSSxLQUFLLFFBQVEsRUFBRTtnQkFDckIsS0FBSyxDQUFDLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxFQUFFLENBQUMsQ0FBQTtnQkFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNoQjtZQUNELE1BQU0sSUFBQSxnQkFBVyxHQUFFLENBQUE7WUFDbkIsT0FBTTtTQUNQO1FBQ0QsTUFBTSxlQUFlLEdBQWE7WUFDaEMsS0FBSztZQUNMLFFBQVE7WUFDUixZQUFZO1lBQ1osS0FBSztZQUNMLEtBQUs7WUFDTCxPQUFPO1NBQ1IsQ0FBQTtRQUNELElBQUksZUFBZSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNwQyxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFBO1NBQ2xEO2FBQU07WUFDTCxNQUFNLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUE7U0FDdEM7SUFDSCxDQUFDO0NBQ0YsQ0FBQTtBQUVELGtCQUFlLE9BQU8sQ0FBQSJ9
71
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSwyQkFBeUM7QUFFekMscUVBQWlEO0FBQ2pELHlFQUFxRDtBQUNyRCx1REFBd0Q7QUFDeEQsMERBQTBEO0FBVzFELE1BQU0sT0FBTyxHQUFpQztJQUM1QyxJQUFJLEVBQUUsT0FBTztJQUNiLFdBQVcsRUFDVCxrRUFBa0U7SUFDcEUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUU7UUFDbEQsTUFBTSxlQUFlLEdBQVcsSUFBQSxTQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQVksQ0FBQTtRQUN0RSxNQUFNLEVBQ0osTUFBTSxFQUNOLFdBQVcsR0FBRyxLQUFLLEVBQ25CLElBQUksRUFDSixZQUFZLEdBQUcsZ0JBQWdCLEVBQy9CLFVBQVUsR0FBRyx5QkFBYSxHQUMzQixHQUFpQixVQUFVLENBQUMsT0FBTyxDQUFBO1FBQ3BDLElBQUksTUFBTSxHQUFXLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLGVBQWUsQ0FBQTtRQUU5QyxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksV0FBVyxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHO2dCQUNkLFNBQVM7Z0JBQ1QsT0FBTztnQkFDUCxNQUFNO2dCQUNOLE1BQU07Z0JBQ04sT0FBTztnQkFDUCxzQkFBWSxDQUFDLGVBQWUsQ0FBQzthQUM5QixDQUFBO1lBQ0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ2xEO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxPQUFPLEVBQUUsd0NBQXdDO29CQUNqRCxPQUFPO2lCQUNSO2FBQ0YsQ0FBQyxDQUFBO1lBRUYsSUFBSSxjQUFjLEtBQUssRUFBRSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pELE1BQU0sR0FBRyxjQUF3QixDQUFBO2FBQ2xDO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtnQkFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNoQjtTQUNGO1FBRUQsSUFBSSxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3RCLElBQUksQ0FBQyxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLElBQUksRUFBRSxDQUFDLENBQUE7Z0JBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7YUFDaEI7WUFDRCxJQUFJLElBQUksS0FBSyxRQUFRO2dCQUFFLE1BQU0sSUFBQSxnQkFBVyxHQUFFLENBQUE7WUFDMUMsSUFBSSxJQUFJLEtBQUssVUFBVTtnQkFBRSxNQUFNLElBQUEsa0JBQWEsR0FBRSxDQUFBO1lBQzlDLE9BQU07U0FDUDtRQUNELE1BQU0sZUFBZSxHQUFhO1lBQ2hDLEtBQUs7WUFDTCxRQUFRO1lBQ1IsWUFBWTtZQUNaLEtBQUs7WUFDTCxLQUFLO1lBQ0wsT0FBTztTQUNSLENBQUE7UUFDRCxJQUFJLGVBQWUsQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDcEMsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQTtTQUNsRDthQUFNO1lBQ0wsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxZQUFZLEVBQUUsQ0FBQyxDQUFBO1NBQ3RDO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFFRCxrQkFBZSxPQUFPLENBQUEifQ==
@@ -6,6 +6,7 @@ const command = {
6
6
  name: 'teardown',
7
7
  description: 'Remove all installed git repos and toolchains, unset environment changes',
8
8
  run: async ({ print, filesystem, patching }) => {
9
+ var _a;
9
10
  const PROFILE_PATH = (0, constants_1.getProfilePath)();
10
11
  const spinner = print.spin();
11
12
  spinner.start('Tearing down Moddable tools and platform dependencies');
@@ -16,7 +17,13 @@ const command = {
16
17
  filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'esp'));
17
18
  filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'pico'));
18
19
  filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'fontbm'));
20
+ filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'nrf52'));
19
21
  if ((0, os_1.type)() === 'Darwin') {
22
+ const NC_PREFS_BACKUP = filesystem.resolve(constants_1.INSTALL_DIR, 'ejectfix', 'com.apple.ncprefs.plist');
23
+ if (filesystem.exists(NC_PREFS_BACKUP) === 'file') {
24
+ filesystem.copy(NC_PREFS_BACKUP, filesystem.resolve((_a = process.env.HOME) !== null && _a !== void 0 ? _a : '~', 'Library', 'Preferences', 'com.apple.ncprefs.plist'), { overwrite: true });
25
+ }
26
+ filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'ejectfix'));
20
27
  filesystem.remove('/Applications/xsbug.app');
21
28
  }
22
29
  await patching.patch(PROFILE_PATH, {
@@ -26,4 +33,4 @@ const command = {
26
33
  },
27
34
  };
28
35
  exports.default = command;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdGVhcmRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBeUM7QUFFekMsMERBSW1DO0FBRW5DLE1BQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsVUFBVTtJQUNoQixXQUFXLEVBQ1QsMEVBQTBFO0lBQzVFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7UUFDN0MsTUFBTSxZQUFZLEdBQUcsSUFBQSwwQkFBYyxHQUFFLENBQUE7UUFDckMsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsdURBQXVELENBQUMsQ0FBQTtRQUV0RSxVQUFVLENBQUMsTUFBTSxDQUFDLDZCQUFpQixDQUFDLENBQUE7UUFDcEMsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtRQUM5RCxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzFELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFDM0QsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsS0FBSyxDQUFDLENBQUMsQ0FBQTtRQUN6RCxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBQzFELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLFFBQVEsQ0FBQyxDQUFDLENBQUE7UUFFNUQsSUFBSSxJQUFBLFNBQVksR0FBRSxLQUFLLFFBQVEsRUFBRTtZQUMvQixVQUFVLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUE7U0FDN0M7UUFFRCxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxVQUFVLDZCQUFpQixFQUFFO1NBQ3RDLENBQUMsQ0FBQTtRQUVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0NBQ0YsQ0FBQTtBQUVELGtCQUFlLE9BQU8sQ0FBQSJ9
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdGVhcmRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwyQkFBeUM7QUFFekMsMERBSW1DO0FBRW5DLE1BQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsVUFBVTtJQUNoQixXQUFXLEVBQ1QsMEVBQTBFO0lBQzVFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUUsVUFBVSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7O1FBQzdDLE1BQU0sWUFBWSxHQUFHLElBQUEsMEJBQWMsR0FBRSxDQUFBO1FBQ3JDLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHVEQUF1RCxDQUFDLENBQUE7UUFFdEUsVUFBVSxDQUFDLE1BQU0sQ0FBQyw2QkFBaUIsQ0FBQyxDQUFBO1FBQ3BDLFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUE7UUFDOUQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMxRCxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxPQUFPLENBQUMsQ0FBQyxDQUFBO1FBQzNELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUE7UUFDekQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQTtRQUMxRCxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxRQUFRLENBQUMsQ0FBQyxDQUFBO1FBQzVELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUE7UUFFM0QsSUFBSSxJQUFBLFNBQVksR0FBRSxLQUFLLFFBQVEsRUFBRTtZQUMvQixNQUFNLGVBQWUsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUN4Qyx1QkFBVyxFQUNYLFVBQVUsRUFDVix5QkFBeUIsQ0FDMUIsQ0FBQTtZQUNELElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsS0FBSyxNQUFNLEVBQUU7Z0JBQ2pELFVBQVUsQ0FBQyxJQUFJLENBQ2IsZUFBZSxFQUNmLFVBQVUsQ0FBQyxPQUFPLENBQ2hCLE1BQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxJQUFJLG1DQUFJLEdBQUcsRUFDdkIsU0FBUyxFQUNULGFBQWEsRUFDYix5QkFBeUIsQ0FDMUIsRUFDRCxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsQ0FDcEIsQ0FBQTthQUNGO1lBQ0QsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsVUFBVSxDQUFDLENBQUMsQ0FBQTtZQUM5RCxVQUFVLENBQUMsTUFBTSxDQUFDLHlCQUF5QixDQUFDLENBQUE7U0FDN0M7UUFFRCxNQUFNLFFBQVEsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFO1lBQ2pDLE1BQU0sRUFBRSxVQUFVLDZCQUFpQixFQUFFO1NBQ3RDLENBQUMsQ0FBQTtRQUVGLE9BQU8sQ0FBQyxPQUFPLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUN2QyxDQUFDO0NBQ0YsQ0FBQTtBQUVELGtCQUFlLE9BQU8sQ0FBQSJ9
@@ -10,6 +10,7 @@ const esp8266_1 = __importDefault(require("../toolbox/setup/esp8266"));
10
10
  const esp32_1 = __importDefault(require("../toolbox/setup/esp32"));
11
11
  const wasm_1 = __importDefault(require("../toolbox/setup/wasm"));
12
12
  const pico_1 = __importDefault(require("../toolbox/setup/pico"));
13
+ const nrf52_1 = __importDefault(require("../toolbox/setup/nrf52"));
13
14
  exports.default = async (toolbox) => {
14
15
  toolbox.setup = {
15
16
  darwin: mac_1.default,
@@ -23,6 +24,7 @@ exports.default = async (toolbox) => {
23
24
  esp32: esp32_1.default,
24
25
  wasm: wasm_1.default,
25
26
  pico: pico_1.default,
27
+ nrf52: nrf52_1.default,
26
28
  };
27
29
  };
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dGVuc2lvbnMvc2V0dXAtZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsK0RBQTJDO0FBQzNDLG1FQUErQztBQUMvQyx1RUFBbUQ7QUFDbkQsdUVBQW1EO0FBQ25ELG1FQUErQztBQUMvQyxpRUFBNkM7QUFDN0MsaUVBQTZDO0FBRTdDLGtCQUFlLEtBQUssRUFBRSxPQUFxQixFQUFpQixFQUFFO0lBQzVELE9BQU8sQ0FBQyxLQUFLLEdBQUc7UUFDZCxNQUFNLEVBQUUsYUFBUTtRQUNoQixHQUFHLEVBQUUsYUFBUTtRQUNiLEtBQUssRUFBRSxlQUFVO1FBQ2pCLEdBQUcsRUFBRSxlQUFVO1FBQ2YsVUFBVSxFQUFFLGlCQUFZO1FBQ3hCLEdBQUcsRUFBRSxpQkFBWTtRQUNqQixHQUFHLEVBQUUsaUJBQVk7UUFDakIsT0FBTyxFQUFFLGlCQUFZO1FBQ3JCLEtBQUssRUFBRSxlQUFVO1FBQ2pCLElBQUksRUFBRSxjQUFTO1FBQ2YsSUFBSSxFQUFFLGNBQVM7S0FDaEIsQ0FBQTtBQUNILENBQUMsQ0FBQSJ9
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAtZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dGVuc2lvbnMvc2V0dXAtZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQ0EsK0RBQTJDO0FBQzNDLG1FQUErQztBQUMvQyx1RUFBbUQ7QUFDbkQsdUVBQW1EO0FBQ25ELG1FQUErQztBQUMvQyxpRUFBNkM7QUFDN0MsaUVBQTZDO0FBQzdDLG1FQUErQztBQUUvQyxrQkFBZSxLQUFLLEVBQUUsT0FBcUIsRUFBaUIsRUFBRTtJQUM1RCxPQUFPLENBQUMsS0FBSyxHQUFHO1FBQ2QsTUFBTSxFQUFFLGFBQVE7UUFDaEIsR0FBRyxFQUFFLGFBQVE7UUFDYixLQUFLLEVBQUUsZUFBVTtRQUNqQixHQUFHLEVBQUUsZUFBVTtRQUNmLFVBQVUsRUFBRSxpQkFBWTtRQUN4QixHQUFHLEVBQUUsaUJBQVk7UUFDakIsR0FBRyxFQUFFLGlCQUFZO1FBQ2pCLE9BQU8sRUFBRSxpQkFBWTtRQUNyQixLQUFLLEVBQUUsZUFBVTtRQUNqQixJQUFJLEVBQUUsY0FBUztRQUNmLElBQUksRUFBRSxjQUFTO1FBQ2YsS0FBSyxFQUFFLGVBQVU7S0FDbEIsQ0FBQTtBQUNILENBQUMsQ0FBQSJ9
@@ -10,6 +10,7 @@ const esp8266_1 = __importDefault(require("../toolbox/update/esp8266"));
10
10
  const esp32_1 = __importDefault(require("../toolbox/update/esp32"));
11
11
  const wasm_1 = __importDefault(require("../toolbox/update/wasm"));
12
12
  const pico_1 = __importDefault(require("../toolbox/update/pico"));
13
+ const nrf52_1 = __importDefault(require("../toolbox/update/nrf52"));
13
14
  exports.default = async (toolbox) => {
14
15
  toolbox.update = {
15
16
  darwin: mac_1.default,
@@ -23,6 +24,7 @@ exports.default = async (toolbox) => {
23
24
  esp32: esp32_1.default,
24
25
  wasm: wasm_1.default,
25
26
  pico: pico_1.default,
27
+ nrf52: nrf52_1.default,
26
28
  };
27
29
  };
28
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL3VwZGF0ZS1leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBNkM7QUFDN0Msb0VBQWlEO0FBQ2pELHdFQUFxRDtBQUNyRCx3RUFBcUQ7QUFDckQsb0VBQWlEO0FBQ2pELGtFQUErQztBQUMvQyxrRUFBK0M7QUFFL0Msa0JBQWUsS0FBSyxFQUFFLE9BQXFCLEVBQWlCLEVBQUU7SUFDNUQsT0FBTyxDQUFDLE1BQU0sR0FBRztRQUNmLE1BQU0sRUFBRSxhQUFTO1FBQ2pCLEdBQUcsRUFBRSxhQUFTO1FBQ2QsS0FBSyxFQUFFLGVBQVc7UUFDbEIsR0FBRyxFQUFFLGVBQVc7UUFDaEIsVUFBVSxFQUFFLGlCQUFhO1FBQ3pCLEdBQUcsRUFBRSxpQkFBYTtRQUNsQixHQUFHLEVBQUUsaUJBQWE7UUFDbEIsT0FBTyxFQUFFLGlCQUFhO1FBQ3RCLEtBQUssRUFBRSxlQUFXO1FBQ2xCLElBQUksRUFBRSxjQUFVO1FBQ2hCLElBQUksRUFBRSxjQUFVO0tBQ2pCLENBQUE7QUFDSCxDQUFDLENBQUEifQ==
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBkYXRlLWV4dGVuc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9leHRlbnNpb25zL3VwZGF0ZS1leHRlbnNpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFDQSxnRUFBNkM7QUFDN0Msb0VBQWlEO0FBQ2pELHdFQUFxRDtBQUNyRCx3RUFBcUQ7QUFDckQsb0VBQWlEO0FBQ2pELGtFQUErQztBQUMvQyxrRUFBK0M7QUFDL0Msb0VBQWlEO0FBRWpELGtCQUFlLEtBQUssRUFBRSxPQUFxQixFQUFpQixFQUFFO0lBQzVELE9BQU8sQ0FBQyxNQUFNLEdBQUc7UUFDZixNQUFNLEVBQUUsYUFBUztRQUNqQixHQUFHLEVBQUUsYUFBUztRQUNkLEtBQUssRUFBRSxlQUFXO1FBQ2xCLEdBQUcsRUFBRSxlQUFXO1FBQ2hCLFVBQVUsRUFBRSxpQkFBYTtRQUN6QixHQUFHLEVBQUUsaUJBQWE7UUFDbEIsR0FBRyxFQUFFLGlCQUFhO1FBQ2xCLE9BQU8sRUFBRSxpQkFBYTtRQUN0QixLQUFLLEVBQUUsZUFBVztRQUNsQixJQUFJLEVBQUUsY0FBVTtRQUNoQixJQUFJLEVBQUUsY0FBVTtRQUNoQixLQUFLLEVBQUUsZUFBVztLQUNuQixDQUFBO0FBQ0gsQ0FBQyxDQUFBIn0=
@@ -14,7 +14,7 @@ const moddable_1 = require("../setup/moddable");
14
14
  const devices_1 = require("../prompt/devices");
15
15
  const exec_1 = require("../system/exec");
16
16
  async function build({ listDevices, port, example, listExamples, log = false, projectPath, targetPlatform, mode, deployStatus, outputDir, config = {}, }) {
17
- var _a, _b, _c, _d, _e, _f;
17
+ var _a, _b, _c, _d, _e, _f, _g;
18
18
  const OS = (0, node_os_1.type)().toLowerCase();
19
19
  await (0, exec_1.sourceEnvironment)();
20
20
  if (!(0, moddable_1.moddableExists)()) {
@@ -68,9 +68,16 @@ async function build({ listDevices, port, example, listExamples, log = false, pr
68
68
  'pico/tiny2040',
69
69
  'pico/xiao_rp2040',
70
70
  'pico/pro_micro',
71
+ 'nrf52/moddable_four',
72
+ 'nrf52/dk',
73
+ 'nrf52/sparkfun',
74
+ 'nrf52/makerdiary',
75
+ 'nrf52/xiao',
76
+ 'nrf52/itsybitsy',
71
77
  'simulator/moddable_one',
72
78
  'simulator/moddable_two',
73
79
  'simulator/moddable_three',
80
+ 'simulator/moddable_four',
74
81
  'simulator/m5stickc',
75
82
  'simulator/m5paper',
76
83
  'simulator/nodemcu',
@@ -129,10 +136,14 @@ async function build({ listDevices, port, example, listExamples, log = false, pr
129
136
  }
130
137
  if (listExamples) {
131
138
  const exampleProjectPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'examples');
139
+ const contributedProjectPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'contributed');
132
140
  const examples = (_f = gluegun_1.filesystem.inspectTree(exampleProjectPath)) === null || _f === void 0 ? void 0 : _f.children;
141
+ const contributed = (_g = gluegun_1.filesystem.inspectTree(contributedProjectPath)) === null || _g === void 0 ? void 0 : _g.children;
133
142
  const choices = examples !== undefined
134
143
  ? examples.map((example) => (0, choices_1.collectChoicesFromTree)(example)).flat()
135
144
  : [];
145
+ if (contributed !== undefined)
146
+ choices.push(...contributed.map((project) => (0, choices_1.collectChoicesFromTree)(project)).flat());
136
147
  const { example: selectedExample } = await gluegun_1.prompt.ask([
137
148
  {
138
149
  type: 'autocomplete',
@@ -152,23 +163,29 @@ async function build({ listDevices, port, example, listExamples, log = false, pr
152
163
  }
153
164
  if (example !== undefined) {
154
165
  const exampleProjectPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'examples', example);
155
- if (gluegun_1.filesystem.exists(exampleProjectPath) === false) {
166
+ const contributedProjectPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'contributed', example);
167
+ if (gluegun_1.filesystem.exists(exampleProjectPath) === false &&
168
+ gluegun_1.filesystem.exists(contributedProjectPath) === false) {
156
169
  gluegun_1.print.error('Example project does not exist.');
157
170
  gluegun_1.print.info(`Lookup the available examples: xs-dev run --list-examples`);
158
171
  process.exit(1);
159
172
  }
160
- if (gluegun_1.filesystem.exists(gluegun_1.filesystem.resolve(exampleProjectPath, 'manifest.json')) === false) {
173
+ if (gluegun_1.filesystem.exists(gluegun_1.filesystem.resolve(exampleProjectPath, 'manifest.json')) === false &&
174
+ gluegun_1.filesystem.exists(gluegun_1.filesystem.resolve(contributedProjectPath, 'manifest.json')) === false) {
161
175
  gluegun_1.print.error('Example project must contain a manifest.json.');
162
176
  gluegun_1.print.info(`Lookup the available examples: xs-dev run --list-examples`);
163
177
  process.exit(1);
164
178
  }
165
- projectPath = exampleProjectPath;
179
+ projectPath =
180
+ gluegun_1.filesystem.exists(exampleProjectPath) === 'dir'
181
+ ? exampleProjectPath
182
+ : contributedProjectPath;
166
183
  }
167
184
  if (port !== undefined) {
168
185
  process.env.UPLOAD_PORT = port;
169
186
  }
170
187
  const spinner = gluegun_1.print.spin();
171
- spinner.start(`Building${deployStatus !== 'none' ? ' and deploying project' : ''} ${projectPath} on ${targetPlatform}`);
188
+ spinner.start(`Building${deployStatus !== 'none' ? ' and deploying project' : ''} ${projectPath} on ${targetPlatform}\n`);
172
189
  const configArgs = [
173
190
  '-m',
174
191
  `-p ${targetPlatform}`,
@@ -197,12 +214,21 @@ async function build({ listDevices, port, example, listExamples, log = false, pr
197
214
  });
198
215
  }
199
216
  else {
200
- await gluegun_1.system.exec(`mcconfig ${configArgs.join(' ')}`, {
201
- cwd: projectPath,
202
- stdout: process.stdout,
203
- stdin: process.stdin,
204
- shell: true,
217
+ process.on('SIGINT', () => {
218
+ void gluegun_1.system.exec(`pkill serial2xsbug`);
205
219
  });
220
+ try {
221
+ await gluegun_1.system.exec(`mcconfig ${configArgs.join(' ')}`, {
222
+ cwd: projectPath,
223
+ stdio: 'inherit',
224
+ shell: true,
225
+ });
226
+ }
227
+ catch (error) {
228
+ if (error instanceof Error && !error.message.includes('exit code 2')) {
229
+ gluegun_1.print.error(error);
230
+ }
231
+ }
206
232
  if (deployStatus === 'push') {
207
233
  await gluegun_1.system.exec(`mcconfig -t deploy -p ${targetPlatform} -o ${outputDir}`, {
208
234
  cwd: projectPath,
@@ -225,4 +251,4 @@ async function build({ listDevices, port, example, listExamples, log = false, pr
225
251
  }
226
252
  }
227
253
  exports.build = build;
228
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9idWlsZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBMEM7QUFDMUMscUNBQThDO0FBQzlDLGtFQUFtQztBQUNuQywrQkFBbUM7QUFDbkMscUNBQTJEO0FBQzNELCtDQUEwRDtBQUMxRCxnREFBa0Q7QUFDbEQsK0NBQWdEO0FBRWhELHlDQUFrRDtBQWtCM0MsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUMxQixXQUFXLEVBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osR0FBRyxHQUFHLEtBQUssRUFDWCxXQUFXLEVBQ1gsY0FBYyxFQUNkLElBQUksRUFDSixZQUFZLEVBQ1osU0FBUyxFQUNULE1BQU0sR0FBRyxFQUFFLEdBQ0Q7O0lBQ1YsTUFBTSxFQUFFLEdBQUcsSUFBQSxjQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQVksQ0FBQTtJQUVqRCxNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUU7UUFDckIsZUFBSyxDQUFDLEtBQUssQ0FDVCx5REFBeUQsc0JBQVksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQ2xHLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsU0FBUyxhQUFULFNBQVMsY0FBVCxTQUFTLElBQVQsU0FBUyxHQUFLLG9CQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFBO0lBRXZFLElBQUksV0FBVyxFQUFFO1FBQ2YsTUFBTSxPQUFPLEdBQUc7WUFDZCxLQUFLO1lBQ0wsbUJBQW1CO1lBQ25CLGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsYUFBYTtZQUNiLE9BQU87WUFDUCxvQkFBb0I7WUFD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
254
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9idWlsZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwyREFBMEM7QUFDMUMscUNBQThDO0FBQzlDLGtFQUFtQztBQUNuQywrQkFBbUM7QUFDbkMscUNBQTJEO0FBQzNELCtDQUEwRDtBQUMxRCxnREFBa0Q7QUFDbEQsK0NBQWdEO0FBRWhELHlDQUFrRDtBQWtCM0MsS0FBSyxVQUFVLEtBQUssQ0FBQyxFQUMxQixXQUFXLEVBQ1gsSUFBSSxFQUNKLE9BQU8sRUFDUCxZQUFZLEVBQ1osR0FBRyxHQUFHLEtBQUssRUFDWCxXQUFXLEVBQ1gsY0FBYyxFQUNkLElBQUksRUFDSixZQUFZLEVBQ1osU0FBUyxFQUNULE1BQU0sR0FBRyxFQUFFLEdBQ0Q7O0lBQ1YsTUFBTSxFQUFFLEdBQUcsSUFBQSxjQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQVksQ0FBQTtJQUVqRCxNQUFNLElBQUEsd0JBQWlCLEdBQUUsQ0FBQTtJQUV6QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUU7UUFDckIsZUFBSyxDQUFDLEtBQUssQ0FDVCx5REFBeUQsc0JBQVksQ0FBQyxFQUFFLENBQUMsd0JBQXdCLENBQ2xHLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsU0FBUyxhQUFULFNBQVMsY0FBVCxTQUFTLElBQVQsU0FBUyxHQUFLLG9CQUFVLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxFQUFBO0lBRXZFLElBQUksV0FBVyxFQUFFO1FBQ2YsTUFBTSxPQUFPLEdBQUc7WUFDZCxLQUFLO1lBQ0wsbUJBQW1CO1lBQ25CLGtCQUFrQjtZQUNsQixvQkFBb0I7WUFDcEIsYUFBYTtZQUNiLE9BQU87WUFDUCxvQkFBb0I7WUFD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
@@ -13,5 +13,6 @@ exports.DEVICE_ALIAS = Object.freeze({
13
13
  esp32: 'esp32',
14
14
  wasm: 'wasm',
15
15
  pico: 'pico',
16
+ nrf52: 'nrf52',
16
17
  });
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3Byb21wdC9kZXZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVhLFFBQUEsWUFBWSxHQUF1QyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVFLE9BQU8sRUFBRSxLQUFLO0lBQ2QsTUFBTSxFQUFFLEtBQUs7SUFDYixHQUFHLEVBQUUsS0FBSztJQUNWLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsS0FBSyxFQUFFLEtBQUs7SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsTUFBTTtJQUNaLElBQUksRUFBRSxNQUFNO0NBQ2IsQ0FBQyxDQUFBIn0=
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV2aWNlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3Byb21wdC9kZXZpY2VzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUVhLFFBQUEsWUFBWSxHQUF1QyxNQUFNLENBQUMsTUFBTSxDQUFDO0lBQzVFLE9BQU8sRUFBRSxLQUFLO0lBQ2QsTUFBTSxFQUFFLEtBQUs7SUFDYixHQUFHLEVBQUUsS0FBSztJQUNWLFVBQVUsRUFBRSxLQUFLO0lBQ2pCLEdBQUcsRUFBRSxLQUFLO0lBQ1YsS0FBSyxFQUFFLEtBQUs7SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLEdBQUcsRUFBRSxLQUFLO0lBQ1YsS0FBSyxFQUFFLE9BQU87SUFDZCxJQUFJLEVBQUUsTUFBTTtJQUNaLElBQUksRUFBRSxNQUFNO0lBQ1osS0FBSyxFQUFFLE9BQU87Q0FDZixDQUFDLENBQUEifQ==
@@ -0,0 +1,62 @@
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 os_1 = require("os");
9
+ const simple_plist_1 = __importDefault(require("simple-plist"));
10
+ const NC_PREFS_PLIST = 'com.apple.ncprefs.plist';
11
+ const DISK_AGENT_NC_PREF_ID = '_SYSTEM_CENTER_:com.apple.DiskArbitration.DiskArbitrationAgent';
12
+ async function default_1() {
13
+ var _a;
14
+ const spinner = gluegun_1.print.spin();
15
+ spinner.start('Beginning setup...');
16
+ const OS = (0, os_1.type)().toLowerCase();
17
+ if (OS !== 'darwin') {
18
+ gluegun_1.print.error(`OS "${OS}" not supported`);
19
+ process.exit(1);
20
+ }
21
+ const PREFS_DIR = gluegun_1.filesystem.resolve((_a = process.env.HOME) !== null && _a !== void 0 ? _a : '~', 'Library', 'Preferences');
22
+ const PREFS_BACKUP_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'ejectfix');
23
+ const NC_PREFS_PATH = gluegun_1.filesystem.resolve(PREFS_DIR, NC_PREFS_PLIST);
24
+ gluegun_1.filesystem.dir(PREFS_BACKUP_DIR);
25
+ if (gluegun_1.filesystem.exists(gluegun_1.filesystem.resolve(PREFS_BACKUP_DIR, NC_PREFS_PLIST)) !==
26
+ false) {
27
+ spinner.info('A backup of your notification preferences already exists.');
28
+ const shouldContinue = await gluegun_1.prompt.confirm('Would you like to override this backup and continue?');
29
+ if (!shouldContinue) {
30
+ gluegun_1.print.info('Cancelling ejectfix setup.');
31
+ process.exit(0);
32
+ }
33
+ }
34
+ if (gluegun_1.filesystem.exists(NC_PREFS_PATH) === false) {
35
+ spinner.fail(`Cannot find notification preferences file: ${NC_PREFS_PATH}`);
36
+ process.exit(1);
37
+ }
38
+ try {
39
+ gluegun_1.filesystem.copy(NC_PREFS_PATH, gluegun_1.filesystem.resolve(PREFS_BACKUP_DIR, NC_PREFS_PLIST), { overwrite: true });
40
+ }
41
+ catch (error) {
42
+ spinner.fail(`Error copying notification preferences: ${String(error)}`);
43
+ process.exit(1);
44
+ }
45
+ try {
46
+ const prefs = simple_plist_1.default.readFileSync(NC_PREFS_PATH);
47
+ for (const app of prefs.apps) {
48
+ if (app['bundle-id'] === DISK_AGENT_NC_PREF_ID) {
49
+ app.flags = (Number(app.flags) & ~0b00010000) | 0b01001000;
50
+ }
51
+ }
52
+ simple_plist_1.default.writeBinaryFileSync(NC_PREFS_PATH, prefs);
53
+ }
54
+ catch (error) {
55
+ spinner.fail(`Unable to update notification preferences: ${String(error)}`);
56
+ process.exit(1);
57
+ }
58
+ await gluegun_1.system.exec('killall usernoted cfprefsd');
59
+ spinner.succeed('Successfully updated notification preferences for `DISK NOT EJECTED PROPERLY` warning!');
60
+ }
61
+ exports.default = default_1;
62
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWplY3RmaXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lamVjdGZpeC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUEyRDtBQUMzRCwyQ0FBeUM7QUFDekMsMkJBQXlDO0FBQ3pDLGdFQUFnQztBQUVoQyxNQUFNLGNBQWMsR0FBRyx5QkFBeUIsQ0FBQTtBQUNoRCxNQUFNLHFCQUFxQixHQUN6QixnRUFBZ0UsQ0FBQTtBQUVuRCxLQUFLOztJQUNsQixNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBRW5DLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsSUFBSSxFQUFFLEtBQUssUUFBUSxFQUFFO1FBQ25CLGVBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLGlCQUFpQixDQUFDLENBQUE7UUFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNsQyxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxtQ0FBSSxHQUFHLEVBQ3ZCLFNBQVMsRUFDVCxhQUFhLENBQ2QsQ0FBQTtJQUNELE1BQU0sZ0JBQWdCLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQTtJQUNwRSxNQUFNLGFBQWEsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFFbkUsb0JBQVUsQ0FBQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsQ0FBQTtJQUVoQyxJQUNFLG9CQUFVLENBQUMsTUFBTSxDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLGdCQUFnQixFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBQ3ZFLEtBQUssRUFDTDtRQUNBLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkRBQTJELENBQUMsQ0FBQTtRQUN6RSxNQUFNLGNBQWMsR0FBRyxNQUFNLGdCQUFNLENBQUMsT0FBTyxDQUN6QyxzREFBc0QsQ0FDdkQsQ0FBQTtRQUNELElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDbkIsZUFBSyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO1lBQ3hDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDaEI7S0FDRjtJQUNELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQzlDLE9BQU8sQ0FBQyxJQUFJLENBQUMsOENBQThDLGFBQWEsRUFBRSxDQUFDLENBQUE7UUFDM0UsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELElBQUk7UUFDRixvQkFBVSxDQUFDLElBQUksQ0FDYixhQUFhLEVBQ2Isb0JBQVUsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLEVBQ3BELEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxDQUNwQixDQUFBO0tBQ0Y7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsMkNBQTJDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDeEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELElBQUk7UUFDRixNQUFNLEtBQUssR0FDVCxzQkFBSyxDQUFDLFlBQVksQ0FFZixhQUFhLENBQUMsQ0FBQTtRQUNuQixLQUFLLE1BQU0sR0FBRyxJQUFJLEtBQUssQ0FBQyxJQUFJLEVBQUU7WUFDNUIsSUFBSSxHQUFHLENBQUMsV0FBVyxDQUFDLEtBQUsscUJBQXFCLEVBQUU7Z0JBQzlDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLEdBQUcsVUFBVSxDQUFBO2FBQzNEO1NBQ0Y7UUFDRCxzQkFBSyxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxLQUFLLENBQUMsQ0FBQTtLQUNoRDtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsT0FBTyxDQUFDLElBQUksQ0FBQyw4Q0FBOEMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtRQUMzRSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQy9DLE9BQU8sQ0FBQyxPQUFPLENBQ2Isd0ZBQXdGLENBQ3pGLENBQUE7QUFDSCxDQUFDO0FBckVELDRCQXFFQyJ9
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.installPython = void 0;
4
+ const gluegun_1 = require("gluegun");
5
+ async function installPython(spinner) {
6
+ if (gluegun_1.system.which('python') === null) {
7
+ // For some reason, system.which does not work with winget. This is a workaround for now.
8
+ try {
9
+ await gluegun_1.system.exec('where winget');
10
+ }
11
+ catch (error) {
12
+ gluegun_1.print.error('Python 2.7 is required.');
13
+ gluegun_1.print.info('You can download and install Python from python.org/downloads');
14
+ gluegun_1.print.info('Or xs-dev can manage installing Python and other dependencies using the Windows Package Manager Client (winget).');
15
+ gluegun_1.print.info('You can install winget via the App Installer package in the Microsoft Store.');
16
+ gluegun_1.print.info('Please install either Python or winget, then launch a new Command Prompt and re-run this setup.');
17
+ throw new Error('Python is required');
18
+ }
19
+ spinner.start('Installing python from winget');
20
+ await gluegun_1.system.exec('winget install -e --id Python.Python.2 --silent');
21
+ spinner.succeed();
22
+ gluegun_1.print.info('Python successfully installed. Please close this window and launch a new Moddable Command Prompt to refresh environment variables, then re-run this setup.');
23
+ throw new Error('Command Prompt restart needed');
24
+ }
25
+ }
26
+ exports.installPython = installPython;
27
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL25yZjUyL3dpbmRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQXFEO0FBRTlDLEtBQUssVUFBVSxhQUFhLENBQ2pDLE9BQXlDO0lBRXpDLElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ25DLHlGQUF5RjtRQUN6RixJQUFJO1lBQ0YsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQTtTQUNsQztRQUFDLE9BQU8sS0FBSyxFQUFFO1lBQ2QsZUFBSyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1lBQ3RDLGVBQUssQ0FBQyxJQUFJLENBQ1IsK0RBQStELENBQ2hFLENBQUE7WUFDRCxlQUFLLENBQUMsSUFBSSxDQUNSLGtIQUFrSCxDQUNuSCxDQUFBO1lBQ0QsZUFBSyxDQUFDLElBQUksQ0FDUiw4RUFBOEUsQ0FDL0UsQ0FBQTtZQUNELGVBQUssQ0FBQyxJQUFJLENBQ1IsaUdBQWlHLENBQ2xHLENBQUE7WUFDRCxNQUFNLElBQUksS0FBSyxDQUFDLG9CQUFvQixDQUFDLENBQUE7U0FDdEM7UUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLCtCQUErQixDQUFDLENBQUE7UUFDOUMsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxpREFBaUQsQ0FBQyxDQUFBO1FBQ3BFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtRQUNqQixlQUFLLENBQUMsSUFBSSxDQUNSLDRKQUE0SixDQUM3SixDQUFBO1FBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0tBQ2pEO0FBQ0gsQ0FBQztBQWhDRCxzQ0FnQ0MifQ==
@@ -0,0 +1,125 @@
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 axios_1 = __importDefault(require("axios"));
7
+ const fs_1 = require("fs");
8
+ const gluegun_1 = require("gluegun");
9
+ const os_1 = require("os");
10
+ const stream_1 = require("stream");
11
+ const tar_fs_1 = require("tar-fs");
12
+ const util_1 = require("util");
13
+ const unzip_stream_1 = require("unzip-stream");
14
+ // eslint-disable-next-line @typescript-eslint/prefer-ts-expect-error
15
+ // @ts-ignore
16
+ const node_liblzma_1 = require("node-liblzma");
17
+ const devices_1 = require("../prompt/devices");
18
+ const exec_1 = require("../system/exec");
19
+ const constants_1 = require("./constants");
20
+ const moddable_1 = require("./moddable");
21
+ const windows_1 = require("./windows");
22
+ const upsert_1 = __importDefault(require("../patching/upsert"));
23
+ const windows_2 = require("./nrf52/windows");
24
+ const finishedPromise = (0, util_1.promisify)(stream_1.finished);
25
+ const ARCH_ALIAS = {
26
+ darwin_arm64: 'darwin-arm64',
27
+ darwin_x64: 'darwin-x86_64',
28
+ linux_x64: 'x86_64',
29
+ windows_nt_x64: 'mingw-w64-i686',
30
+ };
31
+ async function default_1() {
32
+ const OS = (0, os_1.type)().toLowerCase();
33
+ const isWindows = OS === 'windows_nt';
34
+ const TOOLCHAIN = `arm-gnu-toolchain-12.2.rel1-${ARCH_ALIAS[`${OS}_${(0, os_1.arch)()}`]}-arm-none-eabi`;
35
+ const TOOLCHAIN_DOWNLOAD = `https://developer.arm.com/-/media/Files/downloads/gnu/12.2.rel1/binrel/${TOOLCHAIN}.${isWindows ? 'zip' : 'tar.xz'}`;
36
+ const ADAFRUIT_NRF52_BOOTLOADER_UF2CONV_DOWNLOAD = 'https://github.com/Moddable-OpenSource/tools/releases/download/v1.0.0/uf2conv.py';
37
+ const NRF5_SDK = 'nRF5_SDK_17.0.2_d674dde';
38
+ const NRF5_SDK_DOWNLOAD = `https://github.com/Moddable-OpenSource/tools/releases/download/v1.0.0/${NRF5_SDK}-mod.zip`;
39
+ const NRF52_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'nrf52');
40
+ const TOOLCHAIN_PATH = gluegun_1.filesystem.resolve(NRF52_DIR, TOOLCHAIN);
41
+ const UF2CONV_PATH = gluegun_1.filesystem.resolve(NRF52_DIR, 'uf2conv.py');
42
+ const NRF5_SDK_PATH = gluegun_1.filesystem.resolve(NRF52_DIR, NRF5_SDK);
43
+ await (0, exec_1.sourceEnvironment)();
44
+ const spinner = gluegun_1.print.spin();
45
+ spinner.start('Setting up nrf52 tools');
46
+ if (!(0, moddable_1.moddableExists)()) {
47
+ spinner.fail(`Moddable tooling required. Run 'xs-dev setup --device ${devices_1.DEVICE_ALIAS[OS]}' before trying again.`);
48
+ process.exit(1);
49
+ }
50
+ if (isWindows) {
51
+ await (0, windows_1.ensureModdableCommandPrompt)(spinner);
52
+ }
53
+ spinner.info('Ensuring nrf52 directory');
54
+ gluegun_1.filesystem.dir(NRF52_DIR);
55
+ if (gluegun_1.filesystem.exists(TOOLCHAIN_PATH) === false) {
56
+ spinner.start('Downloading GNU Arm Embedded Toolchain');
57
+ const writer = isWindows
58
+ ? (0, unzip_stream_1.Extract)({ path: NRF52_DIR })
59
+ : (0, tar_fs_1.extract)(NRF52_DIR, { readable: true });
60
+ const unxz = (0, node_liblzma_1.createUnxz)();
61
+ const response = await axios_1.default.get(TOOLCHAIN_DOWNLOAD, {
62
+ responseType: 'stream',
63
+ });
64
+ const stream = isWindows ? response.data : response.data.pipe(unxz);
65
+ stream.pipe(writer);
66
+ await finishedPromise(writer);
67
+ spinner.succeed();
68
+ }
69
+ if (gluegun_1.filesystem.exists(UF2CONV_PATH) === false) {
70
+ spinner.start('Downloading Adafruit nRF52 Bootloader');
71
+ const writer = (0, fs_1.createWriteStream)(UF2CONV_PATH, { mode: 0o755 });
72
+ const response = await axios_1.default.get(ADAFRUIT_NRF52_BOOTLOADER_UF2CONV_DOWNLOAD, {
73
+ responseType: 'stream',
74
+ });
75
+ response.data.pipe(writer);
76
+ await finishedPromise(writer);
77
+ spinner.succeed();
78
+ }
79
+ if (gluegun_1.filesystem.exists(NRF5_SDK_PATH) === false) {
80
+ spinner.start('Downloading nRF5 SDK');
81
+ const writer = (0, unzip_stream_1.Extract)({ path: NRF52_DIR });
82
+ const response = await axios_1.default.get(NRF5_SDK_DOWNLOAD, {
83
+ responseType: 'stream',
84
+ });
85
+ response.data.pipe(writer);
86
+ await finishedPromise(writer);
87
+ spinner.succeed();
88
+ }
89
+ if (OS === 'darwin' || OS === 'linux') {
90
+ if (process.env.NRF_ROOT === undefined ||
91
+ process.env.NRF_SDK_DIR === undefined) {
92
+ spinner.info('Configuring $NRF_ROOT and $NRF_SDK_DIR');
93
+ process.env.NRF_ROOT = NRF52_DIR;
94
+ process.env.NRF_SDK_DIR = NRF5_SDK_PATH;
95
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export NRF_ROOT=${process.env.NRF_ROOT}\nexport NRF_SDK_DIR=${process.env.NRF_SDK_DIR}`);
96
+ }
97
+ }
98
+ else {
99
+ process.env.NRF_ROOT = NRF52_DIR;
100
+ process.env.NRF52_SDK_PATH = NRF5_SDK_PATH;
101
+ await (0, windows_1.setEnv)('NRF_ROOT', NRF52_DIR);
102
+ await (0, windows_1.setEnv)('NRF52_SDK_PATH', NRF5_SDK_PATH);
103
+ try {
104
+ await (0, windows_2.installPython)(spinner);
105
+ }
106
+ catch (error) {
107
+ // Command Prompt restart needed
108
+ process.exit(1);
109
+ }
110
+ }
111
+ if (OS === 'linux') {
112
+ try {
113
+ await (0, exec_1.execWithSudo)('adduser $USER dialout', { process });
114
+ }
115
+ catch (_error) {
116
+ gluegun_1.print.warning(`Unable to provide ttyUSB0 permission to the current user. Please run "sudo adduser <username> dialout" before trying to attempting to build projects for your nrf52 device.`);
117
+ }
118
+ }
119
+ spinner.succeed(`
120
+ Successfully set up nrf52 platform support for Moddable!
121
+ Test out the setup by starting a new ${isWindows ? 'Moddable Command Prompt' : 'terminal session'}, plugging in your device, and running: xs-dev run --example helloworld --device nrf52
122
+ `);
123
+ }
124
+ exports.default = default_1;
125
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnJmNTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9ucmY1Mi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLGtEQUF5QjtBQUN6QiwyQkFBc0M7QUFDdEMscUNBQTJDO0FBQzNDLDJCQUErQztBQUMvQyxtQ0FBaUM7QUFDakMsbUNBQWdDO0FBQ2hDLCtCQUFnQztBQUNoQywrQ0FBb0Q7QUFDcEQscUVBQXFFO0FBQ3JFLGFBQWE7QUFDYiwrQ0FBeUM7QUFFekMsK0NBQWdEO0FBQ2hELHlDQUFnRTtBQUNoRSwyQ0FBNEQ7QUFDNUQseUNBQTJDO0FBQzNDLHVDQUErRDtBQUMvRCxnRUFBdUM7QUFDdkMsNkNBQStDO0FBRS9DLE1BQU0sZUFBZSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxpQkFBUSxDQUFDLENBQUE7QUFFM0MsTUFBTSxVQUFVLEdBQTJCO0lBQ3pDLFlBQVksRUFBRSxjQUFjO0lBQzVCLFVBQVUsRUFBRSxlQUFlO0lBQzNCLFNBQVMsRUFBRSxRQUFRO0lBQ25CLGNBQWMsRUFBRSxnQkFBZ0I7Q0FDakMsQ0FBQTtBQUNjLEtBQUs7SUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBQSxTQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQVksQ0FBQTtJQUNqRCxNQUFNLFNBQVMsR0FBRyxFQUFFLEtBQUssWUFBWSxDQUFBO0lBQ3JDLE1BQU0sU0FBUyxHQUFHLCtCQUNoQixVQUFVLENBQUMsR0FBRyxFQUFFLElBQUksSUFBQSxTQUFJLEdBQUUsRUFBRSxDQUM5QixnQkFBZ0IsQ0FBQTtJQUNoQixNQUFNLGtCQUFrQixHQUFHLDBFQUEwRSxTQUFTLElBQzVHLFNBQVMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxRQUN0QixFQUFFLENBQUE7SUFDRixNQUFNLDBDQUEwQyxHQUM5QyxrRkFBa0YsQ0FBQTtJQUNwRixNQUFNLFFBQVEsR0FBRyx5QkFBeUIsQ0FBQTtJQUMxQyxNQUFN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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('nRF52 update is not currently supported');
6
+ }
7
+ exports.default = default_1;
8
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnJmNTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvbnJmNTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBK0I7QUFFaEIsS0FBSztJQUNsQixlQUFLLENBQUMsT0FBTyxDQUFDLHlDQUF5QyxDQUFDLENBQUE7QUFDMUQsQ0FBQztBQUZELDRCQUVDIn0=
@@ -0,0 +1 @@
1
+ export default function (): Promise<void>;
@@ -0,0 +1,2 @@
1
+ import { GluegunPrint } from 'gluegun';
2
+ export declare function installPython(spinner: ReturnType<GluegunPrint['spin']>): Promise<void>;
@@ -0,0 +1 @@
1
+ export default function (): Promise<void>;
@@ -0,0 +1 @@
1
+ export default function (): Promise<void>;
@@ -1,7 +1,7 @@
1
1
  import type { GluegunToolbox } from 'gluegun';
2
2
  import type { PlatformSetupArgs, SetupArgs } from './toolbox/setup/types';
3
3
  import type { BuildArgs } from './toolbox/build/index';
4
- export declare type Device = 'darwin' | 'mac' | 'linux' | 'lin' | 'windows_nt' | 'win' | 'esp' | 'esp8266' | 'esp32' | 'wasm' | 'pico';
4
+ export declare type Device = 'darwin' | 'mac' | 'linux' | 'lin' | 'windows_nt' | 'win' | 'esp' | 'esp8266' | 'esp32' | 'wasm' | 'pico' | 'nrf52';
5
5
  export interface XSDevToolbox extends GluegunToolbox {
6
6
  setup: Record<Device, (() => Promise<void>) | ((args: SetupArgs | PlatformSetupArgs) => Promise<void>)>;
7
7
  update: Record<Device, (() => Promise<void>) | ((args: SetupArgs) => Promise<void>)>;
@@ -19,6 +19,12 @@ This process mostly automates the instructions provided by [Moddable's "Getting
19
19
 
20
20
  [Homebrew](https://brew.sh/) is assumed to be installed.
21
21
 
22
+ [XZ utils](https://tukaani.org/xz/) are required to install the CLI due to a dependency for decompressing the ARM toolchain used for nrf52 development. It can be installed with homebrew:
23
+
24
+ ```
25
+ brew install xz
26
+ ```
27
+
22
28
  The [Xcode Command Line tools](https://developer.apple.com/xcode/) are required; `setup` will check for their existence before continuing.
23
29
 
24
30
  A symlink for [`xsbug.app`](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/xs/xsbug.md) is created in `/Applications` for easy access through Launchpad.
@@ -74,3 +80,9 @@ There are some utilities that are not included in the Moddable SDK or other plat
74
80
  ```
75
81
  xs-dev setup --tool fontbm
76
82
  ```
83
+
84
+ `ejectfix`: not a downloadable tool, rather a environment preference to disable the `DISK NOT EJECTED PROPERLY` notification while working with the nrf52 on MacOS. This will automate the process described by [the Adafruit blog](https://blog.adafruit.com/2021/05/11/how-to-tone-down-macos-big-surs-circuitpy-eject-notifications/):
85
+
86
+ ```
87
+ xs-dev setup --tool ejectfix
88
+ ```
@@ -61,7 +61,7 @@ Check out the [npm docs](https://docs.npmjs.com/resolving-eacces-permissions-err
61
61
 
62
62
  ## Linux Permissions
63
63
 
64
- Setup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/bionic/ssh-askpass) to prompt for permission when installing other tools and dependencies.
64
+ Setup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/focal/ssh-askpass) to prompt for permission when installing other tools and dependencies.
65
65
 
66
66
  ## Choose your hardware adventure
67
67
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "xs-dev",
3
- "version": "0.26.0",
3
+ "version": "0.27.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
  "bin": {
@@ -44,16 +44,17 @@
44
44
  "@octokit/rest": "^19.0.3",
45
45
  "axios": "^1.2.1",
46
46
  "gluegun": "^5.1.2",
47
+ "node-liblzma": "^1.1.9",
47
48
  "serialport": "^10.3.0",
48
49
  "serve-handler": "^6.1.3",
49
- "solid-js": "^1.4.3",
50
+ "simple-plist": "^1.3.1",
50
51
  "tar-fs": "^2.1.1",
51
52
  "unzip-stream": "^0.3.1",
52
53
  "usb": "^2.2.0",
53
54
  "windows-shortcuts": "^0.1.6"
54
55
  },
55
56
  "devDependencies": {
56
- "@astrojs/starlight": "^0.1.3",
57
+ "@astrojs/starlight": "^0.7.2",
57
58
  "@babel/core": ">=7.20.12 <8.0.0",
58
59
  "@changesets/cli": "^2.19.0",
59
60
  "@justinribeiro/lite-youtube": "^1.5.0",
@@ -65,7 +66,7 @@
65
66
  "@types/unzip-stream": "^0.3.1",
66
67
  "@typescript-eslint/eslint-plugin": "^4.33.0",
67
68
  "@typescript-eslint/parser": "^4.33.0",
68
- "astro": "2.5.0",
69
+ "astro": "2.10.7",
69
70
  "eslint": "^7.32.0",
70
71
  "eslint-config-prettier": "^8.3.0",
71
72
  "eslint-config-standard-with-typescript": "^21.0.1",
@@ -76,6 +77,7 @@
76
77
  "prettier": "^2.5.1",
77
78
  "release-it": "^15.11.0",
78
79
  "rollup": "^2.78.1",
80
+ "solid-js": "^1.4.3",
79
81
  "tailwindcss": "^3.0.24",
80
82
  "ts-jest": "^27.1.2",
81
83
  "ts-node": "^10.9.1",
@@ -101,7 +103,9 @@
101
103
  "ansi-regex@>=3.0.0 <3.0.1": ">=3.0.1",
102
104
  "ansi-regex@>=4.0.0 <4.1.1": ">=4.1.1",
103
105
  "minimatch@<3.0.5": ">=3.0.5",
104
- "conventional-changelog-conventionalcommits": ">=5.0.0"
106
+ "conventional-changelog-conventionalcommits": ">=5.0.0",
107
+ "string-width": "<5.0.0",
108
+ "ansi-regex": "<6.0.0"
105
109
  }
106
110
  },
107
111
  "release-it": {