Path: blob/master/src/packages/backend/misc/ensure-containing-directory-exists.ts
1447 views
import { constants as fsc } from "node:fs";1import { access, mkdir } from "node:fs/promises";23import { path_split } from "@cocalc/util/misc";4import abspath from "./abspath";56// Make sure that that the directory containing the file indicated by7// the path exists and has restrictive permissions.8export default async function ensureContainingDirectoryExists(9path: string,10): Promise<void> {11path = abspath(path);12const containingDirectory = path_split(path).head; // containing path13if (!containingDirectory) return;14await ensureDirectoryExists(containingDirectory);15}1617export async function ensureDirectoryExists(path: string): Promise<void> {18try {19await access(path, fsc.R_OK | fsc.W_OK);20// it exists, yeah!21return;22} catch (err) {23// Doesn't exist, so create, via recursion:24try {25await mkdir(path, { mode: 0o700, recursive: true });26} catch (err) {27if (err?.code === "EEXIST") {28// no problem -- it exists.29return;30} else {31throw err;32}33}34}35}363738