update comp bun/node

This commit is contained in:
2026-02-11 22:25:00 +08:00
parent b4ec83b4c3
commit 5df19c40dd
3 changed files with 72 additions and 25 deletions

View File

@@ -4,7 +4,7 @@
import {decodeBase64, encodeBase64} from "jsr:@std/encoding/base64";
import {dirname, fromFileUrl} from "https://deno.land/std/path/mod.ts";
import {spawn, SpawnOptionsWithoutStdio} from "node:child_process";
import { readFile,readFileSync } from 'node:fs';
import {mkdir, readFile, readFileSync, rm, writeFile} from "node:fs";
// reference: https://docs.deno.com/examples/hex_base64_encoding/
// import { decodeBase64, encodeBase64 } from "jsr:@std/encoding/base64";
@@ -714,12 +714,12 @@ export function getHomeDir(): string | null {
export function homeDir(): string | null {
// if (Deno.build.os === "windows") {
// const userProfile = Deno.env.get("USERPROFILE");
// const userProfile = osEnv("USERPROFILE");
// if (userProfile) {
// return userProfile;
// }
// const homeDrive = Deno.env.get("HOMEDRIVE");
// const homePath = Deno.env.get("HOMEPATH");
// const homeDrive = osEnv("HOMEDRIVE");
// const homePath = osEnv("HOMEPATH");
// if (homeDrive && homePath) {
// return homeDrive + homePath;
// }
@@ -762,15 +762,20 @@ export async function existsPath(path: string): Promise<boolean> {
}
return new Promise((resolve) => {
fs.stat(path, (err, stats) => {
if (err) {
resolve(false);
} else {
resolve(stats != null);
}
err ? resolve(false) : resolve(stats !== null);
});
});
}
function isDenoNotFound(e) {
return e instanceof Error && e.name == "NotFound";
}
function isNodeNotFound(e) {
return (e.errno ?? 0 === -2) && e.message &&
e.message.includes("no such file or directory");
}
export async function readFileToString(
filename: string,
): Promise<string | null> {
@@ -778,18 +783,18 @@ export async function readFileToString(
try {
return await Deno.readTextFile(resolveFilename(filename));
} catch (e) {
if (e instanceof Error && e.name == "NotFound") {
if (isDenoNotFound(e)) {
return null;
}
throw e;
}
}
return Promise((resolve, reject) => {
readFile(resolveFilename(filename), 'utf8', (err, buffer) => {
if (err) {
reject(err);
return new Promise((resolve, reject) => {
readFile(resolveFilename(filename), "utf8", (err, buffer) => {
if (err && isNodeNotFound(err)) {
resolve(null);
} else {
resolve(buffer);
err ? reject(err) : resolve(buffer);
}
});
});
@@ -800,13 +805,20 @@ export function readFileToStringSync(filename: string): string | null {
try {
return Deno.readTextFileSync(resolveFilename(filename));
} catch (e) {
if (e instanceof Error && e.name == "NotFound") {
if (isDenoNotFound(e)) {
return null;
}
throw e;
}
}
return readFileSync(resolveFilename(filename), 'utf8');
try {
return readFileSync(resolveFilename(filename), "utf8");
} catch (err) {
if (isNodeNotFound(err)) {
return null;
}
throw err;
}
}
export async function writeStringToFile(
@@ -816,14 +828,49 @@ export async function writeStringToFile(
const newFilename = resolveFilename(filename);
if (data == null) {
if (await existsPath(newFilename)) {
await Deno.remove(newFilename);
await removePath(newFilename);
}
} else {
const parentDirname = dirname(newFilename);
if (!await existsPath(parentDirname)) {
await Deno.mkdir(parentDirname, { recursive: true });
await makeDirectory(parentDirname);
}
await Deno.writeTextFile(newFilename, data);
if (isDeno()) {
await Deno.writeTextFile(newFilename, data);
} else {
return new Promise((resolve, reject) => {
writeFile(newFilename, data, (err) => {
err ? reject(err) : resolve();
});
});
}
}
}
export async function removePath(path: string): Promise<void> {
if (isDeno()) {
await Deno.remove(newFilename);
} else {
return new Promise((resolve, reject) => {
rm(path, (err) => {
err ? reject(err) : resolve();
});
});
}
}
export async function makeDirectory(
directory: string,
recursive?: boolean,
): Promise<void> {
if (isDeno()) {
await Deno.mkdir(parentDirname, { recursive: recursive ?? true });
} else {
return new Promise((resolve, reject) => {
mkdir(directory, { recursive: recursive ?? true }, (err) => {
err ? reject(err) : resolve();
});
});
}
}