@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.
- package/CMakeLists.txt +62 -1
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -1
- package/dist/runtime/result/native-result.node-shim.d.ts +3 -0
- package/dist/runtime/result/native-result.node-shim.d.ts.map +1 -0
- package/dist/runtime/result/native-result.node-shim.js +41 -0
- package/dist/runtime/result/native-result.node-shim.js.map +1 -0
- package/dist/runtime/result/types.d.ts +55 -0
- package/dist/runtime/result/types.d.ts.map +1 -0
- package/dist/runtime/result/types.js +2 -0
- package/dist/runtime/result/types.js.map +1 -0
- package/dist/runtime/schema/core.d.ts +115 -0
- package/dist/runtime/schema/core.d.ts.map +1 -0
- package/dist/runtime/schema/core.js +259 -0
- package/dist/runtime/schema/core.js.map +1 -0
- package/dist/runtime/schema/shared.d.ts +54 -0
- package/dist/runtime/schema/shared.d.ts.map +1 -0
- package/dist/runtime/schema/shared.js +489 -0
- package/dist/runtime/schema/shared.js.map +1 -0
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/include/mikrojs/cbor_helpers.h +20 -0
- package/include/mikrojs/mem.h +11 -0
- package/include/mikrojs/mikrojs.h +2 -1
- package/include/mikrojs/ota_client.h +342 -0
- package/include/mikrojs/ota_config.h +100 -0
- package/include/mikrojs/ota_env.h +192 -0
- package/include/mikrojs/ota_js_hooks.h +71 -0
- package/include/mikrojs/ota_policy.h +131 -0
- package/include/mikrojs/ota_slots.h +47 -0
- package/include/mikrojs/sys_codec.h +61 -0
- package/package.json +7 -5
- package/prebuilds/darwin-arm64/mikrojs.napi.node +0 -0
- package/prebuilds/linux-arm64/mikrojs.napi.node +0 -0
- package/prebuilds/linux-x64/mikrojs.napi.node +0 -0
- package/runtime/internal.d.ts +22 -16
- package/runtime/kv/shared.ts +11 -5
- package/runtime/kv/types.ts +4 -4
- package/runtime/ota/client.ts +12 -51
- package/runtime/ota/config.ts +18 -0
- package/runtime/ota/ota.ts +28 -70
- package/runtime/ota/types.ts +220 -2
- package/runtime/schema/core.ts +539 -0
- package/runtime/schema/schema.ts +36 -314
- package/runtime/schema/shared.ts +494 -0
- package/runtime/schema/types.ts +84 -12
- package/scripts/bundle-runtime.js +33 -0
- package/scripts/gen-checkin-fixtures.js +323 -0
- package/src/builtins.cpp +7 -8
- package/src/fs.cpp +3 -0
- package/src/mem.cpp +38 -0
- package/src/mik_abort.cpp +8 -1
- package/src/mik_cbor.cpp +43 -5
- package/src/mik_inspect.cpp +128 -22
- package/src/mik_ota_client.cpp +1230 -0
- package/src/mik_ota_config.cpp +296 -0
- package/src/mik_ota_js_hooks.cpp +190 -0
- package/src/mik_ota_policy.cpp +419 -0
- package/src/mik_ota_slots.cpp +249 -0
- package/src/mik_repl.cpp +9 -3
- package/src/mik_result.cpp +3 -1
- package/src/mik_sys_codec.cpp +167 -0
- package/src/mikrojs.cpp +15 -0
- package/src/modules.cpp +32 -13
- package/runtime/ota/client-impl.ts +0 -590
- 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
|
package/dist/types.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
+
}
|
package/include/mikrojs/mem.h
CHANGED
|
@@ -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
|
|
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);
|