@mikrojs/firmware 0.21.1-next.20260928214050 → 0.22.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.
@@ -73,6 +73,7 @@ idf_component_register(
73
73
  "${MIK_SRC_DIR}/mik_text_encoding.cpp"
74
74
  "${MIK_SRC_DIR}/mik_cbor.cpp"
75
75
  "${MIK_SRC_DIR}/mik_schema.cpp"
76
+ "${MIK_SRC_DIR}/mik_test.cpp"
76
77
  "${MIK_SRC_DIR}/mik_sys_codec.cpp"
77
78
  "${MIK_SRC_DIR}/mik_result.cpp"
78
79
  "${MIK_SRC_DIR}/mik_udp.cpp"
@@ -120,26 +120,13 @@ static void mik__apply_nvs_log_level(void) {
120
120
  esp_log_level_set("mik_app_config", level);
121
121
  }
122
122
 
123
- /* Scratch buffers for the supervisor loop, heap-allocated for the duration
124
- * of a test-manifest run so normal boots don't carry them in BSS (~3 KB).
125
- *
126
- * Kept off the stack because the main task stack is ~24 KB and cannot
127
- * accommodate 1-2 KB of local buffers on top of the nested eval/module
128
- * normalizer call chain (observed as a stack-protection fault in
129
- * mik_module_normalizer on the first test file). Fixed sizes instead of
130
- * PATH_MAX scaling — on newlib PATH_MAX can be 4096, which is absurd for
131
- * our purposes. These sizes fit any realistic on-device test path. Only
132
- * one test manifest runs per boot, so single-ownership is safe. */
123
+ /* Fixed sizes instead of PATH_MAX scaling — on newlib PATH_MAX can be 4096,
124
+ * which is absurd for our purposes. These fit any realistic on-device test
125
+ * path. */
133
126
  #define MIK_SUP_PATH_MAX 384
134
- struct MIKSupScratch {
135
- char dbg[MIK_SUP_PATH_MAX + 64];
136
- char esc[MIK_SUP_PATH_MAX * 2 + 8];
137
- char buf[MIK_SUP_PATH_MAX * 2 + 512];
138
- /* Exception text captured by MIK_RunEntryErr when a test file fails to
139
- * evaluate, and its JSON-escaped form for the synthesized test event. */
140
- char err[192];
141
- char err_esc[sizeof(err) * 2 + 8];
142
- };
127
+ /* Exception text captured by MIK_RunEntryErr when a test file fails to
128
+ * evaluate. */
129
+ #define MIK_SUP_ERR_MAX 192
143
130
 
144
131
  /* Minimal JSON string-escape into a bounded buffer. Handles `"`, `\`, and
145
132
  * control characters; everything else copies verbatim. Returns bytes
@@ -170,6 +157,68 @@ static int mik__json_escape(char* dst, size_t dst_size, const char* src) {
170
157
  return (int)w;
171
158
  }
172
159
 
160
+ /* Supervisor frame buffers live on these noinline helpers' stacks, called
161
+ * only while no JS runs. Not in MIK_Main's frame: it stays live under the
162
+ * eval chain, and 1-2 KB of locals there faulted in mik_module_normalizer.
163
+ * Not on the heap: that held ~3 KB through every test file's network calls. */
164
+
165
+ /* Announce the file about to run so the CLI can confirm the supervisor's
166
+ * iteration matches its own testFiles order. The MSG_DEBUG frame is
167
+ * rendered as a dim log line. */
168
+ [[gnu::noinline]] static void mik__sup_announce(MIKReplTransport* transport, size_t i, size_t count,
169
+ const char* path) {
170
+ char dbg[MIK_SUP_PATH_MAX + 64];
171
+ int n = snprintf(dbg, sizeof(dbg), "[supervisor] running %zu/%zu: %s", i + 1, count, path);
172
+ if (n > 0 && n < (int)sizeof(dbg)) {
173
+ mik__proto_send(transport, MIK_MSG_DEBUG, dbg, n);
174
+ }
175
+ }
176
+
177
+ /* Synthesize a failing test + run_done so the CLI accounts for this file
178
+ * instead of stalling waiting for a run_done the runtime will never emit.
179
+ * `err` is the captured exception text, or null. */
180
+ [[gnu::noinline]] static void mik__sup_report_failure(MIKReplTransport* transport,
181
+ const char* path, const char* reason,
182
+ const char* err) {
183
+ char esc[MIK_SUP_PATH_MAX * 2 + 8];
184
+ char err_esc[MIK_SUP_ERR_MAX * 2 + 8];
185
+ char buf[MIK_SUP_PATH_MAX * 2 + 512];
186
+
187
+ ESP_LOGE(TAG, "%s: %s", reason, path);
188
+ /* Escape the path so any `"` or `\` in it doesn't corrupt the JSON frame. */
189
+ if (mik__json_escape(esc, sizeof(esc), path) < 0) {
190
+ /* Path too long to fit even escaped — fall back to basename so the
191
+ * frame at least identifies something. */
192
+ const char* base = strrchr(path, '/');
193
+ if (!base || mik__json_escape(esc, sizeof(esc), base + 1) < 0) {
194
+ esc[0] = '?';
195
+ esc[1] = '\0';
196
+ }
197
+ }
198
+ /* Append the captured exception text (escaped) so the CLI shows the
199
+ * actual error, not just "Evaluation threw". */
200
+ err_esc[0] = '\0';
201
+ if (err && err[0] != '\0') {
202
+ if (mik__json_escape(err_esc, sizeof(err_esc), err) < 0) {
203
+ err_esc[0] = '\0';
204
+ }
205
+ }
206
+ int n;
207
+ if (err_esc[0] != '\0') {
208
+ n = snprintf(buf, sizeof(buf),
209
+ "{\"e\":3,\"s\":\"<load>\",\"t\":\"%s\",\"d\":0,\"m\":\"%s: %s\"}", esc,
210
+ reason, err_esc);
211
+ } else {
212
+ n = snprintf(buf, sizeof(buf),
213
+ "{\"e\":3,\"s\":\"<load>\",\"t\":\"%s\",\"d\":0,\"m\":\"%s\"}", esc, reason);
214
+ }
215
+ if (n > 0 && n < (int)sizeof(buf)) {
216
+ mik__proto_send(transport, MIK_MSG_TEST, buf, n);
217
+ }
218
+ static const char kRunDone[] = "{\"e\":6,\"p\":0,\"f\":1,\"k\":0,\"o\":0,\"d\":0}";
219
+ mik__proto_send(transport, MIK_MSG_TEST, kRunDone, sizeof(kRunDone) - 1);
220
+ }
221
+
173
222
  /* ── Serial transport ───────────────────────────────────────────── */
174
223
 
175
224
  static int serial_transport_read(uint8_t* buf, size_t size, void* ctx) {
@@ -721,47 +770,27 @@ void MIK_Main(void) {
721
770
  MIK_ProtocolOpen(&transport);
722
771
 
723
772
  if (test_mode) {
724
- auto* sup = static_cast<MIKSupScratch*>(malloc(sizeof(MIKSupScratch)));
725
- if (!sup) {
726
- ESP_LOGE(TAG, "Not enough memory for the test supervisor");
727
- /* Fail loud: a synthesized failing run-done plus end-of-manifest
728
- * lets the CLI report the failure instead of hanging on a stream
729
- * that will never produce results. */
730
- static const char kOomRunDone[] = "{\"e\":6,\"p\":0,\"f\":1,\"k\":0,\"o\":0,\"d\":0}";
731
- mik__proto_send(&transport, MIK_MSG_TEST, kOomRunDone, sizeof(kOomRunDone) - 1);
732
- mik__proto_send(&transport, MIK_MSG_MANIFEST_DONE, nullptr, 0);
733
- return;
734
- }
735
-
736
773
  /* Discard the primary runtime — each test gets a fresh one. */
737
774
  MIK_FreeRuntime(mik_rt);
738
775
  mik_rt = nullptr;
739
776
 
740
777
  for (size_t i = 0; i < test_count; i++) {
741
- /* Diagnostic: announce the file about to run so the CLI can
742
- * confirm the supervisor's iteration matches its own testFiles
743
- * order. The MSG_DEBUG frame is rendered as a dim log line.
744
- * Uses heap scratch to avoid bloating the main task stack —
745
- * the normalizer call chain during module resolution already
746
- * sits a few KB deep. */
747
- {
748
- int n = snprintf(sup->dbg, sizeof(sup->dbg),
749
- "[supervisor] running %zu/%zu: %s", i + 1, test_count,
750
- test_paths[i]);
751
- if (n > 0 && n < (int)sizeof(sup->dbg)) {
752
- mik__proto_send(&transport, MIK_MSG_DEBUG, sup->dbg, n);
753
- }
754
- }
778
+ mik__sup_announce(&transport, i, test_count, test_paths[i]);
755
779
  MIKRuntime* rt = create_runtime();
756
780
  MIK_EnableTestHelpers(rt);
757
781
  MIK_ProtocolAttach(rt);
758
- int rc = MIK_RunEntryErr(rt, test_paths[i], sup->err, sizeof(sup->err));
782
+ /* Held only across the entry eval; a null buffer just drops the
783
+ * exception text. */
784
+ auto* err = static_cast<char*>(malloc(MIK_SUP_ERR_MAX));
785
+ int rc = MIK_RunEntryErr(rt, test_paths[i], err, err ? MIK_SUP_ERR_MAX : 0);
759
786
  const char* fail_reason = nullptr;
760
787
  if (rc == -ENOENT) {
761
788
  fail_reason = "Test file not found";
762
789
  } else if (rc == -EFAULT) {
763
790
  fail_reason = "Evaluation threw";
764
791
  } else {
792
+ free(err);
793
+ err = nullptr;
765
794
  /* Entry eval returned successfully (rc == 0). The test module
766
795
  * may still asynchronously reject (e.g. top-level throw in a
767
796
  * module eval'd as a Promise) — that's caught after ServeLoop
@@ -772,52 +801,12 @@ void MIK_Main(void) {
772
801
  }
773
802
  }
774
803
  if (fail_reason) {
775
- /* Synthesize a failing test + run_done so the CLI accounts
776
- * for this file instead of stalling waiting for a run_done
777
- * the runtime will never emit. Escape the path so any `"`
778
- * or `\` in it doesn't corrupt the JSON frame. */
779
- ESP_LOGE(TAG, "%s: %s", fail_reason, test_paths[i]);
780
- if (mik__json_escape(sup->esc, sizeof(sup->esc), test_paths[i]) < 0) {
781
- /* Path too long to fit even escaped — fall back to
782
- * basename so the frame at least identifies something. */
783
- const char* base = strrchr(test_paths[i], '/');
784
- if (!base ||
785
- mik__json_escape(sup->esc, sizeof(sup->esc), base + 1) < 0) {
786
- sup->esc[0] = '?';
787
- sup->esc[1] = '\0';
788
- }
789
- }
790
- /* Append the captured exception text (escaped) so the CLI
791
- * shows the actual error, not just "Evaluation threw". */
792
- sup->err_esc[0] = '\0';
793
- if (rc == -EFAULT && sup->err[0] != '\0') {
794
- if (mik__json_escape(sup->err_esc, sizeof(sup->err_esc), sup->err) < 0) {
795
- sup->err_esc[0] = '\0';
796
- }
797
- }
798
- int n;
799
- if (sup->err_esc[0] != '\0') {
800
- n = snprintf(sup->buf, sizeof(sup->buf),
801
- "{\"e\":3,\"s\":\"<load>\",\"t\":\"%s\",\"d\":0,"
802
- "\"m\":\"%s: %s\"}",
803
- sup->esc, fail_reason, sup->err_esc);
804
- } else {
805
- n = snprintf(sup->buf, sizeof(sup->buf),
806
- "{\"e\":3,\"s\":\"<load>\",\"t\":\"%s\",\"d\":0,"
807
- "\"m\":\"%s\"}",
808
- sup->esc, fail_reason);
809
- }
810
- if (n > 0 && n < (int)sizeof(sup->buf)) {
811
- mik__proto_send(&transport, MIK_MSG_TEST, sup->buf, n);
812
- }
813
- static const char kRunDone[] =
814
- "{\"e\":6,\"p\":0,\"f\":1,\"k\":0,\"o\":0,\"d\":0}";
815
- mik__proto_send(&transport, MIK_MSG_TEST, kRunDone, sizeof(kRunDone) - 1);
804
+ mik__sup_report_failure(&transport, test_paths[i], fail_reason, err);
816
805
  }
806
+ free(err);
817
807
  MIK_ProtocolDetach();
818
808
  MIK_FreeRuntime(rt);
819
809
  }
820
- free(sup);
821
810
 
822
811
  /* Signal end-of-manifest so the CLI can finalize its report
823
812
  * without waiting on a silent stream. */
@@ -5,6 +5,7 @@
5
5
  #include <esp_log.h>
6
6
  #include <esp_heap_caps.h>
7
7
  #include <esp_mac.h>
8
+ #include <esp_netif.h>
8
9
  #include <nanocbor/nanocbor.h>
9
10
  #include <nvs.h>
10
11
  #include <esp_random.h>
@@ -390,6 +391,16 @@ static void esp32_log(int level, const char* tag, const char* fmt, ...) {
390
391
  mik__console_write(buf, total + 1);
391
392
  }
392
393
 
394
+ /* Start lwip's tcpip thread. esp_netif_init is idempotent (INVALID_STATE
395
+ * on a second call); the wifi and http modules run it too and share the
396
+ * result. */
397
+ static void esp32_net_init(void) {
398
+ esp_err_t err = esp_netif_init();
399
+ if (err != ESP_OK && err != ESP_ERR_INVALID_STATE) {
400
+ ESP_LOGE("mikrojs", "esp_netif_init failed: %s", esp_err_to_name(err));
401
+ }
402
+ }
403
+
393
404
  static const MIKPlatform esp32_platform = {
394
405
  .get_boot_us = esp32_get_boot_us,
395
406
  .get_rtc_us = esp32_get_rtc_us,
@@ -423,6 +434,7 @@ static const MIKPlatform esp32_platform = {
423
434
  .get_device_name = esp32_get_device_name,
424
435
  .set_device_name = esp32_set_device_name,
425
436
  .get_reset_reason = esp32_get_reset_reason,
437
+ .net_init = esp32_net_init,
426
438
  };
427
439
 
428
440
  /*
package/dist/boards.d.ts CHANGED
@@ -43,6 +43,18 @@ export interface FirmwareExport {
43
43
  target: string;
44
44
  file: string;
45
45
  }
46
+ /** A board that runs one of the generic images, as its firmware.json says.
47
+ * `mikro flash` flashes that image with the board's name written into it. */
48
+ export interface GenericBoard {
49
+ name: string;
50
+ description?: string;
51
+ /** The generic board whose image it runs: `esp32-generic`. */
52
+ firmware: string;
53
+ specifier: string;
54
+ key: string;
55
+ packageName: string;
56
+ packageDir: string;
57
+ }
46
58
  /** The full image's folder in the board's, and its name for `--features`. */
47
59
  export declare const FULL_IMAGE = "full";
48
60
  /** A board's name in file and artifact names: `@acme/pi` becomes `acme-pi`. */
@@ -61,18 +73,31 @@ export declare function firmwareExports(packageDir: string): {
61
73
  entries: FirmwareExport[];
62
74
  problems: BoardProblem[];
63
75
  };
64
- /** What a firmware.json says, or why it can't describe a board. */
76
+ type ImageJson = Pick<BoardImage, 'name' | 'description' | 'chip' | 'version' | 'features'>;
77
+ type GenericJson = Pick<GenericBoard, 'name' | 'description' | 'firmware'>;
78
+ /** What an image's firmware.json says, or why it can't describe an image. */
65
79
  export declare function readFirmwareJson(file: string): {
66
80
  ok: true;
67
- value: Pick<BoardImage, 'name' | 'description' | 'chip' | 'version' | 'features'>;
81
+ value: ImageJson;
68
82
  } | {
69
83
  ok: false;
70
84
  message: string;
71
85
  };
72
- /** The boards a package declares, and the `firmware` exports that aren't one
73
- * (not built, or not a Mikro.js firmware.json). */
86
+ /** What the firmware.json of a board that runs a generic image says, or why
87
+ * it isn't one. */
88
+ export declare function readGenericBoardJson(file: string): {
89
+ ok: true;
90
+ value: GenericJson;
91
+ } | {
92
+ ok: false;
93
+ message: string;
94
+ };
95
+ /** The boards a package declares: those with an image of their own in
96
+ * `boards`, those that run a generic image in `generic`, and the `firmware`
97
+ * exports that are neither (not built, or not a Mikro.js firmware.json). */
74
98
  export declare function loadBoards(packageDir: string): {
75
99
  boards: BoardImage[];
100
+ generic: GenericBoard[];
76
101
  problems: BoardProblem[];
77
102
  };
78
103
  /**
@@ -126,6 +151,31 @@ export interface BoardConfig {
126
151
  /** Images to build besides the full one, each with features switched off
127
152
  * or on: `[{ble: false}, {ble: false, wifi: false}]`. */
128
153
  images?: readonly ImageFeatures[];
154
+ /** Only for a board on the generic firmware (GenericBoardConfig). */
155
+ firmware?: never;
156
+ }
157
+ /** The generic boards, one per chip: the firmware a board on the generic
158
+ * firmware runs. */
159
+ declare const GENERIC_FIRMWARE: ("esp32-generic" | "esp32c3-generic" | "esp32c5-generic" | "esp32c6-generic" | "esp32s3-generic")[];
160
+ export type GenericFirmware = (typeof GENERIC_FIRMWARE)[number];
161
+ /** A board in boards.config.ts that runs one of the generic images, such as a
162
+ * board whose drivers are all JavaScript. `mikro flash` writes its name into
163
+ * the image. */
164
+ export interface GenericBoardConfig {
165
+ /** The generic board whose image it runs: `esp32-generic`. */
166
+ firmware: GenericFirmware;
167
+ /** The name the device reports as sys.board.name. Default: the specifier of
168
+ * the board's export. */
169
+ name?: string;
170
+ /** Shown when `mikro flash` asks which board to flash. Default: the
171
+ * package's description. */
172
+ description?: string;
173
+ chip?: never;
174
+ sdkconfig?: never;
175
+ partitions?: never;
176
+ nativeModules?: never;
177
+ project?: never;
178
+ images?: never;
129
179
  }
130
180
  /** boards.config.ts: the boards a package builds, keyed by the export that
131
181
  * declares each, `.` or `./<board>`. */
@@ -134,7 +184,7 @@ export interface BoardsConfig {
134
184
  * board at `.`, `<dist>/<board>/full/` for the others, and each other image
135
185
  * in a folder beside `full/`. Default: `dist-fw`. */
136
186
  dist?: string;
137
- boards: Record<string, BoardConfig>;
187
+ boards: Record<string, BoardConfig | GenericBoardConfig>;
138
188
  }
139
189
  /** A board from boards.config.ts, with defaults filled in and paths resolved. */
140
190
  export interface ConfiguredBoard {
@@ -157,6 +207,19 @@ export interface ConfiguredBoard {
157
207
  /** The images besides the full one. */
158
208
  images: ConfiguredImage[];
159
209
  }
210
+ /** A board from boards.config.ts that runs a generic image. `mikro fw build`
211
+ * writes its firmware.json to `target`, which names the generic board. */
212
+ export interface ConfiguredGenericBoard {
213
+ key: string;
214
+ specifier: string;
215
+ name: string;
216
+ description?: string;
217
+ firmware: GenericFirmware;
218
+ /** The generic board's chip. */
219
+ chip: Chip;
220
+ target: string;
221
+ boardDir: string;
222
+ }
160
223
  /** An image from `images` in boards.config.ts. */
161
224
  export interface ConfiguredImage {
162
225
  /** `no-ble`: the image's folder in the board's, and its name everywhere else. */
@@ -171,10 +234,12 @@ export interface ConfiguredImage {
171
234
  * and everything wrong with it: fields that don't check out, files it names
172
235
  * that don't exist, names a device can't take, and `exports` that don't match
173
236
  * (a board without its `firmware` export, one pointing elsewhere, or a
174
- * `firmware` export the config doesn't have).
237
+ * `firmware` export the config doesn't have). Boards with an image of their own
238
+ * are in `boards`, boards that run a generic image in `generic`.
175
239
  */
176
240
  export declare function checkBoardsConfig(packageDir: string, config: unknown): {
177
241
  boards: ConfiguredBoard[];
242
+ generic: ConfiguredGenericBoard[];
178
243
  problems: BoardProblem[];
179
244
  };
180
245
  //# sourceMappingURL=boards.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../src/boards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boards.d.ts","sourceRoot":"","sources":["../src/boards.ts"],"names":[],"mappings":"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"}
package/dist/boards.js CHANGED
@@ -21,7 +21,7 @@
21
21
  import { existsSync, readdirSync, readFileSync } from 'node:fs';
22
22
  import { basename, dirname, isAbsolute, join, relative, resolve, sep } from 'node:path';
23
23
  import { array, enumOf, object, optional, string, validate } from '@mikrojs/schema';
24
- import { chips } from "./index.js";
24
+ import { CHIPS, chips } from "./index.js";
25
25
  /** The form of a board name: a package name, optionally with /<board>. The
26
26
  * device keeps it in a 64-byte buffer, and a registry checks the same form
27
27
  * (docs/registry-spec.md, "Board names"). */
@@ -34,6 +34,13 @@ const FirmwareJson = object({
34
34
  version: string(),
35
35
  features: optional(array(string())),
36
36
  });
37
+ /** The firmware.json of a board that runs a generic image: no image of its
38
+ * own, the generic board's name in `firmware`. */
39
+ const GenericFirmwareJson = object({
40
+ name: string(),
41
+ description: optional(string()),
42
+ firmware: string(),
43
+ });
37
44
  /** An image name: what it leaves out (`no-ble`) or adds, joined with `+`. */
38
45
  const IMAGE_NAME_RE = /^(no-)?[a-z0-9]+(\+(no-)?[a-z0-9]+)*$/;
39
46
  /** The full image's folder in the board's, and its name for `--features`. */
@@ -112,18 +119,24 @@ export function firmwareExports(packageDir) {
112
119
  }
113
120
  return { entries, problems };
114
121
  }
115
- /** What a firmware.json says, or why it can't describe a board. */
116
- export function readFirmwareJson(file) {
122
+ /** A firmware.json's content, or why it can't be read. */
123
+ function readJson(file) {
117
124
  if (!existsSync(file))
118
125
  return { ok: false, message: `not built: ${file} does not exist` };
119
- let json;
120
126
  try {
121
- json = JSON.parse(readFileSync(file, 'utf8'));
127
+ return { ok: true, value: JSON.parse(readFileSync(file, 'utf8')) };
122
128
  }
123
129
  catch (e) {
124
130
  return { ok: false, message: `${file} is not valid JSON: ${e.message}` };
125
131
  }
126
- const invalid = validate(FirmwareJson, json, '');
132
+ }
133
+ /** Whether a firmware.json is a generic board's: no image, a `firmware` instead. */
134
+ function isGenericJson(json) {
135
+ return isObject(json) && Object.hasOwn(json, 'firmware');
136
+ }
137
+ /** `json` checked against `schema` and the board-name form, or why it isn't. */
138
+ function checkedJson(schema, json, file) {
139
+ const invalid = validate(schema, json, '');
127
140
  if (invalid) {
128
141
  const { message, path } = invalid.error;
129
142
  return { ok: false, message: `${file}${path ? ` (${path.slice(1)})` : ''}: ${message}` };
@@ -135,16 +148,35 @@ export function readFirmwareJson(file) {
135
148
  message: `${file}: "${value.name}" is not a board name (at most ${MAX_BOARD_NAME_LENGTH} characters, the form of a package name with an optional /<board>)`,
136
149
  };
137
150
  }
138
- return {
139
- ok: true,
140
- value: {
141
- name: value.name,
142
- description: value.description,
143
- chip: value.chip,
144
- version: value.version,
145
- features: value.features,
146
- },
147
- };
151
+ return { ok: true, value };
152
+ }
153
+ function imageJson(json, file) {
154
+ if (isGenericJson(json)) {
155
+ return { ok: false, message: `${file} is a board that runs a generic image, not an image` };
156
+ }
157
+ const read = checkedJson(FirmwareJson, json, file);
158
+ if (!read.ok)
159
+ return read;
160
+ const { name, description, chip, version, features } = read.value;
161
+ return { ok: true, value: { name, description, chip, version, features } };
162
+ }
163
+ function genericJson(json, file) {
164
+ const read = checkedJson(GenericFirmwareJson, json, file);
165
+ if (!read.ok)
166
+ return read;
167
+ const { name, description, firmware } = read.value;
168
+ return { ok: true, value: { name, description, firmware } };
169
+ }
170
+ /** What an image's firmware.json says, or why it can't describe an image. */
171
+ export function readFirmwareJson(file) {
172
+ const json = readJson(file);
173
+ return json.ok ? imageJson(json.value, file) : json;
174
+ }
175
+ /** What the firmware.json of a board that runs a generic image says, or why
176
+ * it isn't one. */
177
+ export function readGenericBoardJson(file) {
178
+ const json = readJson(file);
179
+ return json.ok ? genericJson(json.value, file) : json;
148
180
  }
149
181
  /** A board's other images: the folders beside its full image's `full/`
150
182
  * folder, named like an image, that hold an image of the same board. */
@@ -168,25 +200,40 @@ function siblingImages(dir, name, chip) {
168
200
  }
169
201
  return images.sort((a, b) => a.name.localeCompare(b.name));
170
202
  }
171
- /** The boards a package declares, and the `firmware` exports that aren't one
172
- * (not built, or not a Mikro.js firmware.json). */
203
+ /** The boards a package declares: those with an image of their own in
204
+ * `boards`, those that run a generic image in `generic`, and the `firmware`
205
+ * exports that are neither (not built, or not a Mikro.js firmware.json). */
173
206
  export function loadBoards(packageDir) {
174
207
  const { entries, problems } = firmwareExports(packageDir);
175
- const read = readPackageJson(packageDir);
176
- const packageName = (read.ok ? read.value.name : undefined) ?? packageDir;
208
+ const pkg = readPackageJson(packageDir);
209
+ const packageName = (pkg.ok ? pkg.value.name : undefined) ?? packageDir;
177
210
  const boards = [];
211
+ const generic = [];
178
212
  for (const { key, specifier, file } of entries) {
179
- const read = readFirmwareJson(file);
180
- if (read.ok) {
181
- const dir = dirname(file);
182
- const images = siblingImages(dir, read.value.name, read.value.chip);
183
- boards.push({ ...read.value, images, specifier, key, packageName, packageDir, dir });
213
+ const json = readJson(file);
214
+ if (!json.ok) {
215
+ problems.push({ specifier, message: json.message });
216
+ }
217
+ else if (isGenericJson(json.value)) {
218
+ const read = genericJson(json.value, file);
219
+ if (read.ok)
220
+ generic.push({ ...read.value, specifier, key, packageName, packageDir });
221
+ else
222
+ problems.push({ specifier, message: read.message });
184
223
  }
185
224
  else {
186
- problems.push({ specifier, message: read.message });
225
+ const read = imageJson(json.value, file);
226
+ if (read.ok) {
227
+ const dir = dirname(file);
228
+ const images = siblingImages(dir, read.value.name, read.value.chip);
229
+ boards.push({ ...read.value, images, specifier, key, packageName, packageDir, dir });
230
+ }
231
+ else {
232
+ problems.push({ specifier, message: read.message });
233
+ }
187
234
  }
188
235
  }
189
- return { boards, problems };
236
+ return { boards, generic, problems };
190
237
  }
191
238
  /** Whether npm publishes `path` (relative to the package) under this `files`
192
239
  * list. Glob entries are taken as covering it: they need npm's matcher. */
@@ -216,7 +263,7 @@ export function checkBoardPackage(packageDir) {
216
263
  return [{ specifier: packageDir, message: read.message }];
217
264
  const pkg = read.value;
218
265
  const { entries } = firmwareExports(packageDir);
219
- const { boards, problems } = loadBoards(packageDir);
266
+ const { boards, generic, problems } = loadBoards(packageDir);
220
267
  const packageName = pkg.name ?? packageDir;
221
268
  for (const { specifier, target, file } of entries) {
222
269
  const inPackage = relative(packageDir, dirname(file));
@@ -257,7 +304,7 @@ export function checkBoardPackage(packageDir) {
257
304
  }
258
305
  }
259
306
  const byName = new Map();
260
- for (const board of boards) {
307
+ for (const board of [...boards, ...generic]) {
261
308
  const other = byName.get(board.name);
262
309
  if (other) {
263
310
  problems.push({
@@ -301,6 +348,12 @@ export function sortImageName(name) {
301
348
  .sort((a, b) => feature(a).localeCompare(feature(b)))
302
349
  .join('+');
303
350
  }
351
+ /** The generic boards, one per chip: the firmware a board on the generic
352
+ * firmware runs. */
353
+ const GENERIC_FIRMWARE = CHIPS.map((chip) => `${chip}-generic`);
354
+ function isGenericFirmware(name) {
355
+ return GENERIC_FIRMWARE.includes(name);
356
+ }
304
357
  const DEFAULT_DIST = 'dist-fw';
305
358
  const BOARD_KEYS = [
306
359
  'chip',
@@ -312,6 +365,7 @@ const BOARD_KEYS = [
312
365
  'project',
313
366
  'images',
314
367
  ];
368
+ const GENERIC_BOARD_KEYS = ['firmware', 'name', 'description'];
315
369
  /** `./<board>`: one segment, in the form of a board name's last part. */
316
370
  const SUBPATH_RE = /^\.\/[a-z0-9]([a-z0-9.-]*[a-z0-9])?$/;
317
371
  function isStringArray(value) {
@@ -326,18 +380,21 @@ function exportsSnippet(boards) {
326
380
  * and everything wrong with it: fields that don't check out, files it names
327
381
  * that don't exist, names a device can't take, and `exports` that don't match
328
382
  * (a board without its `firmware` export, one pointing elsewhere, or a
329
- * `firmware` export the config doesn't have).
383
+ * `firmware` export the config doesn't have). Boards with an image of their own
384
+ * are in `boards`, boards that run a generic image in `generic`.
330
385
  */
331
386
  export function checkBoardsConfig(packageDir, config) {
332
387
  const read = readPackageJson(packageDir);
333
- if (!read.ok)
334
- return { boards: [], problems: [{ specifier: packageDir, message: read.message }] };
388
+ if (!read.ok) {
389
+ return { boards: [], generic: [], problems: [{ specifier: packageDir, message: read.message }] };
390
+ }
335
391
  const pkg = read.value;
336
392
  const packageName = pkg.name ?? packageDir;
337
393
  const problems = [];
338
394
  // Stops at a problem that leaves nothing to check, keeping the ones found so far
339
395
  const fail = (message) => ({
340
396
  boards: [],
397
+ generic: [],
341
398
  problems: [...problems, { specifier: packageName, message }],
342
399
  });
343
400
  if (pkg.name === undefined)
@@ -367,6 +424,7 @@ export function checkBoardsConfig(packageDir, config) {
367
424
  return fail('boards.config.ts: a package has one board at "." or boards at "./<board>", not both');
368
425
  }
369
426
  const boards = [];
427
+ const generic = [];
370
428
  for (const [key, board] of Object.entries(config.boards)) {
371
429
  const sub = key.slice(2);
372
430
  const specifier = key === '.' ? packageName : `${packageName}/${sub}`;
@@ -380,20 +438,55 @@ export function checkBoardsConfig(packageDir, config) {
380
438
  problem('expected an object');
381
439
  continue;
382
440
  }
441
+ const { name, description } = board;
442
+ if (name !== undefined && typeof name !== 'string')
443
+ problem('"name" must be a string');
444
+ if (description !== undefined && typeof description !== 'string') {
445
+ problem('"description" must be a string');
446
+ }
447
+ const boardName = typeof name === 'string' ? name : specifier;
448
+ if (!BOARD_NAME_RE.test(boardName) || boardName.length > MAX_BOARD_NAME_LENGTH) {
449
+ problem(`"${boardName}" is not a board name (at most ${MAX_BOARD_NAME_LENGTH} characters, the ` +
450
+ 'form of a package name with an optional /<board>)' +
451
+ (typeof name === 'string' ? '' : '; set "name"'));
452
+ }
453
+ const target = `./${distPath}/${key === '.' ? '' : `${sub}/`}${FULL_IMAGE}/firmware.json`;
454
+ const boardDir = key === '.' ? distDir : join(distDir, sub);
455
+ const boardDescription = typeof description === 'string' ? description : pkg.description;
456
+ if (Object.hasOwn(board, 'firmware')) {
457
+ const { firmware } = board;
458
+ for (const field of Object.keys(board)) {
459
+ if (GENERIC_BOARD_KEYS.includes(field))
460
+ continue;
461
+ problem(BOARD_KEYS.includes(field)
462
+ ? `a board that runs a generic image gets "${field}" from it; leave out "${field}"`
463
+ : `unknown field "${field}"`);
464
+ }
465
+ if (!isGenericFirmware(firmware)) {
466
+ problem(`"firmware" must be one of ${GENERIC_FIRMWARE.join(', ')}`);
467
+ continue;
468
+ }
469
+ generic.push({
470
+ key,
471
+ specifier,
472
+ name: boardName,
473
+ description: boardDescription,
474
+ firmware,
475
+ chip: CHIPS[GENERIC_FIRMWARE.indexOf(firmware)],
476
+ target,
477
+ boardDir,
478
+ });
479
+ continue;
480
+ }
383
481
  for (const field of Object.keys(board)) {
384
482
  if (!BOARD_KEYS.includes(field))
385
483
  problem(`unknown field "${field}"`);
386
484
  }
387
- const { chip, name, description, sdkconfig, partitions, nativeModules, project, images } = board;
485
+ const { chip, sdkconfig, partitions, nativeModules, project, images } = board;
388
486
  if (typeof chip !== 'string' || !chips.includes(chip)) {
389
487
  problem(`"chip" must be one of ${chips.join(', ')}`);
390
488
  continue;
391
489
  }
392
- if (name !== undefined && typeof name !== 'string')
393
- problem('"name" must be a string');
394
- if (description !== undefined && typeof description !== 'string') {
395
- problem('"description" must be a string');
396
- }
397
490
  if (sdkconfig !== undefined && typeof sdkconfig !== 'string' && !isStringArray(sdkconfig)) {
398
491
  problem('"sdkconfig" must be a path or a list of paths');
399
492
  }
@@ -450,19 +543,11 @@ export function checkBoardsConfig(packageDir, config) {
450
543
  if (!existsSync(resolve(packageDir, file)))
451
544
  problem(`${file} does not exist`);
452
545
  }
453
- const boardName = typeof name === 'string' ? name : specifier;
454
- if (!BOARD_NAME_RE.test(boardName) || boardName.length > MAX_BOARD_NAME_LENGTH) {
455
- problem(`"${boardName}" is not a board name (at most ${MAX_BOARD_NAME_LENGTH} characters, the ` +
456
- 'form of a package name with an optional /<board>)' +
457
- (typeof name === 'string' ? '' : '; set "name"'));
458
- }
459
- const target = `./${distPath}/${key === '.' ? '' : `${sub}/`}${FULL_IMAGE}/firmware.json`;
460
- const boardDir = key === '.' ? distDir : join(distDir, sub);
461
546
  boards.push({
462
547
  key,
463
548
  specifier,
464
549
  name: boardName,
465
- description: typeof description === 'string' ? description : pkg.description,
550
+ description: boardDescription,
466
551
  chip: chip,
467
552
  sdkconfig: (typeof sdkconfig === 'string'
468
553
  ? [sdkconfig]
@@ -478,7 +563,7 @@ export function checkBoardsConfig(packageDir, config) {
478
563
  });
479
564
  }
480
565
  const byName = new Map();
481
- for (const board of boards) {
566
+ for (const board of [...boards, ...generic]) {
482
567
  const other = byName.get(board.name);
483
568
  if (other) {
484
569
  problems.push({
@@ -491,7 +576,7 @@ export function checkBoardsConfig(packageDir, config) {
491
576
  // The exports must declare exactly the configured boards, where the config
492
577
  // puts their images.
493
578
  const targets = firmwareTargets(pkg.exports);
494
- const missing = boards.filter((board) => {
579
+ const missing = [...boards, ...generic].filter((board) => {
495
580
  const target = targets.get(board.key);
496
581
  return (typeof target !== 'string' ||
497
582
  resolve(packageDir, target) !== resolve(packageDir, board.target));
@@ -519,6 +604,6 @@ export function checkBoardsConfig(packageDir, config) {
519
604
  message: `add these to "exports" in package.json (next to any other conditions of the same export):\n${exportsSnippet(missing)}`,
520
605
  });
521
606
  }
522
- return { boards, problems };
607
+ return { boards, generic, problems };
523
608
  }
524
609
  //# sourceMappingURL=boards.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"boards.js","sourceRoot":"","sources":["../src/boards.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"boards.js","sourceRoot":"","sources":["../src/boards.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,7 +1,6 @@
1
1
  /** Chips the firmware supports (e.g. "esp32c6"): it has settings for each. */
2
- declare const CHIPS: readonly ["esp32", "esp32c3", "esp32c5", "esp32c6", "esp32s3"];
2
+ export declare const CHIPS: readonly ["esp32", "esp32c3", "esp32c5", "esp32c6", "esp32s3"];
3
3
  export type Chip = (typeof CHIPS)[number];
4
4
  /** CHIPS as a plain list, to check a string against. */
5
5
  export declare const chips: readonly string[];
6
- export {};
7
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,QAAA,MAAM,KAAK,gEAAiE,CAAA;AAC5E,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzC,wDAAwD;AACxD,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,eAAO,MAAM,KAAK,gEAAiE,CAAA;AACnF,MAAM,MAAM,IAAI,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,MAAM,CAAC,CAAA;AAEzC,wDAAwD;AACxD,eAAO,MAAM,KAAK,EAAE,SAAS,MAAM,EAAe,CAAA"}
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** Chips the firmware supports (e.g. "esp32c6"): it has settings for each. */
2
- const CHIPS = ['esp32', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32s3'];
2
+ export const CHIPS = ['esp32', 'esp32c3', 'esp32c5', 'esp32c6', 'esp32s3'];
3
3
  /** CHIPS as a plain list, to check a string against. */
4
- export const chips = CHIPS;
4
+ export const chips = [...CHIPS];
5
5
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAG5E,wDAAwD;AACxD,MAAM,CAAC,MAAM,KAAK,GAAsB,KAAK,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,MAAM,CAAC,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,CAAU,CAAA;AAGnF,wDAAwD;AACxD,MAAM,CAAC,MAAM,KAAK,GAAsB,CAAC,GAAG,KAAK,CAAC,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikrojs/firmware",
3
- "version": "0.21.1-next.20260928214050",
3
+ "version": "0.22.0",
4
4
  "description": "Mikro.js ESP32 firmware: ESP-IDF component, build tools, and project template",
5
5
  "keywords": [
6
6
  "esp-idf",
@@ -56,9 +56,9 @@
56
56
  "./package.json": "./package.json"
57
57
  },
58
58
  "dependencies": {
59
- "@mikrojs/native": "0.21.1-next.20260928214050+4d8353a",
60
- "@mikrojs/quickjs": "0.21.1-next.20260928214050+4d8353a",
61
- "@mikrojs/schema": "0.21.1-next.20260928214050+4d8353a",
59
+ "@mikrojs/native": "0.22.0",
60
+ "@mikrojs/quickjs": "0.22.0",
61
+ "@mikrojs/schema": "0.22.0",
62
62
  "@optique/core": "^1.2.5",
63
63
  "@optique/run": "^1.2.5",
64
64
  "esbuild": "^0.28.2"