xs-dev 0.16.0 → 0.19.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.
Files changed (32) hide show
  1. package/README.md +1 -1
  2. package/build/commands/build.js +30 -0
  3. package/build/commands/init.js +6 -3
  4. package/build/commands/run.js +15 -124
  5. package/build/extensions/build-extension.js +7 -0
  6. package/build/templates/manifest.json.ejs +1 -1
  7. package/build/toolbox/build/index.js +145 -0
  8. package/build/toolbox/setup/constants.js +10 -3
  9. package/build/toolbox/setup/esp32/windows.js +42 -0
  10. package/build/toolbox/setup/esp32.js +48 -19
  11. package/build/toolbox/setup/esp8266/windows.js +84 -0
  12. package/build/toolbox/setup/esp8266.js +44 -16
  13. package/build/toolbox/setup/windows.js +166 -2
  14. package/build/types/commands/build.d.ts +4 -0
  15. package/build/types/extensions/build-extension.d.ts +3 -0
  16. package/build/types/toolbox/build/index.d.ts +13 -0
  17. package/build/types/toolbox/setup/esp32/windows.d.ts +3 -0
  18. package/build/types/toolbox/setup/esp8266/windows.d.ts +3 -0
  19. package/build/types/toolbox/setup/windows.d.ts +5 -0
  20. package/build/types/types.d.ts +3 -1
  21. package/docs/public/run-hello-world.png +0 -0
  22. package/docs/src/components/HeadCommon.astro +4 -4
  23. package/docs/src/components/RightSidebar/RightSidebar.astro +2 -3
  24. package/docs/src/components/RightSidebar/TableOfContents.tsx +50 -43
  25. package/docs/src/config.ts +3 -0
  26. package/docs/src/layouts/MainLayout.astro +2 -2
  27. package/docs/src/pages/en/features/init.md +8 -0
  28. package/docs/src/pages/en/features/run.md +29 -2
  29. package/docs/src/pages/en/guide/00-prepare.md +54 -0
  30. package/docs/src/pages/en/guide/01-hello-console.md +62 -0
  31. package/docs/tsconfig.json +2 -1
  32. package/package.json +6 -3
package/README.md CHANGED
@@ -17,7 +17,7 @@ The Moddable SDK and associated dev board tooling is incredibly empowering for e
17
17
  **Platform support:**
18
18
 
19
19
  - [X] Mac
20
- - [ ] Windows
20
+ - [X] Windows (Beta support)
21
21
  - [X] Linux
22
22
 
23
23
  ## Requirements
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const os_1 = require("os");
4
+ const devices_1 = require("../toolbox/prompt/devices");
5
+ const command = {
6
+ name: 'build',
7
+ description: 'Build project for release to target device',
8
+ run: async ({ parameters, filesystem, build }) => {
9
+ var _a, _b, _c;
10
+ const currentPlatform = (0, os_1.type)().toLowerCase();
11
+ const { device = currentPlatform, port, example, listExamples = false, listDevices = false, mode = (_a = process.env.NODE_ENV) !== null && _a !== void 0 ? _a : 'development', output = '', deploy = false, } = parameters.options;
12
+ const targetPlatform = (_b = devices_1.DEVICE_ALIAS[device]) !== null && _b !== void 0 ? _b : device;
13
+ const projectPath = filesystem.resolve((_c = parameters.first) !== null && _c !== void 0 ? _c : '.');
14
+ await build({
15
+ port,
16
+ listExamples,
17
+ listDevices,
18
+ example,
19
+ targetPlatform,
20
+ projectPath,
21
+ mode,
22
+ deployStatus: deploy ? 'push' : 'none',
23
+ outputDir: output !== ''
24
+ ? filesystem.resolve(output)
25
+ : filesystem.resolve(String(process.env.MODDABLE), 'build'),
26
+ });
27
+ },
28
+ };
29
+ exports.default = command;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tbWFuZHMvYnVpbGQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFDQSwyQkFBeUM7QUFFekMsdURBQXdEO0FBZXhELE1BQU0sT0FBTyxHQUFpQztJQUM1QyxJQUFJLEVBQUUsT0FBTztJQUNiLFdBQVcsRUFBRSw0Q0FBNEM7SUFDekQsR0FBRyxFQUFFLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRTs7UUFDL0MsTUFBTSxlQUFlLEdBQVcsSUFBQSxTQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQVksQ0FBQTtRQUN0RSxNQUFNLEVBQ0osTUFBTSxHQUFHLGVBQWUsRUFDeEIsSUFBSSxFQUNKLE9BQU8sRUFDUCxZQUFZLEdBQUcsS0FBSyxFQUNwQixXQUFXLEdBQUcsS0FBSyxFQUNuQixJQUFJLEdBQUcsTUFBQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQWlCLG1DQUFJLGFBQWEsRUFDdEQsTUFBTSxHQUFHLEVBQUUsRUFDWCxNQUFNLEdBQUcsS0FBSyxHQUNmLEdBQWlCLFVBQVUsQ0FBQyxPQUFPLENBQUE7UUFDcEMsTUFBTSxjQUFjLEdBQVcsTUFBQSxzQkFBWSxDQUFDLE1BQU0sQ0FBQyxtQ0FBSSxNQUFNLENBQUE7UUFDN0QsTUFBTSxXQUFXLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFBLFVBQVUsQ0FBQyxLQUFLLG1DQUFJLEdBQUcsQ0FBQyxDQUFBO1FBRS9ELE1BQU0sS0FBSyxDQUFDO1lBQ1YsSUFBSTtZQUNKLFlBQVk7WUFDWixXQUFXO1lBQ1gsT0FBTztZQUNQLGNBQWM7WUFDZCxXQUFXO1lBQ1gsSUFBSTtZQUNKLFlBQVksRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTTtZQUN0QyxTQUFTLEVBQ1AsTUFBTSxLQUFLLEVBQUU7Z0JBQ1gsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO2dCQUM1QixDQUFDLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUM7U0FDaEUsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGLENBQUE7QUFFRCxrQkFBZSxPQUFPLENBQUEifQ==
@@ -9,7 +9,7 @@ const command = {
9
9
  var _a;
10
10
  const { parameters, filesystem, template: { generate }, print: { warning, info, success }, prompt, } = toolbox;
11
11
  const name = parameters.first;
12
- const { typescript = false, io = false, example = false, overwrite = false, } = parameters.options;
12
+ const { typescript = false, io = false, example = false, overwrite = false, asyncMain = false, } = parameters.options;
13
13
  if (name !== undefined) {
14
14
  if (!overwrite && filesystem.isDirectory(name)) {
15
15
  warning(`Directory called ${name} already exists. Please pass the --overwrite flag to replace an existing project.`);
@@ -56,10 +56,13 @@ const command = {
56
56
  ]
57
57
  .filter(Boolean)
58
58
  .join(',\n\t');
59
+ const defines = asyncMain
60
+ ? ',\n defines: {\n async_main: 1\n }'
61
+ : '';
59
62
  await generate({
60
63
  template: 'manifest.json.ejs',
61
64
  target: `${name}/manifest.json`,
62
- props: { includes },
65
+ props: { includes, defines },
63
66
  });
64
67
  await generate({
65
68
  template: 'main.js.ejs',
@@ -74,4 +77,4 @@ const command = {
74
77
  },
75
78
  };
76
79
  exports.default = command;
77
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsdURBQWtFO0FBU2xFLE1BQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSxvQ0FBb0M7SUFDakQsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTs7UUFDckIsTUFBTSxFQUNKLFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQ3RCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ2pDLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQTtRQUVYLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUE7UUFDN0IsTUFBTSxFQUNKLFVBQVUsR0FBRyxLQUFLLEVBQ2xCLEVBQUUsR0FBRyxLQUFLLEVBQ1YsT0FBTyxHQUFHLEtBQUssRUFDZixTQUFTLEdBQUcsS0FBSyxHQUNsQixHQUFnQixVQUFVLENBQUMsT0FBTyxDQUFBO1FBRW5DLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlDLE9BQU8sQ0FDTCxvQkFBb0IsSUFBSSxtRkFBbUYsQ0FDNUcsQ0FBQTtnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ2hCO1lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO2dCQUNyQix1QkFBdUI7Z0JBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQzVCLFVBQVUsQ0FDWCxD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
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5pdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb21tYW5kcy9pbml0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EsdURBQWtFO0FBVWxFLE1BQU0sT0FBTyxHQUFtQjtJQUM5QixJQUFJLEVBQUUsTUFBTTtJQUNaLEtBQUssRUFBRSxDQUFDLEdBQUcsQ0FBQztJQUNaLFdBQVcsRUFBRSxvQ0FBb0M7SUFDakQsR0FBRyxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRTs7UUFDckIsTUFBTSxFQUNKLFVBQVUsRUFDVixVQUFVLEVBQ1YsUUFBUSxFQUFFLEVBQUUsUUFBUSxFQUFFLEVBQ3RCLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEVBQ2pDLE1BQU0sR0FDUCxHQUFHLE9BQU8sQ0FBQTtRQUVYLE1BQU0sSUFBSSxHQUFHLFVBQVUsQ0FBQyxLQUFLLENBQUE7UUFDN0IsTUFBTSxFQUNKLFVBQVUsR0FBRyxLQUFLLEVBQ2xCLEVBQUUsR0FBRyxLQUFLLEVBQ1YsT0FBTyxHQUFHLEtBQUssRUFDZixTQUFTLEdBQUcsS0FBSyxFQUNqQixTQUFTLEdBQUcsS0FBSyxHQUNsQixHQUFnQixVQUFVLENBQUMsT0FBTyxDQUFBO1FBRW5DLElBQUksSUFBSSxLQUFLLFNBQVMsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxJQUFJLFVBQVUsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUU7Z0JBQzlDLE9BQU8sQ0FDTCxvQkFBb0IsSUFBSSxtRkFBbUYsQ0FDNUcsQ0FBQTtnQkFDRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO2FBQ2hCO1lBQ0QsSUFBSSxPQUFPLEtBQUssS0FBSyxFQUFFO2dCQUNyQix1QkFBdUI7Z0JBQ3ZCLE1BQU0sa0JBQWtCLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FDM0MsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxD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
@@ -1,137 +1,28 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
2
  Object.defineProperty(exports, "__esModule", { value: true });
6
3
  const os_1 = require("os");
7
- const serve_handler_1 = __importDefault(require("serve-handler"));
8
- const http_1 = require("http");
9
- const choices_1 = require("../toolbox/prompt/choices");
10
4
  const devices_1 = require("../toolbox/prompt/devices");
11
5
  const command = {
12
6
  name: 'run',
13
7
  description: 'Build and launch project on target device or simulator',
14
- run: async ({ parameters, print, system, filesystem, prompt }) => {
8
+ run: async ({ parameters, filesystem, build }) => {
15
9
  var _a, _b, _c;
16
10
  const currentPlatform = (0, os_1.type)().toLowerCase();
17
- const { device = currentPlatform, port, example, listExamples = false, listDevices = false, } = parameters.options;
18
- let targetPlatform = (_a = devices_1.DEVICE_ALIAS[device]) !== null && _a !== void 0 ? _a : device;
19
- let projectPath = filesystem.resolve((_b = parameters.first) !== null && _b !== void 0 ? _b : '.');
20
- if (listDevices) {
21
- const choices = [
22
- 'esp',
23
- 'esp/moddable_zero',
24
- 'esp/moddable_one',
25
- 'esp/moddable_three',
26
- 'esp/nodemcu',
27
- 'esp32',
28
- 'esp32/moddable_two',
29
- 'esp32/nodemcu',
30
- 'esp32/m5stack',
31
- 'esp32/m5stack_core2',
32
- 'esp32/m5stick_fire',
33
- 'esp32/m5atom_echo',
34
- 'esp32/m5atom_lite',
35
- 'esp32/m5atom_matrix',
36
- 'esp32/m5paper',
37
- 'esp32/m5core_ink',
38
- 'esp32/heltec_wifi_kit_32',
39
- 'esp32/esp32_thing',
40
- 'esp32/esp32_thing_plus',
41
- 'esp32/wrover_kit',
42
- 'esp32/kaluga',
43
- 'esp32/saola_wroom',
44
- 'esp32/saola_wrover',
45
- 'wasm',
46
- 'pico',
47
- 'pico/ili9341',
48
- 'pico/pico_display',
49
- 'pico/pico_display_2',
50
- 'simulator/moddable_one',
51
- 'simulator/moddable_two',
52
- 'simulator/moddable_three',
53
- 'simulator/m5stickc',
54
- 'simulator/m5paper',
55
- 'simulator/nodemcu',
56
- 'simulator/pico_display',
57
- 'simulator/pico_display_2',
58
- ];
59
- const { device: selectedDevice } = await prompt.ask([
60
- {
61
- type: 'autocomplete',
62
- name: 'device',
63
- message: 'Here are the available target devices:',
64
- choices,
65
- },
66
- ]);
67
- if (selectedDevice !== '' && selectedDevice !== undefined) {
68
- targetPlatform = selectedDevice;
69
- }
70
- else {
71
- print.warning('Please select a target device to run');
72
- process.exit(0);
73
- }
74
- }
75
- if (listExamples) {
76
- const exampleProjectPath = filesystem.resolve(String(process.env.MODDABLE), 'examples');
77
- const examples = (_c = filesystem.inspectTree(exampleProjectPath)) === null || _c === void 0 ? void 0 : _c.children;
78
- const choices = examples !== undefined
79
- ? examples.map((example) => (0, choices_1.collectChoicesFromTree)(example)).flat()
80
- : [];
81
- const { example: selectedExample } = await prompt.ask([
82
- {
83
- type: 'autocomplete',
84
- name: 'example',
85
- message: 'Here are the available examples:',
86
- choices,
87
- },
88
- ]);
89
- if (selectedExample !== '' && selectedExample !== undefined) {
90
- print.info(`Running the example: xs-dev run --example ${selectedExample}`);
91
- projectPath = filesystem.resolve(exampleProjectPath, selectedExample);
92
- }
93
- else {
94
- print.warning('Please select an example to run.');
95
- process.exit(0);
96
- }
97
- }
98
- if (example !== undefined) {
99
- const exampleProjectPath = filesystem.resolve(String(process.env.MODDABLE), 'examples', example);
100
- if (filesystem.exists(exampleProjectPath) === false) {
101
- print.error('Example project does not exist.');
102
- print.info(`Lookup the available examples: xs-dev run --list-examples`);
103
- process.exit(1);
104
- }
105
- if (filesystem.exists(filesystem.resolve(exampleProjectPath, 'manifest.json')) === false) {
106
- print.error('Example project must contain a manifest.json.');
107
- print.info(`Lookup the available examples: xs-dev run --list-examples`);
108
- process.exit(1);
109
- }
110
- projectPath = exampleProjectPath;
111
- }
112
- if (port !== undefined) {
113
- process.env.UPLOAD_PORT = port;
114
- }
115
- const spinner = print.spin();
116
- spinner.start(`Building and running project ${projectPath} on ${targetPlatform}`);
117
- await system.exec(`mcconfig -d -m -p ${targetPlatform}`, {
118
- cwd: projectPath,
119
- process,
11
+ const { device = currentPlatform, port, example, listExamples = false, listDevices = false, mode = (_a = process.env.NODE_ENV) !== null && _a !== void 0 ? _a : 'development', output = filesystem.resolve(String(process.env.MODDABLE), 'build'), } = parameters.options;
12
+ const targetPlatform = (_b = devices_1.DEVICE_ALIAS[device]) !== null && _b !== void 0 ? _b : device;
13
+ const projectPath = filesystem.resolve((_c = parameters.first) !== null && _c !== void 0 ? _c : '.');
14
+ await build({
15
+ port,
16
+ listExamples,
17
+ listDevices,
18
+ example,
19
+ targetPlatform,
20
+ projectPath,
21
+ mode,
22
+ deployStatus: 'run',
23
+ outputDir: output,
120
24
  });
121
- spinner.stop();
122
- if (targetPlatform === 'wasm') {
123
- const buildName = String(projectPath.split('/').pop());
124
- const debugPath = filesystem.resolve(String(process.env.MODDABLE), 'build', 'bin', 'wasm', 'debug', buildName);
125
- (0, http_1.createServer)((req, res) => {
126
- void (0, serve_handler_1.default)(req, res, { public: debugPath });
127
- }).listen(8080, () => {
128
- print.info('Started server on port 8080, go to http://localhost:8080 in your browser to view the simulator');
129
- });
130
- }
131
- else {
132
- process.exit(0);
133
- }
134
25
  },
135
26
  };
136
27
  exports.default = command;
137
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUNBLDJCQUF5QztBQUN6QyxrRUFBbUM7QUFDbkMsK0JBQW1DO0FBRW5DLHVEQUFrRTtBQUNsRSx1REFBd0Q7QUFVeEQsTUFBTSxPQUFPLEdBQWlDO0lBQzVDLElBQUksRUFBRSxLQUFLO0lBQ1gsV0FBVyxFQUFFLHdEQUF3RDtJQUNyRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUU7O1FBQy9ELE1BQU0sZUFBZSxHQUFXLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFZLENBQUE7UUFDdEUsTUFBTSxFQUNKLE1BQU0sR0FBRyxlQUFlLEVBQ3hCLElBQUksRUFDSixPQUFPLEVBQ1AsWUFBWSxHQUFHLEtBQUssRUFDcEIsV0FBVyxHQUFHLEtBQUssR0FDcEIsR0FBZSxVQUFVLENBQUMsT0FBTyxDQUFBO1FBQ2xDLElBQUksY0FBYyxHQUFXLE1BQUEsc0JBQVksQ0FBQyxNQUFNLENBQUMsbUNBQUksTUFBTSxDQUFBO1FBQzNELElBQUksV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBQSxVQUFVLENBQUMsS0FBSyxtQ0FBSSxHQUFHLENBQUMsQ0FBQTtRQUU3RCxJQUFJLFdBQVcsRUFBRTtZQUNmLE1BQU0sT0FBTyxHQUFHO2dCQUNkLEtBQUs7Z0JBQ0wsbUJBQW1CO2dCQUNuQixrQkFBa0I7Z0JBQ2xCLG9CQUFvQjtnQkFDcEIsYUFBYTtnQkFDYixPQUFPO2dCQUNQLG9CQUFvQjtnQkFDcEIsZUFBZTtnQkFDZixlQUFlO2dCQUNmLHFCQUFxQjtnQkFDckIsb0JBQW9CO2dCQUNwQixtQkFBbUI7Z0JBQ25CLG1CQUFtQjtnQkFDbkIscUJBQXFCO2dCQUNyQixlQUFlO2dCQUNmLGtC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
28
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2NvbW1hbmRzL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUNBLDJCQUF5QztBQUV6Qyx1REFBd0Q7QUFjeEQsTUFBTSxPQUFPLEdBQWlDO0lBQzVDLElBQUksRUFBRSxLQUFLO0lBQ1gsV0FBVyxFQUFFLHdEQUF3RDtJQUNyRSxHQUFHLEVBQUUsS0FBSyxFQUFFLEVBQUUsVUFBVSxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFOztRQUMvQyxNQUFNLGVBQWUsR0FBVyxJQUFBLFNBQVksR0FBRSxDQUFDLFdBQVcsRUFBWSxDQUFBO1FBQ3RFLE1BQU0sRUFDSixNQUFNLEdBQUcsZUFBZSxFQUN4QixJQUFJLEVBQ0osT0FBTyxFQUNQLFlBQVksR0FBRyxLQUFLLEVBQ3BCLFdBQVcsR0FBRyxLQUFLLEVBQ25CLElBQUksR0FBRyxNQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBaUIsbUNBQUksYUFBYSxFQUN0RCxNQUFNLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxPQUFPLENBQUMsR0FDbkUsR0FBZSxVQUFVLENBQUMsT0FBTyxDQUFBO1FBQ2xDLE1BQU0sY0FBYyxHQUFXLE1BQUEsc0JBQVksQ0FBQyxNQUFNLENBQUMsbUNBQUksTUFBTSxDQUFBO1FBQzdELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBQSxVQUFVLENBQUMsS0FBSyxtQ0FBSSxHQUFHLENBQUMsQ0FBQTtRQUUvRCxNQUFNLEtBQUssQ0FBQztZQUNWLElBQUk7WUFDSixZQUFZO1lBQ1osV0FBVztZQUNYLE9BQU87WUFDUCxjQUFjO1lBQ2QsV0FBVztZQUNYLElBQUk7WUFDSixZQUFZLEVBQUUsS0FBSztZQUNuQixTQUFTLEVBQUUsTUFBTTtTQUNsQixDQUFDLENBQUE7SUFDSixDQUFDO0NBQ0YsQ0FBQTtBQUVELGtCQUFlLE9BQU8sQ0FBQSJ9
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const index_1 = require("../toolbox/build/index");
4
+ exports.default = async (toolbox) => {
5
+ toolbox.build = index_1.build;
6
+ };
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVpbGQtZXh0ZW5zaW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2V4dGVuc2lvbnMvYnVpbGQtZXh0ZW5zaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0Esa0RBQThDO0FBRTlDLGtCQUFlLEtBQUssRUFBRSxPQUFxQixFQUFpQixFQUFFO0lBQzVELE9BQU8sQ0FBQyxLQUFLLEdBQUcsYUFBSyxDQUFBO0FBQ3ZCLENBQUMsQ0FBQSJ9
@@ -4,5 +4,5 @@
4
4
  ],
5
5
  "modules": {
6
6
  "*": "./main"
7
- }
7
+ }<%- props.defines %>
8
8
  }
@@ -0,0 +1,145 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.build = void 0;
7
+ const serve_handler_1 = __importDefault(require("serve-handler"));
8
+ const http_1 = require("http");
9
+ const gluegun_1 = require("gluegun");
10
+ const choices_1 = require("../prompt/choices");
11
+ async function build({ listDevices, port, example, listExamples, projectPath, targetPlatform, mode, deployStatus, outputDir, }) {
12
+ var _a;
13
+ if (listDevices) {
14
+ const choices = [
15
+ 'esp',
16
+ 'esp/moddable_zero',
17
+ 'esp/moddable_one',
18
+ 'esp/moddable_three',
19
+ 'esp/nodemcu',
20
+ 'esp32',
21
+ 'esp32/moddable_two',
22
+ 'esp32/nodemcu',
23
+ 'esp32/m5stack',
24
+ 'esp32/m5stack_core2',
25
+ 'esp32/m5stick_fire',
26
+ 'esp32/m5atom_echo',
27
+ 'esp32/m5atom_lite',
28
+ 'esp32/m5atom_matrix',
29
+ 'esp32/m5paper',
30
+ 'esp32/m5core_ink',
31
+ 'esp32/heltec_wifi_kit_32',
32
+ 'esp32/esp32_thing',
33
+ 'esp32/esp32_thing_plus',
34
+ 'esp32/wrover_kit',
35
+ 'esp32/kaluga',
36
+ 'esp32/saola_wroom',
37
+ 'esp32/saola_wrover',
38
+ 'wasm',
39
+ 'pico',
40
+ 'pico/ili9341',
41
+ 'pico/pico_display',
42
+ 'pico/pico_display_2',
43
+ 'simulator/moddable_one',
44
+ 'simulator/moddable_two',
45
+ 'simulator/moddable_three',
46
+ 'simulator/m5stickc',
47
+ 'simulator/m5paper',
48
+ 'simulator/nodemcu',
49
+ 'simulator/pico_display',
50
+ 'simulator/pico_display_2',
51
+ ];
52
+ const { device: selectedDevice } = await gluegun_1.prompt.ask([
53
+ {
54
+ type: 'autocomplete',
55
+ name: 'device',
56
+ message: 'Here are the available target devices:',
57
+ choices,
58
+ },
59
+ ]);
60
+ if (selectedDevice !== '' && selectedDevice !== undefined) {
61
+ targetPlatform = selectedDevice;
62
+ }
63
+ else {
64
+ gluegun_1.print.warning('Please select a target device to run');
65
+ process.exit(0);
66
+ }
67
+ }
68
+ if (listExamples) {
69
+ const exampleProjectPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'examples');
70
+ const examples = (_a = gluegun_1.filesystem.inspectTree(exampleProjectPath)) === null || _a === void 0 ? void 0 : _a.children;
71
+ const choices = examples !== undefined
72
+ ? examples.map((example) => (0, choices_1.collectChoicesFromTree)(example)).flat()
73
+ : [];
74
+ const { example: selectedExample } = await gluegun_1.prompt.ask([
75
+ {
76
+ type: 'autocomplete',
77
+ name: 'example',
78
+ message: 'Here are the available examples:',
79
+ choices,
80
+ },
81
+ ]);
82
+ if (selectedExample !== '' && selectedExample !== undefined) {
83
+ gluegun_1.print.info(`Running the example: xs-dev run --example ${selectedExample}`);
84
+ projectPath = gluegun_1.filesystem.resolve(exampleProjectPath, selectedExample);
85
+ }
86
+ else {
87
+ gluegun_1.print.warning('Please select an example to run.');
88
+ process.exit(0);
89
+ }
90
+ }
91
+ if (example !== undefined) {
92
+ const exampleProjectPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'examples', example);
93
+ if (gluegun_1.filesystem.exists(exampleProjectPath) === false) {
94
+ gluegun_1.print.error('Example project does not exist.');
95
+ gluegun_1.print.info(`Lookup the available examples: xs-dev run --list-examples`);
96
+ process.exit(1);
97
+ }
98
+ if (gluegun_1.filesystem.exists(gluegun_1.filesystem.resolve(exampleProjectPath, 'manifest.json')) === false) {
99
+ gluegun_1.print.error('Example project must contain a manifest.json.');
100
+ gluegun_1.print.info(`Lookup the available examples: xs-dev run --list-examples`);
101
+ process.exit(1);
102
+ }
103
+ projectPath = exampleProjectPath;
104
+ }
105
+ if (port !== undefined) {
106
+ process.env.UPLOAD_PORT = port;
107
+ }
108
+ const spinner = gluegun_1.print.spin();
109
+ spinner.start(`Building${deployStatus !== 'none' ? ' and deploying project' : ''} ${projectPath} on ${targetPlatform}`);
110
+ const configArgs = [
111
+ '-m',
112
+ `-p ${targetPlatform}`,
113
+ `-t ${deployStatus === 'run' ? 'all' : 'build'}`,
114
+ `-o ${outputDir}`,
115
+ ];
116
+ if (mode === 'development')
117
+ configArgs.push('-d');
118
+ if (mode === 'production')
119
+ configArgs.push('-i');
120
+ await gluegun_1.system.exec(`mcconfig ${configArgs.join(' ')}`, {
121
+ cwd: projectPath,
122
+ process,
123
+ });
124
+ if (deployStatus === 'push') {
125
+ await gluegun_1.system.exec(`mcconfig -t deploy -p ${targetPlatform} -o ${outputDir}`, {
126
+ cwd: projectPath,
127
+ process,
128
+ });
129
+ }
130
+ spinner.stop();
131
+ if (deployStatus !== 'none' && targetPlatform === 'wasm') {
132
+ const buildName = String(projectPath.split('/').pop());
133
+ const debugPath = gluegun_1.filesystem.resolve(String(process.env.MODDABLE), 'build', 'bin', 'wasm', 'debug', buildName);
134
+ (0, http_1.createServer)((req, res) => {
135
+ void (0, serve_handler_1.default)(req, res, { public: debugPath });
136
+ }).listen(8080, () => {
137
+ gluegun_1.print.info('Started server on port 8080, go to http://localhost:8080 in your browser to view the simulator');
138
+ });
139
+ }
140
+ else {
141
+ process.exit(0);
142
+ }
143
+ }
144
+ exports.build = build;
145
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9idWlsZC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxrRUFBbUM7QUFDbkMsK0JBQW1DO0FBQ25DLHFDQUEyRDtBQUMzRCwrQ0FBMEQ7QUFnQm5ELEtBQUssVUFBVSxLQUFLLENBQUMsRUFDMUIsV0FBVyxFQUNYLElBQUksRUFDSixPQUFPLEVBQ1AsWUFBWSxFQUNaLFdBQVcsRUFDWCxjQUFjLEVBQ2QsSUFBSSxFQUNKLFlBQVksRUFDWixTQUFTLEdBQ0M7O0lBQ1YsSUFBSSxXQUFXLEVBQUU7UUFDZixNQUFNLE9BQU8sR0FBRztZQUNkLEtBQUs7WUFDTCxtQkFBbUI7WUFDbkIsa0JBQWtCO1lBQ2xCLG9CQUFvQjtZQUNwQixhQUFhO1lBQ2IsT0FBTztZQUNQLG9CQUFvQjtZQUNwQixlQUFlO1lBQ2YsZUFBZTtZQUNmLHFCQUFxQjtZQUNyQixvQkFBb0I7WUFDcEIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQixxQkFBcUI7WUFDckIsZUFBZTtZQUNmLGtCQUFrQjtZQUNsQiwwQkFBMEI7WUFDMUIsbUJBQW1CO1lBQ25CLHdCQUF3QjtZQUN4QixrQkFBa0I7WUFDbEIsY0FBYztZQUNkLG1CQUFtQjtZQUNuQixvQkFBb0I7WUFDcEIsTUFBTTtZQUNOLE1BQU07WUFDTixjQUFjO1lBQ2QsbUJBQW1CO1lBQ25CLHFCQUFxQjtZQUNyQix3QkFBd0I7WUFDeEIsd0JBQXdCO1lBQ3hCLDBCQUEwQjtZQUMxQixvQkFBb0I7WUFDcEIsbUJBQW1CO1lBQ25CLG1CQUFtQjtZQUNuQix3QkFBd0I7WUFDeEIsMEJBQTBCO1NBQzNCLENBQUE7UUFDRCxNQUFNLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRSxHQUFHLE1BQU0sZ0JBQU0sQ0FBQyxHQUFHLENBQUM7WUFDbEQ7Z0JBQ0UsSUFBSSxFQUFFLGNBQWM7Z0JBQ3BCLElBQUksRUFBRSxR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
@@ -3,10 +3,17 @@ var _a;
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
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
+ const os_1 = require("os");
7
+ const currentPlatform = (0, os_1.type)().toLowerCase();
8
+ const isWindows = currentPlatform === 'windows_nt';
6
9
  exports.HOME_DIR = gluegun_1.filesystem.homedir();
7
- exports.INSTALL_DIR = gluegun_1.filesystem.resolve(exports.HOME_DIR, '.local', 'share');
10
+ exports.INSTALL_DIR = isWindows
11
+ ? gluegun_1.filesystem.resolve(exports.HOME_DIR, 'xs-dev')
12
+ : gluegun_1.filesystem.resolve(exports.HOME_DIR, '.local', 'share');
8
13
  exports.INSTALL_PATH = (_a = process.env.MODDABLE) !== null && _a !== void 0 ? _a : gluegun_1.filesystem.resolve(exports.INSTALL_DIR, 'moddable');
9
- exports.EXPORTS_FILE_PATH = gluegun_1.filesystem.resolve(exports.HOME_DIR, '.local', 'share', 'xs-dev-export.sh');
14
+ exports.EXPORTS_FILE_PATH = isWindows
15
+ ? gluegun_1.filesystem.resolve(exports.INSTALL_DIR, 'Moddable.bat')
16
+ : gluegun_1.filesystem.resolve(exports.HOME_DIR, '.local', 'share', 'xs-dev-export.sh');
10
17
  exports.MODDABLE_REPO = 'https://github.com/Moddable-OpenSource/moddable';
11
18
  function getProfilePath() {
12
19
  var _a;
@@ -26,4 +33,4 @@ function getProfilePath() {
26
33
  return profilePath;
27
34
  }
28
35
  exports.getProfilePath = getProfilePath;
29
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxxQ0FBb0M7QUFFdkIsUUFBQSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQTtBQUMvQixRQUFBLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUM3RCxRQUFBLFlBQVksR0FDdkIsTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsbUNBQUksb0JBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN4RCxRQUFBLGlCQUFpQixHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNqRCxnQkFBUSxFQUNSLFFBQVEsRUFDUixPQUFPLEVBQ1Asa0JBQWtCLENBQ25CLENBQUE7QUFDWSxRQUFBLGFBQWEsR0FBRyxpREFBaUQsQ0FBQTtBQUM5RSxTQUFnQixjQUFjOztJQUM1QixNQUFNLEtBQUssR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUE7SUFDckMsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFBO0lBRXhCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QixPQUFPLEdBQUcsUUFBUSxDQUFBO0tBQ25CO0lBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUE7S0FDcEI7SUFFRCxJQUFJLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFBO0lBRWpFLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3RELG9CQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzVCLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFqQkQsd0NBaUJDIn0=
36
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uc3RhbnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Rvb2xib3gvc2V0dXAvY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7QUFBQSxxQ0FBb0M7QUFDcEMsMkJBQXlDO0FBR3pDLE1BQU0sZUFBZSxHQUFXLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFZLENBQUE7QUFDdEUsTUFBTSxTQUFTLEdBQUcsZUFBZSxLQUFLLFlBQVksQ0FBQTtBQUVyQyxRQUFBLFFBQVEsR0FBRyxvQkFBVSxDQUFDLE9BQU8sRUFBRSxDQUFBO0FBQy9CLFFBQUEsV0FBVyxHQUFHLFNBQVM7SUFDbEMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLGdCQUFRLEVBQUUsUUFBUSxDQUFDO0lBQ3hDLENBQUMsQ0FBQyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQTtBQUN0QyxRQUFBLFlBQVksR0FDdkIsTUFBQSxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsbUNBQUksb0JBQVUsQ0FBQyxPQUFPLENBQUMsbUJBQVcsRUFBRSxVQUFVLENBQUMsQ0FBQTtBQUN4RCxRQUFBLGlCQUFpQixHQUFHLFNBQVM7SUFDeEMsQ0FBQyxDQUFDLG9CQUFVLENBQUMsT0FBTyxDQUFDLG1CQUFXLEVBQUUsY0FBYyxDQUFDO0lBQ2pELENBQUMsQ0FBQyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsa0JBQWtCLENBQUMsQ0FBQTtBQUMxRCxRQUFBLGFBQWEsR0FBRyxpREFBaUQsQ0FBQTtBQUM5RSxTQUFnQixjQUFjOztJQUM1QixNQUFNLEtBQUssR0FBRyxNQUFBLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxtQ0FBSSxFQUFFLENBQUE7SUFDckMsSUFBSSxPQUFPLEdBQUcsVUFBVSxDQUFBO0lBRXhCLElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsRUFBRTtRQUN6QixPQUFPLEdBQUcsUUFBUSxDQUFBO0tBQ25CO0lBQ0QsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzFCLE9BQU8sR0FBRyxTQUFTLENBQUE7S0FDcEI7SUFFRCxJQUFJLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsV0FBVyxDQUFDLEtBQUssTUFBTTtRQUFFLE9BQU8sV0FBVyxDQUFBO0lBRWpFLFdBQVcsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyxnQkFBUSxFQUFFLFVBQVUsQ0FBQyxDQUFBO0lBQ3RELG9CQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQzVCLE9BQU8sV0FBVyxDQUFBO0FBQ3BCLENBQUM7QUFqQkQsd0NBaUJDIn0=
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.esp32Exists = exports.installDeps = void 0;
7
+ const gluegun_1 = require("gluegun");
8
+ const axios_1 = __importDefault(require("axios"));
9
+ const util_1 = require("util");
10
+ const stream_1 = require("stream");
11
+ const finishedPromise = (0, util_1.promisify)(stream_1.finished);
12
+ const IDF_INSTALLER = 'https://github.com/espressif/idf-installer/releases/download/online-2.15/esp-idf-tools-setup-online-2.15.exe';
13
+ async function installDeps(spinner, ESP32_DIR, IDF_PATH) {
14
+ var _a;
15
+ if (esp32Exists()) {
16
+ gluegun_1.print.info(`ESP-IDF tooling exists at ${(_a = process.env.IDF_PATH) !== null && _a !== void 0 ? _a : ''}`);
17
+ return;
18
+ }
19
+ spinner.start('Downloading ESP-IDF Tools Installer');
20
+ const destination = gluegun_1.filesystem.resolve(ESP32_DIR, 'esp-idf-tools-setup-online-2.15.exe');
21
+ const writer = gluegun_1.filesystem.createWriteStream(destination);
22
+ const response = await axios_1.default.get(IDF_INSTALLER, {
23
+ responseType: 'stream',
24
+ });
25
+ response.data.pipe(writer);
26
+ await finishedPromise(writer);
27
+ spinner.succeed();
28
+ gluegun_1.print.info(`When prompted, select "Use an Existing ESP-IDF Directory" and choose ${IDF_PATH}.`);
29
+ gluegun_1.print.info('The "Full Installation" option is recommended.');
30
+ spinner.start('Running ESP-IDF Tools Installer');
31
+ await gluegun_1.system.exec(`start /B ${destination}`);
32
+ spinner.succeed();
33
+ }
34
+ exports.installDeps = installDeps;
35
+ function esp32Exists() {
36
+ return (process.env.IDF_PATH !== undefined &&
37
+ process.env.IDF_TOOLS_PATH !== undefined &&
38
+ gluegun_1.filesystem.exists(process.env.IDF_TOOLS_PATH) === 'dir' &&
39
+ gluegun_1.filesystem.exists(process.env.IDF_PATH) === 'dir');
40
+ }
41
+ exports.esp32Exists = esp32Exists;
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2luZG93cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy90b29sYm94L3NldHVwL2VzcDMyL3dpbmRvd3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEscUNBQW1EO0FBRW5ELGtEQUF5QjtBQUN6QiwrQkFBZ0M7QUFDaEMsbUNBQWlDO0FBRWpDLE1BQU0sZUFBZSxHQUFHLElBQUEsZ0JBQVMsRUFBQyxpQkFBUSxDQUFDLENBQUE7QUFFM0MsTUFBTSxhQUFhLEdBQ2pCLDhHQUE4RyxDQUFBO0FBRXpHLEtBQUssVUFBVSxXQUFXLENBQy9CLE9BQXlDLEVBQ3pDLFNBQWlCLEVBQ2pCLFFBQWdCOztJQUVoQixJQUFJLFdBQVcsRUFBRSxFQUFFO1FBQ2pCLGVBQUssQ0FBQyxJQUFJLENBQUMsNkJBQTZCLE1BQUEsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLG1DQUFJLEVBQUUsRUFBRSxDQUFDLENBQUE7UUFDckUsT0FBTTtLQUNQO0lBRUQsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sV0FBVyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUNwQyxTQUFTLEVBQ1QscUNBQXFDLENBQ3RDLENBQUE7SUFDRCxNQUFNLE1BQU0sR0FBRyxvQkFBVSxDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ3hELE1BQU0sUUFBUSxHQUFHLE1BQU0sZUFBSyxDQUFDLEdBQUcsQ0FBQyxhQUFhLEVBQUU7UUFDOUMsWUFBWSxFQUFFLFFBQVE7S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDMUIsTUFBTSxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDN0IsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRWpCLGVBQUssQ0FBQyxJQUFJLENBQ1Isd0VBQXdFLFFBQVEsR0FBRyxDQUNwRixDQUFBO0lBQ0QsZUFBSyxDQUFDLElBQUksQ0FBQyxnREFBZ0QsQ0FBQyxDQUFBO0lBQzVELE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLENBQUMsQ0FBQTtJQUNoRCxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksV0FBVyxFQUFFLENBQUMsQ0FBQTtJQUM1QyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7QUFDbkIsQ0FBQztBQTlCRCxrQ0E4QkM7QUFFRCxTQUFnQixXQUFXO0lBQ3pCLE9BQU8sQ0FDTCxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsS0FBSyxTQUFTO1FBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxLQUFLLFNBQVM7UUFDeEMsb0JBQVUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxjQUFjLENBQUMsS0FBSyxLQUFLO1FBQ3ZELG9CQUFVLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxDQUNsRCxDQUFBO0FBQ0gsQ0FBQztBQVBELGtDQU9DIn0=
@@ -10,8 +10,11 @@ const moddable_1 = require("./moddable");
10
10
  const upsert_1 = __importDefault(require("../patching/upsert"));
11
11
  const mac_1 = require("./esp32/mac");
12
12
  const linux_1 = require("./esp32/linux");
13
+ const windows_1 = require("./esp32/windows");
14
+ const windows_2 = require("./windows");
13
15
  async function default_1() {
14
16
  const OS = (0, os_1.type)().toLowerCase();
17
+ const isWindows = OS === 'windows_nt';
15
18
  const ESP_IDF_REPO = 'https://github.com/espressif/esp-idf.git';
16
19
  const ESP_BRANCH = 'v4.4.2';
17
20
  const ESP32_DIR = gluegun_1.filesystem.resolve(constants_1.INSTALL_DIR, 'esp32');
@@ -23,6 +26,8 @@ async function default_1() {
23
26
  spinner.fail('Moddable tooling required. Run `xs-dev setup` before trying again.');
24
27
  process.exit(1);
25
28
  }
29
+ if (isWindows)
30
+ await (0, windows_2.ensureModdableCommandPrompt)(spinner);
26
31
  // 1. ensure ~/.local/share/esp32 directory
27
32
  spinner.info('Ensuring esp32 install directory');
28
33
  gluegun_1.filesystem.dir(ESP32_DIR);
@@ -40,31 +45,55 @@ async function default_1() {
40
45
  if (OS === 'linux') {
41
46
  await (0, linux_1.installDeps)(spinner);
42
47
  }
48
+ if (isWindows) {
49
+ await (0, windows_1.installDeps)(spinner, ESP32_DIR, IDF_PATH);
50
+ }
43
51
  // 4. append IDF_PATH env export to shell profile
44
- if (process.env.IDF_PATH === undefined) {
45
- spinner.info('Configuring $IDF_PATH');
46
- process.env.IDF_PATH = IDF_PATH;
47
- await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export IDF_PATH=${IDF_PATH}`);
52
+ if (isWindows) {
53
+ spinner.info('Configuring IDF_PATH environment variable');
54
+ await (0, windows_2.setEnv)('IDF_PATH', IDF_PATH);
55
+ }
56
+ else {
57
+ if (process.env.IDF_PATH === undefined) {
58
+ spinner.info('Configuring $IDF_PATH');
59
+ process.env.IDF_PATH = IDF_PATH;
60
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `export IDF_PATH=${IDF_PATH}`);
61
+ }
48
62
  }
49
63
  // 5. cd to IDF_PATH, run install.sh
50
- spinner.start('Installing esp-idf tooling');
51
- await gluegun_1.system.exec('./install.sh', {
52
- cwd: IDF_PATH,
53
- shell: process.env.SHELL,
54
- stdout: process.stdout,
55
- });
56
- spinner.succeed();
64
+ if (isWindows) {
65
+ spinner.start('Running ESP-IDF Tools install.bat');
66
+ await gluegun_1.system.exec(`${IDF_PATH}\\install.bat`, {
67
+ cwd: IDF_PATH,
68
+ stdout: process.stdout,
69
+ });
70
+ spinner.succeed();
71
+ }
72
+ else {
73
+ spinner.start('Installing esp-idf tooling');
74
+ await gluegun_1.system.exec('./install.sh', {
75
+ cwd: IDF_PATH,
76
+ shell: process.env.SHELL,
77
+ stdout: process.stdout,
78
+ });
79
+ spinner.succeed();
80
+ }
57
81
  // 6. append 'source $IDF_PATH/export.sh' to shell profile
58
- spinner.info('Sourcing esp-idf environment');
59
- await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `source $IDF_PATH/export.sh 1> /dev/null`);
60
- await gluegun_1.system.exec('source $IDF_PATH/export.sh', {
61
- shell: process.env.SHELL,
62
- });
82
+ if (isWindows) {
83
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `pushd %IDF_PATH% && call "%IDF_TOOLS_PATH%\\idf_cmd_init.bat" && popd`);
84
+ }
85
+ else {
86
+ spinner.info('Sourcing esp-idf environment');
87
+ await (0, upsert_1.default)(constants_1.EXPORTS_FILE_PATH, `source $IDF_PATH/export.sh 1> /dev/null`);
88
+ await gluegun_1.system.exec('source $IDF_PATH/export.sh', {
89
+ shell: process.env.SHELL,
90
+ });
91
+ }
63
92
  spinner.succeed(`
64
93
  Successfully set up esp32 platform support for Moddable!
65
- Test out the setup by starting a new terminal session, plugging in your device, and running: xs-dev run --example helloworld --device=esp32
66
- 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.
94
+ Test out the setup by starting a new ${isWindows ? 'Moddable Command Prompt' : 'terminal session'}, plugging in your device, and running: xs-dev run --example helloworld --device=esp32
95
+ If there is trouble finding the correct port, pass the "--port" flag to the above command with the ${isWindows ? 'COM Port' : 'path to the /dev.cu.*'} that matches your device.
67
96
  `);
68
97
  }
69
98
  exports.default = default_1;
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFtRDtBQUNuRCwyQkFBeUM7QUFDekMsMkNBQTREO0FBQzVELHlDQUEyQztBQUMzQyxnRUFBdUM7QUFDdkMscUNBQTJEO0FBQzNELHlDQUErRDtBQUVoRCxLQUFLO0lBQ2xCLE1BQU0sRUFBRSxHQUFHLElBQUEsU0FBWSxHQUFFLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdkMsTUFBTSxZQUFZLEdBQUcsMENBQTBDLENBQUE7SUFDL0QsTUFBTSxVQUFVLEdBQUcsUUFBUSxDQUFBO0lBQzNCLE1BQU0sU0FBUyxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLHVCQUFXLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDMUQsTUFBTSxRQUFRLEdBQUcsb0JBQVUsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLFNBQVMsQ0FBQyxDQUFBO0lBRXpELE1BQU0sT0FBTyxHQUFHLGVBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQTtJQUM1QixPQUFPLENBQUMsS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUE7SUFFdkMsNEJBQTRCO0lBQzVCLElBQUksQ0FBQyxJQUFBLHlCQUFjLEdBQUUsRUFBRTtRQUNyQixPQUFPLENBQUMsSUFBSSxDQUNWLG9FQUFvRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtLQUNoQjtJQUVELDJDQUEyQztJQUMzQyxPQUFPLENBQUMsSUFBSSxDQUFDLGtDQUFrQyxDQUFDLENBQUE7SUFDaEQsb0JBQVUsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7SUFFekIscURBQXFEO0lBQ3JELElBQUksb0JBQVUsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLEtBQUssS0FBSyxFQUFFO1FBQ3pDLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtRQUNyQyxNQUFNLGdCQUFNLENBQUMsS0FBSyxDQUNoQixnQkFBZ0IsVUFBVSxnQkFBZ0IsWUFBWSxJQUFJLFFBQVEsRUFBRSxDQUNyRSxDQUFBO1FBQ0QsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0tBQ2xCO0lBRUQsd0NBQXdDO0lBQ3hDLE9BQU8sQ0FBQyxLQUFLLENBQUMsK0JBQStCLENBQUMsQ0FBQTtJQUU5QyxJQUFJLEVBQUUsS0FBSyxRQUFRLEVBQUU7UUFDbkIsTUFBTSxJQUFBLGlCQUFjLEVBQUMsT0FBTyxDQUFDLENBQUE7S0FDOUI7SUFFRCxJQUFJLEVBQUUsS0FBSyxPQUFPLEVBQUU7UUFDbEIsTUFBTSxJQUFBLG1CQUFnQixFQUFDLE9BQU8sQ0FBQyxDQUFBO0tBQ2hDO0lBRUQsaURBQWlEO0lBQ2pELElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssU0FBUyxFQUFFO1FBQ3RDLE9BQU8sQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQTtRQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUE7UUFDL0IsTUFBTSxJQUFBLGdCQUFNLEVBQUMsNkJBQWlCLEVBQUUsbUJBQW1CLFFBQVEsRUFBRSxDQUFDLENBQUE7S0FDL0Q7SUFFRCxvQ0FBb0M7SUFDcEMsT0FBTyxDQUFDLEtBQUssQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQzNDLE1BQU0sZ0JBQU0sQ0FBQyxJQUFJLENBQUMsY0FBYyxFQUFFO1FBQ2hDLEdBQUcsRUFBRSxRQUFRO1FBQ2IsS0FBSyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSztRQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07S0FDdkIsQ0FBQyxDQUFBO0lBQ0YsT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFBO0lBRWpCLDBEQUEwRDtJQUMxRCxPQUFPLENBQUMsSUFBSSxDQUFDLDhCQUE4QixDQUFDLENBQUE7SUFDNUMsTUFBTSxJQUFBLGdCQUFNLEVBQUMsNkJBQWlCLEVBQUUseUNBQXlDLENBQUMsQ0FBQTtJQUMxRSxNQUFNLGdCQUFNLENBQUMsSUFBSSxDQUFDLDRCQUE0QixFQUFFO1FBQzlDLEtBQUssRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUs7S0FDekIsQ0FBQyxDQUFBO0lBRUYsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7OztHQUlmLENBQUMsQ0FBQTtBQUNKLENBQUM7QUF0RUQsNEJBc0VDIn0=
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXNwMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbGJveC9zZXR1cC9lc3AzMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFDQUFtRDtBQUNuRCwyQkFBeUM7QUFDekMsMkNBQTREO0FBQzVELHlDQUEyQztBQUMzQyxnRUFBdUM7QUFDdkMscUNBQTJEO0FBQzNELHlDQUErRDtBQUMvRCw2Q0FBK0Q7QUFDL0QsdUNBQStEO0FBRWhELEtBQUs7SUFDbEIsTUFBTSxFQUFFLEdBQUcsSUFBQSxTQUFZLEdBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQTtJQUN2QyxNQUFNLFNBQVMsR0FBRyxFQUFFLEtBQUssWUFBWSxDQUFBO0lBQ3JDLE1BQU0sWUFBWSxHQUFHLDBDQUEwQyxDQUFBO0lBQy9ELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQTtJQUMzQixNQUFNLFNBQVMsR0FBRyxvQkFBVSxDQUFDLE9BQU8sQ0FBQyx1QkFBVyxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzFELE1BQU0sUUFBUSxHQUFHLG9CQUFVLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUV6RCxNQUFNLE9BQU8sR0FBRyxlQUFLLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUIsT0FBTyxDQUFDLEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxDQUFBO0lBRXZDLDRCQUE0QjtJQUM1QixJQUFJLENBQUMsSUFBQSx5QkFBYyxHQUFFLEVBQUU7UUFDckIsT0FBTyxDQUFDLElBQUksQ0FDVixvRUFBb0UsQ0FDckUsQ0FBQTtRQUNELE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUE7S0FDaEI7SUFFRCxJQUFJLFNBQVM7UUFBRSxNQUFNLElBQUEscUNBQTJCLEVBQUMsT0FBTyxDQUFDLENBQUE7SUFFekQsMkNBQTJDO0lBQzNDLE9BQU8sQ0FBQyxJQUFJLENBQUMsa0NBQWtDLENBQUMsQ0FBQTtJQUNoRCxvQkFB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