@mikrojs/native 0.0.7 → 0.0.8

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/dist/index.d.ts CHANGED
@@ -7,6 +7,11 @@ export declare class MikroRuntime {
7
7
  evalModuleContent(filename: string, content: string): void;
8
8
  /** Evaluate a script (not module) and return the stringified result. Returns undefined if the result is undefined/null. */
9
9
  evalScript(code: string): string | undefined;
10
+ /** Evaluate a script as the REPL would: inspect the result (so objects
11
+ * render as `{...}` instead of `[object Object]`) and stash the value
12
+ * as `globalThis._` for follow-up expressions. Mirrors the firmware
13
+ * REPL's eval path. Returns undefined for `undefined` results. */
14
+ evalForRepl(code: string, depth?: number): string | undefined;
10
15
  loop(): Promise<void>;
11
16
  /** Run one iteration of the event loop synchronously. Returns 0 on success. */
12
17
  loopOnce(): number;
@@ -41,6 +46,21 @@ export declare class MikroRuntime {
41
46
  * This is the cost of the runtime + context + built-in prototypes, before
42
47
  * any user modules are loaded. */
43
48
  getProfileBaseline(): number;
49
+ /** Snapshot the QuickJS heap. Mirrors the firmware's `/mem` directive
50
+ * which calls JS_ComputeMemoryUsage directly. `heapTotal` is
51
+ * `malloc_limit` (or 0 if no limit is set). */
52
+ memoryUsage(): {
53
+ heapUsed: number;
54
+ heapTotal: number;
55
+ };
56
+ /** Trigger QuickJS garbage collection. Mirrors the firmware's `/gc`
57
+ * directive (JS_RunGC on the underlying JSRuntime). */
58
+ gc(): void;
59
+ /** Install the test-helper globals (`__testEmit`, `__testFileDone`) on
60
+ * this runtime. Opt-in so ordinary dev/REPL runs don't carry them.
61
+ * Mirrors `MIK_EnableTestHelpers` — call it per test-file the same way
62
+ * the firmware supervisor does. */
63
+ enableTestHelpers(): void;
44
64
  }
45
65
  /** Serialize a JSON string to QuickJS binary JSON (bjson) format. */
46
66
  export declare function jsonToBjson(json: string): Buffer;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../addon/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EAGnB,YAAY,EACb,MAAM,YAAY,CAAA;AAuBnB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,OAAO,CAAC,EAAE,mBAAmB;IAIzC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,IAAI;IAIjD,kFAAkF;IAClF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1D,2HAA2H;IAC3H,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5C,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,+EAA+E;IAC/E,QAAQ,IAAI,MAAM;IAIlB,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,IAAI;IAIf;;oEAEgE;IAChE,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxD;mEAC+D;IAC/D,aAAa,IAAI,WAAW,EAAE;IAI9B;kFAC8E;IAC9E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7C;;+DAE2D;IAC3D,eAAe,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI;IAInF;;uFAEmF;IACnF,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI5F;;sFAEkF;IAClF,eAAe,IAAI,IAAI;IAIvB;yDACqD;IACrD,UAAU,IAAI,YAAY,EAAE;IAI5B;;sCAEkC;IAClC,kBAAkB,IAAI,MAAM;CAG7B;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAEhG;AAED,wGAAwG;AACxG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,MAAM,CA4BR;AAED,YAAY,EAAC,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAC,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../addon/index.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,WAAW,EACX,mBAAmB,EAGnB,YAAY,EACb,MAAM,YAAY,CAAA;AAuBnB,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAoB;gBAEtB,OAAO,CAAC,EAAE,mBAAmB;IAIzC,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,UAAO,GAAG,IAAI;IAIjD,kFAAkF;IAClF,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAI1D,2HAA2H;IAC3H,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5C;;;uEAGmE;IACnE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,MAAM,GAAG,SAAS;IAIxD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAIrB,+EAA+E;IAC/E,QAAQ,IAAI,MAAM;IAIlB,IAAI,IAAI,IAAI;IAIZ,OAAO,IAAI,IAAI;IAIf;;oEAEgE;IAChE,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAIxD;mEAC+D;IAC/D,aAAa,IAAI,WAAW,EAAE;IAI9B;kFAC8E;IAC9E,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAI7C;;+DAE2D;IAC3D,eAAe,CAAC,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,KAAK,MAAM,GAAG,SAAS,GAAG,IAAI;IAInF;;uFAEmF;IACnF,aAAa,CAAC,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,IAAI;IAI5F;;sFAEkF;IAClF,eAAe,IAAI,IAAI;IAIvB;yDACqD;IACrD,UAAU,IAAI,YAAY,EAAE;IAI5B;;sCAEkC;IAClC,kBAAkB,IAAI,MAAM;IAI5B;;oDAEgD;IAChD,WAAW,IAAI;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAC;IAIpD;4DACwD;IACxD,EAAE,IAAI,IAAI;IAIV;;;wCAGoC;IACpC,iBAAiB,IAAI,IAAI;CAG1B;AAED,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEhD;AAED,6GAA6G;AAC7G,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAEhG;AAED,wGAAwG;AACxG,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,UAAU,EAAE,MAAM,EAClB,SAAS,CAAC,EAAE,MAAM,EAAE,GACnB,MAAM,CA4BR;AAED,YAAY,EAAC,WAAW,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,YAAY,EAAC,MAAM,YAAY,CAAA"}
package/dist/index.js CHANGED
@@ -36,6 +36,13 @@ export class MikroRuntime {
36
36
  evalScript(code) {
37
37
  return this.native.evalScript(code);
38
38
  }
39
+ /** Evaluate a script as the REPL would: inspect the result (so objects
40
+ * render as `{...}` instead of `[object Object]`) and stash the value
41
+ * as `globalThis._` for follow-up expressions. Mirrors the firmware
42
+ * REPL's eval path. Returns undefined for `undefined` results. */
43
+ evalForRepl(code, depth = 2) {
44
+ return this.native.evalForRepl(code, depth);
45
+ }
39
46
  loop() {
40
47
  return this.native.loop();
41
48
  }
@@ -94,6 +101,24 @@ export class MikroRuntime {
94
101
  getProfileBaseline() {
95
102
  return this.native.getProfileBaseline();
96
103
  }
104
+ /** Snapshot the QuickJS heap. Mirrors the firmware's `/mem` directive
105
+ * which calls JS_ComputeMemoryUsage directly. `heapTotal` is
106
+ * `malloc_limit` (or 0 if no limit is set). */
107
+ memoryUsage() {
108
+ return this.native.memoryUsage();
109
+ }
110
+ /** Trigger QuickJS garbage collection. Mirrors the firmware's `/gc`
111
+ * directive (JS_RunGC on the underlying JSRuntime). */
112
+ gc() {
113
+ this.native.gc();
114
+ }
115
+ /** Install the test-helper globals (`__testEmit`, `__testFileDone`) on
116
+ * this runtime. Opt-in so ordinary dev/REPL runs don't carry them.
117
+ * Mirrors `MIK_EnableTestHelpers` — call it per test-file the same way
118
+ * the firmware supervisor does. */
119
+ enableTestHelpers() {
120
+ this.native.enableTestHelpers();
121
+ }
97
122
  }
98
123
  /** Serialize a JSON string to QuickJS binary JSON (bjson) format. */
99
124
  export function jsonToBjson(json) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../addon/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../addon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,aAAa,CAAA;AACzC,OAAO,EAAC,IAAI,EAAC,MAAM,WAAW,CAAA;AAU9B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAiC,CAAA;AAE9E,SAAS,YAAY;IACnB,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,OAAO,CAAmB,CAAA;IAChD,CAAC;IAAC,OAAO,WAAW,EAAE,CAAC;QACrB,0EAA0E;QAC1E,8CAA8C;QAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,CAAC,CAAA;QAC/E,IAAI,CAAC;YACH,OAAO,OAAO,CAAC,OAAO,CAAmB,CAAA;QAC3C,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,WAAW,CAAA;QACnB,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAA;AAE/B,MAAM,OAAO,YAAY;IACf,MAAM,CAAoB;IAElC,YAAY,OAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,IAAI,QAAQ,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;IAClD,CAAC;IAED,UAAU,CAAC,QAAgB,EAAE,MAAM,GAAG,IAAI;QACxC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAA;IAC1C,CAAC;IAED,kFAAkF;IAClF,iBAAiB,CAAC,QAAgB,EAAE,OAAe;QACjD,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAClD,CAAC;IAED,2HAA2H;IAC3H,UAAU,CAAC,IAAY;QACrB,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAA;IACrC,CAAC;IAED;;;uEAGmE;IACnE,WAAW,CAAC,IAAY,EAAE,KAAK,GAAG,CAAC;QACjC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;IAC7C,CAAC;IAED,IAAI;QACF,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IAC3B,CAAC;IAED,+EAA+E;IAC/E,QAAQ;QACN,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAA;IAC/B,CAAC;IAED,IAAI;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAA;IACpB,CAAC;IAED,OAAO;QACL,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAA;IACvB,CAAC;IAED;;oEAEgE;IAChE,oBAAoB,CAAC,IAAY,EAAE,MAAc;QAC/C,IAAI,CAAC,MAAM,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAChD,CAAC;IAED;mEAC+D;IAC/D,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,CAAA;IACpC,CAAC;IAED;kFAC8E;IAC9E,WAAW,CAAC,IAAY,EAAE,IAAY;QACpC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IAED;;+DAE2D;IAC3D,eAAe,CAAC,EAA4D;QAC1E,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,EAAE,CAAC,CAAA;IACjC,CAAC;IAED;;uFAEmF;IACnF,aAAa,CAAC,OAAuE;QACnF,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IACpC,CAAC;IAED;;sFAEkF;IAClF,eAAe;QACb,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAA;IAC/B,CAAC;IAED;yDACqD;IACrD,UAAU;QACR,OAAO,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAA;IACjC,CAAC;IAED;;sCAEkC;IAClC,kBAAkB;QAChB,OAAO,IAAI,CAAC,MAAM,CAAC,kBAAkB,EAAE,CAAA;IACzC,CAAC;IAED;;oDAEgD;IAChD,WAAW;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,CAAA;IAClC,CAAC;IAED;4DACwD;IACxD,EAAE;QACA,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAA;IAClB,CAAC;IAED;;;wCAGoC;IACpC,iBAAiB;QACf,IAAI,CAAC,MAAM,CAAC,iBAAiB,EAAE,CAAA;IACjC,CAAC;CACF;AAED,qEAAqE;AACrE,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,OAAO,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;AACnC,CAAC;AAED,6GAA6G;AAC7G,MAAM,UAAU,eAAe,CAAC,MAAc,EAAE,UAAkB,EAAE,SAAoB;IACtF,OAAO,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;AAChE,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,uBAAuB,CACrC,MAAc,EACd,UAAkB,EAClB,UAAkB,EAClB,SAAoB;IAEpB,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,CAAA;IAEnE,kEAAkE;IAClE,IAAI,GAAG,GAAG,EAAE,CAAA;IACZ,IAAI,GAAG,GAAG,CAAC,CAAA;IACX,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACpC,GAAG,IAAI,MAAM,GAAG,CAAC,CAAC,CAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,CAAA;QACrD,IAAI,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC;YAChB,GAAG,IAAI,IAAI,CAAA;YACX,GAAG,GAAG,CAAC,CAAA;QACT,CAAC;IACH,CAAC;IACD,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QACd,GAAG,IAAI,IAAI,CAAA;IACb,CAAC;IAED,OAAO,CACL,kEAAkE;QAClE,IAAI;QACJ,yBAAyB;QACzB,IAAI;QACJ,kBAAkB,UAAU,WAAW,GAAG,CAAC,MAAM,KAAK;QACtD,IAAI;QACJ,iBAAiB,UAAU,IAAI,GAAG,CAAC,MAAM,SAAS;QAClD,GAAG;QACH,MAAM,CACP,CAAA;AACH,CAAC"}
package/dist/types.d.ts CHANGED
@@ -34,6 +34,13 @@ export interface NativeMikroRuntime {
34
34
  enableProfiling(): void;
35
35
  getProfile(): ProfileEntry[];
36
36
  getProfileBaseline(): number;
37
+ memoryUsage(): {
38
+ heapUsed: number;
39
+ heapTotal: number;
40
+ };
41
+ gc(): void;
42
+ enableTestHelpers(): void;
43
+ evalForRepl(code: string, depth?: number): string | undefined;
37
44
  }
38
45
  export interface NativeBindings {
39
46
  MikroRuntime: new (options?: MikroRuntimeOptions) => NativeMikroRuntime;
@@ -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,oFAAoF;IACpF,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;CAC7B;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,oFAAoF;IACpF,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"}
@@ -115,6 +115,15 @@ void MIK_SetPreprocessor(MIKRuntime* mik_rt, MIKPreprocessFn fn, void* opaque);
115
115
  * the mikrojs/test built-in falls back to a console.log path when absent. */
116
116
  void MIK_EnableTestHelpers(MIKRuntime* mik_rt);
117
117
 
118
+ /* Optional handler called by __testEmit when the runtime is NOT in protocol
119
+ * mode (i.e. the firmware UART/USJ wire path is inactive). The handler
120
+ * receives the JSON event payload and is responsible for routing it to
121
+ * whatever channel the host expects. Used by the Node addon to forward
122
+ * MSG_TEST events to the host bridge so `mikro sim test` can deliver them
123
+ * over its own transport without going through the wire protocol. */
124
+ typedef void (*MIKTestEmitHandlerFn)(const char* json, size_t len, void* opaque);
125
+ void MIK_SetTestEmitHandler(MIKRuntime* mik_rt, MIKTestEmitHandlerFn fn, void* opaque);
126
+
118
127
  /* Memory profiling — records per-module QuickJS heap growth. Storage lives
119
128
  * outside the tracked runtime heap so instrumentation does not pollute the
120
129
  * numbers being measured. Enable before loading user code; read entries at
@@ -135,6 +135,14 @@ struct MIKRuntime {
135
135
  bool oom_flagged = false;
136
136
  MIKOOMHandlerFn oom_handler_fn = nullptr;
137
137
  void* oom_handler_opaque = nullptr;
138
+ /* Optional handler for __testEmit when not running in protocol mode.
139
+ * The firmware uses protocol mode + mik__repl_proto_send_output to
140
+ * deliver MSG_TEST frames; the Node addon registers a handler here
141
+ * that pushes the same payload onto the host bridge so vitest-style
142
+ * test runners (mikro sim test) can receive events without going
143
+ * through the wire protocol. NULL means __testEmit is a no-op. */
144
+ void (*test_emit_fn)(const char* json, size_t len, void* opaque) = nullptr;
145
+ void* test_emit_opaque = nullptr;
138
146
  };
139
147
 
140
148
  void mik__pub_fs_register(JSContext* ctx);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mikrojs/native",
3
- "version": "0.0.7",
3
+ "version": "0.0.8",
4
4
  "description": "Mikro.js C++ runtime library and Node.js native addon",
5
5
  "keywords": [
6
6
  "esp32",
@@ -75,11 +75,11 @@
75
75
  "cmake-js": "^8.0.0",
76
76
  "node-addon-api": "^8.7.0",
77
77
  "node-gyp-build": "^4.8.4",
78
- "@mikrojs/quickjs": "0.0.7"
78
+ "@mikrojs/quickjs": "0.0.8"
79
79
  },
80
80
  "devDependencies": {
81
81
  "@swc/core": "^1.15.30",
82
- "@types/node": "^25.6.0",
82
+ "@types/node": "^24.12.2",
83
83
  "esbuild": "^0.28.0",
84
84
  "terser": "^5.46.2"
85
85
  },
@@ -11,7 +11,7 @@
11
11
  */
12
12
 
13
13
  import {execSync} from 'node:child_process'
14
- import {existsSync, mkdirSync, readFileSync, rmSync, writeFileSync} from 'node:fs'
14
+ import {existsSync, mkdirSync, rmSync, writeFileSync} from 'node:fs'
15
15
  import {join} from 'node:path'
16
16
  import {fileURLToPath} from 'node:url'
17
17
 
@@ -376,6 +376,14 @@ static JSValue mik__test_emit(JSContext* ctx, JSValue /*this_val*/, int argc, JS
376
376
  if (!str) return JS_EXCEPTION;
377
377
  if (mik__repl_is_protocol_mode()) {
378
378
  mik__repl_proto_send_output(MIK_MSG_TEST, str, len);
379
+ } else {
380
+ /* Non-protocol mode (e.g. Node addon for the simulator): if the host
381
+ * registered a handler via MIK_SetTestEmitHandler, route the payload
382
+ * there. Without a handler, this is a no-op — same as before. */
383
+ MIKRuntime* mik_rt = MIK_GetRuntime(ctx);
384
+ if (mik_rt && mik_rt->test_emit_fn) {
385
+ mik_rt->test_emit_fn(str, len, mik_rt->test_emit_opaque);
386
+ }
379
387
  }
380
388
  JS_FreeCString(ctx, str);
381
389
  return JS_UNDEFINED;
@@ -309,8 +309,8 @@ static std::string inspect_number(JSContext* ctx, JSValue value, InspectOpts& op
309
309
  if (std::isnan(d)) return stylize("NaN", MIK_TOKEN_NUMBER, opts);
310
310
  if (d == INFINITY) return stylize("Infinity", MIK_TOKEN_NUMBER, opts);
311
311
  if (d == -INFINITY) return stylize("-Infinity", MIK_TOKEN_NUMBER, opts);
312
- if (d == 0.0) {
313
- return stylize(std::signbit(d) ? "-0" : "+0", MIK_TOKEN_NUMBER, opts);
312
+ if (d == 0.0 && std::signbit(d)) {
313
+ return stylize("-0", MIK_TOKEN_NUMBER, opts);
314
314
  }
315
315
 
316
316
  /* Use JS_ToCString which formats numbers correctly (integer or float) */
package/src/mikrojs.cpp CHANGED
@@ -438,6 +438,11 @@ void MIK_SetErrorHandler(MIKRuntime* mik_rt, MIKErrorHandlerFn fn, void* opaque)
438
438
  mik_rt->error_handler_opaque = opaque;
439
439
  }
440
440
 
441
+ void MIK_SetTestEmitHandler(MIKRuntime* mik_rt, MIKTestEmitHandlerFn fn, void* opaque) {
442
+ mik_rt->test_emit_fn = fn;
443
+ mik_rt->test_emit_opaque = opaque;
444
+ }
445
+
441
446
  void MIK_RegisterNativeModuleInit(MIKRuntime* mik_rt, const char* name,
442
447
  MIKNativeModuleInitFn init_fn) {
443
448
  mik_rt->native_modules.push_back({name, init_fn});