fix(javascript): distinguish Promise and FileHandle releases (#9584)

* fix(javascript): distinguish Promise and FileHandle releases

* fix(javascript): preserve reassigned handle candidates

* test(javascript): select unisolated route fixtures explicitly

* test(javascript): distinguish package scope in route fixtures

* test(apple): separate identity and refusal fixture groups

* fix(javascript): retain uncertain releases after opaque receiver writes

---------

Co-authored-by: morluto <76467478+morluto@users.noreply.github.com>
This commit is contained in:
Nianze Wuandmorluto authored and GitHub committed 2026-11-09 21:46:51 +08:00
1 parent da3bb5aa7b
commit 759817ccbe
6 files changed
+335 -11

No files matched your search

@@ -562,7 +562,9 @@ it.each([
it("preserves a saved promises object after deleting its parent export", () => {
const ir =
analyzeCommonJsSemanticFixture(`const fs = require('fs'); const fsp = fs.promises;
delete fs.promises; const handle = fsp.open('kept'); handle.close();`);
delete fs.promises;
async function useHandle() { const handle = await fsp.open('kept'); handle.close(); }
useHandle();`);
expect(
ir.resourceOperations.map(({ kind, method }) => ({ kind, method })),
).toEqual([
@@ -591,7 +593,9 @@ it("recognizes nested ESM namespace receivers as original built-ins", () => {
it("keeps intact fs/promises identity after deleting the fs.promises slot", () => {
const ir =
analyzeCommonJsSemanticFixture(`const fs=require('fs'); delete fs.promises;
const fsp=require('fs/promises'); const handle=fsp.open('kept'); handle.close();`);
const fsp=require('fs/promises');
async function useHandle() { const handle=await fsp.open('kept'); handle.close(); }
useHandle();`);
expect(
ir.resourceOperations.map(({ kind, method }) => ({ kind, method })),
).toEqual([