mirror of
https://github.com/denoland/deno.git
synced 2025-08-04 19:08:15 +00:00
fix(ext/node): mkdir()
parse file mode (#28609)
Fixes https://github.com/denoland/deno/issues/28604
This commit is contained in:
parent
d07b7ea6f6
commit
52d528d21d
2 changed files with 29 additions and 5 deletions
|
@ -7,7 +7,10 @@ import type { CallbackWithError } from "ext:deno_node/_fs/_fs_common.ts";
|
|||
import { promisify } from "ext:deno_node/internal/util.mjs";
|
||||
import { denoErrorToNodeError } from "ext:deno_node/internal/errors.ts";
|
||||
import { getValidatedPath } from "ext:deno_node/internal/fs/utils.mjs";
|
||||
import { validateBoolean } from "ext:deno_node/internal/validators.mjs";
|
||||
import {
|
||||
parseFileMode,
|
||||
validateBoolean,
|
||||
} from "ext:deno_node/internal/validators.mjs";
|
||||
|
||||
/**
|
||||
* TODO: Also accept 'path' parameter as a Node polyfill Buffer type once these
|
||||
|
@ -31,12 +34,14 @@ export function mkdir(
|
|||
if (typeof options == "function") {
|
||||
callback = options;
|
||||
} else if (typeof options === "number") {
|
||||
mode = options;
|
||||
mode = parseFileMode(options, "mode");
|
||||
} else if (typeof options === "boolean") {
|
||||
recursive = options;
|
||||
} else if (options) {
|
||||
if (options.recursive !== undefined) recursive = options.recursive;
|
||||
if (options.mode !== undefined) mode = options.mode;
|
||||
if (options.mode !== undefined) {
|
||||
mode = parseFileMode(options.mode, "options.mode");
|
||||
}
|
||||
}
|
||||
validateBoolean(recursive, "options.recursive");
|
||||
|
||||
|
@ -64,12 +69,14 @@ export function mkdirSync(path: string | URL, options?: MkdirOptions) {
|
|||
let recursive = false;
|
||||
|
||||
if (typeof options === "number") {
|
||||
mode = options;
|
||||
mode = parseFileMode(options, "mode");
|
||||
} else if (typeof options === "boolean") {
|
||||
recursive = options;
|
||||
} else if (options) {
|
||||
if (options.recursive !== undefined) recursive = options.recursive;
|
||||
if (options.mode !== undefined) mode = options.mode;
|
||||
if (options.mode !== undefined) {
|
||||
mode = parseFileMode(options.mode, "options.mode");
|
||||
}
|
||||
}
|
||||
validateBoolean(recursive, "options.recursive");
|
||||
|
||||
|
|
|
@ -29,6 +29,23 @@ Deno.test({
|
|||
},
|
||||
});
|
||||
|
||||
Deno.test({
|
||||
name: "[node/fs] mkdir mode",
|
||||
fn: () => {
|
||||
mkdirSync(tmpDir, { mode: 0o777 });
|
||||
assert(existsSync(tmpDir));
|
||||
assert(Deno.statSync(tmpDir).mode! & 0o777);
|
||||
|
||||
Deno.removeSync(tmpDir);
|
||||
|
||||
mkdirSync(tmpDir, { mode: "0777" });
|
||||
assert(existsSync(tmpDir));
|
||||
assert(Deno.statSync(tmpDir).mode! & 0o777);
|
||||
|
||||
Deno.removeSync(tmpDir);
|
||||
},
|
||||
});
|
||||
|
||||
Deno.test("[std/node/fs] mkdir callback isn't called twice if error is thrown", async () => {
|
||||
const tempDir = await Deno.makeTempDir();
|
||||
const subdir = path.join(tempDir, "subdir");
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue