esp32tool 1.1.9 → 1.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.
Files changed (64) hide show
  1. package/.nojekyll +0 -0
  2. package/README.md +100 -6
  3. package/apple-touch-icon.png +0 -0
  4. package/build-electron-cli.cjs +177 -0
  5. package/build-single-binary.cjs +295 -0
  6. package/css/light.css +11 -0
  7. package/css/style.css +261 -41
  8. package/dist/cli.d.ts +17 -0
  9. package/dist/cli.js +458 -0
  10. package/dist/console.d.ts +15 -0
  11. package/dist/console.js +237 -0
  12. package/dist/const.d.ts +99 -0
  13. package/dist/const.js +129 -8
  14. package/dist/esp_loader.d.ts +244 -22
  15. package/dist/esp_loader.js +1960 -251
  16. package/dist/index.d.ts +2 -1
  17. package/dist/index.js +37 -4
  18. package/dist/node-usb-adapter.d.ts +47 -0
  19. package/dist/node-usb-adapter.js +725 -0
  20. package/dist/stubs/index.d.ts +1 -2
  21. package/dist/stubs/index.js +4 -0
  22. package/dist/util/console-color.d.ts +19 -0
  23. package/dist/util/console-color.js +272 -0
  24. package/dist/util/line-break-transformer.d.ts +5 -0
  25. package/dist/util/line-break-transformer.js +17 -0
  26. package/dist/web/index.js +1 -1
  27. package/electron/cli-main.cjs +74 -0
  28. package/electron/main.cjs +338 -0
  29. package/electron/main.js +7 -2
  30. package/favicon.ico +0 -0
  31. package/fix-cli-imports.cjs +127 -0
  32. package/generate-icons.sh +89 -0
  33. package/icons/icon-128.png +0 -0
  34. package/icons/icon-144.png +0 -0
  35. package/icons/icon-152.png +0 -0
  36. package/icons/icon-192.png +0 -0
  37. package/icons/icon-384.png +0 -0
  38. package/icons/icon-512.png +0 -0
  39. package/icons/icon-72.png +0 -0
  40. package/icons/icon-96.png +0 -0
  41. package/index.html +143 -73
  42. package/install-android.html +411 -0
  43. package/js/console.js +269 -0
  44. package/js/modules/esptool.js +1 -1
  45. package/js/script.js +750 -175
  46. package/js/util/console-color.js +282 -0
  47. package/js/util/line-break-transformer.js +19 -0
  48. package/js/webusb-serial.js +1017 -0
  49. package/license.md +1 -1
  50. package/manifest.json +89 -0
  51. package/package.cli.json +29 -0
  52. package/package.json +35 -24
  53. package/screenshots/desktop.png +0 -0
  54. package/screenshots/mobile.png +0 -0
  55. package/src/cli.ts +618 -0
  56. package/src/console.ts +278 -0
  57. package/src/const.ts +165 -8
  58. package/src/esp_loader.ts +2354 -302
  59. package/src/index.ts +69 -3
  60. package/src/node-usb-adapter.ts +924 -0
  61. package/src/stubs/index.ts +4 -1
  62. package/src/util/console-color.ts +290 -0
  63. package/src/util/line-break-transformer.ts +20 -0
  64. package/sw.js +155 -0
package/css/style.css CHANGED
@@ -5,7 +5,7 @@
5
5
  .header {
6
6
  box-sizing: border-box;
7
7
  font-size: 16px;
8
- height: 85px;
8
+ min-height: 85px;
9
9
  padding: 15px 70px;
10
10
  position: fixed;
11
11
  width: 100%;
@@ -13,49 +13,40 @@
13
13
  margin: 0;
14
14
  border-bottom: 5px solid #00a7e9;
15
15
  display: flex;
16
- justify-content: space-between;
17
- align-items: center;
16
+ flex-direction: column;
17
+ justify-content: flex-start;
18
+ align-items: flex-start;
18
19
  top: 0;
19
- transition: transform 0.3s ease-in-out;
20
- }
21
-
22
- .header-hidden {
23
- transform: translateY(-100%);
24
- }
25
-
26
- .header .left {
27
- display: flex;
28
- align-items: center;
20
+ /* Auto-hide feature disabled - header stays visible at all times */
21
+ /* transition: transform 0.3s ease-in-out; */
22
+ overflow-x: auto;
23
+ overflow-y: hidden;
24
+ -webkit-overflow-scrolling: touch;
29
25
  }
30
26
 
31
- .header .title {
32
- font-size: 24px;
33
- font-weight: 500;
34
- margin-right: 30px;
35
- }
27
+ /* .header-hidden class removed - auto-hide feature disabled */
36
28
 
