Conversation
One binary serves Node, Bun and Deno, because N-API is the ABI all three implement. What made that a claim rather than a fact is that only Node ran anything, so the whole suite now runs on Bun 1.3 and Deno 2.9 as well, and both found something. Bun found a native error with no `stack` at all. V8 writes one when the error is made and JavaScriptCore writes none through N-API, so on Bun `err.stack` was `undefined` and every logger reaching for it printed that word instead of the failure. The header line is what the other runtimes have there, since an error made under a running statement has no JavaScript frames beneath it anyway, so this writes that line when it finds none. Defined rather than assigned, because the one V8 writes is not enumerable and a plain assignment would have put `stack` in `Object.keys(err)` on one runtime and not the other three, which is a difference every structured logger would print. Deno needed `--allow-read --allow-write --allow-env --allow-ffi`, which is now the list the job runs with rather than a `-A` that proves nothing, and `--no-check` for the checkout: the tests reach the declarations by relative path here rather than through `npm:zudb`, and Deno reads the `.cjs` beside them as a module with an `export =` in it. The package job is what checks the types, through the resolution a user actually gets. `npm run test:bun` and `npm run test:deno` run the same suite locally. Node 24 also runs it a second time with `--harmony-temporal`, and 26 has Temporal unflagged, so all four runs are green: 90 tests, 88 of them wherever Temporal exists.
33 tasks
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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
One binary serves Node, Bun and Deno, because N-API is the ABI all three implement, and the runtimes table has claimed all three since the first commit. Only Node ran anything, which makes a table like that a promise rather than a fact, so the whole suite now runs on Bun 1.3 and Deno 2.9 in CI beside Node 24 and 26. Both of them found something.
Bun found a native error carrying no
stackat all. V8 writes one when the error is made and JavaScriptCore writes none through N-API, soerr.stackwasundefinedthere and every logger that reaches for it printed that word instead of the failure. What V8 writes for an error made under a running statement is the header line and no frames, since there are no JavaScript frames beneath a native call that is already running, so that line is what this writes when it finds none. It is defined rather than assigned, because the one V8 writes is not enumerable: a plain assignment putstackintoObject.keys(err)on Bun and nowhere else, and the test that walks an error's own keys is what caught it, which is the second bug this job found on its first run.Deno needed a permission list rather than a
-Athat proves nothing, and--allow-read --allow-write --allow-env --allow-ffiis what the suite actually uses, so that is what the job and the README both say now. It also needs--no-check, which is about the checkout and not about the package: the tests reach the declarations by relative path here rather than throughnpm:zudb, and Deno reads the.cjsbeside them as a module with anexport =in it. The package job is what checks the types, through the resolution a user actually gets, and it is unchanged.Deno 2.9 has Temporal unflagged, so the temporal tests run there without anything being asked for. Bun 1.3 does not have it yet, and the suite skips those two the way it does on an unflagged Node.
Four runs, all green:
npm testandnpm run test:temporalon Node,npm run test:bun,npm run test:deno, 90 tests each and 88 passing wherever Temporal exists.cargo fmt --check,cargo clippy --all-features -- -D warningsandnpm run check:typesare green too.Closes the last TypeScript line of DX3, tamnd/zu#169.