Skip to content

Commit

Permalink
remove stack traces
Browse files Browse the repository at this point in the history
  • Loading branch information
lukekarrys committed Oct 11, 2024
1 parent 5a11d7b commit e04fa60
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 109 deletions.
123 changes: 21 additions & 102 deletions src/fs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,7 @@
import fs, { Dirent } from 'fs'

// sync ones just take the sync version from node
export {
chmodSync,
mkdirSync,
renameSync,
rmdirSync,
rmSync,
unlinkSync,
} from 'fs'
export { chmodSync, renameSync, rmdirSync, rmSync, unlinkSync } from 'fs'

export const statSync = (path: fs.PathLike) => fs.statSync(path)
export const lstatSync = (path: fs.PathLike) => fs.lstatSync(path)
Expand All @@ -22,99 +15,42 @@ export const readdirSync = (path: fs.PathLike) =>
// const makeCb = (res, rej) => (er, ...d) => er ? rej(er) : res(...d)
// which would be a bit cleaner.

const createStack = () => {
const obj: { stack?: string } = {}
Error?.captureStackTrace(obj, createStack)
const { stack } = obj
return (er: NodeJS.ErrnoException) => {
/* c8 ignore start */
if (stack) {
const prefix =
er.stack ? er.stack.substring(0, er.stack.indexOf('\n')) : undefined
er.stack =
prefix ?
prefix + '\n' + stack.substring(stack.indexOf('\n') + 1)
: stack
}
/* c8 ignore stop */
return er
}
}

const chmod = (path: fs.PathLike, mode: fs.Mode): Promise<void> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.chmod(path, mode, er => (er ? rej(stack(er)) : res())),
)
}

const mkdir = (
path: fs.PathLike,
options?:
| fs.Mode
| (fs.MakeDirectoryOptions & { recursive?: boolean | null })
| null,
): Promise<string | undefined> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.mkdir(path, options, (er, made) => (er ? rej(stack(er)) : res(made))),
)
}
const chmod = (path: fs.PathLike, mode: fs.Mode): Promise<void> =>
new Promise((res, rej) => fs.chmod(path, mode, er => (er ? rej(er) : res())))

const readdir = async (path: fs.PathLike): Promise<Dirent[]> => {
const stack = createStack()
return new Promise((res, rej) =>
const readdir = async (path: fs.PathLike): Promise<Dirent[]> =>
new Promise((res, rej) =>
fs.readdir(path, { withFileTypes: true }, (er, data) =>
er ? rej(stack(er)) : res(data),
er ? rej(er) : res(data),
),
)
}

const rename = (oldPath: fs.PathLike, newPath: fs.PathLike): Promise<void> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.rename(oldPath, newPath, er => (er ? rej(stack(er)) : res())),
const rename = (oldPath: fs.PathLike, newPath: fs.PathLike): Promise<void> =>
new Promise((res, rej) =>
fs.rename(oldPath, newPath, er => (er ? rej(er) : res())),
)
}

const rm = (path: fs.PathLike, options: fs.RmOptions): Promise<void> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.rm(path, options, er => (er ? rej(stack(er)) : res())),
)
}
const rm = (path: fs.PathLike, options: fs.RmOptions): Promise<void> =>
new Promise((res, rej) => fs.rm(path, options, er => (er ? rej(er) : res())))

const rmdir = (path: fs.PathLike): Promise<void> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.rmdir(path, er => (er ? rej(stack(er)) : res())),
)
}
const rmdir = (path: fs.PathLike): Promise<void> =>
new Promise((res, rej) => fs.rmdir(path, er => (er ? rej(er) : res())))

const stat = (path: fs.PathLike): Promise<fs.Stats> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.stat(path, (er, data) => (er ? rej(stack(er)) : res(data))),
const stat = (path: fs.PathLike): Promise<fs.Stats> =>
new Promise((res, rej) =>
fs.stat(path, (er, data) => (er ? rej(er) : res(data))),
)
}

const lstat = (path: fs.PathLike): Promise<fs.Stats> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.lstat(path, (er, data) => (er ? rej(stack(er)) : res(data))),
const lstat = (path: fs.PathLike): Promise<fs.Stats> =>
new Promise((res, rej) =>
fs.lstat(path, (er, data) => (er ? rej(er) : res(data))),
)
}

const unlink = (path: fs.PathLike): Promise<void> => {
const stack = createStack()
return new Promise((res, rej) =>
fs.unlink(path, er => (er ? rej(stack(er)) : res())),
)
}
const unlink = (path: fs.PathLike): Promise<void> =>
new Promise((res, rej) => fs.unlink(path, er => (er ? rej(er) : res())))

export const promises = {
chmod,
mkdir,
readdir,
rename,
rm,
Expand All @@ -123,20 +59,3 @@ export const promises = {
lstat,
unlink,
}

// import fs, { Dirent } from 'fs'

// const readdir = (path: fs.PathLike): Promise<Dirent[]> =>
// fsPromises.readdir(path, { withFileTypes: true })

// export const promises = {
// chmod: fsPromises.chmod,
// mkdir: fsPromises.mkdir,
// readdir,
// rename: fsPromises.rename,
// rm: fsPromises.rm,
// rmdir: fsPromises.rmdir,
// stat: fsPromises.stat,
// lstat: fsPromises.lstat,
// unlink: fsPromises.unlink,
// }
6 changes: 1 addition & 5 deletions test/fs.ts
Original file line number Diff line number Diff line change
Expand Up @@ -84,11 +84,7 @@ t.test('failing rejects promise', async t => {
for (const [m, fn] of Object.entries(
fs.promises as unknown as MockFsPromise,
)) {
t.rejects(
fn(),
{ message: 'oops', stack: new RegExp(`^Error: oops\\n\\s+at ${m}`) },
`got expected value for ${m}`,
)
t.rejects(fn(), { message: 'oops' }, `got expected value for ${m}`)
}
})

Expand Down
3 changes: 1 addition & 2 deletions test/integration/delete-many-files.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
// this isn't for coverage. it's basically a smoke test, to ensure that
// we can delete a lot of files on CI in multiple platforms and node versions.
import t from 'tap'
import { statSync, mkdirSync, readdirSync } from '../../src/fs.js'
import { writeFileSync } from 'fs'
import { writeFileSync, mkdirSync, readdirSync, statSync } from 'fs'
import { resolve, dirname } from 'path'
import { manual } from '../../src/index.js'
import { setTimeout } from 'timers/promises'
Expand Down

0 comments on commit e04fa60

Please sign in to comment.