node icon indicating copy to clipboard operation
node copied to clipboard

[Bug]: When using --allow-fs-write to execute a non-existent folder, creating subdirectories of that folder will fail

Open skypesky opened this issue 8 months ago • 13 comments

Version

v22.3.0

Platform

Darwin mac-studio.local 23.5.0 Darwin Kernel Version 23.5.0: Wed May  1 20:12:58 PDT 2024; root:xnu-10063.121.3~5/RELEASE_ARM64_T6000 arm64

Subsystem

No response

What steps will reproduce the bug?

  1. Create new file test.js
// /Users/skypesky/workSpaces/javascript/github/test.js
const { mkdir } = require('node:fs/promises');

(async () => {
  await mkdir('/Users/skypesky/workSpaces/javascript/github/temp/a/b/c/d', { recursive: true });
})();

  1. Execute the following command
➜   node --experimental-permission --allow-fs-write=/Users/skypesky/workSpaces/javascript/github/temp --allow-fs-read=/Users/skypesky/workSpaces/javascript/github/test.js test.js
(node:9132) ExperimentalWarning: Permission is an experimental feature
(Use `node --trace-warnings ...` to show where the warning was created)
node:internal/fs/promises:864
    binding.mkdir(pathModule.toNamespacedPath(path),
            ^

Error: Access to this API has been restricted
    at mkdir (node:internal/fs/promises:864:13)
    at /Users/skypesky/workSpaces/javascript/github/test.js:4:9
    at Object.<anonymous> (/Users/skypesky/workSpaces/javascript/github/test.js:5:3)
    at Module._compile (node:internal/modules/cjs/loader:1460:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1544:10)
    at Module.load (node:internal/modules/cjs/loader:1275:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:212:19)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:158:5)
    at node:internal/main/run_main_module:30:49 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'FileSystemWrite',
  resource: '/Users/skypesky/workSpaces/javascript/github/temp/a/b/c/d'
}

Node.js v22.3.0

How often does it reproduce? Is there a required condition?

No response

What is the expected behavior? Why is that the expected behavior?

  1. I want to create the folder successfully without throwing any errors
  2. node.js cannot make everyone pre-create folders for these scripts

What do you see instead?

➜   node --experimental-permission --allow-fs-write=/Users/skypesky/workSpaces/javascript/github/temp --allow-fs-read=/Users/skypesky/workSpaces/javascript/github/test.js test.js
(node:9132) ExperimentalWarning: Permission is an experimental feature
(Use `node --trace-warnings ...` to show where the warning was created)
node:internal/fs/promises:864
    binding.mkdir(pathModule.toNamespacedPath(path),
            ^

Error: Access to this API has been restricted
    at mkdir (node:internal/fs/promises:864:13)
    at /Users/skypesky/workSpaces/javascript/github/test.js:4:9
    at Object.<anonymous> (/Users/skypesky/workSpaces/javascript/github/test.js:5:3)
    at Module._compile (node:internal/modules/cjs/loader:1460:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1544:10)
    at Module.load (node:internal/modules/cjs/loader:1275:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12)
    at wrapModuleLoad (node:internal/modules/cjs/loader:212:19)
    at Function.executeUserEntryPoint [as runMain] (node:internal/modules/run_main:158:5)
    at node:internal/main/run_main_module:30:49 {
  code: 'ERR_ACCESS_DENIED',
  permission: 'FileSystemWrite',
  resource: '/Users/skypesky/workSpaces/javascript/github/temp/a/b/c/d'
}

Node.js v22.3.0

Additional information

  • I managed to create temp successfully, but I couldn't create a subfolder for temp.
const { mkdir } = require('node:fs/promises');

(async () => {

  await mkdir('/Users/skypesky/workSpaces/javascript/github/temp', { recursive: true }); // exec ok!
  await mkdir('/Users/skypesky/workSpaces/javascript/github/temp/a/b/c/d', { recursive: true }); // failed
})();

skypesky avatar Jun 28 '24 11:06 skypesky