esp32tool 1.1.9 → 1.2.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 (49) 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 +225 -35
  8. package/dist/cli.d.ts +17 -0
  9. package/dist/cli.js +458 -0
  10. package/dist/esp_loader.d.ts +126 -20
  11. package/dist/esp_loader.js +1190 -230
  12. package/dist/index.d.ts +2 -1
  13. package/dist/index.js +37 -4
  14. package/dist/node-usb-adapter.d.ts +47 -0
  15. package/dist/node-usb-adapter.js +725 -0
  16. package/dist/stubs/index.d.ts +1 -2
  17. package/dist/stubs/index.js +4 -0
  18. package/dist/web/index.js +1 -1
  19. package/electron/cli-main.cjs +74 -0
  20. package/electron/main.cjs +338 -0
  21. package/electron/main.js +7 -2
  22. package/favicon.ico +0 -0
  23. package/fix-cli-imports.cjs +127 -0
  24. package/generate-icons.sh +89 -0
  25. package/icons/icon-128.png +0 -0
  26. package/icons/icon-144.png +0 -0
  27. package/icons/icon-152.png +0 -0
  28. package/icons/icon-192.png +0 -0
  29. package/icons/icon-384.png +0 -0
  30. package/icons/icon-512.png +0 -0
  31. package/icons/icon-72.png +0 -0
  32. package/icons/icon-96.png +0 -0
  33. package/index.html +94 -64
  34. package/install-android.html +411 -0
  35. package/js/modules/esptool.js +1 -1
  36. package/js/script.js +165 -160
  37. package/js/webusb-serial.js +1017 -0
  38. package/license.md +1 -1
  39. package/manifest.json +89 -0
  40. package/package.cli.json +29 -0
  41. package/package.json +31 -21
  42. package/screenshots/desktop.png +0 -0
  43. package/screenshots/mobile.png +0 -0
  44. package/src/cli.ts +618 -0
  45. package/src/esp_loader.ts +1392 -261
  46. package/src/index.ts +69 -3
  47. package/src/node-usb-adapter.ts +924 -0
  48. package/src/stubs/index.ts +4 -1
  49. package/sw.js +155 -0
package/css/style.css CHANGED
@@ -13,49 +13,35 @@
13
13
  margin: 0;
14
14
  border-bottom: 5px solid #00a7e9;
15
15
  display: flex;
16
- justify-content: space-between;
16
+ justify-content: flex-start;
17
17
  align-items: center;
18
18
  top: 0;
19
19
  transition: transform 0.3s ease-in-out;
20
+ overflow-x: auto;
21
+ overflow-y: hidden;
22
+ -webkit-overflow-scrolling: touch;
20
23
  }
21
24
 
22
25
  .header-hidden {
23
26
  transform: translateY(-100%);
24
27
  }
25
28
 
