diff options
author | RaindropsSys <raindrops@equestria.dev> | 2023-10-24 17:43:37 +0200 |
---|---|---|
committer | RaindropsSys <raindrops@equestria.dev> | 2023-10-24 17:43:37 +0200 |
commit | ae187b6d75c8079da0be1dc288613bad8466fe61 (patch) | |
tree | 5ea0d34185a2270f29ffaa65e1f5258028d7d5d0 /desktop/node_modules/@electron/asar/lib/crawlfs.js | |
download | mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.gz mist-ae187b6d75c8079da0be1dc288613bad8466fe61.tar.bz2 mist-ae187b6d75c8079da0be1dc288613bad8466fe61.zip |
Initial commit
Diffstat (limited to 'desktop/node_modules/@electron/asar/lib/crawlfs.js')
-rw-r--r-- | desktop/node_modules/@electron/asar/lib/crawlfs.js | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/desktop/node_modules/@electron/asar/lib/crawlfs.js b/desktop/node_modules/@electron/asar/lib/crawlfs.js new file mode 100644 index 0000000..a26c3eb --- /dev/null +++ b/desktop/node_modules/@electron/asar/lib/crawlfs.js @@ -0,0 +1,41 @@ +'use strict' + +const { promisify } = require('util') + +const fs = require('./wrapped-fs') +const glob = promisify(require('glob')) + +async function determineFileType (filename) { + const stat = await fs.lstat(filename) + if (stat.isFile()) { + return { type: 'file', stat } + } else if (stat.isDirectory()) { + return { type: 'directory', stat } + } else if (stat.isSymbolicLink()) { + return { type: 'link', stat } + } +} + +module.exports = async function (dir, options) { + const metadata = {} + const crawled = await glob(dir, options) + const results = await Promise.all(crawled.map(async filename => [filename, await determineFileType(filename)])) + const links = [] + const filenames = results.map(([filename, type]) => { + if (type) { + metadata[filename] = type + if (type.type === 'link') links.push(filename) + } + return filename + }).filter((filename) => { + // Newer glob can return files inside symlinked directories, to avoid + // those appearing in archives we need to manually exclude theme here + const exactLinkIndex = links.findIndex(link => filename === link) + return links.every((link, index) => { + if (index === exactLinkIndex) return true + return !filename.startsWith(link) + }) + }) + return [filenames, metadata] +} +module.exports.determineFileType = determineFileType |