summaryrefslogtreecommitdiff
path: root/node_modules/fs-extra/lib/util
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2026-05-18 23:10:59 +0800
committerlittleblack111 <littleblack11111@gmail.com>2026-05-18 23:41:44 +0800
commitfc87c009806dcc98867f6b58efe29b042aa01dee (patch)
tree8f59b3f4a5b66e9dfef2d40c8d318e258a521228 /node_modules/fs-extra/lib/util
parent3336b2356ee6152d9c6ae59bd9b87ccbc0958407 (diff)
node: updatemain
Diffstat (limited to 'node_modules/fs-extra/lib/util')
-rw-r--r--node_modules/fs-extra/lib/util/stat.js158
-rw-r--r--node_modules/fs-extra/lib/util/utimes.js36
2 files changed, 0 insertions, 194 deletions
diff --git a/node_modules/fs-extra/lib/util/stat.js b/node_modules/fs-extra/lib/util/stat.js
deleted file mode 100644
index dfd37d9c..00000000
--- a/node_modules/fs-extra/lib/util/stat.js
+++ /dev/null
@@ -1,158 +0,0 @@
-'use strict'
-
-const fs = require('../fs')
-const path = require('path')
-const u = require('universalify').fromPromise
-
-function getStats (src, dest, opts) {
- const statFunc = opts.dereference
- ? (file) => fs.stat(file, { bigint: true })
- : (file) => fs.lstat(file, { bigint: true })
- return Promise.all([
- statFunc(src),
- statFunc(dest).catch(err => {
- if (err.code === 'ENOENT') return null
- throw err
- })
- ]).then(([srcStat, destStat]) => ({ srcStat, destStat }))
-}
-
-function getStatsSync (src, dest, opts) {
- let destStat
- const statFunc = opts.dereference
- ? (file) => fs.statSync(file, { bigint: true })
- : (file) => fs.lstatSync(file, { bigint: true })
- const srcStat = statFunc(src)
- try {
- destStat = statFunc(dest)
- } catch (err) {
- if (err.code === 'ENOENT') return { srcStat, destStat: null }
- throw err
- }
- return { srcStat, destStat }
-}
-
-async function checkPaths (src, dest, funcName, opts) {
- const { srcStat, destStat } = await getStats(src, dest, opts)
- if (destStat) {
- if (areIdentical(srcStat, destStat)) {
- const srcBaseName = path.basename(src)
- const destBaseName = path.basename(dest)
- if (funcName === 'move' &&
- srcBaseName !== destBaseName &&
- srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
- return { srcStat, destStat, isChangingCase: true }
- }
- throw new Error('Source and destination must not be the same.')
- }
- if (srcStat.isDirectory() && !destStat.isDirectory()) {
- throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
- }
- if (!srcStat.isDirectory() && destStat.isDirectory()) {
- throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)
- }
- }
-
- if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
- throw new Error(errMsg(src, dest, funcName))
- }
-
- return { srcStat, destStat }
-}
-
-function checkPathsSync (src, dest, funcName, opts) {
- const { srcStat, destStat } = getStatsSync(src, dest, opts)
-
- if (destStat) {
- if (areIdentical(srcStat, destStat)) {
- const srcBaseName = path.basename(src)
- const destBaseName = path.basename(dest)
- if (funcName === 'move' &&
- srcBaseName !== destBaseName &&
- srcBaseName.toLowerCase() === destBaseName.toLowerCase()) {
- return { srcStat, destStat, isChangingCase: true }
- }
- throw new Error('Source and destination must not be the same.')
- }
- if (srcStat.isDirectory() && !destStat.isDirectory()) {
- throw new Error(`Cannot overwrite non-directory '${dest}' with directory '${src}'.`)
- }
- if (!srcStat.isDirectory() && destStat.isDirectory()) {
- throw new Error(`Cannot overwrite directory '${dest}' with non-directory '${src}'.`)
- }
- }
-
- if (srcStat.isDirectory() && isSrcSubdir(src, dest)) {
- throw new Error(errMsg(src, dest, funcName))
- }
- return { srcStat, destStat }
-}
-
-// recursively check if dest parent is a subdirectory of src.
-// It works for all file types including symlinks since it
-// checks the src and dest inodes. It starts from the deepest
-// parent and stops once it reaches the src parent or the root path.
-async function checkParentPaths (src, srcStat, dest, funcName) {
- const srcParent = path.resolve(path.dirname(src))
- const destParent = path.resolve(path.dirname(dest))
- if (destParent === srcParent || destParent === path.parse(destParent).root) return
-
- let destStat
- try {
- destStat = await fs.stat(destParent, { bigint: true })
- } catch (err) {
- if (err.code === 'ENOENT') return
- throw err
- }
-
- if (areIdentical(srcStat, destStat)) {
- throw new Error(errMsg(src, dest, funcName))
- }
-
- return checkParentPaths(src, srcStat, destParent, funcName)
-}
-
-function checkParentPathsSync (src, srcStat, dest, funcName) {
- const srcParent = path.resolve(path.dirname(src))
- const destParent = path.resolve(path.dirname(dest))
- if (destParent === srcParent || destParent === path.parse(destParent).root) return
- let destStat
- try {
- destStat = fs.statSync(destParent, { bigint: true })
- } catch (err) {
- if (err.code === 'ENOENT') return
- throw err
- }
- if (areIdentical(srcStat, destStat)) {
- throw new Error(errMsg(src, dest, funcName))
- }
- return checkParentPathsSync(src, srcStat, destParent, funcName)
-}
-
-function areIdentical (srcStat, destStat) {
- return destStat.ino && destStat.dev && destStat.ino === srcStat.ino && destStat.dev === srcStat.dev
-}
-
-// return true if dest is a subdir of src, otherwise false.
-// It only checks the path strings.
-function isSrcSubdir (src, dest) {
- const srcArr = path.resolve(src).split(path.sep).filter(i => i)
- const destArr = path.resolve(dest).split(path.sep).filter(i => i)
- return srcArr.every((cur, i) => destArr[i] === cur)
-}
-
-function errMsg (src, dest, funcName) {
- return `Cannot ${funcName} '${src}' to a subdirectory of itself, '${dest}'.`
-}
-
-module.exports = {
- // checkPaths
- checkPaths: u(checkPaths),
- checkPathsSync,
- // checkParent
- checkParentPaths: u(checkParentPaths),
- checkParentPathsSync,
- // Misc
- isSrcSubdir,
- areIdentical
-}
diff --git a/node_modules/fs-extra/lib/util/utimes.js b/node_modules/fs-extra/lib/util/utimes.js
deleted file mode 100644
index 87f4588c..00000000
--- a/node_modules/fs-extra/lib/util/utimes.js
+++ /dev/null
@@ -1,36 +0,0 @@
-'use strict'
-
-const fs = require('../fs')
-const u = require('universalify').fromPromise
-
-async function utimesMillis (path, atime, mtime) {
- // if (!HAS_MILLIS_RES) return fs.utimes(path, atime, mtime, callback)
- const fd = await fs.open(path, 'r+')
-
- let closeErr = null
-
- try {
- await fs.futimes(fd, atime, mtime)
- } finally {
- try {
- await fs.close(fd)
- } catch (e) {
- closeErr = e
- }
- }
-
- if (closeErr) {
- throw closeErr
- }
-}
-
-function utimesMillisSync (path, atime, mtime) {
- const fd = fs.openSync(path, 'r+')
- fs.futimesSync(fd, atime, mtime)
- return fs.closeSync(fd)
-}
-
-module.exports = {
- utimesMillis: u(utimesMillis),
- utimesMillisSync
-}