26
- .header .left {
27
- display: flex;
28
- align-items: center;
29
- }
30
-
31
- .header .title {
32
- font-size: 24px;
33
- font-weight: 500;
34
- margin-right: 30px;
35
- }
36
-
37
- .header .right {
38
- display: flex;
39
- align-items: center;
40
- gap: 15px;
41
- }
42
-
43
- .header .controls-row {
29
+ .header-content {
44
30
  display: flex;
45
31
  align-items: center;
46
- gap: 8px;
47
- margin-right: 20px;
48
- padding-right: 20px;
49
- border-right: 2px solid #ccc;
32
+ gap: 10px;
33
+ flex-wrap: nowrap;
34
+ white-space: nowrap;
50
35
  }
51
36
 
52
- .header .controls-row label {
37
+ .header-content > label {
53
38
  font-size: 13px;
54
- margin-left: 12px;
39
+ margin-left: 5px;
40
+ white-space: nowrap;
55
41
  }
56
42
 
57
- .header .controls-row label:first-child {
58
- margin-left: 0;
43
+ .header select {
44
+ height: 30px;
59
45
  }
60
46
 
61
47
  .header button {
@@ -88,10 +74,6 @@
88
74
  }
89
75
  }
90
76
 
91
- .header select {
92
- height: 30px;
93
- }
94
-
95
77
  button,
96
78
  .firmware {
97
79
  height: 25px;
@@ -162,8 +144,9 @@ div.clear {
162
144
  display: flex;
163
145
  align-items: center;
164
146
  gap: 8px;
165
- padding-left: 12px;
166
- border-left: 1px solid #ccc;
147
+ padding-left: 0;
148
+ border-left: none;
149
+ white-space: nowrap;
167
150
  }
168
151
 
169
152
  .log-controls.hidden {
@@ -275,7 +258,7 @@ div.clear {
275
258
  .onoffswitch {
276
259
  display: inline-block;
277
260
  position: relative;
278
- width: 70px;
261
+ width: 50px;
279
262
  margin-right: 5px;
280
263
  -webkit-user-select: none;
281
264
  -moz-user-select: none;
@@ -342,7 +325,7 @@ div.clear {
342
325
  position: absolute;
343
326
  top: 0;
344
327
  bottom: 0;
345
- right: 23px;
328
+ right: 28px;
346
329
  border: 1px solid #900;
347
330
  border-radius: 15px;
348
331
  transition: all 0.3s ease-in 0s;
@@ -1067,3 +1050,210 @@ div.clear {
1067
1050
  justify-content: flex-end;
1068
1051
  gap: 10px;
1069
1052
  }
1053
+
1054
+ /* Mobile Optimizations */
1055
+ @media (max-width: 768px) {
1056
+ .header {
1057
+ height: auto;
1058
+ min-height: 60px;
1059
+ padding: 10px 15px;
1060
+ }
1061
+
1062
+ .header-content {
1063
+ gap: 8px;
1064
+ width: 100%;
1065
+ overflow-x: auto;
1066
+ -webkit-overflow-scrolling: touch;
1067
+ flex-wrap: nowrap;
1068
+ }
1069
+
1070
+ .header-content > label {
1071
+ font-size: 12px;
1072
+ margin-left: 3px;
1073
+ white-space: nowrap;
1074
+ }
1075
+
1076
+ .onoffswitch {
1077
+ width: 50px;
1078
+ }
1079
+
1080
+ .main {
1081
+ padding-top: 80px;
1082
+ }
1083
+
1084
+ #commands {
1085
+ min-width: unset;
1086
+ padding: 0 15px;
1087
+ }
1088
+
1089
+ #commands .upload {
1090
+ max-width: 100%;
1091
+ padding-left: 0;
1092
+ flex-wrap: wrap;
1093
+ gap: 8px;
1094
+ }
1095
+
1096
+ #commands .upload label {
1097
+ width: 100%;
1098
+ }
1099
+
1100
+ #commands .upload .firmware {
1101
+ width: 100%;
1102
+ margin-left: 0;
1103
+ margin-right: 0;
1104
+ justify-content: center;
1105
+ }
1106
+
1107
+ #commands .buttons {
1108
+ width: 100%;
1109
+ flex-wrap: wrap;
1110
+ }
1111
+
1112
+ #commands .partition-table,
1113
+ #commands .read-flash {
1114
+ width: 100%;
1115
+ padding: 15px 0;
1116
+ }
1117
+
1118
+ #commands .partition-table .progress-bar,
1119
+ #commands .read-flash .progress-bar {
1120
+ width: 100%;
1121
+ }
1122
+
1123
+ #commands .read-flash-inputs {
1124
+ flex-wrap: wrap;
1125
+ width: 100%;
1126
+ }
1127
+
1128
+ #commands .read-flash input {
1129
+ width: 80px;
1130
+ }
1131
+
1132
+ #log {
1133
+ padding: 0 15px;
1134
+ border: 10px solid #000;
1135
+ font-size: 14px;
1136
+ }
1137
+
1138
+ .footer {
1139
+ padding: 10px 15px;
1140
+ }
1141
+
1142
+ .littlefs-manager {
1143
+ width: 100%;
1144
+ margin: 15px auto;
1145
+ padding: 15px;
1146
+ }
1147
+
1148
+ .littlefs-controls {
1149
+ flex-direction: column;
1150
+ }
1151
+
1152
+ .littlefs-controls button {
1153
+ width: 100%;
1154
+ }
1155
+
1156
+ .littlefs-file-upload {
1157
+ flex-direction: column;
1158
+ }
1159
+
1160
+ .littlefs-file-upload input[type="file"],
1161
+ .littlefs-file-upload button {
1162
+ width: 100%;
1163
+ }
1164
+
1165
+ .file-table {
1166
+ font-size: 13px;
1167
+ }
1168
+
1169
+ .file-table th,
1170
+ .file-table td {
1171
+ padding: 6px 8px;
1172
+ }
1173
+
1174
+ .file-actions {
1175
+ flex-direction: column;
1176
+ }
1177
+
1178
+ .file-actions button {
1179
+ width: 100%;
1180
+ }
1181
+
1182
+ .modal-content {
1183
+ padding: 25px;
1184
+ max-width: 90%;
1185
+ }
1186
+
1187
+ .file-viewer-content {
1188
+ width: 95vw;
1189
+ max-height: 95vh;
1190
+ }
1191
+
1192
+ .file-viewer-header,
1193
+ .file-viewer-info,
1194
+ .file-viewer-tabs,
1195
+ .file-viewer-body,
1196
+ .file-viewer-footer {
1197
+ padding-left: 15px;
1198
+ padding-right: 15px;
1199
+ }
1200
+
1201
+ .file-viewer-body pre {
1202
+ font-size: 11px;
1203
+ }
1204
+
1205
+ .hex-bytes {
1206
+ min-width: 250px;
1207
+ }
1208
+ }
1209
+
1210
+ @media (max-width: 480px) {
1211
+ .header {
1212
+ padding: 8px 10px;
1213
+ }
1214
+
1215
+ .header-content {
1216
+ gap: 6px;
1217
+ }
1218
+
1219
+ .header-content > label {
1220
+ display: none;
1221
+ }
1222
+
1223
+ .header-content select {
1224
+ min-width: 90px;
1225
+ height: 30px;
1226
+ font-size: 13px;
1227
+ }
1228
+
1229
+ .onoffswitch {
1230
+ width: 50px;
1231
+ margin-left: 2px;
1232
+ margin-right: 2px;
1233
+ }
1234
+
1235
+ .log-controls {
1236
+ padding-left: 8px;
1237
+ }
1238
+
1239
+ .small-btn {
1240
+ padding: 4px 8px;
1241
+ font-size: 11px;
1242
+ }
1243
+
1244
+ #commands {
1245
+ padding: 0 10px;
1246
+ }
1247
+
1248
+ #log {
1249
+ padding: 0 10px;
1250
+ font-size: 12px;
1251
+ }
1252
+
1253
+ button,
1254
+ .firmware {
1255
+ font-size: 14px;
1256
+ padding-left: 15px;
1257
+ padding-right: 15px;
1258
+ }
1259
+ }
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 };