mirror of
https://github.com/morluto/rea.git
synced 2026-11-11 01:13:39 +00:00
fix(javascript): recover configuration file reads from fs/promises (#8446)
* fix(javascript): recover configuration file reads from fs/promises * fix(javascript): disallow nonexistent readFileSync on fs/promises --------- Co-authored-by: Tawhidul Islam <276017696+FhDBro@users.noreply.github.com>
This commit is contained in:
1 parent
4910e149ad
commit
703c11c90f
2 files changed
+65
-5
No files matched your search
@@ -677,3 +677,58 @@ it("retains an earlier captured function after its object method is replaced", (
|
||||
{ kind: "acquire", method: "open" },
|
||||
]);
|
||||
});
|
||||
|
||||
it.each([
|
||||
"import { readFile } from 'node:fs/promises'; readFile('config.json');",
|
||||
"import fs from 'node:fs/promises'; fs.readFile('config.json');",
|
||||
"import fs from 'node:fs'; fs.promises.readFile('config.json');",
|
||||
"const { readFile } = require('fs/promises'); readFile('config.json');",
|
||||
"const fsp = require('node:fs/promises'); fsp.readFile('config.json');",
|
||||
"const fs = require('node:fs'); fs.promises.readFile('config.json');",
|
||||
])(
|
||||
"recovers configuration file reads from promise-based fs APIs: %s",
|
||||
(source) => {
|
||||
const ir = analyzeCommonJsSemanticFixture(source);
|
||||
expect(ir.configurationOperations).toMatchObject([
|
||||
{
|
||||
kind: "file",
|
||||
key: "config.json",
|
||||
resolution: "complete",
|
||||
},
|
||||
]);
|
||||
},
|
||||
);
|
||||
|
||||
it("recovers partial configuration file reads from promise-based fs APIs with dynamic path", () => {
|
||||
const ir = analyzeCommonJsSemanticFixture(
|
||||
"import { readFile } from 'node:fs/promises'; readFile(getConfigPath());",
|
||||
);
|
||||
expect(ir.configurationOperations).toMatchObject([
|
||||
{
|
||||
kind: "file",
|
||||
key: null,
|
||||
resolution: "partial",
|
||||
},
|
||||
]);
|
||||
});
|
||||
|
||||
it("invalidates promise-based configuration file reads after mutation", () => {
|
||||
const ir = analyzeCommonJsSemanticFixture(
|
||||
"const fs = require('fs'); fs.promises.readFile = custom; const fsp = require('fs/promises'); fsp.readFile('wrong');",
|
||||
);
|
||||
expect(ir.configurationOperations).toEqual([]);
|
||||
});
|
||||
|
||||
it.each([
|
||||
"const { readFileSync } = require('fs/promises'); readFileSync('config.json');",
|
||||
"const { readFileSync } = require('node:fs/promises'); readFileSync('config.json');",
|
||||
"import { readFileSync } from 'node:fs/promises'; readFileSync('config.json');",
|
||||
"import fs from 'node:fs/promises'; fs.readFileSync('config.json');",
|
||||
"const fs = require('node:fs'); fs.promises.readFileSync('config.json');",
|
||||
])(
|
||||
"does not treat nonexistent readFileSync on promise-based fs as configuration read: %s",
|
||||
(source) => {
|
||||
const ir = analyzeCommonJsSemanticFixture(source);
|
||||
expect(ir.configurationOperations).toEqual([]);
|
||||
},
|
||||
);
|
||||
Reference in new issue
Block a user