xs-dev 0.0.1 → 0.3.0
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 +36 -1
- package/build/commands/run.js +54 -5
- package/build/commands/setup.js +23 -4
- package/build/commands/teardown.js +23 -0
- package/build/toolbox/setup/constants.js +20 -10
- package/build/toolbox/setup/esp32/linux.js +11 -0
- package/build/toolbox/setup/esp32/mac.js +36 -0
- package/build/toolbox/setup/esp32.js +39 -42
- package/build/toolbox/setup/esp8266/linux.js +11 -0
- package/build/toolbox/setup/esp8266/mac.js +21 -0
- package/build/toolbox/setup/esp8266.js +28 -24
- package/build/toolbox/setup/linux.js +58 -2
- package/build/toolbox/setup/mac.js +28 -22
- package/build/toolbox/setup/moddable.js +10 -0
- package/build/toolbox/setup/wasm.js +62 -25
- package/build/toolbox/system/exec.js +33 -0
- package/build/toolbox/update/linux.js +33 -2
- package/build/toolbox/update/mac.js +5 -3
- package/build/types/commands/teardown.d.ts +3 -0
- package/build/types/toolbox/setup/constants.d.ts +3 -2
- package/build/types/toolbox/setup/esp32/linux.d.ts +2 -0
- package/build/types/toolbox/setup/esp32/mac.d.ts +2 -0
- package/build/types/toolbox/setup/esp8266/linux.d.ts +2 -0
- package/build/types/toolbox/setup/esp8266/mac.d.ts +2 -0
- package/build/types/toolbox/setup/moddable.d.ts +1 -0
- package/build/types/toolbox/system/exec.d.ts +5 -0
- package/package.json +7 -2
package/README.md
CHANGED
|
@@ -34,7 +34,7 @@ npm install -g xs-dev
|
|
|
34
34
|
|
|
35
35
|
## Features
|
|
36
36
|
|
|
37
|
-
### Moddable SDK
|
|
37
|
+
### Moddable SDK setup / update / teardown
|
|
38
38
|
|
|
39
39
|
This process mostly automates the instructions provided by Moddable's "Getting Started" documentation with a few exceptions:
|
|
40
40
|
|
|
@@ -54,6 +54,12 @@ Run script for updating SDK:
|
|
|
54
54
|
xs-dev update
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
+
Remove all setup and environment changes with teardown command:
|
|
58
|
+
|
|
59
|
+
```
|
|
60
|
+
xs-dev teardown
|
|
61
|
+
```
|
|
62
|
+
|
|
57
63
|
### ESP32 SDK install / setup
|
|
58
64
|
|
|
59
65
|
This process automates the instructions for downloading and building the esp-idf SDK tooling. This tooling will be placed in the `~/.local/share/esp32` directory, which will be created if it doesn't exist.
|
|
@@ -211,3 +217,32 @@ xs-dev remove network/wifi
|
|
|
211
217
|
```
|
|
212
218
|
|
|
213
219
|
Updates the `manifest.json` to remove the dependency.
|
|
220
|
+
|
|
221
|
+
## Development
|
|
222
|
+
|
|
223
|
+
Clone the project and install dependencies. We're using [pnpm](https://pnpm.io/) and [volta](https://volta.sh/) to manage packages and Node.
|
|
224
|
+
|
|
225
|
+
```
|
|
226
|
+
git clone https://github.com/HipsterBrown/xs-dev.git
|
|
227
|
+
cd xs-dev
|
|
228
|
+
pnpm install
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Link dev version of CLI using `pnpm`, which will override any other globally installed version:
|
|
232
|
+
|
|
233
|
+
```
|
|
234
|
+
pnpm link --global
|
|
235
|
+
pnpm link --global xs-dev
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
Or create an alias to clearly denote the local version of the CLI:
|
|
239
|
+
|
|
240
|
+
```
|
|
241
|
+
alias local-xs-dev=$PWD/bin/xs-dev
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
To maintain the alias between shell sessions, for example I use zsh:
|
|
245
|
+
|
|
246
|
+
```
|
|
247
|
+
echo "alias local-xs-dev=$PWD/bin/xs-dev" >> ~/.zshrc
|
|
248
|
+
```
|
package/build/commands/run.js
CHANGED
|
@@ -22,9 +22,52 @@ const command = {
|
|
|
22
22
|
run: async ({ parameters, print, system, filesystem, prompt }) => {
|
|
23
23
|
var _a, _b, _c;
|
|
24
24
|
const currentPlatform = (0, os_1.type)().toLowerCase();
|
|
25
|
-
const { device = currentPlatform, port, example, listExamples = false, } = parameters.options;
|
|
26
|
-
|
|
25
|
+
const { device = currentPlatform, port, example, listExamples = false, listDevices = false, } = parameters.options;
|
|
26
|
+
let targetPlatform = (_a = DEVICE_ALIAS[device]) !== null && _a !== void 0 ? _a : device;
|
|
27
27
|
let projectPath = filesystem.resolve((_b = parameters.first) !== null && _b !== void 0 ? _b : '.');
|
|
28
|
+
if (listDevices) {
|
|
29
|
+
const choices = [
|
|
30
|
+
'esp',
|
|
31
|
+
'esp/moddable_zero',
|
|
32
|
+
'esp/moddable_one',
|
|
33
|
+
'esp/moddable_three',
|
|
34
|
+
'esp/nodemcu',
|
|
35
|
+
'esp32',
|
|
36
|
+
'esp32/moddable_two',
|
|
37
|
+
'esp32/nodemcu',
|
|
38
|
+
'esp32/m5stack',
|
|
39
|
+
'esp32/m5stack_core2',
|
|
40
|
+
'esp32/m5stick_fire',
|
|
41
|
+
'esp32/m5atom_echo',
|
|
42
|
+
'esp32/m5atom_lite',
|
|
43
|
+
'esp32/m5atom_matrix',
|
|
44
|
+
'esp32/m5paper',
|
|
45
|
+
'esp32/m5core_ink',
|
|
46
|
+
'esp32/heltec_wifi_kit_32',
|
|
47
|
+
'esp32/esp32_thing',
|
|
48
|
+
'esp32/esp32_thing_plus',
|
|
49
|
+
'esp32/wrover_kit',
|
|
50
|
+
'esp32/kaluga',
|
|
51
|
+
'esp32/saola_wroom',
|
|
52
|
+
'esp32/saola_wrover',
|
|
53
|
+
'wasm',
|
|
54
|
+
];
|
|
55
|
+
const { device: selectedDevice } = await prompt.ask([
|
|
56
|
+
{
|
|
57
|
+
type: 'autocomplete',
|
|
58
|
+
name: 'device',
|
|
59
|
+
message: 'Here are the available target devices:',
|
|
60
|
+
choices,
|
|
61
|
+
},
|
|
62
|
+
]);
|
|
63
|
+
if (selectedDevice !== '' && selectedDevice !== undefined) {
|
|
64
|
+
targetPlatform = selectedDevice;
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
print.warning('Please select a target device to run');
|
|
68
|
+
process.exit(0);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
28
71
|
if (listExamples) {
|
|
29
72
|
const exampleProjectPath = filesystem.resolve(String(process.env.MODDABLE), 'examples');
|
|
30
73
|
const examples = (_c = filesystem.inspectTree(exampleProjectPath)) === null || _c === void 0 ? void 0 : _c.children;
|
|
@@ -39,8 +82,14 @@ const command = {
|
|
|
39
82
|
choices,
|
|
40
83
|
},
|
|
41
84
|
]);
|
|
42
|
-
|
|
43
|
-
|
|
85
|
+
if (selectedExample !== '' && selectedExample !== undefined) {
|
|
86
|
+
print.info(`Running the example: xs-dev run --example ${selectedExample}`);
|
|
87
|
+
projectPath = filesystem.resolve(exampleProjectPath, selectedExample);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
print.warning('Please select an example to run.');
|
|
91
|
+
process.exit(0);
|
|
92
|
+
}
|
|
44
93
|
}
|
|
45
94
|
if (example !== undefined) {
|
|
46
95
|
const exampleProjectPath = filesystem.resolve(String(process.env.MODDABLE), 'examples', example);
|
|
@@ -73,4 +122,4 @@ const command = {
|
|
|
73
122
|
},
|
|
74
123
|
};
|
|
75
124
|
exports.default = command;
|
|
76
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
125
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDJCQUF5QztBQUN6QyxrRUFBbUM7QUFDbkMsK0JBQW1DO0FBRW5DLHVEQUFrRTtBQVVsRSxNQUFNLFlBQVksR0FBdUMsTUFBTSxDQUFDLE1BQU0sQ0FBQztJQUNyRSxPQUFPLEVBQUUsS0FBSztJQUNkLE1BQU0sRUFBRSxLQUFLO0lBQ2IsVUFBVSxFQUFFLEtBQUs7SUFDakIsS0FBSyxFQUFFLEtBQUs7SUFDWixHQUFHLEVBQUUsS0FBSztJQUNWLEtBQUssRUFBRSxPQUFPO0lBQ2QsSUFBSSxFQUFFLE1BQU07Q0FDYixDQUFDLENBQUE7QUFFRixNQUFNLE9BQU8sR0FBaUM7SUFDNUMsSUFBSSxFQUFFLEtBQUs7SUFDWCxXQUFXLEVBQUUsd0RBQXdEO0lBQ3JFLEdBQUcsRUFBRSxLQUFLLEVBQUUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBRTs7UUFDL0QsTUFBTSxlQUFlLEdBQVcsSUFBQSxTQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQVksQ0FBQTtRQUN0RSxNQUFNLEVBQ0osTUFBTSxHQUFHLGVBQWUsRUFDeEIsSUFBSSxFQUNKLE9BQU8sRUFDUCxZQUFZLEdBQUcsS0FBSyxFQUNwQixXQUFXLEdBQUcsS0FBSyxHQUNwQixHQUFlLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFDbEMsSUFBSSxjQUFjLEdBQVcsTUFBQSxZQUFZLENBQUMsTUFBTSxDQUFDLG1DQUFJLE1BQU0sQ0FBQTtRQUMzRCxJQUFJLFdBQVcsR0FBRyxVQUFVLENBQUMsT0FBTyxDQUFDLE1BQUEsVUFBVSxDQUFDLEtBQUssbUNBQUksR0FBRyxDQUFDLENBQUE7UUFFN0QsSUFBSSxXQUFXLEVBQUU7WUFDZixNQUFNLE9BQU8sR0FBRztnQkFDZCxLQUFLO2dCQUNM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
|
package/build/commands/setup.js
CHANGED
|
@@ -4,11 +4,30 @@ const os_1 = require("os");
|
|
|
4
4
|
const command = {
|
|
5
5
|
name: 'setup',
|
|
6
6
|
description: 'Download and build Moddable tooling for various platform targets',
|
|
7
|
-
run: async ({ parameters, setup }) => {
|
|
7
|
+
run: async ({ parameters, setup, prompt, print }) => {
|
|
8
8
|
const currentPlatform = (0, os_1.type)().toLowerCase();
|
|
9
|
-
const { device =
|
|
10
|
-
|
|
9
|
+
const { device, listDevices = false } = parameters.options;
|
|
10
|
+
let target = device !== null && device !== void 0 ? device : currentPlatform;
|
|
11
|
+
if (device === undefined && listDevices) {
|
|
12
|
+
const choices = ['esp8266', 'esp32', 'wasm', currentPlatform];
|
|
13
|
+
const { device: selectedDevice } = await prompt.ask([
|
|
14
|
+
{
|
|
15
|
+
type: 'autocomplete',
|
|
16
|
+
name: 'device',
|
|
17
|
+
message: 'Here are the available target devices:',
|
|
18
|
+
choices,
|
|
19
|
+
},
|
|
20
|
+
]);
|
|
21
|
+
if (selectedDevice !== '' && selectedDevice !== undefined) {
|
|
22
|
+
target = selectedDevice;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
print.warning('Please select a target device to run');
|
|
26
|
+
process.exit(0);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
await setup[target]();
|
|
11
30
|
},
|
|
12
31
|
};
|
|
13
32
|
exports.default = command;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvc2V0dXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwyQkFBeUM7QUFRekMsTUFBTSxPQUFPLEdBQWlDO0lBQzVDLElBQUksRUFBRSxPQUFPO0lBQ2IsV0FBVyxFQUNULGtFQUFrRTtJQUNwRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTtRQUNsRCxNQUFNLGVBQWUsR0FBVyxJQUFBLFNBQVksR0FBRSxDQUFDLFdBQVcsRUFBWSxDQUFBO1FBQ3RFLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxHQUFHLEtBQUssRUFBRSxHQUFpQixVQUFVLENBQUMsT0FBTyxDQUFBO1FBQ3hFLElBQUksTUFBTSxHQUFXLE1BQU0sYUFBTixNQUFNLGNBQU4sTUFBTSxHQUFJLGVBQWUsQ0FBQTtRQUU5QyxJQUFJLE1BQU0sS0FBSyxTQUFTLElBQUksV0FBVyxFQUFFO1lBQ3ZDLE1BQU0sT0FBTyxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUE7WUFDN0QsTUFBTSxFQUFFLE1BQU0sRUFBRSxjQUFjLEVBQUUsR0FBRyxNQUFNLE1BQU0sQ0FBQyxHQUFHLENBQUM7Z0JBQ2xEO29CQUNFLElBQUksRUFBRSxjQUFjO29CQUNwQixJQUFJLEVBQUUsUUFBUTtvQkFDZCxPQUFPLEVBQUUsd0NBQXdDO29CQUNqRCxPQUFPO2lCQUNSO2FBQ0YsQ0FBQyxDQUFBO1lBRUYsSUFBSSxjQUFjLEtBQUssRUFBRSxJQUFJLGNBQWMsS0FBSyxTQUFTLEVBQUU7Z0JBQ3pELE1BQU0sR0FBRyxjQUF3QixDQUFBO2FBQ2xDO2lCQUFNO2dCQUNMLEtBQUssQ0FBQyxPQUFPLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtnQkFDckQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTthQUNoQjtTQUNGO1FBRUQsTUFBTSxLQUFLLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQTtJQUN2QixDQUFDO0NBQ0YsQ0FBQTtBQUVELGtCQUFlLE9BQU8sQ0FBQSJ9
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const constants_1 = require("../toolbox/setup/constants");
|
|
4
|
+
const command = {
|
|
5
|
+
name: 'teardown',
|
|
6
|
+
description: 'Remove all installed git repos and toolchains, unset environment changes',
|
|
7
|
+
run: async ({ print, filesystem, patching }) => {
|
|
8
|
+
const PROFILE_PATH = (0, constants_1.getProfilePath)();
|
|
9
|
+
const spinner = print.spin();
|
|
10
|
+
spinner.start('Tearing down Moddable tools and platform dependencies');
|
|
11
|
+
filesystem.remove(constants_1.EXPORTS_FILE_PATH);
|
|
12
|
+
filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'moddable'));
|
|
13
|
+
filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'wasm'));
|
|
14
|
+
filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'esp32'));
|
|
15
|
+
filesystem.remove(filesystem.resolve(constants_1.INSTALL_DIR, 'esp'));
|
|
16
|
+
await patching.patch(PROFILE_PATH, {
|
|
17
|
+
delete: `source ${constants_1.EXPORTS_FILE_PATH}`,
|
|
18
|
+
});
|
|
19
|
+
spinner.succeed(`Clean up complete!`);
|
|
20
|
+
},
|
|
21
|
+
};
|
|
22
|
+
exports.default = command;
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcmRvd24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvdGVhcmRvd24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwwREFJbUM7QUFFbkMsTUFBTSxPQUFPLEdBQW1CO0lBQzlCLElBQUksRUFBRSxVQUFVO0lBQ2hCLFdBQVcsRUFDVCwwRUFBMEU7SUFDNUUsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRTtRQUM3QyxNQUFNLFlBQVksR0FBRyxJQUFBLDBCQUFjLEdBQUUsQ0FBQTtRQUNyQyxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx1REFBdUQsQ0FBQyxDQUFBO1FBRXRFLFVBQVUsQ0FBQyxNQUFNLENBQUMsNkJBQWlCLENBQUMsQ0FBQTtRQUNwQyxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFBO1FBQzlELFVBQVUsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUE7UUFDMUQsVUFBVSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtRQUMzRCxVQUFVLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFBO1FBRXpELE1BQU0sUUFBUSxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7WUFDakMsTUFBTSxFQUFFLFVBQVUsNkJBQWlCLEVBQUU7U0FDdEMsQ0FBQyxDQUFBO1FBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBQ3ZDLENBQUM7Q0FDRixDQUFBO0FBRUQsa0JBQWUsT0FBTyxDQUFBIn0=
|
|
@@ -1,19 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var _a;
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
-
exports.
|
|
4
|
+
exports.getProfilePath = exports.MODDABLE_REPO = exports.EXPORTS_FILE_PATH = exports.INSTALL_PATH = exports.INSTALL_DIR = exports.HOME_DIR = void 0;
|
|
5
5
|
const gluegun_1 = require("gluegun");
|
|
6
6
|
exports.HOME_DIR = gluegun_1.filesystem.homedir();
|
|
7
7
|
exports.INSTALL_DIR = gluegun_1.filesystem.resolve(exports.HOME_DIR, '.local', 'share');
|
|
8
8
|
exports.INSTALL_PATH = (_a = process.env.MODDABLE) !== null && _a !== void 0 ? _a : gluegun_1.filesystem.resolve(exports.INSTALL_DIR, 'moddable');
|
|
9
|
-
exports.
|
|
9
|
+
exports.EXPORTS_FILE_PATH = gluegun_1.filesystem.resolve(exports.HOME_DIR, '.local', 'share', 'xs-dev-export.sh');
|
|
10
|
+
exports.MODDABLE_REPO = 'https://github.com/Moddable-OpenSource/moddable';
|
|
11
|
+
function getProfilePath() {
|
|
10
12
|
var _a;
|
|
11
13
|
const shell = (_a = process.env.SHELL) !== null && _a !== void 0 ? _a : '';
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
let profile = '.profile';
|
|
15
|
+
if (shell.includes('zsh')) {
|
|
16
|
+
profile = '.zshrc';
|
|
17
|
+
}
|
|
18
|
+
if (shell.includes('bash')) {
|
|
19
|
+
profile = '.bashrc';
|
|
20
|
+
}
|
|
21
|
+
let profilePath = gluegun_1.filesystem.resolve(exports.HOME_DIR, profile);
|
|
22
|
+
if (gluegun_1.filesystem.exists(profilePath) === 'file')
|
|
23
|
+
return profilePath;
|
|
24
|
+
profilePath = gluegun_1.filesystem.resolve(exports.HOME_DIR, '.profile');
|
|
25
|
+
gluegun_1.filesystem.file(profilePath);
|
|
26
|
+
return profilePath;
|
|
27
|
+
}
|
|
28
|
+
exports.getProfilePath = getProfilePath;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxxQ0FBb0M7QUFFdkIsUUFBQSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUMvQixRQUFBLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUM3RCxRQUFBLFlBQVksR0FDdkIsTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsbUNBQUksb0JBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN4RCxRQUFBLGlCQUFpQixHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNqRCxnQkFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1Asa0JBQWtCLENBQ25CLENBQUE7QUFDWSxRQUFBLGFBQWEsR0FBRyxpREFBaUQsQ0FBQTtBQUM5RSxTQUFnQixjQUFjOztJQUM1QixNQUFNLEtBQUssR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUE7SUFDckMsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFBO0lBRXhCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QixPQUFPLEdBQUcsUUFBUSxDQUFBO0tBQ25CO0lBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUE7S0FDcEI7SUFFRCxJQUFJLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFBO0lBRWpFLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3RELG9CQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzVCLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFqQkQsd0NBaUJDIn0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installDeps = void 0;
|
|
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
|
|
6
|
+
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 python-setuptools cmake ninja-build ccache libffi-dev libssl-dev dfu-util', { stdout: process.stdout });
|
|
8
|
+
spinner.succeed();
|
|
9
|
+
}
|
|
10
|
+
exports.installDeps = installDeps;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi9saW51eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSw0Q0FBZ0Q7QUFFaEQsbUtBQW1LO0FBQzVKLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQXlDO0lBRXpDLE1BQU0sSUFBQSxtQkFBWSxFQUNoQix3S0FBd0ssRUFDeEssRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUMzQixDQUFBO0lBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQ25CLENBQUM7QUFSRCxrQ0FRQyJ9
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installDeps = void 0;
|
|
4
|
+
const gluegun_1 = require("gluegun");
|
|
5
|
+
// brew install python3, cmake, ninja, dfu-util
|
|
6
|
+
async function installDeps(spinner) {
|
|
7
|
+
if (gluegun_1.system.which('python') === null ||
|
|
8
|
+
// get python verion, check if v3
|
|
9
|
+
gluegun_1.semver.satisfies((await gluegun_1.system.exec('python --version', { trim: true }))
|
|
10
|
+
.toString()
|
|
11
|
+
.split(' ')
|
|
12
|
+
.pop(), '>= 3.x.x')) {
|
|
13
|
+
await gluegun_1.system.exec('brew install python');
|
|
14
|
+
}
|
|
15
|
+
if (gluegun_1.system.which('cmake') === null) {
|
|
16
|
+
await gluegun_1.system.exec('brew install cmake');
|
|
17
|
+
}
|
|
18
|
+
if (gluegun_1.system.which('ninja') === null) {
|
|
19
|
+
await gluegun_1.system.exec('brew install ninja');
|
|
20
|
+
}
|
|
21
|
+
if (gluegun_1.system.which('dfu-util') === null) {
|
|
22
|
+
await gluegun_1.system.exec('brew install dfu-util');
|
|
23
|
+
}
|
|
24
|
+
// 4. install pip, if needed
|
|
25
|
+
if (gluegun_1.system.which('pip3') === null) {
|
|
26
|
+
spinner.start('Installing pip3');
|
|
27
|
+
await gluegun_1.system.exec('python3 -m ensurepip --user');
|
|
28
|
+
spinner.succeed();
|
|
29
|
+
}
|
|
30
|
+
// 5. pip install pyserial, if needed
|
|
31
|
+
spinner.start('Installing pyserial through pip3');
|
|
32
|
+
await gluegun_1.system.exec('python3 -m pip install pyserial');
|
|
33
|
+
spinner.succeed();
|
|
34
|
+
}
|
|
35
|
+
exports.installDeps = installDeps;
|
|
36
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvZXNwMzIvbWFjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF3QztBQUd4QywrQ0FBK0M7QUFDeEMsS0FBSyxVQUFVLFdBQVcsQ0FDL0IsT0FBeUM7SUFFekMsSUFDRSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJO1FBQy9CLGlDQUFpQztRQUNqQyxnQkFBTSxDQUFDLFNBQVMsQ0FDZCxDQUFDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQzthQUNwRCxRQUFRLEVBQUU7YUFDVixLQUFLLENBQUMsR0FBRyxDQUFDO2FBQ1YsR0FBRyxFQUFFLEVBQ1IsVUFBVSxDQUNYLEVBQ0Q7UUFDQSxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7S0FDekM7SUFFRCxJQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7S0FDeEM7SUFFRCxJQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNsQyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLG9CQUFvQixDQUFDLENBQUE7S0FDeEM7SUFFRCxJQUFJLGdCQUFNLENBQUMsS0FBSyxDQUFDLFVBQVUsQ0FBQyxLQUFLLElBQUksRUFBRTtRQUNyQyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUE7S0FDM0M7SUFFRCw0QkFBNEI7SUFDNUIsSUFBSSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDakMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQyxDQUFBO1FBQ2hDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtRQUNoRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7S0FDbEI7SUFFRCxxQ0FBcUM7SUFDckMsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO0lBQ2pELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtJQUNwRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDbkIsQ0FBQztBQXhDRCxrQ0F3Q0MifQ==
|
|
@@ -4,71 +4,68 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const gluegun_1 = require("gluegun");
|
|
7
|
+
const os_1 = require("os");
|
|
7
8
|
const constants_1 = require("./constants");
|
|
9
|
+
const moddable_1 = require("./moddable");
|
|
8
10
|
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
11
|
+
const mac_1 = require("./esp32/mac");
|
|
12
|
+
const linux_1 = require("./esp32/linux");
|
|
9
13
|
async function default_1() {
|
|
14
|
+
const OS = (0, os_1.type)().toLowerCase();
|
|
10
15
|
const ESP_IDF_REPO = 'https://github.com/espressif/esp-idf.git';
|
|
11
16
|
const ESP_BRANCH = 'v4.3.1';
|
|
12
17
|
const ESP32_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'esp32');
|
|
13
18
|
const IDF_PATH = gluegun_1.filesystem.resolve(ESP32_DIR, 'esp-idf');
|
|
14
|
-
gluegun_1.print.
|
|
19
|
+
const spinner = gluegun_1.print.spin();
|
|
20
|
+
spinner.start('Setting up esp32 tools');
|
|
15
21
|
// 0. ensure Moddable exists
|
|
16
|
-
if (
|
|
17
|
-
|
|
22
|
+
if (!(0, moddable_1.moddableExists)()) {
|
|
23
|
+
spinner.fail('Moddable tooling required. Run `xs-dev setup` before trying again.');
|
|
18
24
|
process.exit(1);
|
|
19
25
|
}
|
|
20
26
|
// 1. ensure ~/.local/share/esp32 directory
|
|
21
|
-
|
|
27
|
+
spinner.info('Ensuring esp32 install directory');
|
|
22
28
|
gluegun_1.filesystem.dir(ESP32_DIR);
|
|
29
|
+
gluegun_1.filesystem.file(constants_1.EXPORTS_FILE_PATH);
|
|
23
30
|
// 2. clone esp-idf into ~/.local/share/esp32/esp-idf
|
|
24
31
|
if (gluegun_1.filesystem.exists(IDF_PATH) === false) {
|
|
25
|
-
|
|
32
|
+
spinner.start('Cloning esp-idf repo');
|
|
26
33
|
await gluegun_1.system.spawn(`git clone -b ${ESP_BRANCH} --recursive ${ESP_IDF_REPO} ${IDF_PATH}`);
|
|
34
|
+
spinner.succeed();
|
|
27
35
|
}
|
|
28
|
-
// 3.
|
|
29
|
-
|
|
30
|
-
if (
|
|
31
|
-
|
|
32
|
-
gluegun_1.semver.satisfies((await gluegun_1.system.exec('python --version', { trim: true }))
|
|
33
|
-
.toString()
|
|
34
|
-
.split(' ')
|
|
35
|
-
.pop(), '>= 3.x.x')) {
|
|
36
|
-
await gluegun_1.system.spawn('brew install python');
|
|
36
|
+
// 3. Install build and run dependencies
|
|
37
|
+
spinner.start('Installing build dependencies');
|
|
38
|
+
if (OS === 'darwin') {
|
|
39
|
+
await (0, mac_1.installDeps)(spinner);
|
|
37
40
|
}
|
|
38
|
-
if (
|
|
39
|
-
await
|
|
41
|
+
if (OS === 'linux') {
|
|
42
|
+
await (0, linux_1.installDeps)(spinner);
|
|
40
43
|
}
|
|
41
|
-
|
|
42
|
-
await gluegun_1.system.spawn('brew install ninja');
|
|
43
|
-
}
|
|
44
|
-
if (gluegun_1.system.which('dfu-util') === null) {
|
|
45
|
-
await gluegun_1.system.spawn('brew install dfu-util');
|
|
46
|
-
}
|
|
47
|
-
// 4. install pip, if needed
|
|
48
|
-
if (gluegun_1.system.which('pip3') === null) {
|
|
49
|
-
gluegun_1.print.info('Installing pip3');
|
|
50
|
-
await gluegun_1.system.spawn('python3 -m ensurepip --user');
|
|
51
|
-
}
|
|
52
|
-
// 5. pip install pyserial, if needed
|
|
53
|
-
gluegun_1.print.info('Installing pyserial through pip3');
|
|
54
|
-
await gluegun_1.system.spawn('python3 -m pip install pyserial');
|
|
55
|
-
// 6. append IDF_PATH env export to shell profile
|
|
44
|
+
// 4. append IDF_PATH env export to shell profile
|
|
56
45
|
if (process.env.IDF_PATH === undefined) {
|
|
57
|
-
|
|
46
|
+
spinner.info('Configuring $IDF_PATH');
|
|
58
47
|
process.env.IDF_PATH = IDF_PATH;
|
|
59
|
-
await (0, upsert_1.default)(constants_1.
|
|
48
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export IDF_PATH=${IDF_PATH}`);
|
|
60
49
|
}
|
|
61
|
-
//
|
|
62
|
-
|
|
63
|
-
await gluegun_1.system.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
50
|
+
// 5. cd to IDF_PATH, run install.sh
|
|
51
|
+
spinner.start('Installing esp-idf tooling');
|
|
52
|
+
await gluegun_1.system.exec('./install.sh', {
|
|
53
|
+
cwd: IDF_PATH,
|
|
54
|
+
shell: process.env.SHELL,
|
|
55
|
+
stdout: process.stdout,
|
|
56
|
+
});
|
|
57
|
+
spinner.succeed();
|
|
58
|
+
// 6. append 'source $IDF_PATH/export.sh' to shell profile
|
|
59
|
+
spinner.info('Sourcing esp-idf environment');
|
|
60
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `source $IDF_PATH/export.sh`);
|
|
61
|
+
await gluegun_1.system.exec('source $IDF_PATH/export.sh', {
|
|
62
|
+
shell: process.env.SHELL,
|
|
63
|
+
});
|
|
64
|
+
spinner.succeed(`
|
|
68
65
|
Successfully set up esp32 platform support for Moddable!
|
|
69
|
-
Test out the setup by plugging in your device and running: xs-dev run --example helloworld --device=esp32
|
|
66
|
+
Test out the setup by starting a new terminal session, plugging in your device, and running: xs-dev run --example helloworld --device=esp32
|
|
70
67
|
If there is trouble finding the correct port, pass the "--port" flag to the above command with the path to the "/dev.cu.*" that matches your device.
|
|
71
68
|
`);
|
|
72
69
|
}
|
|
73
70
|
exports.default = default_1;
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
71
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFtRDtBQUNuRCwyQkFBeUM7QUFDekMsMkNBQTREO0FBQzVELHlDQUEyQztBQUMzQyxnRUFBdUM7QUFDdkMscUNBQTJEO0FBQzNELHlDQUErRDtBQUVoRCxLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUE7SUFDL0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFBO0lBQzNCLE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDMUQsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXpELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7SUFFdkMsNEJBQTRCO0lBQzVCLElBQUksQ0FBQyxJQUFBLHlCQUFjLEdBQUUsRUFBRTtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELDJDQUEyQztJQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDaEQsb0JBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFDekIsb0JBQVUsQ0FBQyxJQUFJLENBQUMsNkJBQWlCLENBQUMsQ0FBQTtJQUVsQyxxREFBcUQ7SUFDckQsSUFBSSxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxLQUFLLEVBQUU7UUFDekMsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO1FBQ3JDLE1BQU0sZ0JBQU0sQ0FBQyxLQUFLLENBQ2hCLGdCQUFnQixVQUFVLGdCQUFnQixZQUFZLElBQUksUUFBUSxFQUFFLENBQ3JFLENBQUE7UUFDRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7S0FDbEI7SUFFRCx3Q0FBd0M7SUFDeEMsT0FBTyxDQUFDLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFBO0lBRTlDLElBQUksRUFBRSxLQUFLLFFBQVEsRUFBRTtRQUNuQixNQUFNLElBQUEsaUJBQWMsRUFBQyxPQUFPLENBQUMsQ0FBQTtLQUM5QjtJQUVELElBQUksRUFBRSxLQUFLLE9BQU8sRUFBRTtRQUNsQixNQUFNLElBQUEsbUJBQWdCLEVBQUMsT0FBTyxDQUFDLENBQUE7S0FDaEM7SUFFRCxpREFBaUQ7SUFDakQsSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTLEVBQUU7UUFDdEMsT0FBTyxDQUFDLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFBO1FBQ3JDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQTtRQUMvQixNQUFNLElBQUEsZ0JBQU0sRUFBQyw2QkFBaUIsRUFBRSxtQkFBbUIsUUFBUSxFQUFFLENBQUMsQ0FBQTtLQUMvRDtJQUVELG9DQUFvQztJQUNwQyxPQUFPLENBQUMsS0FBSyxDQUFDLDRCQUE0QixDQUFDLENBQUE7SUFDM0MsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxjQUFjLEVBQUU7UUFDaEMsR0FBRyxFQUFFLFFBQVE7UUFDYixLQUFLLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLO1FBQ3hCLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUE7SUFDRixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFakIsMERBQTBEO0lBQzFELE9BQU8sQ0FBQyxJQUFJLENBQUMsOEJBQThCLENBQUMsQ0FBQTtJQUM1QyxNQUFNLElBQUEsZ0JBQU0sRUFBQyw2QkFBaUIsRUFBRSw0QkFBNEIsQ0FBQyxDQUFBO0lBQzdELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsNEJBQTRCLEVBQUU7UUFDOUMsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSztLQUN6QixDQUFDLENBQUE7SUFFRixPQUFPLENBQUMsT0FBTyxDQUFDOzs7O0dBSWYsQ0FBQyxDQUFBO0FBQ0osQ0FBQztBQXZFRCw0QkF1RUMifQ==
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installDeps = void 0;
|
|
4
|
+
const exec_1 = require("../../system/exec");
|
|
5
|
+
async function installDeps(spinner) {
|
|
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 });
|
|
8
|
+
spinner.succeed();
|
|
9
|
+
}
|
|
10
|
+
exports.installDeps = installDeps;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3A4MjY2L2xpbnV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDRDQUFnRDtBQUV6QyxLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUF5QztJQUV6QyxPQUFPLENBQUMsS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7SUFDcEQsTUFBTSxJQUFBLG1CQUFZLEVBQ2hCLG9FQUFvRSxFQUNwRSxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQzNCLENBQUE7SUFDRCxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDbkIsQ0FBQztBQVRELGtDQVNDIn0=
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.installDeps = void 0;
|
|
4
|
+
const gluegun_1 = require("gluegun");
|
|
5
|
+
async function installDeps(spinner) {
|
|
6
|
+
if (gluegun_1.system.which('python') === null) {
|
|
7
|
+
spinner.start('Installing python from homebrew');
|
|
8
|
+
await gluegun_1.system.exec('brew install python');
|
|
9
|
+
spinner.succeed();
|
|
10
|
+
}
|
|
11
|
+
if (gluegun_1.system.which('pip') === null) {
|
|
12
|
+
spinner.start('Installing pip through ensurepip');
|
|
13
|
+
await gluegun_1.system.exec('python -m ensurepip');
|
|
14
|
+
spinner.succeed();
|
|
15
|
+
}
|
|
16
|
+
spinner.start('Installing pyserial through pip');
|
|
17
|
+
await gluegun_1.system.exec('python -m pip install pyserial');
|
|
18
|
+
spinner.succeed();
|
|
19
|
+
}
|
|
20
|
+
exports.installDeps = installDeps;
|
|
21
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvZXNwODI2Ni9tYWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUNBQWdDO0FBR3pCLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQXlDO0lBRXpDLElBQUksZ0JBQU0sQ0FBQyxLQUFLLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxFQUFFO1FBQ25DLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtRQUNoRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLHFCQUFxQixDQUFDLENBQUE7UUFDeEMsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0tBQ2xCO0lBRUQsSUFBSSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsS0FBSyxJQUFJLEVBQUU7UUFDaEMsT0FBTyxDQUFDLEtBQUssQ0FBQyxrQ0FBa0MsQ0FBQyxDQUFBO1FBQ2pELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMscUJBQXFCLENBQUMsQ0FBQTtRQUN4QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7S0FDbEI7SUFFRCxPQUFPLENBQUMsS0FBSyxDQUFDLGlDQUFpQyxDQUFDLENBQUE7SUFDaEQsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxDQUFBO0lBQ25ELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUNuQixDQUFDO0FBbEJELGtDQWtCQyJ9
|
|
@@ -5,14 +5,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const gluegun_1 = require("gluegun");
|
|
7
7
|
const axios_1 = __importDefault(require("axios"));
|
|
8
|
-
const
|
|
8
|
+
const stream_1 = require("stream");
|
|
9
|
+
const util_1 = require("util");
|
|
9
10
|
const tar_fs_1 = require("tar-fs");
|
|
10
11
|
const zlib_1 = require("zlib");
|
|
11
12
|
const unzip_stream_1 = require("unzip-stream");
|
|
13
|
+
const os_1 = require("os");
|
|
12
14
|
const constants_1 = require("./constants");
|
|
15
|
+
const moddable_1 = require("./moddable");
|
|
13
16
|
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
17
|
+
const mac_1 = require("./esp8266/mac");
|
|
18
|
+
const linux_1 = require("./esp8266/linux");
|
|
19
|
+
const finishedPromise = (0, util_1.promisify)(stream_1.finished);
|
|
14
20
|
async function default_1() {
|
|
15
|
-
const
|
|
21
|
+
const OS = (0, os_1.type)().toLowerCase();
|
|
22
|
+
const TOOLCHAIN = `https://www.moddable.com/private/esp8266.toolchain.${OS}.tgz`;
|
|
16
23
|
const ARDUINO_CORE = 'https://github.com/esp8266/Arduino/releases/download/2.3.0/esp8266-2.3.0.zip';
|
|
17
24
|
const ESP_RTOS_REPO = 'https://github.com/espressif/ESP8266_RTOS_SDK.git';
|
|
18
25
|
const ESP_BRANCH = 'release/v3.2';
|
|
@@ -20,18 +27,19 @@ async function default_1() {
|
|
|
20
27
|
const RTOS_PATH = gluegun_1.filesystem.resolve(ESP_DIR, 'ESP8266_RTOS_SDK');
|
|
21
28
|
const TOOLCHAIN_PATH = gluegun_1.filesystem.resolve(ESP_DIR, 'toolchain');
|
|
22
29
|
const ARDUINO_CORE_PATH = gluegun_1.filesystem.resolve(ESP_DIR, 'esp8266-2.3.0');
|
|
23
|
-
gluegun_1.print.
|
|
30
|
+
const spinner = gluegun_1.print.spin();
|
|
31
|
+
spinner.start('Setting up esp8266 tools');
|
|
24
32
|
// 0. ensure Moddable exists
|
|
25
|
-
if (
|
|
26
|
-
|
|
33
|
+
if (!(0, moddable_1.moddableExists)()) {
|
|
34
|
+
spinner.fail('Moddable tooling required. Run `xs-dev setup` before trying again.');
|
|
27
35
|
process.exit(1);
|
|
28
36
|
}
|
|
29
37
|
// 1. ensure ~/.local/share/esp directory
|
|
30
|
-
|
|
38
|
+
spinner.info('Ensuring esp directory');
|
|
31
39
|
gluegun_1.filesystem.dir(ESP_DIR);
|
|
40
|
+
gluegun_1.filesystem.file(constants_1.EXPORTS_FILE_PATH);
|
|
32
41
|
// 2. download and untar xtensa toolchain
|
|
33
42
|
if (gluegun_1.filesystem.exists(TOOLCHAIN_PATH) === false) {
|
|
34
|
-
const spinner = gluegun_1.print.spin();
|
|
35
43
|
spinner.start('Downloading xtensa toolchain');
|
|
36
44
|
const writer = (0, tar_fs_1.extract)(ESP_DIR, { readable: true });
|
|
37
45
|
const gunzip = (0, zlib_1.createGunzip)();
|
|
@@ -39,48 +47,44 @@ async function default_1() {
|
|
|
39
47
|
responseType: 'stream',
|
|
40
48
|
});
|
|
41
49
|
response.data.pipe(gunzip).pipe(writer);
|
|
42
|
-
await (
|
|
50
|
+
await finishedPromise(writer);
|
|
43
51
|
spinner.succeed();
|
|
44
52
|
}
|
|
45
53
|
// 3. download and unzip esp8266 core for arduino
|
|
46
54
|
if (gluegun_1.filesystem.exists(ARDUINO_CORE_PATH) === false) {
|
|
47
|
-
const spinner = gluegun_1.print.spin();
|
|
48
55
|
spinner.start('Downloading arduino core tooling');
|
|
49
56
|
const writer = (0, unzip_stream_1.Extract)({ path: ESP_DIR });
|
|
50
57
|
const response = await axios_1.default.get(ARDUINO_CORE, {
|
|
51
58
|
responseType: 'stream',
|
|
52
59
|
});
|
|
53
60
|
response.data.pipe(writer);
|
|
54
|
-
await (
|
|
61
|
+
await finishedPromise(writer);
|
|
55
62
|
spinner.succeed();
|
|
56
63
|
}
|
|
57
64
|
// 4. clone esp8266 RTOS SDK
|
|
58
65
|
if (gluegun_1.filesystem.exists(RTOS_PATH) === false) {
|
|
59
|
-
|
|
66
|
+
spinner.start('Cloning esp8266 RTOS SDK repo');
|
|
60
67
|
await gluegun_1.system.spawn(`git clone -b ${ESP_BRANCH} ${ESP_RTOS_REPO} ${RTOS_PATH}`);
|
|
68
|
+
spinner.succeed();
|
|
61
69
|
}
|
|
62
70
|
// 5. ensure python, pip, and pyserial are installed
|
|
63
|
-
if (
|
|
64
|
-
|
|
65
|
-
await gluegun_1.system.spawn('brew install python');
|
|
71
|
+
if (OS === 'darwin') {
|
|
72
|
+
await (0, mac_1.installDeps)(spinner);
|
|
66
73
|
}
|
|
67
|
-
if (
|
|
68
|
-
|
|
69
|
-
await gluegun_1.system.spawn('sudo easy_install pip');
|
|
74
|
+
if (OS === 'linux') {
|
|
75
|
+
await (0, linux_1.installDeps)(spinner);
|
|
70
76
|
}
|
|
71
|
-
gluegun_1.print.info('Installing pyserial through pip');
|
|
72
|
-
await gluegun_1.system.spawn('python -m pip install pyserial');
|
|
73
77
|
// 7. create ESP_BARE env export in shell profile
|
|
74
78
|
if (process.env.ESP_BASE === undefined) {
|
|
75
|
-
|
|
79
|
+
spinner.info('Configuring $ESP_BASE');
|
|
76
80
|
process.env.ESP_BASE = ESP_DIR;
|
|
77
|
-
await (0, upsert_1.default)(constants_1.
|
|
81
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export ESP_BASE=${process.env.ESP_BASE}`);
|
|
78
82
|
}
|
|
79
|
-
|
|
83
|
+
spinner.succeed(`
|
|
80
84
|
Successfully set up esp8266 platform support for moddable!
|
|
81
|
-
Test out the setup by plugging in your device and running: xs-dev run --example helloworld --device esp8266
|
|
85
|
+
Test out the setup by starting a new terminal session, plugging in your device, and running: xs-dev run --example helloworld --device esp8266
|
|
82
86
|
If there is trouble finding the correct port, pass the "--port" flag to the above command with the path to the "/dev.cu.*" that matches your device.
|
|
83
87
|
`);
|
|
84
88
|
}
|
|
85
89
|
exports.default = default_1;
|
|
86
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwODI2Ni5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL2VzcDgyNjYudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxQ0FBbUQ7QUFDbkQsa0RBQXlCO0FBQ3pCLG1DQUFpQztBQUNqQywrQkFBZ0M7QUFDaEMsbUNBQWdDO0FBQ2hDLCtCQUFtQztBQUNuQywrQ0FBb0Q7QUFDcEQsMkJBQXlDO0FBQ3pDLDJDQUE0RDtBQUM1RCx5Q0FBMkM7QUFDM0MsZ0VBQXVDO0FBQ3ZDLHVDQUE2RDtBQUM3RCwyQ0FBaUU7QUFFakUsTUFBTSxlQUFlLEdBQUcsSUFBQSxnQkFBUyxFQUFDLGlCQUFRLENBQUMsQ0FBQTtBQUU1QixLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxTQUFTLEdBQUcsc0RBQXNELEVBQUUsTUFBTSxDQUFBO0lBQ2hGLE1BQU0sWUFBWSxHQUNoQiw4RUFBOEUsQ0FBQTtJQUNoRixNQUFNLGFBQWEsR0FBRyxtREFBbUQsQ0FBQTtJQUN6RSxNQUFNLFVBQVUsR0FBRyxjQUFjLENBQUE7SUFDakMsTUFBTSxPQUFPLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQTtJQUN0RCxNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtJQUNqRSxNQUFNLGNBQWMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDL0QsTUFBTSxpQkFBaUIsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFFdEUsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxLQUFLLENB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
|
|
@@ -1,8 +1,64 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
2
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
6
|
const gluegun_1 = require("gluegun");
|
|
7
|
+
const constants_1 = require("./constants");
|
|
8
|
+
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
9
|
+
const exec_1 = require("../system/exec");
|
|
4
10
|
async function default_1() {
|
|
5
|
-
gluegun_1.print.
|
|
11
|
+
gluegun_1.print.info('Setting up Linux tools!');
|
|
12
|
+
const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'lin', 'release');
|
|
13
|
+
const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'lin');
|
|
14
|
+
const PROFILE_PATH = (0, constants_1.getProfilePath)();
|
|
15
|
+
const spinner = gluegun_1.print.spin();
|
|
16
|
+
spinner.start('Beginning setup...');
|
|
17
|
+
// 0. clone moddable repo into ./local/share directory if it does not exist yet
|
|
18
|
+
gluegun_1.filesystem.dir(constants_1.INSTALL_DIR);
|
|
19
|
+
if (gluegun_1.filesystem.exists(constants_1.EXPORTS_FILE_PATH) === false) {
|
|
20
|
+
gluegun_1.filesystem.file(constants_1.EXPORTS_FILE_PATH, {
|
|
21
|
+
content: `# Generated by xs-dev CLI\n`,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
// 1. Install or update the packages required to compile:
|
|
25
|
+
spinner.start('Installing dependencies...');
|
|
26
|
+
await (0, exec_1.execWithSudo)('apt-get install --yes gcc git wget make libncurses-dev flex bison gperf', { stdout: process.stdout });
|
|
27
|
+
spinner.succeed();
|
|
28
|
+
// 2. Install the development version of the GTK+ 3 library
|
|
29
|
+
spinner.start('Installing GTK+ 3...');
|
|
30
|
+
await (0, exec_1.execWithSudo)('apt-get --yes install libgtk-3-dev', {
|
|
31
|
+
stdout: process.stdout,
|
|
32
|
+
});
|
|
33
|
+
spinner.succeed();
|
|
34
|
+
// 3. Download the Moddable repository, or use the git command line tool as follows:
|
|
35
|
+
if (gluegun_1.filesystem.exists(constants_1.INSTALL_PATH) !== false) {
|
|
36
|
+
spinner.info('Moddable repo already installed');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
spinner.start('Cloning Moddable-OpenSource/moddable repo');
|
|
40
|
+
await gluegun_1.system.spawn(`git clone ${constants_1.MODDABLE_REPO} ${constants_1.INSTALL_PATH}`);
|
|
41
|
+
spinner.succeed();
|
|
42
|
+
}
|
|
43
|
+
// 4. Setup the MODDABLE environment variable
|
|
44
|
+
process.env.MODDABLE = constants_1.INSTALL_PATH;
|
|
45
|
+
process.env.PATH = `${String(process.env.PATH)}:${BIN_PATH}`;
|
|
46
|
+
await (0, upsert_1.default)(PROFILE_PATH, `source ${constants_1.EXPORTS_FILE_PATH}`);
|
|
47
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export MODDABLE=${process.env.MODDABLE}`);
|
|
48
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PATH="${BIN_PATH}:$PATH"`);
|
|
49
|
+
// 5. Build the Moddable command line tools, simulator, and debugger from the command line:
|
|
50
|
+
spinner.start('Building platform tooling');
|
|
51
|
+
await gluegun_1.system.exec('make', { cwd: BUILD_DIR, stdout: process.stdout });
|
|
52
|
+
spinner.succeed();
|
|
53
|
+
// 6. Install the desktop simulator and xsbug debugger applications
|
|
54
|
+
spinner.start('Installing simulator');
|
|
55
|
+
await (0, exec_1.execWithSudo)('make install', {
|
|
56
|
+
cwd: BUILD_DIR,
|
|
57
|
+
stdout: process.stdout,
|
|
58
|
+
});
|
|
59
|
+
spinner.succeed();
|
|
60
|
+
// 7. Profit?
|
|
61
|
+
gluegun_1.print.success('Moddable SDK successfully set up! Start a new terminal session and run the "helloworld example": xs-dev run --example helloworld');
|
|
6
62
|
}
|
|
7
63
|
exports.default = default_1;
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9saW51eC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFtRDtBQUNuRCwyQ0FNb0I7QUFDcEIsZ0VBQXVDO0FBQ3ZDLHlDQUE2QztBQUU5QixLQUFLO0lBQ2xCLGVBQUssQ0FBQyxJQUFJLENBQUMseUJBQXlCLENBQUMsQ0FBQTtJQUVyQyxNQUFNLFFBQVEsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FDakMsd0JBQVksRUFDWixPQUFPLEVBQ1AsS0FBSyxFQUNMLEtBQUssRUFDTCxTQUFTLENBQ1YsQ0FBQTtJQUNELE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNsQyx3QkFBWSxFQUNaLE9BQU8sRUFDUCxXQUFXLEVBQ1gsS0FBSyxDQUNOLENBQUE7SUFDRCxNQUFNLFlBQVksR0FBRyxJQUFBLDBCQUFjLEdBQUUsQ0FBQTtJQUVyQyxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxDQUFBO0lBRW5DLCtFQUErRTtJQUMvRSxvQkFBVSxDQUFDLEdBQUcsQ0FBQyx1QkFBVyxDQUFDLENBQUE7SUFFM0IsSUFBSSxvQkFBVSxDQUFDLE1BQU0sQ0FBQyw2QkFBaUIsQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUNsRCxvQkFBVSxDQUFDLElBQUksQ0FBQyw2QkFBaUIsRUFBRTtZQUNqQyxPQUFPLEVBQUUsNkJBQTZCO1NBQ3ZDLENBQUMsQ0FBQTtLQUNIO0lBRUQseURBQXlEO0lBQ3pELE9BQU8sQ0FBQyxLQUFLLENBQUMsNEJBQTRCLENBQUMsQ0FBQTtJQUMzQyxNQUFNLElBQUEsbUJBQVksRUFDaEIseUVBQXlFLEVBQ3pFLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FDM0IsQ0FBQTtJQUNELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUVqQiwyREFBMkQ7SUFDM0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsQ0FBQyxDQUFBO0lBQ3JDLE1BQU0sSUFBQSxtQkFBWSxFQUFDLG9DQUFvQyxFQUFFO1FBQ3ZELE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtLQUN2QixDQUFDLENBQUE7SUFDRixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFakIsb0ZBQW9GO0lBQ3BGLElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsd0JBQVksQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7S0FDaEQ7U0FBTTtRQUNMLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQTtRQUMxRCxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUFDLGFBQWEseUJBQWEsSUFBSSx3QkFBWSxFQUFFLENBQUMsQ0FBQTtRQUNoRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7S0FDbEI7SUFFRCw2Q0FBNkM7SUFDN0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEdBQUcsd0JBQVksQ0FBQTtJQUNuQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLFFBQVEsRUFBRSxDQUFBO0lBRTVELE1BQU0sSUFBQSxnQkFBTSxFQUFDLFlBQVksRUFBRSxVQUFVLDZCQUFpQixFQUFFLENBQUMsQ0FBQTtJQUV6RCxNQUFNLElBQUEsZ0JBQU0sRUFBQyw2QkFBaUIsRUFBRSxtQkFBbUIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLE1BQU0sSUFBQSxnQkFBTSxFQUFDLDZCQUFpQixFQUFFLGdCQUFnQixRQUFRLFNBQVMsQ0FBQyxDQUFBO0lBRWxFLDJGQUEyRjtJQUMzRixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDMUMsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQTtJQUNyRSxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFFakIsbUVBQW1FO0lBQ25FLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtJQUNyQyxNQUFNLElBQUEsbUJBQVksRUFBQyxjQUFjLEVBQUU7UUFDakMsR0FBRyxFQUFFLFNBQVM7UUFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRWpCLGFBQWE7SUFDYixlQUFLLENBQUMsT0FBTyxDQUNYLGtJQUFrSSxDQUNuSSxDQUFBO0FBQ0gsQ0FBQztBQWhGRCw0QkFnRkMifQ==
|
|
@@ -8,54 +8,60 @@ const constants_1 = require("./constants");
|
|
|
8
8
|
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
9
9
|
async function default_1() {
|
|
10
10
|
gluegun_1.print.info('Setting up the mac tools!');
|
|
11
|
-
const MODDABLE_REPO = 'https://github.com/Moddable-OpenSource/moddable';
|
|
12
11
|
const BIN_PATH = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'bin', 'mac', 'release');
|
|
13
12
|
const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'mac');
|
|
13
|
+
const PROFILE_PATH = (0, constants_1.getProfilePath)();
|
|
14
14
|
// 0. ensure xcode command line tools are available (?)
|
|
15
15
|
try {
|
|
16
|
-
await gluegun_1.system.
|
|
16
|
+
await gluegun_1.system.exec('xcode-select -p');
|
|
17
17
|
}
|
|
18
18
|
catch (error) {
|
|
19
19
|
gluegun_1.print.error('Xcode command line tools are required to build the SDK: https://developer.apple.com/xcode/');
|
|
20
20
|
process.exit(1);
|
|
21
21
|
}
|
|
22
|
+
const spinner = gluegun_1.print.spin();
|
|
23
|
+
spinner.start('Beginning setup...');
|
|
22
24
|
// 1. clone moddable repo into ./local/share directory if it does not exist yet
|
|
23
25
|
try {
|
|
24
26
|
gluegun_1.filesystem.dir(constants_1.INSTALL_DIR);
|
|
27
|
+
if (gluegun_1.filesystem.exists(constants_1.EXPORTS_FILE_PATH) === false) {
|
|
28
|
+
gluegun_1.filesystem.file(constants_1.EXPORTS_FILE_PATH, {
|
|
29
|
+
content: `# Generated by xs-dev CLI\n`,
|
|
30
|
+
});
|
|
31
|
+
}
|
|
25
32
|
}
|
|
26
33
|
catch (error) {
|
|
27
|
-
|
|
34
|
+
spinner.fail(`Error setting up install directory: ${String(error)}`);
|
|
28
35
|
process.exit(1);
|
|
29
36
|
}
|
|
30
37
|
if (gluegun_1.filesystem.exists(constants_1.INSTALL_PATH) !== false) {
|
|
31
|
-
|
|
38
|
+
spinner.info('Moddable repo already installed');
|
|
32
39
|
}
|
|
33
40
|
else {
|
|
34
41
|
try {
|
|
35
|
-
|
|
42
|
+
spinner.start('Cloning Moddable-OpenSource/moddable repo');
|
|
43
|
+
await gluegun_1.system.spawn(`git clone ${constants_1.MODDABLE_REPO} ${constants_1.INSTALL_PATH}`);
|
|
44
|
+
spinner.succeed();
|
|
36
45
|
}
|
|
37
46
|
catch (error) {
|
|
38
|
-
|
|
47
|
+
spinner.fail(`Error cloning moddable repo: ${String(error)}`);
|
|
39
48
|
process.exit(1);
|
|
40
49
|
}
|
|
41
50
|
}
|
|
42
51
|
// 2. configure MODDABLE env variable, add release binaries dir to PATH
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
49
|
-
else {
|
|
50
|
-
gluegun_1.print.info(`Using current MODDABLE env: ${process.env.MODDABLE}`);
|
|
51
|
-
}
|
|
52
|
+
process.env.MODDABLE = constants_1.INSTALL_PATH;
|
|
53
|
+
process.env.PATH = `${String(process.env.PATH)}:${BIN_PATH}`;
|
|
54
|
+
await (0, upsert_1.default)(PROFILE_PATH, `source ${constants_1.EXPORTS_FILE_PATH}`);
|
|
55
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export MODDABLE=${process.env.MODDABLE}`);
|
|
56
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PATH="${BIN_PATH}:$PATH"`);
|
|
52
57
|
// 3. cd into makefiles dir for platform, run `make`
|
|
53
58
|
try {
|
|
54
|
-
|
|
55
|
-
await gluegun_1.system.
|
|
59
|
+
spinner.start('Building platform tooling');
|
|
60
|
+
await gluegun_1.system.exec('make', { cwd: BUILD_DIR });
|
|
61
|
+
spinner.succeed();
|
|
56
62
|
}
|
|
57
63
|
catch (error) {
|
|
58
|
-
|
|
64
|
+
spinner.fail(`Error building mac tooling: ${String(error)}`);
|
|
59
65
|
process.exit(1);
|
|
60
66
|
}
|
|
61
67
|
// 4. symlink xsbug.app into user applications directory
|
|
@@ -64,14 +70,14 @@ async function default_1() {
|
|
|
64
70
|
}
|
|
65
71
|
catch (error) {
|
|
66
72
|
if (!String(error).includes('exists')) {
|
|
67
|
-
|
|
73
|
+
spinner.fail(`Issue creating symlink for xsbug.app: ${String(error)}`);
|
|
68
74
|
process.exit(1);
|
|
69
75
|
}
|
|
70
76
|
else {
|
|
71
|
-
|
|
77
|
+
spinner.info('xsbug.app symlink already exists');
|
|
72
78
|
}
|
|
73
79
|
}
|
|
74
|
-
|
|
80
|
+
spinner.succeed('Moddable SDK successfully set up! Start a new terminal session and run the "helloworld example": xs-dev run --example helloworld');
|
|
75
81
|
}
|
|
76
82
|
exports.default = default_1;
|
|
77
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvbWFjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEscUNBQW1EO0FBQ25ELDJDQU1vQjtBQUNwQixnRUFBdUM7QUFFeEIsS0FBSztJQUNsQixlQUFLLENBQUMsSUFBSSxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFFdkMsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQ2pDLHdCQUFZLEVBQ1osT0FBTyxFQUNQLEtBQUssRUFDTCxLQUFLLEVBQ0wsU0FBUyxDQUNWLENBQUE7SUFDRCxNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FDbEMsd0JBQVksRUFDWixPQUFPLEVBQ1AsV0FBVyxFQUNYLEtBQUssQ0FDTixDQUFBO0lBRUQsTUFBTSxZQUFZLEdBQUcsSUFBQSwwQkFBYyxHQUFFLENBQUE7SUFFckMsdURBQXVEO0lBQ3ZELElBQUk7UUFDRixNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGlCQUFpQixDQUFDLENBQUE7S0FDckM7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLGVBQUssQ0FBQyxLQUFLLENBQ1QsNEZBQTRGLENBQzdGLENBQUE7UUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLENBQUMsQ0FBQTtJQUVuQywrRUFBK0U7SUFDL0UsSUFBSTtRQUNGLG9CQUFVLENBQUMsR0FBRyxDQUFDLHVCQUFXLENBQUMsQ0FBQTtRQUUzQixJQUFJLG9CQUFVLENBQUMsTUFBTSxDQUFDLDZCQUFpQixDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ2xELG9CQUFVLENBQUMsSUFBSSxDQUFDLDZCQUFpQixFQUFFO2dCQUNqQyxPQUFPLEVBQUUsNkJBQTZCO2FBQ3ZDLENBQUMsQ0FBQTtTQUNIO0tBQ0Y7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUNBQXVDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDcEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsd0JBQVksQ0FBQyxLQUFLLEtBQUssRUFBRTtRQUM3QyxPQUFPLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxDQUFDLENBQUE7S0FDaEQ7U0FBTTtRQUNMLElBQUk7WUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLDJDQUEyQyxDQUFDLENBQUE7WUFDMUQsTUFBTSxnQkFBTSxDQUFDLEtBQUssQ0FBQyxhQUFhLHlCQUFhLElBQUksd0JBQVksRUFBRSxDQUFDLENBQUE7WUFDaEUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO1NBQ2xCO1FBQUMsT0FBTyxLQUFLLEVBQUU7WUFDZCxPQUFPLENBQUMsSUFBSSxDQUFDLGdDQUFnQyxNQUFNLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzdELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDaEI7S0FDRjtJQUVELHVFQUF1RTtJQUN2RSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyx3QkFBWSxDQUFBO0lBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUksUUFBUSxFQUFFLENBQUE7SUFFNUQsTUFBTSxJQUFBLGdCQUFNLEVBQUMsWUFBWSxFQUFFLFVBQVUsNkJBQWlCLEVBQUUsQ0FBQyxDQUFBO0lBRXpELE1BQU0sSUFBQSxnQkFBTSxFQUFDLDZCQUFpQixFQUFFLG1CQUFtQixPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDMUUsTUFBTSxJQUFBLGdCQUFNLEVBQUMsNkJBQWlCLEVBQUUsZ0JBQWdCLFFBQVEsU0FBUyxDQUFDLENBQUE7SUFFbEUsb0RBQW9EO0lBQ3BELElBQUk7UUFDRixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7UUFDMUMsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsRUFBRSxHQUFHLEVBQUUsU0FBUyxFQUFFLENBQUMsQ0FBQTtRQUM3QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7S0FDbEI7SUFBQyxPQUFPLEtBQUssRUFBRTtRQUNkLE9BQU8sQ0FBQyxJQUFJLENBQUMsK0JBQStCLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDNUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELHdEQUF3RDtJQUN4RCxJQUFJO1FBQ0Ysb0JBQVUsQ0FBQyxPQUFPLENBQ2hCLG9CQUFVLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxXQUFXLENBQUMsRUFDekMseUJBQXlCLENBQzFCLENBQUE7S0FDRjtJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ2QsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsUUFBUSxDQUFDLEVBQUU7WUFDckMsT0FBTyxDQUFDLElBQUksQ0FBQyx5Q0FBeUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQTtZQUN0RSxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2hCO2FBQU07WUFDTCxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUE7U0FDakQ7S0FDRjtJQUVELE9BQU8sQ0FBQyxPQUFPLENBQ2Isa0lBQWtJLENBQ25JLENBQUE7QUFDSCxDQUFDO0FBaEdELDRCQWdHQyJ9
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.moddableExists = void 0;
|
|
4
|
+
const gluegun_1 = require("gluegun");
|
|
5
|
+
function moddableExists() {
|
|
6
|
+
return (process.env.MODDABLE !== undefined &&
|
|
7
|
+
gluegun_1.filesystem.exists(process.env.MODDABLE) === 'dir');
|
|
8
|
+
}
|
|
9
|
+
exports.moddableExists = moddableExists;
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9kZGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9tb2RkYWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxQ0FBb0M7QUFFcEMsU0FBZ0IsY0FBYztJQUM1QixPQUFPLENBQ0wsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUztRQUNsQyxvQkFBVSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxLQUFLLEtBQUssQ0FDbEQsQ0FBQTtBQUNILENBQUM7QUFMRCx3Q0FLQyJ9
|
|
@@ -4,62 +4,99 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const gluegun_1 = require("gluegun");
|
|
7
|
+
const os_1 = require("os");
|
|
7
8
|
const constants_1 = require("./constants");
|
|
9
|
+
const moddable_1 = require("./moddable");
|
|
8
10
|
const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
11
|
+
const exec_1 = require("../system/exec");
|
|
9
12
|
async function default_1() {
|
|
13
|
+
const OS = (0, os_1.type)().toLowerCase();
|
|
10
14
|
const EMSDK_REPO = 'https://github.com/emscripten-core/emsdk.git';
|
|
11
15
|
const BINARYEN_REPO = 'https://github.com/WebAssembly/binaryen.git';
|
|
12
16
|
const WASM_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'wasm');
|
|
13
17
|
const EMSDK_PATH = gluegun_1.filesystem.resolve(WASM_DIR, 'emsdk');
|
|
14
18
|
const BINARYEN_PATH = gluegun_1.filesystem.resolve(WASM_DIR, 'binaryen');
|
|
15
|
-
gluegun_1.print.
|
|
19
|
+
const spinner = gluegun_1.print.spin({ stream: process.stdout });
|
|
20
|
+
spinner.start('Setting up wasm simulator tools');
|
|
16
21
|
// 0. ensure wasm instal directory and Moddable exists
|
|
17
|
-
if (
|
|
18
|
-
|
|
22
|
+
if (!(0, moddable_1.moddableExists)()) {
|
|
23
|
+
spinner.fail('Moddable platform tooling required. Run `xs-dev setup` before trying again.');
|
|
19
24
|
process.exit(1);
|
|
20
25
|
}
|
|
21
|
-
|
|
26
|
+
spinner.info('Ensuring wasm directory');
|
|
22
27
|
gluegun_1.filesystem.dir(WASM_DIR);
|
|
28
|
+
gluegun_1.filesystem.file(constants_1.EXPORTS_FILE_PATH);
|
|
23
29
|
// 1. Clone EM_SDK repo, install, and activate latest version
|
|
24
30
|
if (gluegun_1.filesystem.exists(EMSDK_PATH) === false) {
|
|
25
|
-
|
|
31
|
+
spinner.start('Cloning emsdk repo');
|
|
32
|
+
await gluegun_1.system.spawn(`git clone ${EMSDK_REPO} ${EMSDK_PATH}`);
|
|
33
|
+
spinner.succeed();
|
|
34
|
+
}
|
|
35
|
+
if (process.env.EMSDK === undefined) {
|
|
26
36
|
try {
|
|
27
|
-
|
|
28
|
-
await gluegun_1.system.
|
|
37
|
+
spinner.start('Installing latest EMSDK');
|
|
38
|
+
await gluegun_1.system.exec('./emsdk install latest', {
|
|
29
39
|
cwd: EMSDK_PATH,
|
|
40
|
+
stdout: process.stdout,
|
|
30
41
|
});
|
|
31
|
-
await gluegun_1.system.
|
|
42
|
+
await gluegun_1.system.exec('./emsdk activate latest', {
|
|
32
43
|
cwd: EMSDK_PATH,
|
|
44
|
+
stdout: process.stdout,
|
|
33
45
|
});
|
|
46
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `source ${gluegun_1.filesystem.resolve(EMSDK_PATH, 'emsdk_env.sh')}`);
|
|
34
47
|
}
|
|
35
48
|
catch (error) {
|
|
36
|
-
|
|
49
|
+
spinner.fail(`Error activating emsdk: ${String(error)}`);
|
|
37
50
|
process.exit(1);
|
|
38
51
|
}
|
|
39
52
|
}
|
|
53
|
+
spinner.succeed('emsdk setup complete');
|
|
40
54
|
// 2. Clone Binaryen repo and build
|
|
41
55
|
if (gluegun_1.filesystem.exists(BINARYEN_PATH) === false) {
|
|
42
|
-
|
|
43
|
-
await gluegun_1.system.spawn(`git clone ${BINARYEN_REPO} ${BINARYEN_PATH}`);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
56
|
+
spinner.start('Cloning binaryen repo');
|
|
57
|
+
await gluegun_1.system.spawn(`git clone --recursive ${BINARYEN_REPO} ${BINARYEN_PATH}`);
|
|
58
|
+
spinner.succeed();
|
|
59
|
+
}
|
|
60
|
+
if (gluegun_1.system.which('cmake') === null) {
|
|
61
|
+
if (OS === 'darwin') {
|
|
62
|
+
spinner.start('Cmake required, installing with Homebrew');
|
|
63
|
+
await gluegun_1.system.exec('brew install cmake');
|
|
47
64
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
65
|
+
if (OS === 'linux') {
|
|
66
|
+
spinner.start('Cmake required, installing with apt');
|
|
67
|
+
await (0, exec_1.execWithSudo)('apt --yes install cmake');
|
|
68
|
+
}
|
|
69
|
+
spinner.succeed();
|
|
51
70
|
}
|
|
71
|
+
spinner.start('Building Binaryen tooling');
|
|
72
|
+
await gluegun_1.system.exec('cmake .', {
|
|
73
|
+
cwd: BINARYEN_PATH,
|
|
74
|
+
stdout: process.stdout,
|
|
75
|
+
});
|
|
76
|
+
spinner.succeed('cmake complete');
|
|
77
|
+
spinner.start('Start make process, this could take a couple minutes');
|
|
78
|
+
await gluegun_1.system.exec('make', {
|
|
79
|
+
cwd: BINARYEN_PATH,
|
|
80
|
+
stdout: process.stdout,
|
|
81
|
+
});
|
|
82
|
+
spinner.succeed();
|
|
52
83
|
// 3. Setup PATH and env variables for EM_SDK and Binaryen
|
|
53
|
-
|
|
54
|
-
await (0, upsert_1.default)(constants_1.
|
|
55
|
-
await (0, upsert_1.default)(constants_1.PROFILE_PATH, `export PATH=${gluegun_1.filesystem.resolve(BINARYEN_PATH, 'bin')}:$PATH`);
|
|
84
|
+
spinner.info('Sourcing adding binaryen to PATH');
|
|
85
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PATH=${gluegun_1.filesystem.resolve(BINARYEN_PATH, 'bin')}:$PATH`);
|
|
56
86
|
process.env.PATH = `${String(process.env.PATH)}:${gluegun_1.filesystem.resolve(BINARYEN_PATH, 'bin')}`;
|
|
57
87
|
// 4. Build Moddable WASM tools
|
|
58
|
-
gluegun_1.
|
|
59
|
-
|
|
60
|
-
|
|
88
|
+
if (gluegun_1.filesystem.exists(gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'build', 'bin', 'wasm')) === false) {
|
|
89
|
+
spinner.start('Building Moddable wasm tools');
|
|
90
|
+
await gluegun_1.system.exec(`make`, {
|
|
91
|
+
cwd: gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'build', 'makefiles', 'wasm'),
|
|
92
|
+
stdout: process.stdout,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
await gluegun_1.system.exec(`source ${constants_1.EXPORTS_FILE_PATH}`, {
|
|
96
|
+
shell: process.env.SHELL,
|
|
97
|
+
stdout: process.stdout,
|
|
61
98
|
});
|
|
62
|
-
|
|
99
|
+
spinner.succeed(`Successfully set up wasm platform support for Moddable! Test out the setup by starting a new terminal session and running: xs-dev run --example helloworld --device wasm`);
|
|
63
100
|
}
|
|
64
101
|
exports.default = default_1;
|
|
65
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2FzbS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL3dhc20udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxQ0FBbUQ7QUFDbkQsMkJBQXlDO0FBQ3pDLDJDQUE0RDtBQUM1RCx5Q0FBMkM7QUFDM0MsZ0VBQXVDO0FBQ3ZDLHlDQUE2QztBQUU5QixLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxVQUFVLEdBQUcsOENBQThDLENBQUE7SUFDakUsTUFBTSxhQUFhLEdBQUcsNkNBQTZDLENBQUE7SUFDbkUsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFVBQVUsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDeEQsTUFBTSxhQUFhLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBRTlELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDdEQsT0FBTyxDQUFDLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO0lBRWhELHNEQUFzRDtJQUN0RCxJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUU7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FDViw2RUFBNkUsQ0FDOUUsQ0FBQTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7SUFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLHlCQUF5QixDQUFDLENBQUE7SUFDdkMsb0JBQVUsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUE7SUFDeEIsb0JBQVUs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
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.execWithSudo = void 0;
|
|
4
|
+
const gluegun_1 = require("gluegun");
|
|
5
|
+
function ensureAskPass() {
|
|
6
|
+
const SUDO_ASKPASS = gluegun_1.system.which('ssh-askpass');
|
|
7
|
+
if (SUDO_ASKPASS === undefined) {
|
|
8
|
+
gluegun_1.print.warning('ssh-askpass required to prompt for password');
|
|
9
|
+
process.exit(1);
|
|
10
|
+
}
|
|
11
|
+
process.env.SUDO_ASKPASS = SUDO_ASKPASS;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Ensure command can be run with sudo,
|
|
15
|
+
* first attempting as non-interactive before falling back to ssh-askpass prompt
|
|
16
|
+
**/
|
|
17
|
+
async function execWithSudo(command, options = {}) {
|
|
18
|
+
try {
|
|
19
|
+
await gluegun_1.system.exec(`sudo --non-interactive --preserve-env ${command}`, options);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
if (error.toString().includes('password') === false) {
|
|
24
|
+
ensureAskPass();
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
await gluegun_1.system.exec(`sudo --askpass --preserve-env ${command}`, options);
|
|
31
|
+
}
|
|
32
|
+
exports.execWithSudo = execWithSudo;
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXhlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3N5c3RlbS9leGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHFDQUF1QztBQUV2QyxTQUFTLGFBQWE7SUFDcEIsTUFBTSxZQUFZLEdBQUcsZ0JBQU0sQ0FBQyxLQUFLLENBQUMsYUFBYSxDQUFDLENBQUE7SUFDaEQsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1FBQzlCLGVBQUssQ0FBQyxPQUFPLENBQUMsNkNBQTZDLENBQUMsQ0FBQTtRQUM1RCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBQ0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFBO0FBQ3pDLENBQUM7QUFFRDs7O0lBR0k7QUFDRyxLQUFLLFVBQVUsWUFBWSxDQUNoQyxPQUFlLEVBQ2YsVUFBbUMsRUFBRTtJQUVyQyxJQUFJO1FBQ0YsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FDZix5Q0FBeUMsT0FBTyxFQUFFLEVBQ2xELE9BQU8sQ0FDUixDQUFBO1FBQ0QsT0FBTTtLQUNQO0lBQUMsT0FBTyxLQUFLLEVBQUU7UUFDZCxJQUFJLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQ25ELGFBQWEsRUFBRSxDQUFBO1NBQ2hCO2FBQU07WUFDTCxNQUFNLEtBQUssQ0FBQTtTQUNaO0tBQ0Y7SUFFRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGlDQUFpQyxPQUFPLEVBQUUsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN4RSxDQUFDO0FBbkJELG9DQW1CQyJ9
|
|
@@ -1,8 +1,39 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const gluegun_1 = require("gluegun");
|
|
4
|
+
const constants_1 = require("../setup/constants");
|
|
4
5
|
async function default_1() {
|
|
5
|
-
gluegun_1.print.
|
|
6
|
+
gluegun_1.print.info('Checking for SDK changes');
|
|
7
|
+
const BUILD_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_PATH, 'build', 'makefiles', 'mac');
|
|
8
|
+
const currentRev = await gluegun_1.system.exec('git rev-parse public', {
|
|
9
|
+
cwd: process.env.MODDABLE,
|
|
10
|
+
});
|
|
11
|
+
const remoteRev = await gluegun_1.system.exec('git ls-remote origin refs/heads/public', { cwd: process.env.MODDABLE });
|
|
12
|
+
if (remoteRev.split('\t').shift() === currentRev.trim()) {
|
|
13
|
+
gluegun_1.print.success('Moddable SDK already up to date!');
|
|
14
|
+
process.exit(0);
|
|
15
|
+
}
|
|
16
|
+
const spinner = gluegun_1.print.spin();
|
|
17
|
+
spinner.start('Updating Moddable SDK!');
|
|
18
|
+
spinner.start('Stashing any unsaved changes before committing');
|
|
19
|
+
await gluegun_1.system.exec('git stash', { cwd: process.env.MODDABLE });
|
|
20
|
+
await gluegun_1.system.exec('git pull origin public', { cwd: process.env.MODDABLE });
|
|
21
|
+
await gluegun_1.system.exec('rm -rf build/{tmp,bin}', { cwd: process.env.MODDABLE });
|
|
22
|
+
spinner.succeed();
|
|
23
|
+
spinner.start('Rebuilding platform tools');
|
|
24
|
+
await gluegun_1.system.exec('make', {
|
|
25
|
+
cwd: BUILD_DIR,
|
|
26
|
+
stdout: process.stdout,
|
|
27
|
+
});
|
|
28
|
+
spinner.succeed();
|
|
29
|
+
spinner.start('Reinstalling simulator');
|
|
30
|
+
await gluegun_1.system.exec('make install', {
|
|
31
|
+
cwd: BUILD_DIR,
|
|
32
|
+
stdout: process.stdout,
|
|
33
|
+
stdin: process.stdin,
|
|
34
|
+
});
|
|
35
|
+
spinner.succeed();
|
|
36
|
+
gluegun_1.print.success('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
|
|
6
37
|
}
|
|
7
38
|
exports.default = default_1;
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
39
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC91cGRhdGUvbGludXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBbUQ7QUFDbkQsa0RBQWlEO0FBRWxDLEtBQUs7SUFDbEIsZUFBSyxDQUFDLElBQUksQ0FBQywwQkFBMEIsQ0FBQyxDQUFBO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNsQyx3QkFBWSxFQUNaLE9BQU8sRUFDUCxXQUFXLEVBQ1gsS0FBSyxDQUNOLENBQUE7SUFFRCxNQUFNLFVBQVUsR0FBVyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1FBQ25FLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLEdBQVcsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FDekMsd0NBQXdDLEVBQ3hDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQzlCLENBQUE7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3ZELGVBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUV2QyxPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDL0QsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRTFFLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUVqQixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDMUMsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDeEIsR0FBRyxFQUFFLFNBQVM7UUFDZCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRWpCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUN2QyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGNBQWMsRUFBRTtRQUNoQyxHQUFHLEVBQUUsU0FBUztRQUNkLE1BQU0sRUFBRSxPQUFPLENBQUMsTUFBTTtRQUN0QixLQUFLLEVBQUUsT0FBTyxDQUFDLEtBQUs7S0FDckIsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRWpCLGVBQUssQ0FBQyxPQUFPLENBQ1gsMEhBQTBILENBQzNILENBQUE7QUFDSCxDQUFDO0FBbERELDRCQWtEQyJ9
|
|
@@ -13,15 +13,17 @@ async function default_1() {
|
|
|
13
13
|
}
|
|
14
14
|
const spinner = gluegun_1.print.spin();
|
|
15
15
|
spinner.start('Updating Moddable SDK!');
|
|
16
|
-
spinner.
|
|
16
|
+
spinner.start('Stashing any unsaved changes before committing');
|
|
17
17
|
await gluegun_1.system.exec('git stash', { cwd: process.env.MODDABLE });
|
|
18
18
|
await gluegun_1.system.exec('git pull origin public', { cwd: process.env.MODDABLE });
|
|
19
19
|
await gluegun_1.system.exec('rm -rf build/{tmp,bin}', { cwd: process.env.MODDABLE });
|
|
20
|
-
spinner.
|
|
20
|
+
spinner.succeed();
|
|
21
|
+
spinner.start('Rebuilding platform tools');
|
|
21
22
|
await gluegun_1.system.exec('make', {
|
|
22
23
|
cwd: gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'build', 'makefiles', 'mac'),
|
|
24
|
+
stdout: process.stdout,
|
|
23
25
|
});
|
|
24
26
|
spinner.succeed('Moddable SDK successfully updated! Start the xsbug.app and run the "helloworld example": xs-dev run --example helloworld');
|
|
25
27
|
}
|
|
26
28
|
exports.default = default_1;
|
|
27
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvdXBkYXRlL21hYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFDQUFtRDtBQUVwQyxLQUFLO0lBQ2xCLGVBQUssQ0FBQyxJQUFJLENBQUMsMEJBQTBCLENBQUMsQ0FBQTtJQUV0QyxNQUFNLFVBQVUsR0FBVyxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLHNCQUFzQixFQUFFO1FBQ25FLEdBQUcsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVE7S0FDMUIsQ0FBQyxDQUFBO0lBQ0YsTUFBTSxTQUFTLEdBQVcsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FDekMsd0NBQXdDLEVBQ3hDLEVBQUUsR0FBRyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQzlCLENBQUE7SUFFRCxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLEtBQUssVUFBVSxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3ZELGVBQUssQ0FBQyxPQUFPLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtRQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0tBQ2hCO0lBRUQsTUFBTSxPQUFPLEdBQUcsZUFBSyxDQUFDLElBQUksRUFBRSxDQUFBO0lBQzVCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0JBQXdCLENBQUMsQ0FBQTtJQUV2QyxPQUFPLENBQUMsS0FBSyxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDL0QsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzdELE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBRTFFLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsRUFBRSxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQzFFLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtJQUVqQixPQUFPLENBQUMsS0FBSyxDQUFDLDJCQUEyQixDQUFDLENBQUE7SUFDMUMsTUFBTSxnQkFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUU7UUFDeEIsR0FBRyxFQUFFLG9CQUFVLENBQUMsT0FBTyxDQUNyQixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFDNUIsT0FBTyxFQUNQLFdBQVcsRUFDWCxLQUFLLENBQ047UUFDRCxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxDQUFDLE9BQU8sQ0FDYiwwSEFBMEgsQ0FDM0gsQ0FBQTtBQUNILENBQUM7QUF4Q0QsNEJBd0NDIn0=
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
export declare const HOME_DIR: string;
|
|
2
2
|
export declare const INSTALL_DIR: string;
|
|
3
3
|
export declare const INSTALL_PATH: string;
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const
|
|
4
|
+
export declare const EXPORTS_FILE_PATH: string;
|
|
5
|
+
export declare const MODDABLE_REPO = "https://github.com/Moddable-OpenSource/moddable";
|
|
6
|
+
export declare function getProfilePath(): string;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function moddableExists(): boolean;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xs-dev",
|
|
3
|
-
"version": "0.0
|
|
3
|
+
"version": "0.3.0",
|
|
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": {
|
|
@@ -15,6 +15,10 @@
|
|
|
15
15
|
"bin"
|
|
16
16
|
],
|
|
17
17
|
"license": "MIT",
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "https://github.com/HipsterBrown/xs-dev.git"
|
|
21
|
+
},
|
|
18
22
|
"dependencies": {
|
|
19
23
|
"axios": "^0.24.0",
|
|
20
24
|
"gluegun": "latest",
|
|
@@ -23,6 +27,7 @@
|
|
|
23
27
|
"unzip-stream": "^0.3.1"
|
|
24
28
|
},
|
|
25
29
|
"devDependencies": {
|
|
30
|
+
"@changesets/cli": "^2.19.0",
|
|
26
31
|
"@types/jest": "^27.4.0",
|
|
27
32
|
"@types/node": "^16.11.0",
|
|
28
33
|
"@types/serve-handler": "^6.1.1",
|
|
@@ -65,5 +70,5 @@
|
|
|
65
70
|
"snapupdate": "jest --updateSnapshot",
|
|
66
71
|
"coverage": "jest --coverage"
|
|
67
72
|
},
|
|
68
|
-
"readme": "# CLI for automating the setup and usage of [Moddable XS tools](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/Moddable%20SDK%20-%20Getting%20Started.md)\n\nThe Moddable SDK and associated dev board tooling is incredibly empowering for embedded JS hardware development, however the set up process can be tedious to follow when getting started. This project aims to streamline the install and environment configuration requirements across platforms in just a few commands.\n\n**This project is a work in progress and should be considered pre-1.0.**\n\n**Feature support:**\n\n- [X] [Moddable SDK install & setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/Moddable%20SDK%20-%20Getting%20Started.md)\n- [X] [ESP32 SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md)\n- [X] [ESP8266 SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp8266.md)\n- [ ] [Gecko SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/gecko/GeckoBuild.md)\n- [ ] [QCA4020 SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/qca4020/README.md)\n- [X] Update Moddable SDK\n- [X] Project management, including dependencies\n- [X] WASM simulator\n- [ ] Raspberry Pi Pico\n\n**Platform support:**\n\n- [X] Mac\n- [ ] Windows\n- [ ] Linux\n\n## Requirements\n\n[Node.js >= v12](https://nodejs.org/en/)\n\n## Install\n\n```\nnpm install -g xs-dev\n```\n\n## Features\n\n### Moddable SDK
|
|
73
|
+
"readme": "# CLI for automating the setup and usage of [Moddable XS tools](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/Moddable%20SDK%20-%20Getting%20Started.md)\n\nThe Moddable SDK and associated dev board tooling is incredibly empowering for embedded JS hardware development, however the set up process can be tedious to follow when getting started. This project aims to streamline the install and environment configuration requirements across platforms in just a few commands.\n\n**This project is a work in progress and should be considered pre-1.0.**\n\n**Feature support:**\n\n- [X] [Moddable SDK install & setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/Moddable%20SDK%20-%20Getting%20Started.md)\n- [X] [ESP32 SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp32.md)\n- [X] [ESP8266 SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/esp8266.md)\n- [ ] [Gecko SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/gecko/GeckoBuild.md)\n- [ ] [QCA4020 SDK setup](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/qca4020/README.md)\n- [X] Update Moddable SDK\n- [X] Project management, including dependencies\n- [X] WASM simulator\n- [ ] Raspberry Pi Pico\n\n**Platform support:**\n\n- [X] Mac\n- [ ] Windows\n- [ ] Linux\n\n## Requirements\n\n[Node.js >= v12](https://nodejs.org/en/)\n\n## Install\n\n```\nnpm install -g xs-dev\n```\n\n## Features\n\n### Moddable SDK setup / update / teardown\n\nThis process mostly automates the instructions provided by Moddable's \"Getting Started\" documentation with a few exceptions:\n\n- it will not install XCode, just ensures the command line tools are available\n- the `moddable` git repo is cloned into `~/.local/share` instead of a new/existing `~/Projects` directory\n- a symlink for `xsbug.app` is created in `/Applications` for easy access through Launchpad (on Mac)\n\nRun script for initial setup:\n\n```\nxs-dev setup\n```\n\nRun script for updating SDK:\n\n```\nxs-dev update\n```\n\nRemove all setup and environment changes with teardown command:\n\n```\nxs-dev teardown\n```\n\n### ESP32 SDK install / setup\n\nThis process automates the instructions for downloading and building the esp-idf SDK tooling. This tooling will be placed in the `~/.local/share/esp32` directory, which will be created if it doesn't exist.\n\nRun script for platform setup:\n\n```\nxs-dev setup --device=esp32\n```\n\nRun script to confirm the setup:\n\n```\nxs-dev run --example helloworld --device=esp32\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | [any of the allowed platform identifiers](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/tools/tools.md#arguments) (defaults to current OS platform)\n- `port`: path to port for connected device (defaults to: `UPLOAD_PORT` environment variable)\n\n### ESP8266 SDK install / setup\n\nThis process automates the instructions for downloading all the dependencies for the ESP8266 RTOS SDK. These dependencies will be placed in the `~/.local/share/esp` directory, which will be created if it doesn't exist.\n\nRun script for platform setup:\n\n```\nxs-dev setup --device=esp8266\n```\n\nRun script to confirm the setup:\n\n```\nxs-dev run --example helloworld --device=esp8266\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | [any of the allowed platform identifiers](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/tools/tools.md#arguments) (defaults to current OS platform)\n- `port`: path to port for connected device (defaults to: `UPLOAD_PORT` environment variable)\n\n### Wasm Simulator install / setup\n\nThis process automates the instructions for downloading all the dependencies for the [wasm simulator](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/wasm.md) and building the Moddable tooling. These dependencies will be placed in `~/.local/share/wasm`, which will be created if it doesn't exist.\n\nRun script for platform setup:\n\n```\nxs-dev setup --device=wasm\n```\n\n_If there are issues building the Moddable wasm tools, please try running `eval $SHELL` or starting a new shell insance before running the setup script again._\n\n\nRun script to confirm the setup:\n\n```\nxs-dev run --example helloworld --device=wasm\n```\n\n### Run Moddable examples\n\nWhile it is still possible to run the Moddable example projects in the documented workflow:\n\n```\ncd $MODDABLE/examples/<example directory>\nmcconfig -d -m -p <platform here>\n```\n\nThis tool aims to simplify that process.\n\nList available examples:\n```\nxs-dev run --list-examples\n```\n\nRun an example (coming soon):\n```\nxs-dev run --example helloworld\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | [any of the allowed platform identifiers](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/tools/tools.md#arguments) (defaults to current OS platform)\n- `port`: path to port for connected device (defaults to: `UPLOAD_PORT` environment variable)\n\n## Project management\n\n### Start a project\n\n\n```\nxs-dev init my-project\n```\n\nCreates a `main.js` and base configured `manifest.json` for running in the simulator.\n\nFlags:\n\n- `typescript`: includes typings and creates `main.ts` (experimental)\n- `io`: includes [TC53 IO manifest](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/io/io.md)\n\n### Build and run a project\n\nIn the project directory:\n\n```\nxs-dev run\n```\n\nWhen not in the project directory:\n\n```\nxs-dev run path/to/project\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | [any of the allowed platform identifiers](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/tools/tools.md#arguments) (defaults to current OS platform)\n- `port`: path to port for connected device (defaults to: `UPLOAD_PORT` environment variable)\n\n### Add a Moddable module\n\n```\nxs-dev include network/wifi\n```\n\nOr select from available modules:\n\n```\nxs-dev include\n```\n\nUpdates the `manifest.json` with the path to the dependency.\n\n### Add a remote dependency (Coming soon)\n\n```\nxs-dev get dtex/j5e\n```\n\nAssumes the dependency is a GitHub repo, clones it to `~/.local/share`, creates an environment variable with the name of the repo, and updates the `manifest.json` with the path to that dependency.\n\nTo include a specific module for the installed dependency:\n\n```\nxs-dev include j5e/lib/led\n```\n\n### Remove a dependency\n\n```\nxs-dev remove network/wifi\n```\n\nUpdates the `manifest.json` to remove the dependency.\n\n## Development\n\nClone the project and install dependencies. We're using [pnpm](https://pnpm.io/) and [volta](https://volta.sh/) to manage packages and Node.\n\n```\ngit clone https://github.com/HipsterBrown/xs-dev.git\ncd xs-dev\npnpm install\n```\n\nLink dev version of CLI using `pnpm`, which will override any other globally installed version:\n\n```\npnpm link --global\npnpm link --global xs-dev\n```\n\nOr create an alias to clearly denote the local version of the CLI:\n\n```\nalias local-xs-dev=$PWD/bin/xs-dev\n```\n\nTo maintain the alias between shell sessions, for example I use zsh:\n\n```\necho \"alias local-xs-dev=$PWD/bin/xs-dev\" >> ~/.zshrc\n```\n"
|
|
69
74
|
}
|