@mikrojs/native 0.18.0 → 0.18.1

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 (68) hide show
  1. package/CMakeLists.txt +62 -1
  2. package/dist/index.d.ts +17 -0
  3. package/dist/index.d.ts.map +1 -1
  4. package/dist/index.js +11 -0
  5. package/dist/index.js.map +1 -1
  6. package/dist/runtime/result/native-result.node-shim.d.ts +3 -0
  7. package/dist/runtime/result/native-result.node-shim.d.ts.map +1 -0
  8. package/dist/runtime/result/native-result.node-shim.js +41 -0
  9. package/dist/runtime/result/native-result.node-shim.js.map +1 -0
  10. package/dist/runtime/result/types.d.ts +55 -0
  11. package/dist/runtime/result/types.d.ts.map +1 -0
  12. package/dist/runtime/result/types.js +2 -0
  13. package/dist/runtime/result/types.js.map +1 -0
  14. package/dist/runtime/schema/core.d.ts +115 -0
  15. package/dist/runtime/schema/core.d.ts.map +1 -0
  16. package/dist/runtime/schema/core.js +259 -0
  17. package/dist/runtime/schema/core.js.map +1 -0
  18. package/dist/runtime/schema/shared.d.ts +54 -0
  19. package/dist/runtime/schema/shared.d.ts.map +1 -0
  20. package/dist/runtime/schema/shared.js +489 -0
  21. package/dist/runtime/schema/shared.js.map +1 -0
  22. package/dist/types.d.ts +7 -0
  23. package/dist/types.d.ts.map +1 -1
  24. package/include/mikrojs/cbor_helpers.h +20 -0
  25. package/include/mikrojs/mem.h +11 -0
  26. package/include/mikrojs/mikrojs.h +2 -1
  27. package/include/mikrojs/ota_client.h +342 -0
  28. package/include/mikrojs/ota_config.h +100 -0
  29. package/include/mikrojs/ota_env.h +192 -0
  30. package/include/mikrojs/ota_js_hooks.h +71 -0
  31. package/include/mikrojs/ota_policy.h +131 -0
  32. package/include/mikrojs/ota_slots.h +47 -0
  33. package/include/mikrojs/sys_codec.h +61 -0
  34. package/package.json +7 -5
  35. package/prebuilds/darwin-arm64/mikrojs.napi.node +0 -0
  36. package/prebuilds/linux-arm64/mikrojs.napi.node +0 -0
  37. package/prebuilds/linux-x64/mikrojs.napi.node +0 -0
  38. package/runtime/internal.d.ts +22 -16
  39. package/runtime/kv/shared.ts +11 -5
  40. package/runtime/kv/types.ts +4 -4
  41. package/runtime/ota/client.ts +12 -51
  42. package/runtime/ota/config.ts +18 -0
  43. package/runtime/ota/ota.ts +28 -70
  44. package/runtime/ota/types.ts +220 -2
  45. package/runtime/schema/core.ts +539 -0
  46. package/runtime/schema/schema.ts +36 -314
  47. package/runtime/schema/shared.ts +494 -0
  48. package/runtime/schema/types.ts +84 -12
  49. package/scripts/bundle-runtime.js +33 -0
  50. package/scripts/gen-checkin-fixtures.js +323 -0
  51. package/src/builtins.cpp +7 -8
  52. package/src/fs.cpp +3 -0
  53. package/src/mem.cpp +38 -0
  54. package/src/mik_abort.cpp +8 -1
  55. package/src/mik_cbor.cpp +43 -5
  56. package/src/mik_inspect.cpp +128 -22
  57. package/src/mik_ota_client.cpp +1230 -0
  58. package/src/mik_ota_config.cpp +296 -0
  59. package/src/mik_ota_js_hooks.cpp +190 -0
  60. package/src/mik_ota_policy.cpp +419 -0
  61. package/src/mik_ota_slots.cpp +249 -0
  62. package/src/mik_repl.cpp +9 -3
  63. package/src/mik_result.cpp +3 -1
  64. package/src/mik_sys_codec.cpp +167 -0
  65. package/src/mikrojs.cpp +15 -0
  66. package/src/modules.cpp +32 -13
  67. package/runtime/ota/client-impl.ts +0 -590
  68. package/runtime/ota/policy.ts +0 -299