37
- .header .right {
29
+ .header-content {
38
30
  display: flex;
39
31
  align-items: center;
40
- gap: 15px;
32
+ gap: 10px;
33
+ flex-wrap: nowrap;
34
+ white-space: nowrap;
35
+ width: 100%;
41
36
  }
42
37
 
43
- .header .controls-row {
44
- display: flex;
45
- align-items: center;
46
- gap: 8px;
47
- margin-right: 20px;
48
- padding-right: 20px;
49
- border-right: 2px solid #ccc;
38
+ .header-content.advanced-row {
39
+ margin-top: 10px;
50
40
  }
51
41
 
52
- .header .controls-row label {
42
+ .header-content > label {
53
43
  font-size: 13px;
54
- margin-left: 12px;
44
+ margin-left: 5px;
45
+ white-space: nowrap;
55
46
  }
56
47
 
57
- .header .controls-row label:first-child {
58
- margin-left: 0;
48
+ .header select {
49
+ height: 30px;
59
50
  }
60
51
 
61
52
  .header button {
@@ -88,10 +79,6 @@
88
79
  }
89
80
  }
90
81
 
91
- .header select {
92
- height: 30px;
93
- }
94
-
95
82
  button,
96
83
  .firmware {
97
84
  height: 25px;
@@ -144,14 +131,32 @@ div.clear {
144
131
  transition: padding-top 0.3s ease-in-out;
145
132
  }
146
133
 
147
- .main.no-header-padding {
148
- padding-top: 0;
134
+ .main.advanced-active {
135
+ padding-top: 140px;
149
136
  }
150
137
 
138
+ /* .main.no-header-padding removed - auto-hide feature disabled */
139
+
151
140
  .hidden {
152
141
  display: none;
153
142
  }
154
143
 
144
+ /* Console Container */
145
+ .console-container {
146
+ height: 500px;
147
+ overflow: hidden;
148
+ transition: height 0.3s ease-in-out, visibility 0.3s ease-in-out;
149
+ margin: 0;
150
+ padding: 0;
151
+ visibility: visible;
152
+ }
153
+
154
+ .console-container.hidden {
155
+ height: 0;
156
+ visibility: hidden;
157
+ max-height: 0;
158
+ }
159
+
155
160
  .notSupported {
156
161
  padding: 1em;
157
162
  margin-top: 1em;
@@ -162,8 +167,9 @@ div.clear {
162
167
  display: flex;
163
168
  align-items: center;
164
169
  gap: 8px;
165
- padding-left: 12px;
166
- border-left: 1px solid #ccc;
170
+ padding-left: 0;
171
+ border-left: none;
172
+ white-space: nowrap;
167
173
  }
168
174
 
169
175
  .log-controls.hidden {
@@ -275,7 +281,7 @@ div.clear {
275
281
  .onoffswitch {
276
282
  display: inline-block;
277
283
  position: relative;
278
- width: 70px;
284
+ width: 50px;
279
285
  margin-right: 5px;
280
286
  -webkit-user-select: none;
281
287
  -moz-user-select: none;
@@ -342,7 +348,7 @@ div.clear {
342
348
  position: absolute;
343
349
  top: 0;
344
350
  bottom: 0;
345
- right: 23px;
351
+ right: 28px;
346
352
  border: 1px solid #900;
347
353
  border-radius: 15px;
348
354
  transition: all 0.3s ease-in 0s;
@@ -1067,3 +1073,217 @@ div.clear {
1067
1073
  justify-content: flex-end;
1068
1074
  gap: 10px;
1069
1075
  }
1076
+
1077
+ /* Mobile Optimizations */
1078
+ @media (max-width: 768px) {
1079
+ .header {
1080
+ height: auto;
1081
+ min-height: 60px;
1082
+ padding: 10px 15px;
1083
+ }
1084
+
1085
+ .header-content {
1086
+ gap: 8px;
1087
+ width: 100%;
1088
+ overflow-x: auto;
1089
+ -webkit-overflow-scrolling: touch;
1090
+ flex-wrap: nowrap;
1091
+ }
1092
+
1093
+ .header-content > label {
1094
+ font-size: 12px;
1095
+ margin-left: 3px;
1096
+ white-space: nowrap;
1097
+ }
1098
+
1099
+ .onoffswitch {
1100
+ width: 50px;
1101
+ }
1102
+
1103
+ .main {
1104
+ padding-top: 80px;
1105
+ }
1106
+ .main.advanced-active {
1107
+ padding-top: 130px;
1108
+ }
1109
+
1110
+ #commands {
1111
+ min-width: unset;
1112
+ padding: 0 15px;
1113
+ }
1114
+
1115
+ #commands .upload {
1116
+ max-width: 100%;
1117
+ padding-left: 0;
1118
+ flex-wrap: wrap;
1119
+ gap: 8px;
1120
+ }
1121
+
1122
+ #commands .upload label {
1123
+ width: 100%;
1124
+ }
1125
+
1126
+ #commands .upload .firmware {
1127
+ width: 100%;
1128
+ margin-left: 0;
1129
+ margin-right: 0;
1130
+ justify-content: center;
1131
+ }
1132
+
1133
+ #commands .buttons {
1134
+ width: 100%;
1135
+ flex-wrap: wrap;
1136
+ }
1137
+
1138
+ #commands .partition-table,
1139
+ #commands .read-flash {
1140
+ width: 100%;
1141
+ padding: 15px 0;
1142
+ }
1143
+
1144
+ #commands .partition-table .progress-bar,
1145
+ #commands .read-flash .progress-bar {
1146
+ width: 100%;
1147
+ }
1148
+
1149
+ #commands .read-flash-inputs {
1150
+ flex-wrap: wrap;
1151
+ width: 100%;
1152
+ }
1153
+
1154
+ #commands .read-flash input {
1155
+ width: 80px;
1156
+ }
1157
+
1158
+ #log {
1159
+ padding: 0 15px;
1160
+ border: 10px solid #000;
1161
+ font-size: 14px;
1162
+ }
1163
+
1164
+ .footer {
1165
+ padding: 10px 15px;
1166
+ }
1167
+
1168
+ .littlefs-manager {
1169
+ width: 100%;
1170
+ margin: 15px auto;
1171
+ padding: 15px;
1172
+ }
1173
+
1174
+ .littlefs-controls {
1175
+ flex-direction: column;
1176
+ }
1177
+
1178
+ .littlefs-controls button {
1179
+ width: 100%;
1180
+ }
1181
+
1182
+ .littlefs-file-upload {
1183
+ flex-direction: column;
1184
+ }
1185
+
1186
+ .littlefs-file-upload input[type="file"],
1187
+ .littlefs-file-upload button {
1188
+ width: 100%;
1189
+ }
1190
+
1191
+ .file-table {
1192
+ font-size: 13px;
1193
+ }
1194
+
1195
+ .file-table th,
1196
+ .file-table td {
1197
+ padding: 6px 8px;
1198
+ }
1199
+
1200
+ .file-actions {
1201
+ flex-direction: column;
1202
+ }
1203
+
1204
+ .file-actions button {
1205
+ width: 100%;
1206
+ }
1207
+
1208
+ .modal-content {
1209
+ padding: 25px;
1210
+ max-width: 90%;
1211
+ }
1212
+
1213
+ .file-viewer-content {
1214
+ width: 95vw;
1215
+ max-height: 95vh;
1216
+ }
1217
+
1218
+ .file-viewer-header,
1219
+ .file-viewer-info,
1220
+ .file-viewer-tabs,
1221
+ .file-viewer-body,
1222
+ .file-viewer-footer {
1223
+ padding-left: 15px;
1224
+ padding-right: 15px;
1225
+ }
1226
+
1227
+ .file-viewer-body pre {
1228
+ font-size: 11px;
1229
+ }
1230
+
1231
+ .hex-bytes {
1232
+ min-width: 250px;
1233
+ }
1234
+ }
1235
+
1236
+ @media (max-width: 480px) {
1237
+ .header {
1238
+ padding: 8px 10px;
1239
+ }
1240
+
1241
+ .header-content {
1242
+ gap: 6px;
1243
+ }
1244
+
1245
+ .header-content > label {
1246
+ display: none;
1247
+ }
1248
+
1249
+ .header-content select {
1250
+ min-width: 90px;
1251
+ height: 30px;
1252
+ font-size: 13px;
1253
+ }
1254
+
1255
+ .onoffswitch {
1256
+ width: 50px;
1257
+ margin-left: 2px;
1258
+ margin-right: 2px;
1259
+ }
1260
+
1261
+ .log-controls {
1262
+ padding-left: 8px;
1263
+ }
1264
+
1265
+ .small-btn {
1266
+ padding: 4px 8px;
1267
+ font-size: 11px;
1268
+ }
1269
+
1270
+ #commands {
1271
+ padding: 0 10px;
1272
+ }
1273
+
1274
+ #log {
1275
+ padding: 0 10px;
1276
+ font-size: 12px;
1277
+ }
1278
+
1279
+ button,
1280
+ .firmware {
1281
+ font-size: 14px;
1282
+ padding-left: 15px;
1283
+ padding-right: 15px;
1284
+ }
1285
+
1286
+ .main.advanced-active {
1287
+ padding-top: 120px;
1288
+ }
1289
+ }
package/dist/cli.d.ts ADDED
@@ -0,0 +1,17 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * ESP32Tool CLI - Command Line Interface for ESP device flashing
4
+ *
5
+ * Provides esptool.py-like commands for flashing ESP devices via WebSerial/WebUSB
6
+ *
7
+ * Usage:
8
+ * esp32tool flash-id
9
+ * esp32tool read-flash <offset> <size> <filename>
10
+ * esp32tool write-flash <offset> <filename>
11
+ * esp32tool erase-flash
12
+ * esp32tool erase-region <offset> <size>
13
+ * esp32tool chip-id
14
+ * esp32tool read-mac
15
+ */
16
+ declare function main(): Promise<void>;
17
+ export { main as runCLI };