xs-dev 0.13.2 → 0.14.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 +1 -1
- package/build/commands/scan.js +15 -6
- package/build/toolbox/scan/parse.js +43 -3
- package/build/toolbox/setup/esp32.js +2 -2
- package/build/toolbox/setup/pico/linux.js +2 -2
- package/build/toolbox/setup/pico/mac.js +2 -2
- package/build/toolbox/setup/pico.js +39 -3
- package/build/types/toolbox/scan/parse.d.ts +5 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -131,7 +131,7 @@ xs-dev run --example helloworld --device=wasm
|
|
|
131
131
|
|
|
132
132
|
### Raspberry Pi Pico SDK install / setup
|
|
133
133
|
|
|
134
|
-
This process automates the instructions for downloading all the dependencies for the Pico SDK. These dependencies will be placed in the `~/.local/share/pico` directory, which will be created if it doesn't exist.
|
|
134
|
+
This process automates the instructions for downloading all the dependencies for the Pico SDK. These dependencies will be placed in the `~/.local/share/pico` directory, which will be created if it doesn't exist. It will also include the [`picotool` CLI](https://github.com/raspberrypi/picotool) to help with scanning for connected devices.
|
|
135
135
|
|
|
136
136
|
Run script for platform setup:
|
|
137
137
|
|
package/build/commands/scan.js
CHANGED
|
@@ -12,7 +12,7 @@ const command = {
|
|
|
12
12
|
process.exit(0);
|
|
13
13
|
}
|
|
14
14
|
if (system.which('esptool.py') === null) {
|
|
15
|
-
print.
|
|
15
|
+
print.warning('esptool.py required to scan for Espressif devices. Setup environment for ESP8266 or ESP32:\n xs-dev setup --device esp32\n xs-dev setup --device esp8266.');
|
|
16
16
|
}
|
|
17
17
|
const spinner = print.spin();
|
|
18
18
|
spinner.start('Scanning for devices...');
|
|
@@ -20,13 +20,22 @@ const command = {
|
|
|
20
20
|
const result = await Promise.all(ports
|
|
21
21
|
.filter((port) => port.serialNumber !== undefined)
|
|
22
22
|
.map(async (port) => {
|
|
23
|
+
var _a;
|
|
23
24
|
try {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
if (((_a = port.manufacturer) === null || _a === void 0 ? void 0 : _a.includes('Raspberry Pi')) === true &&
|
|
26
|
+
system.which('picotool') !== null) {
|
|
27
|
+
return await system
|
|
28
|
+
.exec(`picotool info -fa`)
|
|
29
|
+
.then((buffer) => [buffer, port.path]);
|
|
30
|
+
}
|
|
31
|
+
return await system
|
|
32
|
+
.exec(`esptool.py --port ${port.path} read_mac`)
|
|
33
|
+
.then((buffer) => [buffer, port.path]);
|
|
27
34
|
}
|
|
35
|
+
catch (_b) { }
|
|
36
|
+
return [undefined, port.path];
|
|
28
37
|
}));
|
|
29
|
-
const record = (0, parse_1.parseScanResult)(result
|
|
38
|
+
const record = (0, parse_1.parseScanResult)(result);
|
|
30
39
|
const rows = Object.keys(record).map((port) => {
|
|
31
40
|
const { device, features } = record[port];
|
|
32
41
|
return [port, device, features];
|
|
@@ -41,4 +50,4 @@ const command = {
|
|
|
41
50
|
},
|
|
42
51
|
};
|
|
43
52
|
exports.default = command;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
53
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Nhbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9zY2FuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsMkNBQXVDO0FBR3ZDLGlEQUF1RDtBQUV2RCxNQUFNLE9BQU8sR0FBaUM7SUFDNUMsSUFBSSxFQUFFLE1BQU07SUFDWixXQUFXLEVBQUUsNEJBQTRCO0lBQ3pDLEdBQUcsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLEVBQUU7UUFDckIsTUFBTSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFBO1FBQzdDLElBQUksVUFBVSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssU0FBUyxFQUFFO1lBQ3pDLEtBQUssQ0FBQyxhQUFhLENBQUMsT0FBTyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQTtZQUN0QyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ2hCO1FBRUQsSUFBSSxNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxLQUFLLElBQUksRUFBRTtZQUN2QyxLQUFLLENBQUMsT0FBTyxDQUNYLDJKQUEySixDQUM1SixDQUFBO1NBQ0Y7UUFFRCxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7UUFFNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx5QkFBeUIsQ0FBQyxDQUFBO1FBRXhDLE1BQU0sS0FBSyxHQUFHLE1BQU0sdUJBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNyQyxNQUFNLE1BQU0sR0FFUixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ25CLEtBQUs7YUFDRixNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLEtBQUssU0FBUyxDQUFDO2FBQ2pELEdBQUcsQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUU7O1lBQ2xCLElBQUk7Z0JBQ0YsSUFDRSxDQUFBLE1BQUEsSUFBSSxDQUFDLFlBQVksMENBQUUsUUFBUSxDQUFDLGNBQWMsQ0FBQyxNQUFLLElBQUk7b0JBQ3BELE1BQU0sQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDLEtBQUssSUFBSSxFQUNqQztvQkFDQSxPQUFPLE1BQU0sTUFBTTt5QkFDaEIsSUFBSSxDQUFDLG1CQUFtQixDQUFDO3lCQUN6QixJQUFJLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFBO2lCQUN6QztnQkFDRCxPQUFPLE1BQU0sTUFBTTtxQkFDaEIsSUFBSSxDQUFDLHFCQUFxQixJQUFJLENBQUMsSUFBSSxXQUFXLENBQUM7cUJBQy9DLElBQUksQ0FBQyxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUE7YUFDekM7WUFBQyxXQUFNLEdBQUU7WUFDVixPQUFPLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQTtRQUMvQixDQUFDLENBQUMsQ0FDTCxDQUFBO1FBRUQsTUFBTSxNQUFNLEdBQUcsSUFBQSx1QkFBZSxFQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ3RDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7WUFDNUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDekMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFDLENBQUE7UUFDakMsQ0FBQyxDQUFDLENBQUE7UUFFRixJQUFJLElBQUksQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLENBQUMsQ0FBQTtTQUM1QzthQUFNO1lBQ0wsT0FBTyxDQUFDLE9BQU8sQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFBO1lBQ3pELEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFBO1NBQ3ZEO0lBQ0gsQ0FBQztDQUNGLENBQUE7QUFFRCxrQkFBZSxPQUFPLENBQUEifQ==
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseScanResult = void 0;
|
|
4
|
-
function
|
|
5
|
-
const lines = output.split('\n');
|
|
4
|
+
function parseEsptoolLines(lines) {
|
|
6
5
|
let state = 'searching';
|
|
7
6
|
let currentPort = null;
|
|
8
7
|
return lines.reduce((result, line) => {
|
|
@@ -42,5 +41,46 @@ function parseScanResult(output) {
|
|
|
42
41
|
return result;
|
|
43
42
|
}, {});
|
|
44
43
|
}
|
|
44
|
+
function parsePicotoolLines(lines, port) {
|
|
45
|
+
let state = 'searching';
|
|
46
|
+
const currentPort = port.replace('tty', 'cu');
|
|
47
|
+
return lines.reduce((result, line) => {
|
|
48
|
+
if (state === 'searching') {
|
|
49
|
+
result[currentPort] = { device: '', features: '' };
|
|
50
|
+
state = 'portFound';
|
|
51
|
+
}
|
|
52
|
+
if (state === 'portFound') {
|
|
53
|
+
if (line.trim().startsWith('features')) {
|
|
54
|
+
const [, features] = line.split(':');
|
|
55
|
+
result[currentPort].features = features.trim();
|
|
56
|
+
state = 'featuresFound';
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
if (state === 'featuresFound') {
|
|
60
|
+
if (line.trim().startsWith('pico_board')) {
|
|
61
|
+
const [, device] = line.split(':');
|
|
62
|
+
result[currentPort].device = device.trim();
|
|
63
|
+
state = 'deviceFound';
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
if (state === 'deviceFound') {
|
|
67
|
+
if (line.includes('asked to reboot')) {
|
|
68
|
+
state = 'searching';
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return result;
|
|
72
|
+
}, {});
|
|
73
|
+
}
|
|
74
|
+
function parseScanResult(scans) {
|
|
75
|
+
return scans.reduce((result, [output, port]) => {
|
|
76
|
+
if (typeof output === 'undefined')
|
|
77
|
+
return result;
|
|
78
|
+
const lines = String(output).split('\n');
|
|
79
|
+
if (output.includes('pico_board')) {
|
|
80
|
+
return { ...result, ...parsePicotoolLines(lines, port) };
|
|
81
|
+
}
|
|
82
|
+
return { ...result, ...parseEsptoolLines(lines) };
|
|
83
|
+
}, {});
|
|
84
|
+
}
|
|
45
85
|
exports.parseScanResult = parseScanResult;
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
86
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFyc2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zY2FuL3BhcnNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUdBLFNBQVMsaUJBQWlCLENBQUMsS0FBZTtJQUN4QyxJQUFJLEtBQUssR0FBZSxXQUFXLENBQUE7SUFDbkMsSUFBSSxXQUFXLEdBQWtCLElBQUksQ0FBQTtJQUVyQyxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQWEsQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUU7UUFDL0MsSUFBSSxLQUFLLEtBQUssV0FBVyxFQUFFO1lBQ3pCLElBQUksSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtnQkFDbEMsV0FBVyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLENBQUE7Z0JBQ25FLE1BQU0sQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxDQUFBO2dCQUNsRCxLQUFLLEdBQUcsV0FBVyxDQUFBO2FBQ3BCO1NBQ0Y7UUFFRCxJQUFJLEtBQUssS0FBSyxXQUFXLEVBQUU7WUFDekIsSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQ3ZELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsVUFBVSxFQUFFLEVBQUUsQ0FBQyxDQUFBO2dCQUMzQyxNQUFNLENBQUMsV0FBVyxDQUFDLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQTtnQkFDbkMsS0FBSyxHQUFHLGFBQWEsQ0FBQTthQUN0QjtZQUNELElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLFdBQVcsS0FBSyxJQUFJLEVBQUU7Z0JBQzlELGdFQUFnRTtnQkFD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
|
|
@@ -56,7 +56,7 @@ async function default_1() {
|
|
|
56
56
|
spinner.succeed();
|
|
57
57
|
// 6. append 'source $IDF_PATH/export.sh' to shell profile
|
|
58
58
|
spinner.info('Sourcing esp-idf environment');
|
|
59
|
-
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `source $IDF_PATH/export.sh`);
|
|
59
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `source $IDF_PATH/export.sh 1> /dev/null`);
|
|
60
60
|
await gluegun_1.system.exec('source $IDF_PATH/export.sh', {
|
|
61
61
|
shell: process.env.SHELL,
|
|
62
62
|
});
|
|
@@ -67,4 +67,4 @@ async function default_1() {
|
|
|
67
67
|
`);
|
|
68
68
|
}
|
|
69
69
|
exports.default = default_1;
|
|
70
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFtRDtBQUNuRCwyQkFBeUM7QUFDekMsMkNBQTREO0FBQzVELHlDQUEyQztBQUMzQyxnRUFBdUM7QUFDdkMscUNBQTJEO0FBQzNELHlDQUErRDtBQUVoRCxLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUE7SUFDL0QsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFBO0lBQ3pCLE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDMUQsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXpELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7SUFFdkMsNEJBQTRCO0lBQzVCLElBQUksQ0FBQyxJQUFBLHlCQUFjLEdBQUUsRUFBRTtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELDJDQUEyQztJQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDaEQsb0JBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFekIscURBQXFEO0lBQ3JELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUNyQyxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUNoQixnQkFBZ0IsVUFBVSxnQkFBZ0IsWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0tBQ2xCO0lBRUQsd0NBQXdDO0lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUU5QyxJQUFJLEVBQUUsS0FBSyxRQUFRLEVBQUU7UUFDbkIsTUFBTSxJQUFBLGlCQUFjLEVBQUMsT0FBTyxDQUFDLENBQUE7S0FDOUI7SUFFRCxJQUFJLEVBQUUsS0FBSyxPQUFPLEVBQUU7UUFDbEIsTUFBTSxJQUFBLG1CQUFnQixFQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQ2hDO0lBRUQsaURBQWlEO0lBQ2pELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDL0IsTUFBTSxJQUFBLGdCQUFNLEVBQUMsNkJBQWlCLEVBQUUsbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUE7S0FDL0Q7SUFFRCxvQ0FBb0M7SUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ2hDLEdBQUcsRUFBRSxRQUFRO1FBQ2IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSztRQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRWpCLDBEQUEwRDtJQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDNUMsTUFBTSxJQUFBLGdCQUFNLEVBQUMsNkJBQWlCLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtJQUMxRSxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1FBQzlDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUs7S0FDekIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7OztHQUlmLENBQUMsQ0FBQTtBQUNKLENBQUM7QUF0RUQsNEJBc0VDIn0=
|
|
@@ -3,8 +3,8 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.installDeps = void 0;
|
|
4
4
|
const exec_1 = require("../../system/exec");
|
|
5
5
|
async function installDeps(spinner) {
|
|
6
|
-
await (0, exec_1.execWithSudo)('apt-get install --yes cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential', { stdout: process.stdout });
|
|
6
|
+
await (0, exec_1.execWithSudo)('apt-get install --yes cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential libusb-1.0.0-dev pkg-config', { stdout: process.stdout });
|
|
7
7
|
spinner.succeed();
|
|
8
8
|
}
|
|
9
9
|
exports.installDeps = installDeps;
|
|
10
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGludXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9waWNvL2xpbnV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDRDQUFnRDtBQUV6QyxLQUFLLFVBQVUsV0FBVyxDQUMvQixPQUF5QztJQUV6QyxNQUFNLElBQUEsbUJBQVksRUFDaEIsbUhBQW1ILEVBQ25ILEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FDM0IsQ0FBQTtJQUNELE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUNuQixDQUFDO0FBUkQsa0NBUUMifQ==
|
|
@@ -4,8 +4,8 @@ exports.installDeps = void 0;
|
|
|
4
4
|
const gluegun_1 = require("gluegun");
|
|
5
5
|
async function installDeps(spinner) {
|
|
6
6
|
await gluegun_1.system.exec('brew tap ArmMbed/homebrew-formulae');
|
|
7
|
-
await gluegun_1.system.exec(`brew install arm-none-eabi-gcc`);
|
|
7
|
+
await gluegun_1.system.exec(`brew install arm-none-eabi-gcc libusb pkg-config`);
|
|
8
8
|
spinner.succeed();
|
|
9
9
|
}
|
|
10
10
|
exports.installDeps = installDeps;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvcGljby9tYWMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscUNBQWdDO0FBRXpCLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQXlDO0lBRXpDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsb0NBQW9DLENBQUMsQ0FBQTtJQUN2RCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLGtEQUFrRCxDQUFDLENBQUE7SUFDckUsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQ25CLENBQUM7QUFORCxrQ0FNQyJ9
|
|
@@ -10,13 +10,16 @@ const upsert_1 = __importDefault(require("../patching/upsert"));
|
|
|
10
10
|
const mac_1 = require("./pico/mac");
|
|
11
11
|
const linux_1 = require("./pico/linux");
|
|
12
12
|
async function default_1() {
|
|
13
|
-
var _a;
|
|
13
|
+
var _a, _b;
|
|
14
14
|
const OS = (0, os_1.type)().toLowerCase();
|
|
15
15
|
const PICO_SDK_REPO = 'https://github.com/raspberrypi/pico-sdk';
|
|
16
16
|
const PICO_EXAMPLES_REPO = 'https://github.com/raspberrypi/pico-examples';
|
|
17
|
+
const PICOTOOL_REPO = 'https://github.com/raspberrypi/picotool';
|
|
17
18
|
const PICO_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'pico');
|
|
18
19
|
const PICO_SDK_DIR = gluegun_1.filesystem.resolve(PICO_DIR, 'pico-sdk');
|
|
19
20
|
const PICO_EXAMPLES_PATH = gluegun_1.filesystem.resolve(PICO_DIR, 'pico-examples');
|
|
21
|
+
const PICOTOOL_PATH = gluegun_1.filesystem.resolve(PICO_DIR, 'picotool');
|
|
22
|
+
const PICOTOOL_BUILD_DIR = gluegun_1.filesystem.resolve(PICOTOOL_PATH, 'build');
|
|
20
23
|
const PICO_SDK_BUILD_DIR = gluegun_1.filesystem.resolve(PICO_SDK_DIR, 'build');
|
|
21
24
|
const spinner = gluegun_1.print.spin();
|
|
22
25
|
spinner.start('Starting pico tooling setup');
|
|
@@ -48,7 +51,7 @@ async function default_1() {
|
|
|
48
51
|
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PICO_GCC_ROOT=/usr`);
|
|
49
52
|
}
|
|
50
53
|
spinner.succeed();
|
|
51
|
-
// 2. Install the pico sdk and
|
|
54
|
+
// 2. Install the pico sdk, examples, and picotool:
|
|
52
55
|
if (gluegun_1.filesystem.exists(PICO_SDK_DIR) === false) {
|
|
53
56
|
spinner.start('Cloning pico-sdk repo');
|
|
54
57
|
await gluegun_1.system.exec(`git clone -b master ${PICO_SDK_REPO} ${PICO_SDK_DIR}`, {
|
|
@@ -65,6 +68,13 @@ async function default_1() {
|
|
|
65
68
|
await gluegun_1.system.exec(`git clone -b master ${PICO_EXAMPLES_REPO} ${PICO_EXAMPLES_PATH}`, { stdout: process.stdout });
|
|
66
69
|
spinner.succeed();
|
|
67
70
|
}
|
|
71
|
+
if (gluegun_1.filesystem.exists(PICOTOOL_PATH) === false) {
|
|
72
|
+
spinner.start('Cloning picotool repo');
|
|
73
|
+
await gluegun_1.system.exec(`git clone -b master ${PICOTOOL_REPO} ${PICOTOOL_PATH}`, {
|
|
74
|
+
stdout: process.stdout,
|
|
75
|
+
});
|
|
76
|
+
spinner.succeed();
|
|
77
|
+
}
|
|
68
78
|
// 3. Set the PICO_SDK_PATH environment variable to point to the Pico SDK directory
|
|
69
79
|
if (process.env.PICO_SDK_DIR === undefined) {
|
|
70
80
|
spinner.info('Setting PICO_SDK_DIR');
|
|
@@ -91,6 +101,32 @@ async function default_1() {
|
|
|
91
101
|
});
|
|
92
102
|
spinner.succeed();
|
|
93
103
|
}
|
|
104
|
+
// 5. Build _the_ picotool
|
|
105
|
+
if (process.env.PICO_SDK_PATH === undefined) {
|
|
106
|
+
spinner.info('Setting PICO_SDK_PATH');
|
|
107
|
+
process.env.PICO_SDK_PATH = PICO_SDK_DIR;
|
|
108
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PICO_SDK_PATH=${PICO_SDK_DIR}`);
|
|
109
|
+
}
|
|
110
|
+
else {
|
|
111
|
+
spinner.info(`Using existing $PICO_SDK_PATH: ${process.env.PICO_SDK_PATH}`);
|
|
112
|
+
}
|
|
113
|
+
if (gluegun_1.filesystem.exists(PICOTOOL_BUILD_DIR) === false ||
|
|
114
|
+
((_b = gluegun_1.filesystem.list(PICOTOOL_BUILD_DIR)) === null || _b === void 0 ? void 0 : _b.length) === 0) {
|
|
115
|
+
spinner.start('Build the picotool CLI');
|
|
116
|
+
gluegun_1.filesystem.dir(PICOTOOL_BUILD_DIR);
|
|
117
|
+
await gluegun_1.system.exec('cmake ..', {
|
|
118
|
+
shell: process.env.SHELL,
|
|
119
|
+
stdout: process.stdout,
|
|
120
|
+
cwd: PICOTOOL_BUILD_DIR,
|
|
121
|
+
});
|
|
122
|
+
await gluegun_1.system.exec('make', {
|
|
123
|
+
shell: process.env.SHELL,
|
|
124
|
+
stdout: process.stdout,
|
|
125
|
+
cwd: PICOTOOL_BUILD_DIR,
|
|
126
|
+
});
|
|
127
|
+
await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export PATH="${PICOTOOL_BUILD_DIR}:$PATH"`);
|
|
128
|
+
spinner.succeed();
|
|
129
|
+
}
|
|
94
130
|
spinner.succeed(`
|
|
95
131
|
Successfully set up pico platform support for Moddable!
|
|
96
132
|
Test out the setup by starting a new terminal session and putting the device into programming mode by holding the BOOTSEL button when powering on the Pico
|
|
@@ -98,4 +134,4 @@ Then run: xs-dev run --example helloworld --device pico
|
|
|
98
134
|
`);
|
|
99
135
|
}
|
|
100
136
|
exports.default = default_1;
|
|
101
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
137
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGljby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL3BpY28udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxQ0FBbUQ7QUFDbkQsMkJBQXlDO0FBQ3pDLDJDQUE0RDtBQUM1RCxnRUFBdUM7QUFDdkMsb0NBQTBEO0FBQzFELHdDQUE4RDtBQUUvQyxLQUFLOztJQUNsQixNQUFNLEVBQUUsR0FBRyxJQUFBLFNBQVksR0FBRSxDQUFDLFdBQVcsRUFBRSxDQUFBO0lBQ3ZDLE1BQU0sYUFBYSxHQUFHLHlDQUF5QyxDQUFBO0lBQy9ELE1BQU0sa0JBQWtCLEdBQUcsOENBQThDLENBQUE7SUFDekUsTUFBTSxhQUFhLEdBQUcseUNBQXlDLENBQUE7SUFDL0QsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsdUJBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQTtJQUN4RCxNQUFNLFlBQVksR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLENBQUE7SUFDN0QsTUFBTSxrQkFBa0IsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsZUFBZSxDQUFDLENBQUE7SUFDeEUsTUFBTSxhQUFhLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsUUFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQzlELE1BQU0sa0JBQWtCLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsYUFBYSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3JFLE1BQU0sa0JBQWtCLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBRXBFLE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixDQUFDLENBQUE7SUFFNUMsc0RBQXNEO0lBQ3RELElBQ0UsT0FBTyxDQUFD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
|
|
@@ -1,6 +1,10 @@
|
|
|
1
|
+
/// <reference types="node" />
|
|
1
2
|
declare type ScanResult = Record<string, {
|
|
2
3
|
device: string;
|
|
3
4
|
features: string;
|
|
4
5
|
}>;
|
|
5
|
-
export declare function parseScanResult(
|
|
6
|
+
export declare function parseScanResult(scans: Array<[
|
|
7
|
+
output: Buffer,
|
|
8
|
+
port: string
|
|
9
|
+
] | [output: undefined, port: string]>): ScanResult;
|
|
6
10
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "xs-dev",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.14.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": {
|
|
@@ -71,5 +71,5 @@
|
|
|
71
71
|
"snapupdate": "jest --updateSnapshot",
|
|
72
72
|
"coverage": "jest --coverage"
|
|
73
73
|
},
|
|
74
|
-
"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- [X] [WASM simulator](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/wasm.md)\n- [X] [Raspberry Pi Pico](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/pico.md)\n- [X] Update Moddable SDK\n- [X] Project management, including dependencies\n\n**Platform support:**\n\n- [X] Mac\n- [ ] Windows\n- [X] Linux\n\n## Requirements\n\n[Node.js >= v12](https://nodejs.org/en/)\n\n**On Linux:**\n\nSetup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/bionic/ssh-askpass) to prompt for permission when installing other tools and dependencies.\n\n## Install\n\n```\nnpm install -g xs-dev\n```\n\n## Update\n\n```\nnpm update -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` | `pico` | [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` | `pico` | [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### Raspberry Pi Pico SDK install / setup\n\nThis process automates the instructions for downloading all the dependencies for the Pico SDK. These dependencies will be placed in the `~/.local/share/pico` directory, which will be created if it doesn't exist.\n\nRun script for platform setup:\n\n```\nxs-dev setup --device=pico\n```\n\nRun script to confirm the setup:\n\n```\nxs-dev run --example helloworld --device=pico\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | `pico` | [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### 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:\n```\nxs-dev run --example helloworld\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | `pico` | [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 minimally 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- `example`: use [Moddable example project](https://github.com/Moddable-OpenSource/moddable/tree/public/examples) as base for new project\n- `overwrite`: replace any existing directory of the same name\n\nFor the example flag, it can be used as a boolean to select a project from a list:\n\n```\nxs-dev init my-project --example\n```\n\nOr select from a filtered list of projects:\n\n```\nxs-dev init my-project --example http\n```\n\nOr if the complete example name is passed, it will be selected by default:\n\n```\nxs-dev init my-project --example network/mqtt/mqttbasic\n```\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` | `pico` | [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 SDK module\n\n```\nxs-dev include network/wifi\n```\n\nOr select from available modules:\n\n```\nxs-dev include\nxs-dev include files\n```\n\nUpdates the `manifest.json` to include the module. \n\nFlags:\n\n- `device`: When this flag is present, the module is added to the `platforms` section for the specified device. When `device` is not provided, the module is added to the global manifest section to be used for all devices. For example, the following adds the module for use on `esp32` devices only:\n\n```\nxs-dev include files/flash --device esp32\n```\n\n### Scan for available devices\n\nIf the default device discovery is having trouble finding the correct port when running a project, use this command to find available ports to pass through the `--port` flag:\n\n```\n$ xs-dev scan\n\n✔ Found the following available devices!\n Port Device Features\n /dev/cu.usbserial-0001 ESP8266EX WiFi\n /dev/cu.usbserial-DN02N5XK ESP32-D0WDQ6 (revision 0) WiFi, BT, Dual Core, Coding Scheme None\n\n$ xs-dev run --port /dev/cu.usbserial-0001 --device esp8266\n```\n\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 Moddable SDK module\n\n```\nxs-dev remove network/wifi\n```\n\nUpdates the `manifest.json` to remove the module.\n\nOr remove all modules that contain a string. This removes all modules that contain `\"wifi\"`.\n\n```\nxs-dev remove wifi\n```\n\nFlags:\n\n- `device`: When this flag is present, the module is removed from the `platforms` section for the specified device. When `device` is not provided, the module is removed from the global manifest section. For example, the following adds the module for use on `esp32` devices only:\n\n```\nxs-dev remove network/mqtt --device esp32\n```\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"
|
|
74
|
+
"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- [X] [WASM simulator](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/wasm.md)\n- [X] [Raspberry Pi Pico](https://github.com/Moddable-OpenSource/moddable/blob/public/documentation/devices/pico.md)\n- [X] Update Moddable SDK\n- [X] Project management, including dependencies\n\n**Platform support:**\n\n- [X] Mac\n- [ ] Windows\n- [X] Linux\n\n## Requirements\n\n[Node.js >= v12](https://nodejs.org/en/)\n\n**On Linux:**\n\nSetup commands rely on [`ssh-askpass`](https://packages.ubuntu.com/bionic/ssh-askpass) to prompt for permission when installing other tools and dependencies.\n\n## Install\n\n```\nnpm install -g xs-dev\n```\n\n## Update\n\n```\nnpm update -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` | `pico` | [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` | `pico` | [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### Raspberry Pi Pico SDK install / setup\n\nThis process automates the instructions for downloading all the dependencies for the Pico SDK. These dependencies will be placed in the `~/.local/share/pico` directory, which will be created if it doesn't exist. It will also include the [`picotool` CLI](https://github.com/raspberrypi/picotool) to help with scanning for connected devices.\n\nRun script for platform setup:\n\n```\nxs-dev setup --device=pico\n```\n\nRun script to confirm the setup:\n\n```\nxs-dev run --example helloworld --device=pico\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | `pico` | [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### 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:\n```\nxs-dev run --example helloworld\n```\n\nFlags:\n\n- `device`: `esp8266` | `esp32` | `pico` | [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 minimally 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- `example`: use [Moddable example project](https://github.com/Moddable-OpenSource/moddable/tree/public/examples) as base for new project\n- `overwrite`: replace any existing directory of the same name\n\nFor the example flag, it can be used as a boolean to select a project from a list:\n\n```\nxs-dev init my-project --example\n```\n\nOr select from a filtered list of projects:\n\n```\nxs-dev init my-project --example http\n```\n\nOr if the complete example name is passed, it will be selected by default:\n\n```\nxs-dev init my-project --example network/mqtt/mqttbasic\n```\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` | `pico` | [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 SDK module\n\n```\nxs-dev include network/wifi\n```\n\nOr select from available modules:\n\n```\nxs-dev include\nxs-dev include files\n```\n\nUpdates the `manifest.json` to include the module. \n\nFlags:\n\n- `device`: When this flag is present, the module is added to the `platforms` section for the specified device. When `device` is not provided, the module is added to the global manifest section to be used for all devices. For example, the following adds the module for use on `esp32` devices only:\n\n```\nxs-dev include files/flash --device esp32\n```\n\n### Scan for available devices\n\nIf the default device discovery is having trouble finding the correct port when running a project, use this command to find available ports to pass through the `--port` flag:\n\n```\n$ xs-dev scan\n\n✔ Found the following available devices!\n Port Device Features\n /dev/cu.usbserial-0001 ESP8266EX WiFi\n /dev/cu.usbserial-DN02N5XK ESP32-D0WDQ6 (revision 0) WiFi, BT, Dual Core, Coding Scheme None\n\n$ xs-dev run --port /dev/cu.usbserial-0001 --device esp8266\n```\n\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 Moddable SDK module\n\n```\nxs-dev remove network/wifi\n```\n\nUpdates the `manifest.json` to remove the module.\n\nOr remove all modules that contain a string. This removes all modules that contain `\"wifi\"`.\n\n```\nxs-dev remove wifi\n```\n\nFlags:\n\n- `device`: When this flag is present, the module is removed from the `platforms` section for the specified device. When `device` is not provided, the module is removed from the global manifest section. For example, the following adds the module for use on `esp32` devices only:\n\n```\nxs-dev remove network/mqtt --device esp32\n```\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"
|
|
75
75
|
}
|