@@ -0,0 +1,489 @@
1
+ /* Host-side helpers for config schemas, shared by the CLI and registries.
2
+ * Not part of the mikro/schema device bundle: the device never validates a
3
+ * schema AST (its manifest copy was written by the CLI) and never derives an
4
+ * overlay. Imports core.ts only, so hosts load it without resolving mikro/*
5
+ * builtins; results are plain {ok} shapes for the same reason. */
6
+ import { applyDefaults, SchemaError, validate } from './core.js';
7
+ const MAX_DEPTH = 8;
8
+ const KINDS = new Set([
9
+ 'string',
10
+ 'number',
11
+ 'boolean',
12
+ 'unknown',
13
+ 'literal',
14
+ 'array',
15
+ 'object',
16
+ 'optional',
17
+ 'tuple',
18
+ 'union',
19
+ 'taggedUnion',
20
+ ]);
21
+ function fail(message, path) {
22
+ return { ok: false, error: SchemaError.ValidationFailed(message, path) };
23
+ }
24
+ /* JSON.parse creates `__proto__` as an own key, and downstream walks assign
25
+ * overlay values through `out[key] = …` — with these keys that assignment
26
+ * writes the prototype, not a property. The AST is untrusted, so refuse them
27
+ * outright. */
28
+ const UNSAFE_KEYS = new Set(['__proto__', 'constructor', 'prototype']);
29
+ /**
30
+ * Validates an untrusted serialized schema AST as a config schema: well-formed
31
+ * nodes only, an object at the root, no `unknown()`, no `optional()` around an
32
+ * object or array (an overlay needs every absence to mean exactly one thing),
33
+ * defaults that match their own node, and nesting of at most 8 levels.
34
+ * The size cap is the caller's, since only the caller sees encoded bytes.
35
+ */
36
+ export function parseConfigSchema(value) {
37
+ if (!isPlainObject(value) || value.kind !== 'object') {
38
+ return fail('config schema root must be an object()', '');
39
+ }
40
+ const result = walk(value, '', 1);
41
+ if (result !== null)
42
+ return result;
43
+ return { ok: true, value: value };
44
+ }
45
+ function isPlainObject(value) {
46
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
47
+ }
48
+ /* A default below a wholesale unit never applies: applyDefaults replaces the
49
+ * unit whole, so only the unit's own whole-value default fills anything. The
50
+ * constructors reject it where it is written (core.ts, rejectInnerDefaults);
51
+ * a schema that arrived as JSON ran none of them, so the same rule is enforced
52
+ * here. The whole subtree is walked, not just the plain-object path, because
53
+ * nothing checked a nested unit's contents on the way in. Structure is already
54
+ * validated by `walk`, so a non-node here is left for it to report. */
55
+ function rejectInnerDefaults(value, path, unit, self) {
56
+ if (!isPlainObject(value))
57
+ return null;
58
+ if (value.default !== undefined) {
59
+ return fail(`a default under ${unit} never applies; give ${self} itself a whole-value default instead`, path);
60
+ }
61
+ const children = [];
62
+ for (const key of ['shape', 'branches']) {
63
+ const map = value[key];
64
+ if (isPlainObject(map)) {
65
+ for (const name of Object.keys(map))
66
+ children.push([map[name], `${path}.${name}`]);
67
+ }
68
+ }
69
+ for (const key of ['element', 'inner']) {
70
+ if (value[key] !== undefined)
71
+ children.push([value[key], path]);
72
+ }
73
+ for (const key of ['elements', 'members']) {
74
+ const items = value[key];
75
+ if (Array.isArray(items)) {
76
+ for (let i = 0; i < items.length; i++)
77
+ children.push([items[i], `${path}[${i}]`]);
78
+ }
79
+ }
80
+ for (const [child, childPath] of children) {
81
+ const result = rejectInnerDefaults(child, childPath, unit, self);
82
+ if (result !== null)
83
+ return result;
84
+ }
85
+ return null;
86
+ }
87
+ function walk(value, path, depth) {
88
+ if (depth > MAX_DEPTH)
89
+ return fail(`nesting deeper than ${MAX_DEPTH} levels`, path);
90
+ if (!isPlainObject(value))
91
+ return fail('expected a schema node', path);
92
+ const node = value;
93
+ const kind = node.kind;
94
+ if (typeof kind !== 'string' || !KINDS.has(kind)) {
95
+ return fail(`unknown schema kind ${JSON.stringify(kind)}`, path);
96
+ }
97
+ if (kind === 'unknown')
98
+ return fail('unknown() is not allowed in a config schema', path);
99
+ switch (kind) {
100
+ case 'literal': {
101
+ const t = typeof node.value;
102
+ if (t !== 'string' && t !== 'number' && t !== 'boolean') {
103
+ return fail('literal value must be a primitive', path);
104
+ }
105
+ break;
106
+ }
107
+ case 'array': {
108
+ const result = walk(node.element, `${path}.element`, depth + 1);
109
+ if (result !== null)
110
+ return result;
111
+ const inner = rejectInnerDefaults(node.element, `${path}.element`, 'an array', 'the array');
112
+ if (inner !== null)
113
+ return inner;
114
+ break;
115
+ }
116
+ case 'object': {
117
+ if (!isPlainObject(node.shape))
118
+ return fail('object shape must be a map', path);
119
+ if (node.default !== undefined)
120
+ return fail('object() cannot carry a default', path);
121
+ for (const key of Object.keys(node.shape)) {
122
+ if (UNSAFE_KEYS.has(key))
123
+ return fail(`unsafe field name ${JSON.stringify(key)}`, path);
124
+ const result = walk(node.shape[key], `${path}.${key}`, depth + 1);
125
+ if (result !== null)
126
+ return result;
127
+ }
128
+ break;
129
+ }
130
+ case 'optional': {
131
+ const inner = node.inner;
132
+ if (isPlainObject(inner) && (inner.kind === 'object' || inner.kind === 'array')) {
133
+ return fail(`optional() cannot wrap an ${inner.kind} in a config schema`, path);
134
+ }
135
+ if (node.default !== undefined) {
136
+ // The wrapper never carries one (the constructor forbids it); in an
137
+ // untrusted AST it would validate here and then be ignored by
138
+ // applyDefaults, a default that silently never applies.
139
+ return fail('optional() cannot carry a default', path);
140
+ }
141
+ if (isPlainObject(inner) && inner.default !== undefined) {
142
+ return fail('optional() cannot wrap a schema with a default', path);
143
+ }
144
+ const result = walk(inner, path, depth + 1);
145
+ if (result !== null)
146
+ return result;
147
+ break;
148
+ }
149
+ case 'tuple':
150
+ case 'union': {
151
+ const items = kind === 'tuple' ? node.elements : node.members;
152
+ if (!Array.isArray(items))
153
+ return fail(`${kind} items must be an array`, path);
154
+ if (kind === 'union' && items.length === 0) {
155
+ // Unsatisfiable: no value matches an empty union, so it would only
156
+ // fail later, at serve, one device at a time.
157
+ return fail('union needs at least one member', path);
158
+ }
159
+ for (let i = 0; i < items.length; i++) {
160
+ const result = walk(items[i], `${path}[${i}]`, depth + 1);
161
+ if (result !== null)
162
+ return result;
163
+ const unit = kind === 'tuple' ? 'a tuple' : 'a union';
164
+ const inner = rejectInnerDefaults(items[i], `${path}[${i}]`, unit, `the ${kind}`);
165
+ if (inner !== null)
166
+ return inner;
167
+ }
168
+ break;
169
+ }
170
+ case 'taggedUnion': {
171
+ if (typeof node.key !== 'string')
172
+ return fail('taggedUnion key must be a string', path);
173
+ if (!isPlainObject(node.branches))
174
+ return fail('taggedUnion branches must be a map', path);
175
+ if (Object.keys(node.branches).length === 0) {
176
+ // Unsatisfiable, like an empty union: it would only fail at serve.
177
+ return fail('taggedUnion needs at least one branch', path);
178
+ }
179
+ for (const tag of Object.keys(node.branches)) {
180
+ if (UNSAFE_KEYS.has(tag))
181
+ return fail(`unsafe branch tag ${JSON.stringify(tag)}`, path);
182
+ const branch = node.branches[tag];
183
+ if (!isPlainObject(branch) || branch.kind !== 'object') {
184
+ return fail('taggedUnion branch must be an object()', `${path}.${tag}`);
185
+ }
186
+ const result = walk(branch, `${path}.${tag}`, depth + 1);
187
+ if (result !== null)
188
+ return result;
189
+ const inner = rejectInnerDefaults(branch, `${path}.${tag}`, 'a taggedUnion', 'the union');
190
+ if (inner !== null)
191
+ return inner;
192
+ }
193
+ break;
194
+ }
195
+ }
196
+ if (node.default !== undefined) {
197
+ const check = validate(node, node.default, '');
198
+ if (check !== null) {
199
+ return fail(`default does not match the schema: ${check.error.message}`, path);
200
+ }
201
+ }
202
+ return null;
203
+ }
204
+ /**
205
+ * Derives the overlay to store or serve from operator-supplied values: drops
206
+ * keys the schema does not know, strips values structurally equal to the
207
+ * schema default, and prunes empty objects and arrays. Returns undefined when
208
+ * nothing deviates from the defaults. Wholesale nodes (arrays, tuples, unions)
209
+ * are compared and kept as units; nothing inside them is stripped.
210
+ */
211
+ export function deriveOverlay(schema, values) {
212
+ switch (schema.kind) {
213
+ case 'object': {
214
+ if (values === undefined)
215
+ return undefined;
216
+ // A defined value of the wrong kind is kept, not dropped: dropping it
217
+ // would derive a clean overlay from garbage, so a typo'd save would
218
+ // succeed while storing nothing and rule 5 would never gate on it.
219
+ // Kept, it fails the merge-validate that every caller runs next.
220
+ if (!isPlainObject(values))
221
+ return values;
222
+ const out = {};
223
+ for (const key of Object.keys(schema.shape)) {
224
+ const field = schema.shape[key];
225
+ const value = values[key];
226
+ if (value === undefined)
227
+ continue;
228
+ const derived = field.kind === 'optional'
229
+ ? deriveOverlay(field.inner, value)
230
+ : deriveOverlay(field, value);
231
+ if (derived !== undefined)
232
+ out[key] = derived;
233
+ }
234
+ return Object.keys(out).length > 0 ? out : undefined;
235
+ }
236
+ case 'array': {
237
+ if (values === undefined)
238
+ return undefined;
239
+ // Wrong kind kept for the same reason as objects above; only a real
240
+ // empty array prunes (emptiness is never a deliberate overlay state).
241
+ if (!Array.isArray(values))
242
+ return values;
243
+ if (values.length === 0)
244
+ return undefined;
245
+ if (schema.default !== undefined && structuralEquals(values, schema.default)) {
246
+ return undefined;
247
+ }
248
+ return stripDangerousKeys(values);
249
+ }
250
+ default: {
251
+ const fallback = schema.default;
252
+ if (fallback !== undefined && structuralEquals(values, fallback))
253
+ return undefined;
254
+ return stripDangerousKeys(values);
255
+ }
256
+ }
257
+ }
258
+ /** Wholesale units travel with their unknown keys intact, but the three
259
+ * prototype-writing names never survive into a stored or served value:
260
+ * downstream walks and consumers assign through `out[key]`. */
261
+ function stripDangerousKeys(value) {
262
+ if (Array.isArray(value))
263
+ return value.map(stripDangerousKeys);
264
+ if (isPlainObject(value)) {
265
+ const out = {};
266
+ for (const key of Object.keys(value)) {
267
+ if (UNSAFE_KEYS.has(key))
268
+ continue;
269
+ out[key] = stripDangerousKeys(value[key]);
270
+ }
271
+ return out;
272
+ }
273
+ return value;
274
+ }
275
+ export function structuralEquals(a, b) {
276
+ if (a === b)
277
+ return true;
278
+ if (Array.isArray(a) && Array.isArray(b)) {
279
+ if (a.length !== b.length)
280
+ return false;
281
+ for (let i = 0; i < a.length; i++) {
282
+ if (!structuralEquals(a[i], b[i]))
283
+ return false;
284
+ }
285
+ return true;
286
+ }
287
+ if (isPlainObject(a) && isPlainObject(b)) {
288
+ const keysA = Object.keys(a);
289
+ const keysB = Object.keys(b);
290
+ if (keysA.length !== keysB.length)
291
+ return false;
292
+ for (const key of keysA) {
293
+ if (!Object.hasOwn(b, key) || !structuralEquals(a[key], b[key]))
294
+ return false;
295
+ }
296
+ return true;
297
+ }
298
+ return false;
299
+ }
300
+ /**
301
+ * The effective config for an overlay: defaults filled in, then validated.
302
+ * What a registry runs before serving and what `ota.config()` runs on read.
303
+ */
304
+ export function parseEffective(schema, overlay) {
305
+ const effective = applyDefaults(schema, overlay);
306
+ const result = validate(schema, effective, '');
307
+ return result !== null ? result : { ok: true, value: effective };
308
+ }
309
+ /**
310
+ * The partial defaults a schema materializes with no overrides: every field a
311
+ * default covers, and nothing else. Unlike parseEffective it never fails on a
312
+ * required defaultless field, it omits it. This is what pack bakes into the
313
+ * manifest and what a device reads when it holds no served document.
314
+ *
315
+ * Plain objects compose, so a nested one is included only when defaults fill
316
+ * it completely: a half-filled object would not validate, and the read type
317
+ * makes that field optional anyway. Wholesale units (array, tuple, union,
318
+ * taggedUnion) need a whole-value default on the node itself, matching
319
+ * applyDefaults, where a default inside an element or branch is a form hint.
320
+ * Optional fields rest on absence, so they are omitted too.
321
+ */
322
+ export function materializeDefaults(schema) {
323
+ return schema.kind === 'object' ? fillObject(schema).value : {};
324
+ }
325
+ /** What defaults cover in an object shape. `complete` (every field covered or
326
+ * optional) is what makes a NESTED object safe to include. */
327
+ function fillObject(node) {
328
+ const out = {};
329
+ let complete = true;
330
+ for (const key of Object.keys(node.shape)) {
331
+ const field = node.shape[key];
332
+ if (field.kind === 'optional')
333
+ continue;
334
+ const filled = fillField(field);
335
+ if (filled === undefined)
336
+ complete = false;
337
+ else
338
+ out[key] = filled.value;
339
+ }
340
+ return { value: out, complete };
341
+ }
342
+ /** The value defaults give one field, or undefined when nothing covers it. */
343
+ function fillField(node) {
344
+ if (node.kind === 'object') {
345
+ const filled = fillObject(node);
346
+ return filled.complete ? { value: filled.value } : undefined;
347
+ }
348
+ const fallback = node.default;
349
+ return fallback === undefined ? undefined : { value: fallback };
350
+ }
351
+ /** A node with its annotations removed, recursively, so two schemas can be
352
+ * compared on structure alone. */
353
+ function stripAnnotations(node) {
354
+ if (!isPlainObject(node))
355
+ return node;
356
+ const { default: _default, ...rest } = node;
357
+ const out = {};
358
+ for (const key of Object.keys(rest)) {
359
+ const value = rest[key];
360
+ if (key === 'shape' || key === 'branches') {
361
+ const map = value;
362
+ const stripped = {};
363
+ for (const k of Object.keys(map))
364
+ stripped[k] = stripAnnotations(map[k]);
365
+ out[key] = stripped;
366
+ }
367
+ else if (key === 'element' || key === 'inner') {
368
+ out[key] = stripAnnotations(value);
369
+ }
370
+ else if (key === 'elements' || key === 'members') {
371
+ out[key] = value.map(stripAnnotations);
372
+ }
373
+ else {
374
+ out[key] = value;
375
+ }
376
+ }
377
+ return out;
378
+ }
379
+ /** required / defaulted / optional, per the spec's scalar-leaf classes.
380
+ * Containers have no class; objects report 'object' so the walk descends. */
381
+ function leafClass(node) {
382
+ if (node.kind === 'optional')
383
+ return 'optional';
384
+ if (node.kind === 'object')
385
+ return 'object';
386
+ if (node.kind === 'array')
387
+ return 'array';
388
+ return node.default !== undefined ? 'defaulted' : 'required';
389
+ }
390
+ /** Every required scalar leaf reachable in `node`, for reporting an added
391
+ * subtree that will gate offers until an operator supplies values. */
392
+ function requiredLeaves(node, path, out) {
393
+ if (node.kind === 'object') {
394
+ for (const key of Object.keys(node.shape)) {
395
+ requiredLeaves(node.shape[key], `${path}.${key}`, out);
396
+ }
397
+ return;
398
+ }
399
+ if (leafClass(node) === 'required')
400
+ out.push(path);
401
+ }
402
+ /**
403
+ * Human-readable warnings for what changed between two releases' config
404
+ * schemas, per the spec's change taxonomy (registry-spec.md, "Schema changes
405
+ * between releases"). Safe changes (new defaulted or optional fields, added
406
+ * union members, loosened requirements) produce nothing. "requires an
407
+ * operator" lines gate offers under rule 5 until someone supplies or fixes a
408
+ * value; "note" lines are compatible but worth telling the operator about.
409
+ */
410
+ export function diffConfigSchemas(previous, next) {
411
+ const warnings = [];
412
+ function walk(prev, curr, path) {
413
+ const prevInner = prev.kind === 'optional' ? prev.inner : prev;
414
+ const currInner = curr.kind === 'optional' ? curr.inner : curr;
415
+ if (prevInner.kind === 'object' && currInner.kind === 'object') {
416
+ const prevShape = prevInner.shape;
417
+ const currShape = currInner.shape;
418
+ for (const key of Object.keys(currShape)) {
419
+ const fieldPath = `${path}.${key}`;
420
+ if (Object.hasOwn(prevShape, key)) {
421
+ walk(prevShape[key], currShape[key], fieldPath);
422
+ }
423
+ else {
424
+ const added = [];
425
+ requiredLeaves(currShape[key], fieldPath, added);
426
+ for (const leaf of added) {
427
+ warnings.push(`requires an operator: new required field ${leaf} (devices are not offered ` +
428
+ `this release until a value is set)`);
429
+ }
430
+ }
431
+ }
432
+ for (const key of Object.keys(prevShape)) {
433
+ if (!Object.hasOwn(currShape, key)) {
434
+ warnings.push(`note: removed field ${path}.${key} (stored overrides for it stay, but are no ` +
435
+ `longer served)`);
436
+ }
437
+ }
438
+ return;
439
+ }
440
+ if (prevInner.kind === 'union' && currInner.kind === 'union') {
441
+ // Member sets, not wholesale structure: adding a member (the common
442
+ // safe widening) must not read as a type change. Only removals can
443
+ // invalidate a stored override.
444
+ const removed = prevInner.members.filter((prevMember) => !currInner.members.some((currMember) => structuralEquals(stripAnnotations(prevMember), stripAnnotations(currMember))));
445
+ if (removed.length > 0) {
446
+ warnings.push(`requires an operator: ${path} removed ${removed.length} union member(s) ` +
447
+ `(stored overrides using them no longer validate)`);
448
+ }
449
+ }
450
+ else if (prevInner.kind === 'taggedUnion' &&
451
+ currInner.kind === 'taggedUnion' &&
452
+ prevInner.key === currInner.key) {
453
+ // Same idea per branch: added branches are safe, removed or reshaped
454
+ // ones can strand a stored override.
455
+ for (const tag of Object.keys(prevInner.branches)) {
456
+ const prevBranch = prevInner.branches[tag];
457
+ const currBranch = currInner.branches[tag];
458
+ if (currBranch === undefined || !Object.hasOwn(currInner.branches, tag)) {
459
+ warnings.push(`requires an operator: ${path} removed branch ${JSON.stringify(tag)} ` +
460
+ `(stored overrides using it no longer validate)`);
461
+ }
462
+ else if (!structuralEquals(stripAnnotations(prevBranch), stripAnnotations(currBranch))) {
463
+ warnings.push(`requires an operator: ${path}.${tag} changed type ` +
464
+ `(stored overrides may no longer validate)`);
465
+ }
466
+ }
467
+ }
468
+ else if (!structuralEquals(stripAnnotations(prevInner), stripAnnotations(currInner))) {
469
+ warnings.push(`requires an operator: ${path} changed type (stored overrides may no longer validate)`);
470
+ return;
471
+ }
472
+ const prevClass = leafClass(prev);
473
+ const currClass = leafClass(curr);
474
+ if (currClass === 'required' && prevClass !== 'required') {
475
+ warnings.push(`requires an operator: ${path} is now required (devices without a value are not ` +
476
+ `offered this release)`);
477
+ }
478
+ const prevDefault = prevInner.default;
479
+ const currDefault = currInner.default;
480
+ // A removed default is the required-transition above, not also a default
481
+ // change.
482
+ if (currDefault !== undefined && !structuralEquals(prevDefault, currDefault)) {
483
+ warnings.push(`note: default of ${path} changed (takes effect on every device without an override)`);
484
+ }
485
+ }
486
+ walk(previous, next, '');
487
+ return warnings;
488
+ }
489
+ //# sourceMappingURL=shared.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../runtime/schema/shared.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -46,5 +46,12 @@ export interface NativeBindings {
46
46
  MikroRuntime: new (options?: MikroRuntimeOptions) => NativeMikroRuntime;
