summaryrefslogtreecommitdiff
path: root/desktop/node_modules/@electron/asar/lib/crawlfs.js
diff options
context:
space:
mode:
authorRaindropsSys <raindrops@equestria.dev>2023-10-24 17:43:37 +0200
committerRaindropsSys <raindrops@equestria.dev>2023-10-24 17:43:37 +0200
commitae187b6d75c8079da0be1dc288613bad8466fe61 (patch)
tree5ea0d34185a2270f29ffaa65e1f5258028d7d5d0 /desktop/node_modules/@electron/asar/lib/crawlfs.js
downloadmist-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.js41
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