Skip to content

Commit 58785ec

Browse files
proggeramlugRalph Küpper
andauthored
batch: land #8813, #8815, #8816, #8817, #8818, #8819, #8820 (#8822)
* fix(async_hooks): address lifecycle review feedback * fix(doctor): reject stale runtime archives * docs: add runtime compatibility changelog fragment * fix(sharp): support create input descriptors * perf(codegen): specialize call-returned array stores * perf(map): repair ordered-delete indexes in place * chore: add changelog for map delete optimization * test(map): root ordered-delete string keys * feat(qs): add native Stripe-compatible shim (#8751) * docs: add changelog fragment for sharp create * fix(runtime): complete build identity inputs * test(compile): cover compiled package builtin imports * chore: add changelog for array-store optimization --------- Co-authored-by: Ralph Küpper <ralph@skelpo.com>
1 parent 8f026e5 commit 58785ec

109 files changed

Lines changed: 4969 additions & 620 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ members = [
2525
"crates/perry-ext-events",
2626
"crates/perry-ext-decimal",
2727
"crates/perry-ext-dayjs",
28+
"crates/perry-ext-qs",
2829
"crates/perry-ext-moment",
2930
"crates/perry-ext-cheerio",
3031
"crates/perry-ext-sharp",
@@ -491,6 +492,7 @@ perry-ext-axios = { path = "crates/perry-ext-axios" }
491492
perry-ext-events = { path = "crates/perry-ext-events" }
492493
perry-ext-decimal = { path = "crates/perry-ext-decimal" }
493494
perry-ext-dayjs = { path = "crates/perry-ext-dayjs" }
495+
perry-ext-qs = { path = "crates/perry-ext-qs" }
494496
perry-ext-moment = { path = "crates/perry-ext-moment" }
495497
perry-ext-cheerio = { path = "crates/perry-ext-cheerio" }
496498
perry-ext-sharp = { path = "crates/perry-ext-sharp" }

changelog.d/8751-native-qs.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
**Native `qs` compatibility:** bundle nested query-string parsing and serialization so Stripe request encoding no longer compiles the AOT-hostile `get-intrinsic` dependency chain.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Ordered `Map.delete` now compacts surviving entries with one overlap-safe move and repairs numeric, string, and pointer side-index offsets in place instead of barrier-storing and rehashing every survivor. Insertion order, SameValueZero lookup, delete-then-readd ordering, moving-GC pointer-index rebuilds, and old-to-young external-slot tracking are preserved.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Fixed stale or mismatched `libperry_runtime` archives passing `perry doctor` and
2+
then failing during native linking with undefined runtime symbols. Runtime
3+
archives now carry a compiler build identity that `perry doctor` and compile
4+
pipelines verify before linking, with actionable rebuild and reinstall guidance.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
Added regression coverage for Node builtin named imports used from natively
2+
compiled dependencies. The exact `@hono/node-server` fallback from
3+
`options.createServer` to its module-scope `http.createServer` import now has an
4+
offline compiler fixture and a real-package listen/fetch/close release smoke,
5+
covering both `http` and `node:http` spellings without relying on app-level
6+
imports.

changelog.d/8818-sharp-create.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
fix(sharp): support object-form `create` inputs with solid RGB or RGBA backgrounds, so `sharp({ create: ... })` can encode images instead of failing with an invalid handle.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Array index assignments whose base is a call expression now preserve the call's statically known Array type and use the typed array-store path while evaluating the base exactly once. Strict writes through that path also honor non-writable and accessor descriptors, read-only length, and non-extensible holes.

crates/perry-api-manifest/src/entries.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ pub const NATIVE_MODULES: &[&str] = &[
3333
"mysql2/promise", // mysql2's promise-API subpath
3434
"pg", // PostgreSQL client
3535
"uuid", // RFC-4122 UUID generation
36+
"qs", // nested query-string parser/stringifier (Stripe dependency)
3637
"bcrypt", // bcrypt password hashing (replaces the N-API addon)
3738
"argon2", // Argon2 password hashing (replaces the N-API addon)
3839
"ioredis", // Redis/Valkey client

crates/perry-api-manifest/src/entries/part_4.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1114,4 +1114,23 @@ pub(crate) const API_MANIFEST_PART_4: &[ApiEntry] = &[
11141114
property("bun", "stdin"),
11151115
property("bun", "stdout"),
11161116
property("bun", "stderr"),
1117+
// --- qs (issue #8751) ---
1118+
// Native nested query-string codec. This keeps Stripe's request encoder
1119+
// off qs' legacy get-intrinsic/ES-shims dependency chain.
1120+
method_sig(
1121+
"qs",
1122+
"stringify",
1123+
false,
1124+
None,
1125+
&[p_any("value"), p_any("options")],
1126+
TypeSpec::String,
1127+
),
1128+
method_sig(
1129+
"qs",
1130+
"parse",
1131+
false,
1132+
None,
1133+
&[p_str("input"), p_any("options")],
1134+
TypeSpec::Any,
1135+
),
11171136
];

0 commit comments

Comments
 (0)