47
47
  jsonToBjson(json: string): Buffer;
48
48
  compileBytecode(source: string, moduleName: string, externals?: string[]): Buffer;
49
+ parseOffer(body: unknown, options?: {
50
+ allowInsecure?: boolean;
51
+ }): {
52
+ url: string;
53
+ checksum: string;
54
+ size: number;
55
+ } | undefined;
49
56
  }
50
57
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../addon/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACpD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,QAAQ,IAAI,MAAM,CAAA;IAClB,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;IACf,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACxD,aAAa,IAAI,WAAW,EAAE,CAAA;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,eAAe,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;IACnF,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC5F,eAAe,IAAI,IAAI,CAAA;IACvB,UAAU,IAAI,YAAY,EAAE,CAAA;IAC5B,kBAAkB,IAAI,MAAM,CAAA;IAC5B,WAAW,IAAI;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAA;IACpD,EAAE,IAAI,IAAI,CAAA;IACV,iBAAiB,IAAI,IAAI,CAAA;IACzB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,KAAK,OAAO,CAAC,EAAE,mBAAmB,KAAK,kBAAkB,CAAA;IACvE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;CAClF"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../addon/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC5B,0FAA0F;IAC1F,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,kBAAkB;IACjC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IACpD,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IAC1D,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAC5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACrB,QAAQ,IAAI,MAAM,CAAA;IAClB,IAAI,IAAI,IAAI,CAAA;IACZ,OAAO,IAAI,IAAI,CAAA;IACf,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACxD,aAAa,IAAI,WAAW,EAAE,CAAA;IAC9B,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7C,eAAe,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI,CAAA;IACnF,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI,CAAA;IAC5F,eAAe,IAAI,IAAI,CAAA;IACvB,UAAU,IAAI,YAAY,EAAE,CAAA;IAC5B,kBAAkB,IAAI,MAAM,CAAA;IAC5B,WAAW,IAAI;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC,CAAA;IACpD,EAAE,IAAI,IAAI,CAAA;IACV,iBAAiB,IAAI,IAAI,CAAA;IACzB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;CAC9D;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,KAAK,OAAO,CAAC,EAAE,mBAAmB,KAAK,kBAAkB,CAAA;IACvE,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAA;IACjC,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IACjF,UAAU,CACR,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE;QAAC,aAAa,CAAC,EAAE,OAAO,CAAA;KAAC,GAClC;QAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAC,GAAG,SAAS,CAAA;CAC7D"}
@@ -22,3 +22,23 @@ int mik__cbor_encode_value(JSContext* ctx, nanocbor_encoder_t* enc, JSValue val,
22
22
  * Returns JS_EXCEPTION on error.
23
23
  */
24
24
  JSValue mik__cbor_decode_value(JSContext* ctx, nanocbor_value_t* val, int depth);
25
+
26
+ /**
27
+ * Skip the value at the iterator, treating it as ONE item of the container the
28
+ * iterator is walking.
29
+ *
30
+ * nanocbor_skip() cannot be used directly for that: it walks a nested container
31
+ * on the same iterator and decrements `remaining` once per inner item, so
32
+ * skipping a container value underflows the outer container's count and every
33
+ * later key reads as "end of map". Lifting the count for the duration keeps the
34
+ * walk bounded by the buffer end, which is the bound that matters.
35
+ *
36
+ * Returns what nanocbor_skip() returned.
37
+ */
38
+ static inline int mik__cbor_skip_value(nanocbor_value_t* it) {
39
+ uint64_t remaining = it->remaining;
40
+ it->remaining = UINT64_MAX;
41
+ int res = nanocbor_skip(it);
42
+ it->remaining = remaining > 0 ? remaining - 1 : 0;
43
+ return res;
44
+ }
@@ -26,3 +26,14 @@ void* mik__js_realloc(void* ptr, size_t size);
26
26
  * the original pointer came from. */
27
27
  void mik__set_quickjs_heap_psram(bool enable);
28
28
  bool mik__is_quickjs_heap_psram(void);
29
+
30
+ #ifdef MIK_OOM_INJECT
31
+ #include <stdint.h>
32
+ /* Host-test fault injection (standalone builds only; ESP-IDF compiles
33
+ * without MIK_OOM_INJECT). After `n` more mik__js_* allocations succeed,
34
+ * every subsequent one fails until re-armed; n < 0 disables. */
35
+ void mik__oom_inject_fail_after(int64_t n);
36
+ /* Net live allocations across all mem.cpp allocators, for leak checks
37
+ * spanning an inject/recover cycle. */
38
+ int64_t mik__oom_inject_live_allocs(void);
39
+ #endif
@@ -141,7 +141,8 @@ void MIK_SetErrorHandler(MIKRuntime* mik_rt, MIKErrorHandlerFn fn, void* opaque)
141
141
  /* Module source preprocessor — called on source files before compilation.
142
142
  * The callback receives filename, source, and source_len. It should return
143
143
  * a malloc'd string and set *out_len, or return NULL to use the original source.
144
- * The caller frees the returned string with free(). */
144
+ * The returned buffer must be null-terminated (JS_Eval reads buf[len]) and
145
+ * *out_len excludes the terminator. The caller frees it with free(). */
145
146
  typedef char* (*MIKPreprocessFn)(const char* filename, const char* source, size_t source_len,
146
147
  size_t* out_len, void* opaque);
147
148
  void MIK_SetPreprocessor(MIKRuntime* mik_rt, MIKPreprocessFn fn, void* opaque);