$ bun test.js
bun_1.3.9 addon-rust time 11618 rate 4303448 rate/core 4260839 ns/iter 232.37 rss 87433216 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-rust time 11579 rate 4318019 rate/core 4318019 ns/iter 231.58 rss 87961600 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11668 rate 4285064 rate/core 4285064 ns/iter 233.36 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11549 rate 4329047 rate/core 4286185 ns/iter 230.99 rss 88092672 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-rust time 11559 rate 4325584 rate/core 4325584 ns/iter 231.18 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11513 rate 4342626 rate/core 4342626 ns/iter 230.27 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11550 rate 4328696 rate/core 4328696 ns/iter 231.01 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11647 rate 4292846 rate/core 4292846 ns/iter 232.94 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11574 rate 4319733 rate/core 4319733 ns/iter 231.49 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-rust time 11572 rate 4320590 rate/core 4320590 ns/iter 231.44 rss 88092672 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon time 10775 rate 4640188 rate/core 4640188 ns/iter 215.50 rss 88453120 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon time 10780 rate 4637793 rate/core 4591874 ns/iter 215.61 rss 91271168 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon time 10791 rate 4633126 rate/core 4633126 ns/iter 215.83 rss 88915968 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon time 10851 rate 4607471 rate/core 4607471 ns/iter 217.03 rss 88915968 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon time 10761 rate 4646329 rate/core 4600326 ns/iter 215.22 rss 88915968 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon time 10735 rate 4657269 rate/core 4611157 ns/iter 214.71 rss 89047040 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon time 10750 rate 4651089 rate/core 4605038 ns/iter 215.00 rss 89178112 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon time 10738 rate 4656276 rate/core 4610174 ns/iter 214.76 rss 89178112 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon time 10824 rate 4619188 rate/core 4619188 ns/iter 216.48 rss 89309184 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon time 10739 rate 4655686 rate/core 4655686 ns/iter 214.79 rss 89571328 usr 100.00 sys 0.00 tot 100.00
bun_1.3.9 addon-cpp time 17778 rate 2812442 rate/core 2757296 ns/iter 355.56 rss 90570752 usr 101.00 sys 1.00 tot 102.00
bun_1.3.9 addon-cpp time 17764 rate 2814623 rate/core 2786756 ns/iter 355.28 rss 91947008 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-cpp time 17752 rate 2816555 rate/core 2761329 ns/iter 355.04 rss 92602368 usr 100.00 sys 2.00 tot 102.00
bun_1.3.9 addon-cpp time 17962 rate 2783636 rate/core 2756075 ns/iter 359.24 rss 93650944 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-cpp time 17997 rate 2778235 rate/core 2723760 ns/iter 359.94 rss 94568448 usr 100.00 sys 2.00 tot 102.00
bun_1.3.9 addon-cpp time 17785 rate 2811239 rate/core 2783405 ns/iter 355.71 rss 95223808 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-cpp time 17871 rate 2797821 rate/core 2770120 ns/iter 357.42 rss 96272384 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-cpp time 17905 rate 2792470 rate/core 2764822 ns/iter 358.10 rss 97058816 usr 100.00 sys 1.00 tot 101.00
bun_1.3.9 addon-cpp time 17910 rate 2791612 rate/core 2736875 ns/iter 358.21 rss 98107392 usr 100.00 sys 2.00 tot 102.00
bun_1.3.9 addon-cpp time 17827 rate 2804715 rate/core 2776945 ns/iter 356.54 rss 99155968 usr 100.00 sys 1.00 tot 101.00
$ node test.js
node_v24.13.1 addon-rust time 8065 rate 6198933 rate/core 6198933 ns/iter 161.31 rss 55676928 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 7968 rate 6274384 rate/core 6274384 ns/iter 159.37 rss 55939072 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 8006 rate 6245176 rate/core 6245176 ns/iter 160.12 rss 55939072 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 7959 rate 6281979 rate/core 6281979 ns/iter 159.18 rss 56070144 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 8088 rate 6181432 rate/core 6181432 ns/iter 161.77 rss 56070144 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 8008 rate 6243519 rate/core 6243519 ns/iter 160.16 rss 56070144 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 8009 rate 6242943 rate/core 6306003 ns/iter 160.18 rss 56070144 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon-rust time 7978 rate 6266503 rate/core 6266503 ns/iter 159.57 rss 56070144 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 7985 rate 6261349 rate/core 6261349 ns/iter 159.71 rss 56070144 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-rust time 8021 rate 6233589 rate/core 6296555 ns/iter 160.42 rss 56201216 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon time 6811 rate 7340150 rate/core 7414292 ns/iter 136.23 rss 56463360 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon time 6812 rate 7339792 rate/core 7339792 ns/iter 136.24 rss 57380864 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon time 6782 rate 7372088 rate/core 7446553 ns/iter 135.64 rss 57380864 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon time 6737 rate 7421686 rate/core 7421686 ns/iter 134.74 rss 57380864 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon time 6743 rate 7414845 rate/core 7489743 ns/iter 134.86 rss 57380864 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon time 6687 rate 7476263 rate/core 7476263 ns/iter 133.75 rss 57380864 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon time 6706 rate 7455126 rate/core 7530430 ns/iter 134.13 rss 57380864 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon time 6721 rate 7438798 rate/core 7438798 ns/iter 134.43 rss 57511936 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon time 6753 rate 7403829 rate/core 7478615 ns/iter 135.06 rss 57511936 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon time 6732 rate 7426589 rate/core 7501605 ns/iter 134.65 rss 57511936 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon-cpp time 12127 rate 4123029 rate/core 4123029 ns/iter 242.54 rss 57774080 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-cpp time 12185 rate 4103112 rate/core 4103112 ns/iter 243.71 rss 57794560 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-cpp time 12147 rate 4116150 rate/core 4116150 ns/iter 242.94 rss 58449920 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-cpp time 12100 rate 4132157 rate/core 4132157 ns/iter 242.00 rss 58449920 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-cpp time 12156 rate 4113096 rate/core 4154642 ns/iter 243.12 rss 58449920 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon-cpp time 12200 rate 4098080 rate/core 4139475 ns/iter 244.01 rss 58449920 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon-cpp time 12111 rate 4128417 rate/core 4170118 ns/iter 242.22 rss 58449920 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon-cpp time 12101 rate 4131719 rate/core 4173453 ns/iter 242.03 rss 58449920 usr 99.00 sys 0.00 tot 99.00
node_v24.13.1 addon-cpp time 12135 rate 4120209 rate/core 4120209 ns/iter 242.70 rss 58449920 usr 100.00 sys 0.00 tot 100.00
node_v24.13.1 addon-cpp time 12187 rate 4102520 rate/core 4102520 ns/iter 243.75 rss 58449920 usr 100.00 sys 0.00 tot 100.00
$ deno -A test.js
deno_2.6.9 addon-rust time 8892 rate 5622922 rate/core 5622922 ns/iter 177.84 rss 68677632 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-rust time 8879 rate 5630872 rate/core 5630872 ns/iter 177.59 rss 69201920 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-rust time 8939 rate 5592890 rate/core 5592890 ns/iter 178.79 rss 69332992 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-rust time 8917 rate 5607046 rate/core 5663683 ns/iter 178.34 rss 69332992 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-rust time 8805 rate 5678317 rate/core 5678317 ns/iter 176.10 rss 69332992 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-rust time 8871 rate 5635793 rate/core 5692720 ns/iter 177.43 rss 69332992 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-rust time 8757 rate 5709120 rate/core 5766788 ns/iter 175.15 rss 69332992 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-rust time 8823 rate 5666926 rate/core 5666926 ns/iter 176.46 rss 69332992 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-rust time 8801 rate 5680933 rate/core 5738316 ns/iter 176.02 rss 69332992 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-rust time 8793 rate 5686177 rate/core 5743613 ns/iter 175.86 rss 69332992 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon time 7424 rate 6734207 rate/core 6734207 ns/iter 148.49 rss 69332992 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon time 7424 rate 6734708 rate/core 6734708 ns/iter 148.48 rss 69857280 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon time 7425 rate 6733662 rate/core 6801679 ns/iter 148.50 rss 69988352 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon time 7547 rate 6624365 rate/core 6624365 ns/iter 150.95 rss 69988352 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon time 7716 rate 6479502 rate/core 6544951 ns/iter 154.33 rss 69988352 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon time 7596 rate 6582052 rate/core 6582052 ns/iter 151.92 rss 69988352 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon time 7519 rate 6649141 rate/core 6716304 ns/iter 150.39 rss 69988352 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon time 7590 rate 6587327 rate/core 6653866 ns/iter 151.80 rss 69988352 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon time 7609 rate 6570385 rate/core 6570385 ns/iter 152.19 rss 69988352 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon time 7449 rate 6712289 rate/core 6712289 ns/iter 148.98 rss 69988352 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-cpp time 9939 rate 5030536 rate/core 5030536 ns/iter 198.78 rss 70250496 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-cpp time 9992 rate 5003667 rate/core 5054209 ns/iter 199.85 rss 70512640 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-cpp time 10133 rate 4934124 rate/core 4983963 ns/iter 202.67 rss 70512640 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-cpp time 10054 rate 4972819 rate/core 4972819 ns/iter 201.09 rss 70512640 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-cpp time 10015 rate 4992456 rate/core 5042884 ns/iter 200.30 rss 70512640 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-cpp time 10029 rate 4985096 rate/core 4985096 ns/iter 200.59 rss 70512640 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-cpp time 10129 rate 4936076 rate/core 4936076 ns/iter 202.59 rss 70512640 usr 100.00 sys 0.00 tot 100.00
deno_2.6.9 addon-cpp time 9982 rate 5008624 rate/core 5059216 ns/iter 199.65 rss 70512640 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-cpp time 10092 rate 4954336 rate/core 5004380 ns/iter 201.84 rss 70512640 usr 99.00 sys 0.00 tot 99.00
deno_2.6.9 addon-cpp time 10295 rate 4856510 rate/core 4905566 ns/iter 205.90 rss 70512640 usr 99.00 sys 0.00 tot 99.00
$ node --require ./hooks.js ccb.js
lo_0.0.22-pre c-test time 3621 rate 13806763 rate/core 13768728 ns/iter 72.42 rss 53059584 usr 100.28 sys 0.00 tot 100.28
lo_0.0.22-pre c-test time 3536 rate 14138386 rate/core 14138386 ns/iter 70.72 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3408 rate 14669759 rate/core 14669759 ns/iter 68.16 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3413 rate 14647251 rate/core 14647251 ns/iter 68.27 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3447 rate 14501460 rate/core 14501460 ns/iter 68.95 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3413 rate 14648590 rate/core 14648590 ns/iter 68.26 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3404 rate 14687285 rate/core 14687285 ns/iter 68.08 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3459 rate 14451781 rate/core 14451781 ns/iter 69.19 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3419 rate 14620681 rate/core 14620681 ns/iter 68.39 rss 55681024 usr 100.00 sys 0.00 tot 100.00
lo_0.0.22-pre c-test time 3422 rate 14608517 rate/core 14608517 ns/iter 68.45 rss 55681024 usr 100.00 sys 0.00 tot 100.00
$ lo ccb.js
lo_0.0.23-pre c-test time 3476 rate 14381977 rate/core 14381977 ns/iter 69.53 rss 32112640 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3445 rate 14511011 rate/core 14511011 ns/iter 68.91 rss 32223232 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3394 rate 14729230 rate/core 14729230 ns/iter 67.89 rss 32485376 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3554 rate 14068411 rate/core 14068411 ns/iter 71.08 rss 32485376 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3399 rate 14709704 rate/core 14709704 ns/iter 67.98 rss 32485376 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3412 rate 14653228 rate/core 14696199 ns/iter 68.24 rss 32485376 usr 99.71 sys 0.00 tot 99.71
lo_0.0.23-pre c-test time 3398 rate 14713147 rate/core 14669873 ns/iter 67.96 rss 32485376 usr 100.29 sys 0.00 tot 100.29
lo_0.0.23-pre c-test time 3400 rate 14705630 rate/core 14705630 ns/iter 68.00 rss 32485376 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3403 rate 14690701 rate/core 14690701 ns/iter 68.07 rss 32485376 usr 100.00 sys 0.00 tot 100.00
lo_0.0.23-pre c-test time 3437 rate 14544912 rate/core 14587317 ns/iter 68.75 rss 32485376 usr 99.71 sys 0.00 tot 99.71
Last active
March 3, 2026 21:43
-
-
Save billywhizz/710b5d876577efa1155753802583d0a2 to your computer and use it in GitHub Desktop.
node lo module loader hooks example
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| import { createRequire } from "node:module"; | |
| const require = createRequire(import.meta.url); | |
| const { registerHooks } = require('node:module'); | |
| function resolve(specifier, context, nextResolve) { | |
| if (typeof specifier === 'string' && specifier.startsWith('lib/')) { | |
| const url = `lo:${specifier}`; | |
| return { | |
| shortCircuit: true, | |
| url, | |
| }; | |
| } | |
| return nextResolve(specifier, context); | |
| } | |
| function load(url, context, nextLoad) { | |
| if (url.startsWith('lo:')) { | |
| const name = url.split('lo:')[1]; | |
| return { | |
| format: "module", | |
| source: lo.builtin(name), | |
| shortCircuit: true, | |
| }; | |
| } | |
| return nextLoad(url, context); | |
| } | |
| /** | |
| * @param {Error} err | |
| */ | |
| function fix_stack (err) { | |
| err.stack = err.stack.split('\n') | |
| .filter(line => !line.match(/\s+at assert \(main\.js.+/)) | |
| .join('\n') | |
| } | |
| /** | |
| * @param {string} condition | |
| * @param {function} message | |
| */ | |
| function assert (condition, message, ErrorType = Error) { | |
| if (!condition) { | |
| if (message && message.constructor.name === 'Function') { | |
| const err = new ErrorType(message(condition)) | |
| fix_stack(err) | |
| throw(err) | |
| } | |
| const err = new ErrorType(message || "Assertion failed") | |
| fix_stack(err) | |
| throw(err) | |
| } | |
| return condition | |
| } | |
| function addr (u32) { | |
| return u32[0] + ((2 ** 32) * u32[1]) | |
| } | |
| function get_address (buf) { | |
| getAddress(buf, handle) | |
| return addr(handle) | |
| } | |
| function ptr (u8) { | |
| if (u8.ptr) return u8 | |
| u8.ptr = get_address(u8) | |
| return u8 | |
| } | |
| const { lo } = require('./build/Release/addon.node') | |
| const { getAddress } = lo | |
| const handle = new Uint32Array(2) | |
| handle.ptr = get_address(handle) | |
| const { hrtime } = lo | |
| lo.hrtime = function () { | |
| hrtime(handle.ptr) | |
| return handle[0] + ((2 ** 32) * handle[1]) | |
| } | |
| lo.args = process.argv | |
| globalThis.lo = lo | |
| lo.core = lo.library('core').core | |
| lo.core.arch = lo.arch() | |
| lo.core.os = lo.os() | |
| lo.ptr = ptr | |
| lo.assert = assert | |
| lo.get_address = get_address | |
| lo.register_callback = lo.registerCallback | |
| lo.require = require | |
| registerHooks({ resolve, load }); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment