@jsenv/filesystem 2.5.1 → 2.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -4
- package/main.js +1 -0
- package/package.json +20 -31
- package/src/getRealFileSystemUrlSync.js +59 -0
- package/src/internal/fileSystemNodeToTypeOrNull.js +3 -1
- package/src/listFilesMatching.js +6 -20
- package/src/writeSymbolicLink.js +6 -4
- package/dist/commonjs/jsenv_filesystem.cjs +0 -2703
- package/dist/commonjs/jsenv_filesystem.cjs.map +0 -611
- package/dist/dev/template_node_package.dev.cjs +0 -20
- package/dist/dev/template_node_package.dev.cjs.map +0 -16
- package/dist/prod/template_node_package.prod.cjs +0 -20
- package/dist/prod/template_node_package.prod.cjs.map +0 -16
|
@@ -1,611 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"file": "jsenv_filesystem.cjs",
|
|
4
|
-
"sources": [
|
|
5
|
-
"../../src/internal/ensureUrlTrailingSlash.js",
|
|
6
|
-
"../../src/isFileSystemPath.js",
|
|
7
|
-
"../../src/fileSystemPathToUrl.js",
|
|
8
|
-
"../../src/assertAndNormalizeDirectoryUrl.js",
|
|
9
|
-
"../../src/assertAndNormalizeFileUrl.js",
|
|
10
|
-
"../../src/internal/statsToType.js",
|
|
11
|
-
"../../src/urlToFileSystemPath.js",
|
|
12
|
-
"../../src/internal/permissions.js",
|
|
13
|
-
"../../src/writeFileSystemNodePermissions.js",
|
|
14
|
-
"../../src/readFileSystemNodeStat.js",
|
|
15
|
-
"../../src/assertDirectoryPresence.js",
|
|
16
|
-
"../../src/assertFilePresence.js",
|
|
17
|
-
"../../src/bufferToEtag.js",
|
|
18
|
-
"../../src/readDirectory.js",
|
|
19
|
-
"../../src/internal/getCommonPathname.js",
|
|
20
|
-
"../../src/internal/pathnameToParentPathname.js",
|
|
21
|
-
"../../src/urlToRelativeUrl.js",
|
|
22
|
-
"../../src/comparePathnames.js",
|
|
23
|
-
"../../src/collectDirectoryMatchReport.js",
|
|
24
|
-
"../../src/collectFiles.js",
|
|
25
|
-
"../../src/writeDirectory.js",
|
|
26
|
-
"../../src/resolveUrl.js",
|
|
27
|
-
"../../src/removeFileSystemNode.js",
|
|
28
|
-
"../../src/ensureEmptyDirectory.js",
|
|
29
|
-
"../../src/ensureParentDirectories.js",
|
|
30
|
-
"../../src/ensureWindowsDriveLetter.js",
|
|
31
|
-
"../../src/internal/urlTargetsSameFileSystemPath.js",
|
|
32
|
-
"../../src/writeFileSystemNodeModificationTime.js",
|
|
33
|
-
"../../src/internal/replaceBackSlashesWithSlashes.js",
|
|
34
|
-
"../../src/readSymbolicLink.js",
|
|
35
|
-
"../../src/writeSymbolicLink.js",
|
|
36
|
-
"../../src/urlIsInsideOf.js",
|
|
37
|
-
"../../src/copyFileSystemNode.js",
|
|
38
|
-
"../../src/copyDirectoryContent.js",
|
|
39
|
-
"../../src/readFileSystemNodePermissions.js",
|
|
40
|
-
"../../src/grantPermissionsOnFileSystemNode.js",
|
|
41
|
-
"../../src/listFilesMatching.js",
|
|
42
|
-
"../../src/memoize.js",
|
|
43
|
-
"../../src/moveFileSystemNode.js",
|
|
44
|
-
"../../src/moveDirectoryContent.js",
|
|
45
|
-
"../../src/readFile.js",
|
|
46
|
-
"../../src/readFileSystemNodeModificationTime.js",
|
|
47
|
-
"../../src/internal/fileSystemNodeToTypeOrNull.js",
|
|
48
|
-
"../../src/internal/createWatcher.js",
|
|
49
|
-
"../../src/internal/trackRessources.js",
|
|
50
|
-
"../../src/registerDirectoryLifecycle.js",
|
|
51
|
-
"../../src/registerFileLifecycle.js",
|
|
52
|
-
"../../src/resolveDirectoryUrl.js",
|
|
53
|
-
"../../src/testFileSystemNodePermissions.js",
|
|
54
|
-
"../../src/urlToScheme.js",
|
|
55
|
-
"../../src/urlToRessource.js",
|
|
56
|
-
"../../src/urlToPathname.js",
|
|
57
|
-
"../../src/urlToFilename.js",
|
|
58
|
-
"../../src/urlToBasename.js",
|
|
59
|
-
"../../src/urlToExtension.js",
|
|
60
|
-
"../../src/urlToOrigin.js",
|
|
61
|
-
"../../src/urlToParentUrl.js",
|
|
62
|
-
"../../src/writeFile.js"
|
|
63
|
-
],
|
|
64
|
-
"sourcesContent": [
|
|
65
|
-
"export const ensureUrlTrailingSlash = (url) => {\n return url.endsWith(\"/\") ? url : `${url}/`\n}\n",
|
|
66
|
-
"export const isFileSystemPath = (value) => {\n if (typeof value !== \"string\") {\n throw new TypeError(\n `isFileSystemPath first arg must be a string, got ${value}`,\n )\n }\n\n if (value[0] === \"/\") {\n return true\n }\n\n return startsWithWindowsDriveLetter(value)\n}\n\nconst startsWithWindowsDriveLetter = (string) => {\n const firstChar = string[0]\n if (!/[a-zA-Z]/.test(firstChar)) return false\n\n const secondChar = string[1]\n if (secondChar !== \":\") return false\n\n return true\n}\n",
|
|
67
|
-
"import { pathToFileURL } from \"url\"\nimport { isFileSystemPath } from \"./isFileSystemPath.js\"\n\nexport const fileSystemPathToUrl = (value) => {\n if (!isFileSystemPath(value)) {\n throw new Error(`received an invalid value for fileSystemPath: ${value}`)\n }\n return String(pathToFileURL(value))\n}\n",
|
|
68
|
-
"import { ensureUrlTrailingSlash } from \"./internal/ensureUrlTrailingSlash.js\"\nimport { isFileSystemPath } from \"./isFileSystemPath.js\"\nimport { fileSystemPathToUrl } from \"./fileSystemPathToUrl.js\"\n\nexport const assertAndNormalizeDirectoryUrl = (value) => {\n let urlString\n\n if (value instanceof URL) {\n urlString = value.href\n } else if (typeof value === \"string\") {\n if (isFileSystemPath(value)) {\n urlString = fileSystemPathToUrl(value)\n } else {\n try {\n urlString = String(new URL(value))\n } catch (e) {\n throw new TypeError(\n `directoryUrl must be a valid url, received ${value}`,\n )\n }\n }\n } else {\n throw new TypeError(\n `directoryUrl must be a string or an url, received ${value}`,\n )\n }\n\n if (!urlString.startsWith(\"file://\")) {\n throw new Error(`directoryUrl must starts with file://, received ${value}`)\n }\n\n return ensureUrlTrailingSlash(urlString)\n}\n",
|
|
69
|
-
"import { isFileSystemPath } from \"./isFileSystemPath.js\"\nimport { fileSystemPathToUrl } from \"./fileSystemPathToUrl.js\"\n\nexport const assertAndNormalizeFileUrl = (value, baseUrl) => {\n let urlString\n\n if (value instanceof URL) {\n urlString = value.href\n } else if (typeof value === \"string\") {\n if (isFileSystemPath(value)) {\n urlString = fileSystemPathToUrl(value)\n } else {\n try {\n urlString = String(new URL(value, baseUrl))\n } catch (e) {\n throw new TypeError(`fileUrl must be a valid url, received ${value}`)\n }\n }\n } else {\n throw new TypeError(`fileUrl must be a string or an url, received ${value}`)\n }\n\n if (!urlString.startsWith(\"file://\")) {\n throw new Error(`fileUrl must starts with file://, received ${value}`)\n }\n\n return urlString\n}\n",
|
|
70
|
-
"export const statsToType = (stats) => {\n if (stats.isFile()) return \"file\"\n if (stats.isDirectory()) return \"directory\"\n if (stats.isSymbolicLink()) return \"symbolic-link\"\n if (stats.isFIFO()) return \"fifo\"\n if (stats.isSocket()) return \"socket\"\n if (stats.isCharacterDevice()) return \"character-device\"\n if (stats.isBlockDevice()) return \"block-device\"\n return undefined\n}\n",
|
|
71
|
-
"import { fileURLToPath } from \"url\"\n\nexport const urlToFileSystemPath = (url) => {\n let urlString = String(url)\n if (urlString[urlString.length - 1] === \"/\") {\n // remove trailing / so that nodejs path becomes predictable otherwise it logs\n // the trailing slash on linux but does not on windows\n urlString = urlString.slice(0, -1)\n }\n const fileSystemPath = fileURLToPath(urlString)\n return fileSystemPath\n}\n",
|
|
72
|
-
"// https://github.com/coderaiser/cloudcmd/issues/63#issuecomment-195478143\n// https://nodejs.org/api/fs.html#fs_file_modes\n// https://github.com/TooTallNate/stat-mode\n\n// cannot get from fs.constants because they are not available on windows\nconst S_IRUSR = 256 /* 0000400 read permission, owner */\nconst S_IWUSR = 128 /* 0000200 write permission, owner */\nconst S_IXUSR = 64 /* 0000100 execute/search permission, owner */\nconst S_IRGRP = 32 /* 0000040 read permission, group */\nconst S_IWGRP = 16 /* 0000020 write permission, group */\nconst S_IXGRP = 8 /* 0000010 execute/search permission, group */\nconst S_IROTH = 4 /* 0000004 read permission, others */\nconst S_IWOTH = 2 /* 0000002 write permission, others */\nconst S_IXOTH = 1 /* 0000001 execute/search permission, others */\n\n/*\nhere we could warn that on windows only 0o444 or 0o666 will work\n\n0o444 (readonly)\n{\n owner: {read: true, write: false, execute: false},\n group: {read: true, write: false, execute: false},\n others: {read: true, write: false, execute: false},\n}\n\n0o666 (read and write)\n{\n owner: {read: true, write: true, execute: false},\n group: {read: true, write: true, execute: false},\n others: {read: true, write: true, execute: false},\n}\n*/\nexport const binaryFlagsToPermissions = (binaryFlags) => {\n const owner = {\n read: Boolean(binaryFlags & S_IRUSR),\n write: Boolean(binaryFlags & S_IWUSR),\n execute: Boolean(binaryFlags & S_IXUSR),\n }\n\n const group = {\n read: Boolean(binaryFlags & S_IRGRP),\n write: Boolean(binaryFlags & S_IWGRP),\n execute: Boolean(binaryFlags & S_IXGRP),\n }\n\n const others = {\n read: Boolean(binaryFlags & S_IROTH),\n write: Boolean(binaryFlags & S_IWOTH),\n execute: Boolean(binaryFlags & S_IXOTH),\n }\n\n return {\n owner,\n group,\n others,\n }\n}\n\nexport const permissionsToBinaryFlags = ({ owner, group, others }) => {\n let binaryFlags = 0\n\n if (owner.read) binaryFlags |= S_IRUSR\n if (owner.write) binaryFlags |= S_IWUSR\n if (owner.execute) binaryFlags |= S_IXUSR\n\n if (group.read) binaryFlags |= S_IRGRP\n if (group.write) binaryFlags |= S_IWGRP\n if (group.execute) binaryFlags |= S_IXGRP\n\n if (others.read) binaryFlags |= S_IROTH\n if (others.write) binaryFlags |= S_IWOTH\n if (others.execute) binaryFlags |= S_IXOTH\n\n return binaryFlags\n}\n",
|
|
73
|
-
"import { chmod } from \"fs\"\nimport { permissionsToBinaryFlags } from \"./internal/permissions.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nexport const writeFileSystemNodePermissions = async (source, permissions) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n const sourcePath = urlToFileSystemPath(sourceUrl)\n\n let binaryFlags\n if (typeof permissions === \"object\") {\n permissions = {\n owner: {\n read: getPermissionOrComputeDefault(\"read\", \"owner\", permissions),\n write: getPermissionOrComputeDefault(\"write\", \"owner\", permissions),\n execute: getPermissionOrComputeDefault(\"execute\", \"owner\", permissions),\n },\n group: {\n read: getPermissionOrComputeDefault(\"read\", \"group\", permissions),\n write: getPermissionOrComputeDefault(\"write\", \"group\", permissions),\n execute: getPermissionOrComputeDefault(\"execute\", \"group\", permissions),\n },\n others: {\n read: getPermissionOrComputeDefault(\"read\", \"others\", permissions),\n write: getPermissionOrComputeDefault(\"write\", \"others\", permissions),\n execute: getPermissionOrComputeDefault(\n \"execute\",\n \"others\",\n permissions,\n ),\n },\n }\n binaryFlags = permissionsToBinaryFlags(permissions)\n } else {\n binaryFlags = permissions\n }\n\n return chmodNaive(sourcePath, binaryFlags)\n}\n\nconst chmodNaive = (fileSystemPath, binaryFlags) => {\n return new Promise((resolve, reject) => {\n chmod(fileSystemPath, binaryFlags, (error) => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n })\n })\n}\n\nconst actionLevels = { read: 0, write: 1, execute: 2 }\nconst subjectLevels = { others: 0, group: 1, owner: 2 }\n\nconst getPermissionOrComputeDefault = (action, subject, permissions) => {\n if (subject in permissions) {\n const subjectPermissions = permissions[subject]\n if (action in subjectPermissions) {\n return subjectPermissions[action]\n }\n\n const actionLevel = actionLevels[action]\n const actionFallback = Object.keys(actionLevels).find(\n (actionFallbackCandidate) =>\n actionLevels[actionFallbackCandidate] > actionLevel &&\n actionFallbackCandidate in subjectPermissions,\n )\n if (actionFallback) {\n return subjectPermissions[actionFallback]\n }\n }\n\n const subjectLevel = subjectLevels[subject]\n // do we have a subject with a stronger level (group or owner)\n // where we could read the action permission ?\n const subjectFallback = Object.keys(subjectLevels).find(\n (subjectFallbackCandidate) =>\n subjectLevels[subjectFallbackCandidate] > subjectLevel &&\n subjectFallbackCandidate in permissions,\n )\n if (subjectFallback) {\n const subjectPermissions = permissions[subjectFallback]\n return action in subjectPermissions\n ? subjectPermissions[action]\n : getPermissionOrComputeDefault(action, subjectFallback, permissions)\n }\n\n return false\n}\n",
|
|
74
|
-
"/*\n * - stats object documentation on Node.js\n * https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_class_fs_stats\n */\n\nimport { lstat, stat } from \"node:fs\"\n\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { writeFileSystemNodePermissions } from \"./writeFileSystemNodePermissions.js\"\n\nconst isWindows = process.platform === \"win32\"\n\nexport const readFileSystemNodeStat = async (\n source,\n { nullIfNotFound = false, followLink = true } = {},\n) => {\n let sourceUrl = assertAndNormalizeFileUrl(source)\n if (sourceUrl.endsWith(\"/\")) sourceUrl = sourceUrl.slice(0, -1)\n\n const sourcePath = urlToFileSystemPath(sourceUrl)\n\n const handleNotFoundOption = nullIfNotFound\n ? {\n handleNotFoundError: () => null,\n }\n : {}\n\n return readStat(sourcePath, {\n followLink,\n ...handleNotFoundOption,\n ...(isWindows\n ? {\n // Windows can EPERM on stat\n handlePermissionDeniedError: async (error) => {\n console.error(\n `trying to fix windows EPERM after stats on ${sourcePath}`,\n )\n\n try {\n // unfortunately it means we mutate the permissions\n // without being able to restore them to the previous value\n // (because reading current permission would also throw)\n await writeFileSystemNodePermissions(sourceUrl, 0o666)\n const stats = await readStat(sourcePath, {\n followLink,\n ...handleNotFoundOption,\n // could not fix the permission error, give up and throw original error\n handlePermissionDeniedError: () => {\n console.error(`still got EPERM after stats on ${sourcePath}`)\n throw error\n },\n })\n return stats\n } catch (e) {\n console.error(\n `error while trying to fix windows EPERM after stats on ${sourcePath}: ${e.stack}`,\n )\n throw error\n }\n },\n }\n : {}),\n })\n}\n\nconst readStat = (\n sourcePath,\n {\n followLink,\n handleNotFoundError = null,\n handlePermissionDeniedError = null,\n } = {},\n) => {\n const nodeMethod = followLink ? stat : lstat\n\n return new Promise((resolve, reject) => {\n nodeMethod(sourcePath, (error, statsObject) => {\n if (error) {\n if (handleNotFoundError && error.code === \"ENOENT\") {\n resolve(handleNotFoundError(error))\n } else if (\n handlePermissionDeniedError &&\n (error.code === \"EPERM\" || error.code === \"EACCES\")\n ) {\n resolve(handlePermissionDeniedError(error))\n } else {\n reject(error)\n }\n } else {\n resolve(statsObject)\n }\n })\n })\n}\n",
|
|
75
|
-
"import { statsToType } from \"./internal/statsToType.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\n\nexport const assertDirectoryPresence = async (source) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n const sourcePath = urlToFileSystemPath(sourceUrl)\n\n const sourceStats = await readFileSystemNodeStat(sourceUrl, {\n nullIfNotFound: true,\n })\n if (!sourceStats) {\n throw new Error(`directory not found at ${sourcePath}`)\n }\n if (!sourceStats.isDirectory()) {\n throw new Error(\n `directory expected at ${sourcePath} and found ${statsToType(\n sourceStats,\n )} instead`,\n )\n }\n}\n",
|
|
76
|
-
"import { statsToType } from \"./internal/statsToType.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\n\nexport const assertFilePresence = async (source) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n const sourcePath = urlToFileSystemPath(sourceUrl)\n\n const sourceStats = await readFileSystemNodeStat(sourceUrl, {\n nullIfNotFound: true,\n })\n if (!sourceStats) {\n throw new Error(`file not found at ${sourcePath}`)\n }\n if (!sourceStats.isFile()) {\n throw new Error(\n `file expected at ${sourcePath} and found ${statsToType(\n sourceStats,\n )} instead`,\n )\n }\n}\n",
|
|
77
|
-
"/*\n * - Buffer documentation on Node.js\n * https://nodejs.org/docs/latest-v13.x/api/buffer.html\n * - eTag documentation on MDN\n * https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/ETag\n */\n\nimport { createHash } from \"node:crypto\"\n\nconst ETAG_FOR_EMPTY_CONTENT = '\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"'\n\nexport const bufferToEtag = (buffer) => {\n if (!Buffer.isBuffer(buffer)) {\n throw new TypeError(`buffer expected, got ${buffer}`)\n }\n\n if (buffer.length === 0) {\n return ETAG_FOR_EMPTY_CONTENT\n }\n\n const hash = createHash(\"sha1\")\n hash.update(buffer, \"utf8\")\n\n const hashBase64String = hash.digest(\"base64\")\n const hashBase64StringSubset = hashBase64String.slice(0, 27)\n const length = buffer.length\n\n return `\"${length.toString(16)}-${hashBase64StringSubset}\"`\n}\n",
|
|
78
|
-
"import { readdir } from \"fs\"\nimport { assertAndNormalizeDirectoryUrl } from \"./assertAndNormalizeDirectoryUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nexport const readDirectory = async (url, { emfileMaxWait = 1000 } = {}) => {\n const directoryUrl = assertAndNormalizeDirectoryUrl(url)\n const directoryPath = urlToFileSystemPath(directoryUrl)\n const startMs = Date.now()\n let attemptCount = 0\n\n const attempt = () => {\n return readdirNaive(directoryPath, {\n handleTooManyFilesOpenedError: async (error) => {\n attemptCount++\n const nowMs = Date.now()\n const timeSpentWaiting = nowMs - startMs\n if (timeSpentWaiting > emfileMaxWait) {\n throw error\n }\n\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(attempt())\n }, attemptCount)\n })\n },\n })\n }\n\n return attempt()\n}\n\nconst readdirNaive = (\n directoryPath,\n { handleTooManyFilesOpenedError = null } = {},\n) => {\n return new Promise((resolve, reject) => {\n readdir(directoryPath, (error, names) => {\n if (error) {\n // https://nodejs.org/dist/latest-v13.x/docs/api/errors.html#errors_common_system_errors\n if (\n handleTooManyFilesOpenedError &&\n (error.code === \"EMFILE\" || error.code === \"ENFILE\")\n ) {\n resolve(handleTooManyFilesOpenedError(error))\n } else {\n reject(error)\n }\n } else {\n resolve(names)\n }\n })\n })\n}\n",
|
|
79
|
-
"export const getCommonPathname = (pathname, otherPathname) => {\n const firstDifferentCharacterIndex = findFirstDifferentCharacterIndex(\n pathname,\n otherPathname,\n )\n\n // pathname and otherpathname are exactly the same\n if (firstDifferentCharacterIndex === -1) {\n return pathname\n }\n\n const commonString = pathname.slice(0, firstDifferentCharacterIndex + 1)\n\n // the first different char is at firstDifferentCharacterIndex\n if (pathname.charAt(firstDifferentCharacterIndex) === \"/\") {\n return commonString\n }\n\n if (otherPathname.charAt(firstDifferentCharacterIndex) === \"/\") {\n return commonString\n }\n\n const firstDifferentSlashIndex = commonString.lastIndexOf(\"/\")\n return pathname.slice(0, firstDifferentSlashIndex + 1)\n}\n\nconst findFirstDifferentCharacterIndex = (string, otherString) => {\n const maxCommonLength = Math.min(string.length, otherString.length)\n let i = 0\n while (i < maxCommonLength) {\n const char = string.charAt(i)\n const otherChar = otherString.charAt(i)\n if (char !== otherChar) {\n return i\n }\n i++\n }\n if (string.length === otherString.length) {\n return -1\n }\n // they differ at maxCommonLength\n return maxCommonLength\n}\n",
|
|
80
|
-
"export const pathnameToParentPathname = (pathname) => {\n const slashLastIndex = pathname.lastIndexOf(\"/\")\n if (slashLastIndex === -1) {\n return \"/\"\n }\n\n return pathname.slice(0, slashLastIndex + 1)\n}\n",
|
|
81
|
-
"import { getCommonPathname } from \"./internal/getCommonPathname.js\"\nimport { pathnameToParentPathname } from \"./internal/pathnameToParentPathname.js\"\n\nexport const urlToRelativeUrl = (url, baseUrl) => {\n const urlObject = new URL(url)\n const baseUrlObject = new URL(baseUrl)\n\n if (urlObject.protocol !== baseUrlObject.protocol) {\n const urlAsString = String(url)\n return urlAsString\n }\n\n if (\n urlObject.username !== baseUrlObject.username ||\n urlObject.password !== baseUrlObject.password ||\n urlObject.host !== baseUrlObject.host\n ) {\n const afterUrlScheme = String(url).slice(urlObject.protocol.length)\n return afterUrlScheme\n }\n\n const { pathname, hash, search } = urlObject\n if (pathname === \"/\") {\n const baseUrlRessourceWithoutLeadingSlash = baseUrlObject.pathname.slice(1)\n return baseUrlRessourceWithoutLeadingSlash\n }\n\n const basePathname = baseUrlObject.pathname\n const commonPathname = getCommonPathname(pathname, basePathname)\n if (!commonPathname) {\n const urlAsString = String(url)\n return urlAsString\n }\n\n const specificPathname = pathname.slice(commonPathname.length)\n const baseSpecificPathname = basePathname.slice(commonPathname.length)\n if (baseSpecificPathname.includes(\"/\")) {\n const baseSpecificParentPathname =\n pathnameToParentPathname(baseSpecificPathname)\n const relativeDirectoriesNotation = baseSpecificParentPathname.replace(\n /.*?\\//g,\n \"../\",\n )\n const relativeUrl = `${relativeDirectoriesNotation}${specificPathname}${search}${hash}`\n return relativeUrl\n }\n\n const relativeUrl = `${specificPathname}${search}${hash}`\n return relativeUrl\n}\n",
|
|
82
|
-
"export const comparePathnames = (leftPathame, rightPathname) => {\n const leftPartArray = leftPathame.split(\"/\")\n const rightPartArray = rightPathname.split(\"/\")\n\n const leftLength = leftPartArray.length\n const rightLength = rightPartArray.length\n\n const maxLength = Math.max(leftLength, rightLength)\n let i = 0\n while (i < maxLength) {\n const leftPartExists = i in leftPartArray\n const rightPartExists = i in rightPartArray\n\n // longer comes first\n if (!leftPartExists) {\n return +1\n }\n if (!rightPartExists) {\n return -1\n }\n\n const leftPartIsLast = i === leftPartArray.length - 1\n const rightPartIsLast = i === rightPartArray.length - 1\n // folder comes first\n if (leftPartIsLast && !rightPartIsLast) {\n return +1\n }\n if (!leftPartIsLast && rightPartIsLast) {\n return -1\n }\n\n const leftPart = leftPartArray[i]\n const rightPart = rightPartArray[i]\n i++\n // local comparison comes first\n const comparison = leftPart.localeCompare(rightPart)\n if (comparison !== 0) {\n return comparison\n }\n }\n\n if (leftLength < rightLength) {\n return +1\n }\n if (leftLength > rightLength) {\n return -1\n }\n return 0\n}\n",
|
|
83
|
-
"import { Abort } from \"@jsenv/abort\"\nimport {\n normalizeStructuredMetaMap,\n urlCanContainsMetaMatching,\n urlToMeta,\n} from \"@jsenv/url-meta\"\n\nimport { ensureUrlTrailingSlash } from \"./internal/ensureUrlTrailingSlash.js\"\nimport { assertAndNormalizeDirectoryUrl } from \"./assertAndNormalizeDirectoryUrl.js\"\nimport { readDirectory } from \"./readDirectory.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { urlToRelativeUrl } from \"./urlToRelativeUrl.js\"\nimport { comparePathnames } from \"./comparePathnames.js\"\n\nexport const collectDirectoryMatchReport = async ({\n signal = new AbortController().signal,\n directoryUrl,\n structuredMetaMap,\n predicate,\n}) => {\n const matchingArray = []\n const ignoredArray = []\n\n const rootDirectoryUrl = assertAndNormalizeDirectoryUrl(directoryUrl)\n if (typeof predicate !== \"function\") {\n throw new TypeError(`predicate must be a function, got ${predicate}`)\n }\n const structuredMetaMapNormalized = normalizeStructuredMetaMap(\n structuredMetaMap,\n rootDirectoryUrl,\n )\n\n const collectOperation = Abort.startOperation()\n collectOperation.addAbortSignal(signal)\n\n const visitDirectory = async (directoryUrl) => {\n collectOperation.throwIfAborted()\n const directoryItems = await readDirectory(directoryUrl)\n\n await Promise.all(\n directoryItems.map(async (directoryItem) => {\n const directoryChildNodeUrl = `${directoryUrl}${directoryItem}`\n const relativeUrl = urlToRelativeUrl(\n directoryChildNodeUrl,\n rootDirectoryUrl,\n )\n\n collectOperation.throwIfAborted()\n const directoryChildNodeStats = await readFileSystemNodeStat(\n directoryChildNodeUrl,\n {\n // we ignore symlink because recursively traversed\n // so symlinked file will be discovered.\n // Moreover if they lead outside of directoryPath it can become a problem\n // like infinite recursion of whatever.\n // that we could handle using an object of pathname already seen but it will be useless\n // because directoryPath is recursively traversed\n followLink: false,\n },\n )\n\n if (directoryChildNodeStats.isDirectory()) {\n const subDirectoryUrl = `${directoryChildNodeUrl}/`\n\n if (\n !urlCanContainsMetaMatching({\n url: subDirectoryUrl,\n structuredMetaMap: structuredMetaMapNormalized,\n predicate,\n })\n ) {\n ignoredArray.push({\n relativeUrl: ensureUrlTrailingSlash(relativeUrl),\n fileStats: directoryChildNodeStats,\n })\n\n return\n }\n\n await visitDirectory(subDirectoryUrl)\n return\n }\n\n if (directoryChildNodeStats.isFile()) {\n const meta = urlToMeta({\n url: directoryChildNodeUrl,\n structuredMetaMap: structuredMetaMapNormalized,\n })\n if (!predicate(meta)) {\n ignoredArray.push({\n relativeUrl,\n meta,\n fileStats: directoryChildNodeStats,\n })\n return\n }\n\n matchingArray.push({\n relativeUrl,\n meta,\n fileStats: directoryChildNodeStats,\n })\n return\n }\n }),\n )\n }\n\n try {\n await visitDirectory(rootDirectoryUrl)\n\n return {\n matchingArray: sortByRelativeUrl(matchingArray),\n ignoredArray: sortByRelativeUrl(ignoredArray),\n }\n } finally {\n await collectOperation.end()\n }\n}\n\nconst sortByRelativeUrl = (array) =>\n array.sort((left, right) => {\n return comparePathnames(left.relativeUrl, right.relativeUrl)\n })\n",
|
|
84
|
-
"import { Abort } from \"@jsenv/abort\"\nimport {\n normalizeStructuredMetaMap,\n urlCanContainsMetaMatching,\n urlToMeta,\n} from \"@jsenv/url-meta\"\n\nimport { assertAndNormalizeDirectoryUrl } from \"./assertAndNormalizeDirectoryUrl.js\"\nimport { readDirectory } from \"./readDirectory.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { urlToRelativeUrl } from \"./urlToRelativeUrl.js\"\nimport { comparePathnames } from \"./comparePathnames.js\"\n\nexport const collectFiles = async ({\n signal = new AbortController().signal,\n directoryUrl,\n structuredMetaMap,\n predicate,\n}) => {\n const rootDirectoryUrl = assertAndNormalizeDirectoryUrl(directoryUrl)\n if (typeof predicate !== \"function\") {\n throw new TypeError(`predicate must be a function, got ${predicate}`)\n }\n const structuredMetaMapNormalized = normalizeStructuredMetaMap(\n structuredMetaMap,\n rootDirectoryUrl,\n )\n\n const collectOperation = Abort.startOperation()\n collectOperation.addAbortSignal(signal)\n\n const matchingFileResultArray = []\n const visitDirectory = async (directoryUrl) => {\n collectOperation.throwIfAborted()\n const directoryItems = await readDirectory(directoryUrl)\n\n await Promise.all(\n directoryItems.map(async (directoryItem) => {\n const directoryChildNodeUrl = `${directoryUrl}${directoryItem}`\n\n collectOperation.throwIfAborted()\n const directoryChildNodeStats = await readFileSystemNodeStat(\n directoryChildNodeUrl,\n {\n // we ignore symlink because recursively traversed\n // so symlinked file will be discovered.\n // Moreover if they lead outside of directoryPath it can become a problem\n // like infinite recursion of whatever.\n // that we could handle using an object of pathname already seen but it will be useless\n // because directoryPath is recursively traversed\n followLink: false,\n },\n )\n\n if (directoryChildNodeStats.isDirectory()) {\n const subDirectoryUrl = `${directoryChildNodeUrl}/`\n\n if (\n !urlCanContainsMetaMatching({\n url: subDirectoryUrl,\n structuredMetaMap: structuredMetaMapNormalized,\n predicate,\n })\n ) {\n return\n }\n\n await visitDirectory(subDirectoryUrl)\n return\n }\n\n if (directoryChildNodeStats.isFile()) {\n const meta = urlToMeta({\n url: directoryChildNodeUrl,\n structuredMetaMap: structuredMetaMapNormalized,\n })\n if (!predicate(meta)) return\n\n const relativeUrl = urlToRelativeUrl(\n directoryChildNodeUrl,\n rootDirectoryUrl,\n )\n matchingFileResultArray.push({\n url: new URL(relativeUrl, rootDirectoryUrl).href,\n relativeUrl,\n meta,\n fileStats: directoryChildNodeStats,\n })\n return\n }\n }),\n )\n }\n\n try {\n await visitDirectory(rootDirectoryUrl)\n\n // When we operate on thoose files later it feels more natural\n // to perform operation in the same order they appear in the filesystem.\n // It also allow to get a predictable return value.\n // For that reason we sort matchingFileResultArray\n matchingFileResultArray.sort((leftFile, rightFile) => {\n return comparePathnames(leftFile.relativeUrl, rightFile.relativeUrl)\n })\n return matchingFileResultArray\n } finally {\n await collectOperation.end()\n }\n}\n",
|
|
85
|
-
"import { promises } from \"fs\"\nimport { statsToType } from \"./internal/statsToType.js\"\nimport { assertAndNormalizeDirectoryUrl } from \"./assertAndNormalizeDirectoryUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\n\n// https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_fspromises_mkdir_path_options\nconst { mkdir } = promises\n\nexport const writeDirectory = async (\n destination,\n { recursive = true, allowUseless = false } = {},\n) => {\n const destinationUrl = assertAndNormalizeDirectoryUrl(destination)\n const destinationPath = urlToFileSystemPath(destinationUrl)\n\n const destinationStats = await readFileSystemNodeStat(destinationUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n\n if (destinationStats) {\n if (destinationStats.isDirectory()) {\n if (allowUseless) {\n return\n }\n throw new Error(`directory already exists at ${destinationPath}`)\n }\n\n const destinationType = statsToType(destinationStats)\n throw new Error(\n `cannot write directory at ${destinationPath} because there is a ${destinationType}`,\n )\n }\n\n try {\n await mkdir(destinationPath, { recursive })\n } catch (error) {\n if (allowUseless && error.code === \"EEXIST\") {\n return\n }\n throw error\n }\n}\n",
|
|
86
|
-
"export const resolveUrl = (specifier, baseUrl) => {\n if (typeof baseUrl === \"undefined\") {\n throw new TypeError(`baseUrl missing to resolve ${specifier}`)\n }\n\n return String(new URL(specifier, baseUrl))\n}\n",
|
|
87
|
-
"import { unlink, rmdir, openSync, closeSync } from \"node:fs\"\nimport { Abort } from \"@jsenv/abort\"\n\nimport { ensureUrlTrailingSlash } from \"./internal/ensureUrlTrailingSlash.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { readDirectory } from \"./readDirectory.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\n\nexport const removeFileSystemNode = async (\n source,\n {\n signal = new AbortController().signal,\n allowUseless = false,\n recursive = false,\n maxRetries = 3,\n retryDelay = 100,\n onlyContent = false,\n } = {},\n) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n\n const removeOperation = Abort.startOperation()\n removeOperation.addAbortSignal(signal)\n\n try {\n removeOperation.throwIfAborted()\n const sourceStats = await readFileSystemNodeStat(sourceUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n if (!sourceStats) {\n if (allowUseless) {\n return\n }\n throw new Error(`nothing to remove at ${urlToFileSystemPath(sourceUrl)}`)\n }\n\n // https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_class_fs_stats\n // FIFO and socket are ignored, not sure what they are exactly and what to do with them\n // other libraries ignore them, let's do the same.\n if (\n sourceStats.isFile() ||\n sourceStats.isSymbolicLink() ||\n sourceStats.isCharacterDevice() ||\n sourceStats.isBlockDevice()\n ) {\n await removeNonDirectory(\n sourceUrl.endsWith(\"/\") ? sourceUrl.slice(0, -1) : sourceUrl,\n {\n maxRetries,\n retryDelay,\n },\n )\n } else if (sourceStats.isDirectory()) {\n await removeDirectory(ensureUrlTrailingSlash(sourceUrl), {\n signal: removeOperation.signal,\n recursive,\n maxRetries,\n retryDelay,\n onlyContent,\n })\n }\n } finally {\n await removeOperation.end()\n }\n}\n\nconst removeNonDirectory = (sourceUrl, { maxRetries, retryDelay }) => {\n const sourcePath = urlToFileSystemPath(sourceUrl)\n\n let retryCount = 0\n const attempt = () => {\n return unlinkNaive(sourcePath, {\n ...(retryCount >= maxRetries\n ? {}\n : {\n handleTemporaryError: async () => {\n retryCount++\n return new Promise((resolve) => {\n setTimeout(() => {\n resolve(attempt())\n }, retryCount * retryDelay)\n })\n },\n }),\n })\n }\n return attempt()\n}\n\nconst unlinkNaive = (sourcePath, { handleTemporaryError = null } = {}) => {\n return new Promise((resolve, reject) => {\n unlink(sourcePath, (error) => {\n if (error) {\n if (error.code === \"ENOENT\") {\n resolve()\n } else if (\n handleTemporaryError &&\n (error.code === \"EBUSY\" ||\n error.code === \"EMFILE\" ||\n error.code === \"ENFILE\" ||\n error.code === \"ENOENT\")\n ) {\n resolve(handleTemporaryError(error))\n } else {\n reject(error)\n }\n } else {\n resolve()\n }\n })\n })\n}\n\nconst removeDirectory = async (\n rootDirectoryUrl,\n { signal, maxRetries, retryDelay, recursive, onlyContent },\n) => {\n const removeDirectoryOperation = Abort.startOperation()\n removeDirectoryOperation.addAbortSignal(signal)\n\n const visit = async (sourceUrl) => {\n removeDirectoryOperation.throwIfAborted()\n const sourceStats = await readFileSystemNodeStat(sourceUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n\n // file/directory not found\n if (sourceStats === null) {\n return\n }\n\n if (\n sourceStats.isFile() ||\n sourceStats.isCharacterDevice() ||\n sourceStats.isBlockDevice()\n ) {\n await visitFile(sourceUrl)\n } else if (sourceStats.isSymbolicLink()) {\n await visitSymbolicLink(sourceUrl)\n } else if (sourceStats.isDirectory()) {\n await visitDirectory(`${sourceUrl}/`)\n }\n }\n\n const visitDirectory = async (directoryUrl) => {\n const directoryPath = urlToFileSystemPath(directoryUrl)\n const optionsFromRecursive = recursive\n ? {\n handleNotEmptyError: async () => {\n await removeDirectoryContent(directoryUrl)\n await visitDirectory(directoryUrl)\n },\n }\n : {}\n removeDirectoryOperation.throwIfAborted()\n await removeDirectoryNaive(directoryPath, {\n ...optionsFromRecursive,\n // Workaround for https://github.com/joyent/node/issues/4337\n ...(process.platform === \"win32\"\n ? {\n handlePermissionError: async (error) => {\n console.error(\n `trying to fix windows EPERM after readir on ${directoryPath}`,\n )\n\n let openOrCloseError\n try {\n const fd = openSync(directoryPath)\n closeSync(fd)\n } catch (e) {\n openOrCloseError = e\n }\n\n if (openOrCloseError) {\n if (openOrCloseError.code === \"ENOENT\") {\n return\n }\n console.error(\n `error while trying to fix windows EPERM after readir on ${directoryPath}: ${openOrCloseError.stack}`,\n )\n throw error\n }\n\n await removeDirectoryNaive(directoryPath, {\n ...optionsFromRecursive,\n })\n },\n }\n : {}),\n })\n }\n\n const removeDirectoryContent = async (directoryUrl) => {\n removeDirectoryOperation.throwIfAborted()\n const names = await readDirectory(directoryUrl)\n await Promise.all(\n names.map(async (name) => {\n const url = resolveUrl(name, directoryUrl)\n await visit(url)\n }),\n )\n }\n\n const visitFile = async (fileUrl) => {\n await removeNonDirectory(fileUrl, { maxRetries, retryDelay })\n }\n\n const visitSymbolicLink = async (symbolicLinkUrl) => {\n await removeNonDirectory(symbolicLinkUrl, { maxRetries, retryDelay })\n }\n\n try {\n if (onlyContent) {\n await removeDirectoryContent(rootDirectoryUrl)\n } else {\n await visitDirectory(rootDirectoryUrl)\n }\n } finally {\n await removeDirectoryOperation.end()\n }\n}\n\nconst removeDirectoryNaive = (\n directoryPath,\n { handleNotEmptyError = null, handlePermissionError = null } = {},\n) => {\n return new Promise((resolve, reject) => {\n rmdir(directoryPath, (error, lstatObject) => {\n if (error) {\n if (handlePermissionError && error.code === \"EPERM\") {\n resolve(handlePermissionError(error))\n } else if (error.code === \"ENOENT\") {\n resolve()\n } else if (\n handleNotEmptyError &&\n // linux os\n (error.code === \"ENOTEMPTY\" ||\n // SunOS\n error.code === \"EEXIST\")\n ) {\n resolve(handleNotEmptyError(error))\n } else {\n reject(error)\n }\n } else {\n resolve(lstatObject)\n }\n })\n })\n}\n",
|
|
88
|
-
"import { statsToType } from \"./internal/statsToType.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { writeDirectory } from \"./writeDirectory.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { removeFileSystemNode } from \"./removeFileSystemNode.js\"\n\nexport const ensureEmptyDirectory = async (source) => {\n const stats = await readFileSystemNodeStat(source, {\n nullIfNotFound: true,\n followLink: false,\n })\n if (stats === null) {\n // if there is nothing, create a directory\n return writeDirectory(source, { allowUseless: true })\n }\n if (stats.isDirectory()) {\n // if there is a directory remove its content and done\n return removeFileSystemNode(source, {\n allowUseless: true,\n recursive: true,\n onlyContent: true,\n })\n }\n\n const sourceType = statsToType(stats)\n const sourcePath = urlToFileSystemPath(assertAndNormalizeFileUrl(source))\n throw new Error(\n `ensureEmptyDirectory expect directory at ${sourcePath}, found ${sourceType} instead`,\n )\n}\n",
|
|
89
|
-
"import { dirname } from \"path\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { writeDirectory } from \"./writeDirectory.js\"\n\nexport const ensureParentDirectories = async (destination) => {\n const destinationUrl = assertAndNormalizeFileUrl(destination)\n const destinationPath = urlToFileSystemPath(destinationUrl)\n const destinationParentPath = dirname(destinationPath)\n\n return writeDirectory(destinationParentPath, {\n recursive: true,\n allowUseless: true,\n })\n}\n",
|
|
90
|
-
"import { fileSystemPathToUrl } from \"./fileSystemPathToUrl.js\"\n\nconst isWindows = process.platform === \"win32\"\nconst baseUrlFallback = fileSystemPathToUrl(process.cwd())\n\n/**\n * Some url might be resolved or remapped to url without the windows drive letter.\n * For instance\n * new URL('/foo.js', 'file:///C:/dir/file.js')\n * resolves to\n * 'file:///foo.js'\n *\n * But on windows it becomes a problem because we need the drive letter otherwise\n * url cannot be converted to a filesystem path.\n *\n * ensureWindowsDriveLetter ensure a resolved url still contains the drive letter.\n */\n\nexport const ensureWindowsDriveLetter = (url, baseUrl) => {\n try {\n url = String(new URL(url))\n } catch (e) {\n throw new Error(`absolute url expected but got ${url}`)\n }\n\n if (!isWindows) {\n return url\n }\n\n try {\n baseUrl = String(new URL(baseUrl))\n } catch (e) {\n throw new Error(\n `absolute baseUrl expected but got ${baseUrl} to ensure windows drive letter on ${url}`,\n )\n }\n\n if (!url.startsWith(\"file://\")) {\n return url\n }\n const afterProtocol = url.slice(\"file://\".length)\n // we still have the windows drive letter\n if (extractDriveLetter(afterProtocol)) {\n return url\n }\n\n // drive letter was lost, restore it\n const baseUrlOrFallback = baseUrl.startsWith(\"file://\")\n ? baseUrl\n : baseUrlFallback\n const driveLetter = extractDriveLetter(\n baseUrlOrFallback.slice(\"file://\".length),\n )\n if (!driveLetter) {\n throw new Error(\n `drive letter expected on baseUrl but got ${baseUrl} to ensure windows drive letter on ${url}`,\n )\n }\n return `file:///${driveLetter}:${afterProtocol}`\n}\n\nconst extractDriveLetter = (ressource) => {\n // we still have the windows drive letter\n if (/[a-zA-Z]/.test(ressource[1]) && ressource[2] === \":\") {\n return ressource[1]\n }\n return null\n}\n",
|
|
91
|
-
"export const urlTargetsSameFileSystemPath = (leftUrl, rightUrl) => {\n if (leftUrl.endsWith(\"/\")) leftUrl = leftUrl.slice(0, -1)\n if (rightUrl.endsWith(\"/\")) rightUrl = rightUrl.slice(0, -1)\n return leftUrl === rightUrl\n}\n",
|
|
92
|
-
"import { utimes } from \"fs\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nexport const writeFileSystemNodeModificationTime = (source, mtime) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n const sourcePath = urlToFileSystemPath(sourceUrl)\n const mtimeValue =\n typeof mtime === \"number\" ? new Date(Math.floor(mtime)) : mtime\n // reading atime mutates its value so there is no use case I can think of\n // where we want to modify it\n const atimeValue = mtimeValue\n\n return new Promise((resolve, reject) => {\n utimes(sourcePath, atimeValue, mtimeValue, (error) => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n })\n })\n}\n",
|
|
93
|
-
"export const replaceBackSlashesWithSlashes = (string) =>\n string.replace(/\\\\/g, \"/\")\n",
|
|
94
|
-
"/*\n * - symlink documentation on Node.js:\n * https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_fs_symlink_target_path_type_callback\n */\n\nimport { readlink } from \"node:fs\"\n\nimport { replaceBackSlashesWithSlashes } from \"./internal/replaceBackSlashesWithSlashes.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { fileSystemPathToUrl } from \"./fileSystemPathToUrl.js\"\nimport { isFileSystemPath } from \"./isFileSystemPath.js\"\n\nexport const readSymbolicLink = (url) => {\n const symbolicLinkUrl = assertAndNormalizeFileUrl(url)\n const symbolicLinkPath = urlToFileSystemPath(symbolicLinkUrl)\n\n return new Promise((resolve, reject) => {\n readlink(symbolicLinkPath, (error, resolvedPath) => {\n if (error) {\n reject(error)\n } else {\n resolve(\n isFileSystemPath(resolvedPath)\n ? fileSystemPathToUrl(resolvedPath)\n : replaceBackSlashesWithSlashes(resolvedPath),\n )\n }\n })\n })\n}\n",
|
|
95
|
-
"import { promises } from \"node:fs\"\n\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { fileSystemPathToUrl } from \"./fileSystemPathToUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\nimport { isFileSystemPath } from \"./isFileSystemPath.js\"\nimport { ensureParentDirectories } from \"./ensureParentDirectories.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { readSymbolicLink } from \"./readSymbolicLink.js\"\nimport { removeFileSystemNode } from \"./removeFileSystemNode.js\"\n\n// https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_fspromises_symlink_target_path_type\nconst { symlink } = promises\nconst isWindows = process.platform === \"win32\"\n\n/**\n * Writes a symbolic link pointing from a filesystem node to an other\n * @param {string} from Where symlink is written\n * @param {string} to The symlink target\n * @param {\"file\" | \"dir\"} [type] Symlink type if you know it before hand\n * @param {boolean} [allowUseless=false] Prevent error when symlink already exists with the same target\n * @param {boolean} [allowOverwrite=false] Will replace any existing symlink\n */\nexport const writeSymbolicLink = async ({\n from,\n to,\n type,\n allowUseless = false,\n allowOverwrite = false,\n}) => {\n const fromUrl = assertAndNormalizeFileUrl(from)\n const toInfo = getToInfo(to, fromUrl)\n\n if (isWindows && typeof type === \"undefined\") {\n // without this if you write a symbolic link without specifying the type on windows\n // you later get EPERM when doing stat on the symlink\n const toStats = await readFileSystemNodeStat(toInfo.url, {\n nullIfNotFound: true,\n })\n type = toStats && toStats.isDirectory() ? \"dir\" : \"file\"\n }\n\n const symbolicLinkPath = urlToFileSystemPath(fromUrl)\n try {\n await symlink(toInfo.value, symbolicLinkPath, type)\n } catch (error) {\n if (error.code === \"ENOENT\") {\n await ensureParentDirectories(fromUrl)\n await symlink(toInfo.value, symbolicLinkPath, type)\n return\n }\n if (error.code === \"EEXIST\") {\n if (allowUseless) {\n const existingSymbolicLinkUrl = await readSymbolicLink(fromUrl)\n if (existingSymbolicLinkUrl === toInfo.url) {\n return\n }\n }\n if (allowOverwrite) {\n await removeFileSystemNode(fromUrl)\n await symlink(toInfo.value, symbolicLinkPath, type)\n return\n }\n }\n throw error\n }\n}\n\nconst getToInfo = (to, fromUrl) => {\n if (typeof to === \"string\") {\n // absolute filesystem path\n if (isFileSystemPath(to)) {\n const url = fileSystemPathToUrl(to)\n const value = to\n return {\n url,\n value,\n }\n }\n\n // relative url\n if (to.startsWith(\"./\") || to.startsWith(\"../\")) {\n const url = resolveUrl(to, fromUrl)\n const value = to\n return {\n url,\n value,\n }\n }\n\n // absolute url\n const url = resolveUrl(to, fromUrl)\n const value = urlToFileSystemPath(url)\n return {\n url,\n value,\n }\n }\n\n if (to instanceof URL) {\n const url = String(to)\n const value = urlToFileSystemPath(url)\n return {\n url,\n value,\n }\n }\n\n throw new TypeError(\n `symbolic link to must be a string or an url, received ${to}`,\n )\n}\n",
|
|
96
|
-
"export const urlIsInsideOf = (url, otherUrl) => {\n const urlObject = new URL(url)\n const otherUrlObject = new URL(otherUrl)\n\n if (urlObject.origin !== otherUrlObject.origin) {\n return false\n }\n\n const urlPathname = urlObject.pathname\n const otherUrlPathname = otherUrlObject.pathname\n if (urlPathname === otherUrlPathname) {\n return false\n }\n\n const isInside = urlPathname.startsWith(otherUrlPathname)\n return isInside\n}\n",
|
|
97
|
-
"import { copyFile as copyFileNode } from \"node:fs\"\nimport { Abort } from \"@jsenv/abort\"\n\nimport { urlTargetsSameFileSystemPath } from \"./internal/urlTargetsSameFileSystemPath.js\"\nimport { statsToType } from \"./internal/statsToType.js\"\nimport { ensureUrlTrailingSlash } from \"./internal/ensureUrlTrailingSlash.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\nimport { binaryFlagsToPermissions } from \"./internal/permissions.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { writeDirectory } from \"./writeDirectory.js\"\nimport { urlToRelativeUrl } from \"./urlToRelativeUrl.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { ensureParentDirectories } from \"./ensureParentDirectories.js\"\nimport { writeFileSystemNodePermissions } from \"./writeFileSystemNodePermissions.js\"\nimport { writeFileSystemNodeModificationTime } from \"./writeFileSystemNodeModificationTime.js\"\nimport { readDirectory } from \"./readDirectory.js\"\nimport { readSymbolicLink } from \"./readSymbolicLink.js\"\nimport { writeSymbolicLink } from \"./writeSymbolicLink.js\"\nimport { urlIsInsideOf } from \"./urlIsInsideOf.js\"\nimport { removeFileSystemNode } from \"./removeFileSystemNode.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nexport const copyFileSystemNode = async ({\n signal = new AbortController().signal,\n from,\n to,\n overwrite = false,\n preserveStat = true,\n preserveMtime = preserveStat,\n preservePermissions = preserveStat,\n allowUseless = false,\n followLink = true,\n}) => {\n const fromUrl = assertAndNormalizeFileUrl(from)\n const fromPath = urlToFileSystemPath(fromUrl)\n let toUrl = assertAndNormalizeFileUrl(to)\n let toPath = urlToFileSystemPath(toUrl)\n\n const sourceStats = await readFileSystemNodeStat(fromUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n if (!sourceStats) {\n throw new Error(`nothing to copy at ${fromPath}`)\n }\n\n let destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n // we force false here but in fact we will follow the destination link\n // to know where we will actually move and detect useless move overrite etc..\n followLink: false,\n })\n\n if (followLink && destinationStats && destinationStats.isSymbolicLink()) {\n const linkTarget = await readSymbolicLink(toUrl)\n toUrl = resolveUrl(linkTarget, toUrl)\n toPath = urlToFileSystemPath(toUrl)\n destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n })\n }\n\n if (urlTargetsSameFileSystemPath(fromUrl, toUrl)) {\n if (allowUseless) {\n return\n }\n throw new Error(\n `cannot copy ${fromPath} because destination and source are the same`,\n )\n }\n\n if (sourceStats.isDirectory()) {\n toUrl = ensureUrlTrailingSlash(toUrl)\n }\n\n const copyOperation = Abort.startOperation()\n copyOperation.addAbortSignal(signal)\n\n const visit = async (url, stats) => {\n copyOperation.throwIfAborted()\n if (stats.isFile() || stats.isCharacterDevice() || stats.isBlockDevice()) {\n await visitFile(url, stats)\n } else if (stats.isSymbolicLink()) {\n await visitSymbolicLink(url, stats)\n } else if (stats.isDirectory()) {\n await visitDirectory(ensureUrlTrailingSlash(url), stats)\n }\n }\n\n const visitFile = async (fileUrl, fileStats) => {\n const fileRelativeUrl = urlToRelativeUrl(fileUrl, fromUrl)\n const fileCopyUrl = resolveUrl(fileRelativeUrl, toUrl)\n\n await copyFileContentNaive(\n urlToFileSystemPath(fileUrl),\n urlToFileSystemPath(fileCopyUrl),\n )\n await copyStats(fileCopyUrl, fileStats)\n }\n\n const visitSymbolicLink = async (symbolicLinkUrl) => {\n const symbolicLinkRelativeUrl = urlToRelativeUrl(symbolicLinkUrl, fromUrl)\n const symbolicLinkTarget = await readSymbolicLink(symbolicLinkUrl)\n const symbolicLinkTargetUrl = resolveUrl(\n symbolicLinkTarget,\n symbolicLinkUrl,\n )\n const linkIsRelative =\n symbolicLinkTarget.startsWith(\"./\") ||\n symbolicLinkTarget.startsWith(\"../\")\n\n let symbolicLinkCopyTarget\n if (symbolicLinkTargetUrl === fromUrl) {\n symbolicLinkCopyTarget = linkIsRelative ? symbolicLinkTarget : toUrl\n } else if (urlIsInsideOf(symbolicLinkTargetUrl, fromUrl)) {\n // symbolic link targets something inside the directory we want to copy\n // reflects it inside the copied directory structure\n const linkCopyTargetRelative = urlToRelativeUrl(\n symbolicLinkTargetUrl,\n fromUrl,\n )\n symbolicLinkCopyTarget = linkIsRelative\n ? `./${linkCopyTargetRelative}`\n : resolveUrl(linkCopyTargetRelative, toUrl)\n } else {\n // symbolic link targets something outside the directory we want to copy\n symbolicLinkCopyTarget = symbolicLinkTarget\n }\n\n // we must guess ourself the type of the symlink\n // because the destination might not exists because not yet copied\n // https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_fs_symlink_target_path_type_callback\n const targetStats = await readFileSystemNodeStat(symbolicLinkTargetUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n const linkType = targetStats && targetStats.isDirectory() ? \"dir\" : \"file\"\n\n const symbolicLinkCopyUrl = resolveUrl(symbolicLinkRelativeUrl, toUrl)\n await writeSymbolicLink({\n from: symbolicLinkCopyUrl,\n to: symbolicLinkCopyTarget,\n type: linkType,\n })\n }\n\n const copyStats = async (toUrl, stats) => {\n if (preservePermissions || preserveMtime) {\n const { mode, mtimeMs } = stats\n if (preservePermissions) {\n await writeFileSystemNodePermissions(\n toUrl,\n binaryFlagsToPermissions(mode),\n )\n }\n if (preserveMtime) {\n await writeFileSystemNodeModificationTime(toUrl, mtimeMs)\n }\n }\n }\n\n const visitDirectory = async (directoryUrl, directoryStats) => {\n const directoryRelativeUrl = urlToRelativeUrl(directoryUrl, fromUrl)\n const directoryCopyUrl = resolveUrl(directoryRelativeUrl, toUrl)\n\n await writeDirectory(directoryCopyUrl)\n await copyDirectoryContent(directoryUrl)\n await copyStats(directoryCopyUrl, directoryStats)\n }\n\n const copyDirectoryContent = async (directoryUrl) => {\n const names = await readDirectory(directoryUrl)\n await Promise.all(\n names.map(async (name) => {\n const fileSystemNodeUrl = resolveUrl(name, directoryUrl)\n const stats = await readFileSystemNodeStat(fileSystemNodeUrl, {\n followLink: false,\n })\n await visit(fileSystemNodeUrl, stats)\n }),\n )\n }\n\n try {\n if (destinationStats) {\n const sourceType = statsToType(sourceStats)\n const destinationType = statsToType(destinationStats)\n\n if (sourceType !== destinationType) {\n throw new Error(\n `cannot copy ${sourceType} from ${fromPath} to ${toPath} because destination exists and is not a ${sourceType} (it's a ${destinationType})`,\n )\n }\n if (!overwrite) {\n throw new Error(\n `cannot copy ${sourceType} from ${fromPath} to ${toPath} because destination exists and overwrite option is disabled`,\n )\n }\n\n // remove file, link, directory...\n await removeFileSystemNode(toUrl, {\n signal: copyOperation.signal,\n recursive: true,\n allowUseless: true,\n })\n } else {\n await ensureParentDirectories(toUrl)\n }\n\n copyOperation.throwIfAborted()\n await visit(fromUrl, sourceStats)\n } finally {\n await copyOperation.end()\n }\n}\n\nconst copyFileContentNaive = (filePath, fileDestinationPath) => {\n return new Promise((resolve, reject) => {\n copyFileNode(filePath, fileDestinationPath, (error) => {\n if (error) {\n reject(error)\n } else {\n resolve()\n }\n })\n })\n}\n",
|
|
98
|
-
"import { Abort } from \"@jsenv/abort\"\n\nimport { assertAndNormalizeDirectoryUrl } from \"./assertAndNormalizeDirectoryUrl.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { readSymbolicLink } from \"./readSymbolicLink.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\nimport { readDirectory } from \"./readDirectory.js\"\nimport { copyFileSystemNode } from \"./copyFileSystemNode.js\"\nimport { urlTargetsSameFileSystemPath } from \"./internal/urlTargetsSameFileSystemPath.js\"\nimport { statsToType } from \"./internal/statsToType.js\"\n\nexport const copyDirectoryContent = async ({\n signal = new AbortController().signal,\n from,\n to,\n overwrite,\n followLink = true,\n} = {}) => {\n const fromUrl = assertAndNormalizeDirectoryUrl(from)\n const fromPath = urlToFileSystemPath(fromUrl)\n let toUrl = assertAndNormalizeDirectoryUrl(to)\n let toPath = urlToFileSystemPath(toUrl)\n\n const sourceStats = await readFileSystemNodeStat(fromUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n if (!sourceStats) {\n throw new Error(`no directory to copy content from at ${fromPath}`)\n }\n if (!sourceStats.isDirectory()) {\n const sourceType = statsToType(sourceStats)\n throw new Error(\n `found a ${sourceType} instead of a directory at ${fromPath}`,\n )\n }\n\n let destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n // we force false here but in fact we will follow the destination link\n // to know where we will actually move and detect useless move overrite etc..\n followLink: false,\n })\n if (followLink && destinationStats && destinationStats.isSymbolicLink()) {\n const linkTarget = await readSymbolicLink(toUrl)\n toUrl = resolveUrl(linkTarget, toUrl)\n toPath = urlToFileSystemPath(toUrl)\n destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n })\n }\n\n if (destinationStats === null) {\n throw new Error(`no directory to copy content into at ${toPath}`)\n }\n if (!destinationStats.isDirectory()) {\n const destinationType = statsToType(destinationStats)\n throw new Error(\n `destination leads to a ${destinationType} instead of a directory at ${toPath}`,\n )\n }\n\n if (urlTargetsSameFileSystemPath(fromUrl, toUrl)) {\n throw new Error(\n `cannot copy directory content, source and destination are the same (${fromPath})`,\n )\n }\n\n const copyOperation = Abort.startOperation()\n copyOperation.addAbortSignal(signal)\n try {\n copyOperation.throwIfAborted()\n const directoryEntries = await readDirectory(fromUrl)\n await Promise.all(\n directoryEntries.map(async (directoryEntry) => {\n const from = resolveUrl(directoryEntry, fromUrl)\n const to = resolveUrl(directoryEntry, toUrl)\n await copyOperation.withSignal(async (signal) => {\n await copyFileSystemNode({\n signal,\n from,\n to,\n overwrite,\n followLink,\n })\n })\n }),\n )\n } finally {\n await copyOperation.end()\n }\n}\n",
|
|
99
|
-
"/*\n * - file modes documentation on Node.js\n * https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_file_modes\n */\n\nimport { promises } from \"node:fs\"\n\nimport { binaryFlagsToPermissions } from \"./internal/permissions.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nconst { stat } = promises\n\nexport const readFileSystemNodePermissions = async (source) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n const sourcePath = urlToFileSystemPath(sourceUrl)\n\n const { mode } = await stat(sourcePath)\n return binaryFlagsToPermissions(mode)\n}\n",
|
|
100
|
-
"import { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { readFileSystemNodePermissions } from \"./readFileSystemNodePermissions.js\"\nimport { writeFileSystemNodePermissions } from \"./writeFileSystemNodePermissions.js\"\n\nexport const grantPermissionsOnFileSystemNode = async (\n source,\n { read = false, write = false, execute = false },\n) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n\n const filePermissions = await readFileSystemNodePermissions(sourceUrl)\n await writeFileSystemNodePermissions(sourceUrl, {\n owner: { read, write, execute },\n group: { read, write, execute },\n others: { read, write, execute },\n })\n return async () => {\n await writeFileSystemNodePermissions(sourceUrl, filePermissions)\n }\n}\n",
|
|
101
|
-
"import { collectFiles } from \"./collectFiles.js\"\n\nexport const listFilesMatching = async (\n patterns,\n directoryUrl = process.cwd(),\n signal,\n) => {\n if (typeof patterns === \"string\") {\n patterns = [patterns]\n } else if (Array.isArray(patterns)) {\n throw new TypeError(\n `patterns must be a string or an array of strings, got ${patterns}`,\n )\n }\n\n const patternMap = {}\n patterns.forEach((pattern, index) => {\n if (typeof pattern !== \"string\") {\n throw new TypeError(\n `every pattern must be a string, found ${pattern} at index ${index}`,\n )\n }\n patternMap[pattern] = true\n })\n\n const fileDatas = await collectFiles({\n signal,\n directoryUrl,\n structuredMetaMap: {\n matches: patternMap,\n },\n predicate: ({ matches }) => matches,\n })\n\n return fileDatas.map(({ url }) => url)\n}\n",
|
|
102
|
-
"export const memoize = (compute) => {\n let memoized = false\n let memoizedValue\n\n const fnWithMemoization = (...args) => {\n if (memoized) {\n return memoizedValue\n }\n // if compute is recursive wait for it to be fully done before storing the value\n // so set memoized boolean after the call\n memoizedValue = compute(...args)\n memoized = true\n return memoizedValue\n }\n\n fnWithMemoization.forget = () => {\n const value = memoizedValue\n memoized = false\n memoizedValue = undefined\n return value\n }\n\n return fnWithMemoization\n}\n",
|
|
103
|
-
"import { rename } from \"node:fs\"\nimport { Abort } from \"@jsenv/abort\"\n\nimport { urlTargetsSameFileSystemPath } from \"./internal/urlTargetsSameFileSystemPath.js\"\nimport { statsToType } from \"./internal/statsToType.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\nimport { ensureParentDirectories } from \"./ensureParentDirectories.js\"\nimport { removeFileSystemNode } from \"./removeFileSystemNode.js\"\nimport { copyFileSystemNode } from \"./copyFileSystemNode.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { readSymbolicLink } from \"./readSymbolicLink.js\"\n\nexport const moveFileSystemNode = async ({\n signal = new AbortController().signal,\n from,\n to,\n overwrite = false,\n allowUseless = false,\n followLink = true,\n}) => {\n const fromUrl = assertAndNormalizeFileUrl(from)\n const fromPath = urlToFileSystemPath(fromUrl)\n let toUrl = assertAndNormalizeFileUrl(to)\n let toPath = urlToFileSystemPath(toUrl)\n\n const sourceStats = await readFileSystemNodeStat(fromUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n if (!sourceStats) {\n throw new Error(`nothing to move from ${fromPath}`)\n }\n\n let destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n // we force false here but in fact we will follow the destination link\n // to know where we will actually move and detect useless move overrite etc..\n followLink: false,\n })\n\n if (followLink && destinationStats && destinationStats.isSymbolicLink()) {\n const linkTarget = await readSymbolicLink(toUrl)\n toUrl = resolveUrl(linkTarget, toUrl)\n toPath = urlToFileSystemPath(toUrl)\n destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n })\n }\n\n if (urlTargetsSameFileSystemPath(fromUrl, toUrl)) {\n if (allowUseless) {\n return\n }\n throw new Error(\n `no move needed for ${fromPath} because destination and source are the same`,\n )\n }\n\n const moveOperation = Abort.startOperation()\n moveOperation.addAbortSignal(signal)\n\n try {\n if (destinationStats) {\n const sourceType = statsToType(sourceStats)\n const destinationType = statsToType(destinationStats)\n\n if (sourceType !== destinationType) {\n throw new Error(\n `cannot move ${sourceType} from ${fromPath} to ${toPath} because destination exists and is not a ${sourceType} (it's a ${destinationType})`,\n )\n }\n if (!overwrite) {\n throw new Error(\n `cannot move ${sourceType} from ${fromPath} to ${toPath} because destination exists and overwrite option is disabled`,\n )\n }\n\n // remove file, link, directory...\n await removeFileSystemNode(toUrl, {\n signal: moveOperation.signal,\n recursive: true,\n })\n } else {\n await ensureParentDirectories(toUrl)\n }\n\n moveOperation.throwIfAborted()\n await moveNaive(fromPath, toPath, {\n handleCrossDeviceError: async () => {\n await copyFileSystemNode({\n from: fromUrl,\n to: toUrl,\n preserveStat: true,\n })\n await removeFileSystemNode(fromUrl, {\n signal: moveOperation.signal,\n recursive: true,\n })\n },\n })\n } finally {\n await moveOperation.end()\n }\n}\n\nconst moveNaive = (\n fromPath,\n destinationPath,\n { handleCrossDeviceError = null } = {},\n) => {\n return new Promise((resolve, reject) => {\n rename(fromPath, destinationPath, (error) => {\n if (error) {\n if (handleCrossDeviceError && error.code === \"EXDEV\") {\n resolve(handleCrossDeviceError(error))\n } else {\n reject(error)\n }\n } else {\n resolve()\n }\n })\n })\n}\n",
|
|
104
|
-
"import { Abort } from \"@jsenv/abort\"\n\nimport { assertAndNormalizeDirectoryUrl } from \"./assertAndNormalizeDirectoryUrl.js\"\nimport { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { readSymbolicLink } from \"./readSymbolicLink.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\nimport { readDirectory } from \"./readDirectory.js\"\nimport { moveFileSystemNode } from \"./moveFileSystemNode.js\"\nimport { urlTargetsSameFileSystemPath } from \"./internal/urlTargetsSameFileSystemPath.js\"\nimport { statsToType } from \"./internal/statsToType.js\"\n\nexport const moveDirectoryContent = async ({\n signal = new AbortController().signal,\n from,\n to,\n overwrite,\n followLink = true,\n} = {}) => {\n const fromUrl = assertAndNormalizeDirectoryUrl(from)\n const fromPath = urlToFileSystemPath(fromUrl)\n let toUrl = assertAndNormalizeDirectoryUrl(to)\n let toPath = urlToFileSystemPath(toUrl)\n\n const sourceStats = await readFileSystemNodeStat(fromUrl, {\n nullIfNotFound: true,\n followLink: false,\n })\n if (!sourceStats) {\n throw new Error(`no directory to move content from at ${fromPath}`)\n }\n if (!sourceStats.isDirectory()) {\n const sourceType = statsToType(sourceStats)\n throw new Error(\n `found a ${sourceType} instead of a directory at ${fromPath}`,\n )\n }\n\n let destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n // we force false here but in fact we will follow the destination link\n // to know where we will actually move and detect useless move overrite etc..\n followLink: false,\n })\n if (followLink && destinationStats && destinationStats.isSymbolicLink()) {\n const linkTarget = await readSymbolicLink(toUrl)\n toUrl = resolveUrl(linkTarget, toUrl)\n toPath = urlToFileSystemPath(toUrl)\n destinationStats = await readFileSystemNodeStat(toUrl, {\n nullIfNotFound: true,\n })\n }\n\n if (destinationStats === null) {\n throw new Error(`no directory to move content into at ${toPath}`)\n }\n if (!destinationStats.isDirectory()) {\n const destinationType = statsToType(destinationStats)\n throw new Error(\n `destination leads to a ${destinationType} instead of a directory at ${toPath}`,\n )\n }\n\n if (urlTargetsSameFileSystemPath(fromUrl, toUrl)) {\n throw new Error(\n `cannot move directory content, source and destination are the same (${fromPath})`,\n )\n }\n\n const moveOperation = Abort.startOperation()\n moveOperation.addAbortSignal(signal)\n try {\n moveOperation.throwIfAborted()\n const directoryEntries = await readDirectory(fromUrl)\n await Promise.all(\n directoryEntries.map(async (directoryEntry) => {\n const from = resolveUrl(directoryEntry, fromUrl)\n const to = resolveUrl(directoryEntry, toUrl)\n\n await moveOperation.withSignal(async (signal) => {\n await moveFileSystemNode({\n signal,\n from,\n to,\n overwrite,\n followLink,\n })\n })\n }),\n )\n } finally {\n await moveOperation.end()\n }\n}\n",
|
|
105
|
-
"import { promisify } from \"util\"\nimport { readFile as readFileNode } from \"fs\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nconst readFilePromisified = promisify(readFileNode)\nexport const readFile = async (value, { as = \"string\" } = {}) => {\n const fileUrl = assertAndNormalizeFileUrl(value)\n const filePath = urlToFileSystemPath(fileUrl)\n const buffer = await readFilePromisified(filePath)\n if (as === \"buffer\") {\n return buffer\n }\n if (as === \"string\") {\n return buffer.toString()\n }\n if (as === \"json\") {\n return JSON.parse(buffer.toString())\n }\n throw new Error(`as must be one of buffer,string,json, received ${as}.`)\n}\n",
|
|
106
|
-
"import { readFileSystemNodeStat } from \"./readFileSystemNodeStat.js\"\n\nexport const readFileSystemNodeModificationTime = async (source) => {\n const stats = await readFileSystemNodeStat(source)\n return Math.floor(stats.mtimeMs)\n}\n",
|
|
107
|
-
"import { statSync } from \"fs\"\nimport { urlToFileSystemPath } from \"../urlToFileSystemPath.js\"\nimport { statsToType } from \"./statsToType.js\"\n\nexport const fileSystemNodeToTypeOrNull = (url) => {\n const path = urlToFileSystemPath(url)\n try {\n const stats = statSync(path)\n return statsToType(stats)\n } catch (e) {\n if (e.code === \"ENOENT\") {\n return null\n }\n throw e\n }\n}\n",
|
|
108
|
-
"import { watch, openSync, closeSync } from \"fs\"\n\nconst isWindows = process.platform === \"win32\"\n\nexport const createWatcher = (sourcePath, options) => {\n const watcher = watch(sourcePath, options)\n\n if (isWindows) {\n watcher.on(\"error\", async (error) => {\n // https://github.com/joyent/node/issues/4337\n if (error.code === \"EPERM\") {\n try {\n const fd = openSync(sourcePath, \"r\")\n closeSync(fd)\n } catch (e) {\n if (e.code === \"ENOENT\") {\n return\n }\n console.error(`error while fixing windows eperm: ${e.stack}`)\n throw error\n }\n } else {\n throw error\n }\n })\n }\n\n return watcher\n}\n",
|
|
109
|
-
"export const trackRessources = () => {\n const callbackArray = []\n\n const registerCleanupCallback = (callback) => {\n if (typeof callback !== \"function\")\n throw new TypeError(`callback must be a function\ncallback: ${callback}`)\n callbackArray.push(callback)\n return () => {\n const index = callbackArray.indexOf(callback)\n if (index > -1) callbackArray.splice(index, 1)\n }\n }\n\n const cleanup = async (reason) => {\n const localCallbackArray = callbackArray.slice()\n await Promise.all(localCallbackArray.map((callback) => callback(reason)))\n }\n\n return { registerCleanupCallback, cleanup }\n}\n",
|
|
110
|
-
"/* eslint-disable import/max-dependencies */\nimport { readdirSync } from \"fs\"\nimport {\n normalizeStructuredMetaMap,\n urlCanContainsMetaMatching,\n urlToMeta,\n} from \"@jsenv/url-meta\"\nimport { replaceBackSlashesWithSlashes } from \"./internal/replaceBackSlashesWithSlashes.js\"\nimport { fileSystemNodeToTypeOrNull } from \"./internal/fileSystemNodeToTypeOrNull.js\"\nimport { createWatcher } from \"./internal/createWatcher.js\"\nimport { trackRessources } from \"./internal/trackRessources.js\"\nimport { ensureUrlTrailingSlash } from \"./internal/ensureUrlTrailingSlash.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { urlToRelativeUrl } from \"./urlToRelativeUrl.js\"\n\nconst isLinux = process.platform === \"linux\"\n// linux does not support recursive option\nconst fsWatchSupportsRecursive = !isLinux\n\nexport const registerDirectoryLifecycle = (\n source,\n {\n added,\n updated,\n removed,\n watchDescription = {\n \"./**/*\": true,\n },\n notifyExistent = false,\n keepProcessAlive = true,\n recursive = false,\n },\n) => {\n const sourceUrl = ensureUrlTrailingSlash(assertAndNormalizeFileUrl(source))\n if (!undefinedOrFunction(added)) {\n throw new TypeError(`added must be a function or undefined, got ${added}`)\n }\n if (!undefinedOrFunction(updated)) {\n throw new TypeError(\n `updated must be a function or undefined, got ${updated}`,\n )\n }\n if (!undefinedOrFunction(removed)) {\n throw new TypeError(\n `removed must be a function or undefined, got ${removed}`,\n )\n }\n\n const structuredMetaMap = normalizeStructuredMetaMap(\n { watch: watchDescription },\n sourceUrl,\n )\n const entryShouldBeWatched = ({ relativeUrl, type }) => {\n const entryUrl = resolveUrl(relativeUrl, sourceUrl)\n\n if (type === \"directory\") {\n const canContainEntryToWatch = urlCanContainsMetaMatching({\n url: `${entryUrl}/`,\n structuredMetaMap,\n predicate: ({ watch }) => watch,\n })\n return canContainEntryToWatch\n }\n\n const entryMeta = urlToMeta({\n url: entryUrl,\n structuredMetaMap,\n })\n\n return entryMeta.watch\n }\n\n const tracker = trackRessources()\n\n const contentMap = new Map()\n\n const handleDirectoryEvent = ({\n directoryRelativeUrl,\n filename,\n eventType,\n }) => {\n if (filename) {\n if (directoryRelativeUrl) {\n handleChange(`${directoryRelativeUrl}/${filename}`)\n } else {\n handleChange(`${filename}`)\n }\n } else if ((removed || added) && eventType === \"rename\") {\n // we might receive `rename` without filename\n // in that case we try to find ourselves which file was removed.\n\n let relativeUrlCandidateArray = Array.from(contentMap.keys())\n\n if (recursive && !fsWatchSupportsRecursive) {\n relativeUrlCandidateArray = relativeUrlCandidateArray.filter(\n (relativeUrlCandidate) => {\n if (!directoryRelativeUrl) {\n // ensure entry is top level\n if (relativeUrlCandidate.includes(\"/\")) return false\n return true\n }\n\n // entry not inside this directory\n if (!relativeUrlCandidate.startsWith(directoryRelativeUrl))\n return false\n\n const afterDirectory = relativeUrlCandidate.slice(\n directoryRelativeUrl.length + 1,\n )\n // deep inside this directory\n if (afterDirectory.includes(\"/\")) return false\n\n return true\n },\n )\n }\n\n const removedEntryRelativeUrl = relativeUrlCandidateArray.find(\n (relativeUrlCandidate) => {\n const entryUrl = resolveUrl(relativeUrlCandidate, sourceUrl)\n const type = fileSystemNodeToTypeOrNull(entryUrl)\n return type === null\n },\n )\n\n if (removedEntryRelativeUrl) {\n handleEntryLost({\n relativeUrl: removedEntryRelativeUrl,\n type: contentMap.get(removedEntryRelativeUrl),\n })\n }\n }\n }\n\n const handleChange = (relativeUrl) => {\n const entryUrl = resolveUrl(relativeUrl, sourceUrl)\n const previousType = contentMap.get(relativeUrl)\n const type = fileSystemNodeToTypeOrNull(entryUrl)\n\n if (!entryShouldBeWatched({ relativeUrl, type })) {\n return\n }\n\n // it's something new\n if (!previousType) {\n if (type !== null) {\n handleEntryFound({ relativeUrl, type, existent: false })\n }\n return\n }\n\n // it existed but now it's not here anymore\n if (type === null) {\n handleEntryLost({ relativeUrl, type: previousType })\n return\n }\n\n // it existed and was replaced by something else\n // we don't handle this as an update. We rather say the ressource\n // is lost and something else is found (call removed() then added())\n if (previousType !== type) {\n handleEntryLost({ relativeUrl, type: previousType })\n handleEntryFound({ relativeUrl, type })\n return\n }\n\n // a directory cannot really be updated in way that matters for us\n // filesystem is trying to tell us the directory content have changed\n // but we don't care about that\n // we'll already be notified about what has changed\n if (type === \"directory\") {\n return\n }\n\n // something has changed at this relativeUrl (the file existed and was not deleted)\n // it's possible to get there and there is no real update\n // (file content is the same and file mtime is the same).\n // In short filesystem is sometimes \"lying\"\n // Not trying to guard against that because:\n // - hurt perfs a lot\n // - it happens very rarely\n // - it's not really a concern in practice\n // - filesystem did not send an event out of nowhere:\n // something occured but we don't know what with the information we have.\n if (updated) {\n updated({ relativeUrl, type })\n }\n }\n\n const handleEntryFound = ({ relativeUrl, type, existent }) => {\n if (!entryShouldBeWatched({ relativeUrl, type })) {\n return\n }\n\n contentMap.set(relativeUrl, type)\n\n const entryUrl = resolveUrl(relativeUrl, sourceUrl)\n\n if (type === \"directory\") {\n visitDirectory({\n directoryUrl: `${entryUrl}/`,\n entryFound: (entry) => {\n handleEntryFound({\n relativeUrl: `${relativeUrl}/${entry.relativeUrl}`,\n type: entry.type,\n existent,\n })\n },\n })\n }\n\n if (added) {\n if (existent) {\n if (notifyExistent) {\n added({ relativeUrl, type, existent: true })\n }\n } else {\n added({ relativeUrl, type })\n }\n }\n\n // we must watch manually every directory we find\n if (!fsWatchSupportsRecursive && type === \"directory\") {\n const watcher = createWatcher(urlToFileSystemPath(entryUrl), {\n persistent: keepProcessAlive,\n })\n tracker.registerCleanupCallback(() => {\n watcher.close()\n })\n watcher.on(\"change\", (eventType, filename) => {\n handleDirectoryEvent({\n directoryRelativeUrl: relativeUrl,\n filename: filename ? replaceBackSlashesWithSlashes(filename) : \"\",\n eventType,\n })\n })\n }\n }\n\n const handleEntryLost = ({ relativeUrl, type }) => {\n contentMap.delete(relativeUrl)\n if (removed) {\n removed({ relativeUrl, type })\n }\n }\n\n visitDirectory({\n directoryUrl: sourceUrl,\n entryFound: ({ relativeUrl, type }) => {\n handleEntryFound({ relativeUrl, type, existent: true })\n },\n })\n\n const watcher = createWatcher(urlToFileSystemPath(sourceUrl), {\n recursive: recursive && fsWatchSupportsRecursive,\n persistent: keepProcessAlive,\n })\n tracker.registerCleanupCallback(() => {\n watcher.close()\n })\n watcher.on(\"change\", (eventType, fileSystemPath) => {\n handleDirectoryEvent({\n ...fileSystemPathToDirectoryRelativeUrlAndFilename(fileSystemPath),\n eventType,\n })\n })\n\n return tracker.cleanup\n}\n\nconst undefinedOrFunction = (value) =>\n typeof value === \"undefined\" || typeof value === \"function\"\n\nconst visitDirectory = ({ directoryUrl, entryFound }) => {\n const directoryPath = urlToFileSystemPath(directoryUrl)\n readdirSync(directoryPath).forEach((entry) => {\n const entryUrl = resolveUrl(entry, directoryUrl)\n const type = fileSystemNodeToTypeOrNull(entryUrl)\n if (type === null) {\n return\n }\n\n const relativeUrl = urlToRelativeUrl(entryUrl, directoryUrl)\n entryFound({\n relativeUrl,\n type,\n })\n })\n}\n\nconst fileSystemPathToDirectoryRelativeUrlAndFilename = (path) => {\n if (!path) {\n return {\n directoryRelativeUrl: \"\",\n filename: \"\",\n }\n }\n\n const normalizedPath = replaceBackSlashesWithSlashes(path)\n const slashLastIndex = normalizedPath.lastIndexOf(\"/\")\n if (slashLastIndex === -1) {\n return {\n directoryRelativeUrl: \"\",\n filename: normalizedPath,\n }\n }\n\n const directoryRelativeUrl = normalizedPath.slice(0, slashLastIndex)\n const filename = normalizedPath.slice(slashLastIndex + 1)\n return {\n directoryRelativeUrl,\n filename,\n }\n}\n",
|
|
111
|
-
"import { dirname, basename } from \"path\"\nimport { fileSystemNodeToTypeOrNull } from \"./internal/fileSystemNodeToTypeOrNull.js\"\nimport { createWatcher } from \"./internal/createWatcher.js\"\nimport { trackRessources } from \"./internal/trackRessources.js\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nexport const registerFileLifecycle = (\n source,\n { added, updated, removed, notifyExistent = false, keepProcessAlive = true },\n) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n if (!undefinedOrFunction(added)) {\n throw new TypeError(`added must be a function or undefined, got ${added}`)\n }\n if (!undefinedOrFunction(updated)) {\n throw new TypeError(\n `updated must be a function or undefined, got ${updated}`,\n )\n }\n if (!undefinedOrFunction(removed)) {\n throw new TypeError(\n `removed must be a function or undefined, got ${removed}`,\n )\n }\n\n const tracker = trackRessources()\n\n const handleFileFound = ({ existent }) => {\n const fileMutationStopWatching = watchFileMutation(sourceUrl, {\n updated,\n removed: () => {\n fileMutationStopTracking()\n watchFileAdded()\n if (removed) {\n removed()\n }\n },\n keepProcessAlive,\n })\n const fileMutationStopTracking = tracker.registerCleanupCallback(\n fileMutationStopWatching,\n )\n\n if (added) {\n if (existent) {\n if (notifyExistent) {\n added({ existent: true })\n }\n } else {\n added({})\n }\n }\n }\n\n const watchFileAdded = () => {\n const fileCreationStopWatching = watchFileCreation(\n sourceUrl,\n () => {\n fileCreationgStopTracking()\n handleFileFound({ existent: false })\n },\n keepProcessAlive,\n )\n const fileCreationgStopTracking = tracker.registerCleanupCallback(\n fileCreationStopWatching,\n )\n }\n\n const sourceType = fileSystemNodeToTypeOrNull(sourceUrl)\n if (sourceType === null) {\n if (added) {\n watchFileAdded()\n } else {\n throw new Error(\n `${urlToFileSystemPath(sourceUrl)} must lead to a file, found nothing`,\n )\n }\n } else if (sourceType === \"file\") {\n handleFileFound({ existent: true })\n } else {\n throw new Error(\n `${urlToFileSystemPath(\n sourceUrl,\n )} must lead to a file, type found instead`,\n )\n }\n\n return tracker.cleanup\n}\n\nconst undefinedOrFunction = (value) =>\n typeof value === \"undefined\" || typeof value === \"function\"\n\nconst watchFileCreation = (source, callback, keepProcessAlive) => {\n const sourcePath = urlToFileSystemPath(source)\n const sourceFilename = basename(sourcePath)\n const directoryPath = dirname(sourcePath)\n let directoryWatcher = createWatcher(directoryPath, {\n persistent: keepProcessAlive,\n })\n directoryWatcher.on(\"change\", (eventType, filename) => {\n if (filename && filename !== sourceFilename) return\n\n const type = fileSystemNodeToTypeOrNull(source)\n // ignore if something else with that name gets created\n // we are only interested into files\n if (type !== \"file\") return\n\n directoryWatcher.close()\n directoryWatcher = undefined\n callback()\n })\n\n return () => {\n if (directoryWatcher) {\n directoryWatcher.close()\n }\n }\n}\n\nconst watchFileMutation = (\n sourceUrl,\n { updated, removed, keepProcessAlive },\n) => {\n let watcher = createWatcher(urlToFileSystemPath(sourceUrl), {\n persistent: keepProcessAlive,\n })\n\n watcher.on(\"change\", () => {\n const sourceType = fileSystemNodeToTypeOrNull(sourceUrl)\n\n if (sourceType === null) {\n watcher.close()\n watcher = undefined\n if (removed) {\n removed()\n }\n } else if (sourceType === \"file\") {\n if (updated) {\n updated()\n }\n }\n })\n\n return () => {\n if (watcher) {\n watcher.close()\n }\n }\n}\n",
|
|
112
|
-
"import { ensureUrlTrailingSlash } from \"./internal/ensureUrlTrailingSlash.js\"\nimport { resolveUrl } from \"./resolveUrl.js\"\n\nexport const resolveDirectoryUrl = (specifier, baseUrl) => {\n const url = resolveUrl(specifier, baseUrl)\n return ensureUrlTrailingSlash(url)\n}\n",
|
|
113
|
-
"import { promises, constants } from \"fs\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\n\nconst { access } = promises\nconst {\n // F_OK,\n R_OK,\n W_OK,\n X_OK,\n} = constants\n\nexport const testFileSystemNodePermissions = async (\n source,\n {\n read = false,\n write = false,\n execute = false,\n allowedIfNotFound = false,\n } = {},\n) => {\n const sourceUrl = assertAndNormalizeFileUrl(source)\n const sourcePath = urlToFileSystemPath(sourceUrl)\n let binaryFlags = 0\n\n // if (visible) binaryFlags |= F_OK\n if (read) binaryFlags |= R_OK\n if (write) binaryFlags |= W_OK\n if (execute) binaryFlags |= X_OK\n\n try {\n await access(sourcePath, binaryFlags)\n return true\n } catch (error) {\n if (error.code === \"ENOENT\") {\n if (allowedIfNotFound) {\n return true\n }\n throw error\n }\n return false\n }\n}\n",
|
|
114
|
-
"export const urlToScheme = (url) => {\n const urlString = String(url)\n const colonIndex = urlString.indexOf(\":\")\n if (colonIndex === -1) {\n return \"\"\n }\n\n const scheme = urlString.slice(0, colonIndex)\n return scheme\n}\n",
|
|
115
|
-
"import { urlToScheme } from \"./urlToScheme.js\"\n\nexport const urlToRessource = (url) => {\n const scheme = urlToScheme(url)\n\n if (scheme === \"file\") {\n const urlAsStringWithoutFileProtocol = String(url).slice(\"file://\".length)\n return urlAsStringWithoutFileProtocol\n }\n\n if (scheme === \"https\" || scheme === \"http\") {\n // remove origin\n const afterProtocol = String(url).slice(scheme.length + \"://\".length)\n const pathnameSlashIndex = afterProtocol.indexOf(\"/\", \"://\".length)\n const urlAsStringWithoutOrigin = afterProtocol.slice(pathnameSlashIndex)\n return urlAsStringWithoutOrigin\n }\n\n const urlAsStringWithoutProtocol = String(url).slice(scheme.length + 1)\n return urlAsStringWithoutProtocol\n}\n",
|
|
116
|
-
"import { urlToRessource } from \"./urlToRessource.js\"\n\nexport const urlToPathname = (url) => {\n const ressource = urlToRessource(url)\n const pathname = ressourceToPathname(ressource)\n return pathname\n}\n\nconst ressourceToPathname = (ressource) => {\n const searchSeparatorIndex = ressource.indexOf(\"?\")\n return searchSeparatorIndex === -1\n ? ressource\n : ressource.slice(0, searchSeparatorIndex)\n}\n",
|
|
117
|
-
"import { urlToPathname } from \"./urlToPathname.js\"\n\nexport const urlToFilename = (url) => {\n const pathname = urlToPathname(url)\n const pathnameBeforeLastSlash = pathname.endsWith(\"/\")\n ? pathname.slice(0, -1)\n : pathname\n const slashLastIndex = pathnameBeforeLastSlash.lastIndexOf(\"/\")\n const filename =\n slashLastIndex === -1\n ? pathnameBeforeLastSlash\n : pathnameBeforeLastSlash.slice(slashLastIndex + 1)\n return filename\n}\n",
|
|
118
|
-
"import { urlToFilename } from \"./urlToFilename.js\"\n\nexport const urlToBasename = (url) => {\n const filename = urlToFilename(url)\n const dotLastIndex = filename.lastIndexOf(\".\")\n const basename =\n dotLastIndex === -1 ? filename : filename.slice(0, dotLastIndex)\n return basename\n}\n",
|
|
119
|
-
"import { urlToPathname } from \"./urlToPathname.js\"\n\nexport const urlToExtension = (url) => {\n const pathname = urlToPathname(url)\n return pathnameToExtension(pathname)\n}\n\nconst pathnameToExtension = (pathname) => {\n const slashLastIndex = pathname.lastIndexOf(\"/\")\n if (slashLastIndex !== -1) {\n pathname = pathname.slice(slashLastIndex + 1)\n }\n\n const dotLastIndex = pathname.lastIndexOf(\".\")\n if (dotLastIndex === -1) return \"\"\n // if (dotLastIndex === pathname.length - 1) return \"\"\n const extension = pathname.slice(dotLastIndex)\n return extension\n}\n",
|
|
120
|
-
"export const urlToOrigin = (url) => {\n const urlString = String(url)\n if (urlString.startsWith(\"file://\")) {\n return `file://`\n }\n return new URL(urlString).origin\n}\n",
|
|
121
|
-
"import { urlToOrigin } from \"./urlToOrigin.js\"\nimport { urlToRessource } from \"./urlToRessource.js\"\n\nexport const urlToParentUrl = (url) => {\n const ressource = urlToRessource(url)\n const slashLastIndex = ressource.lastIndexOf(\"/\")\n if (slashLastIndex === -1) {\n const urlAsString = String(url)\n return urlAsString\n }\n\n const lastCharacterIndex = ressource.length - 1\n if (slashLastIndex === lastCharacterIndex) {\n const slashPreviousIndex = ressource.lastIndexOf(\n \"/\",\n lastCharacterIndex - 1,\n )\n if (slashPreviousIndex === -1) {\n const urlAsString = String(url)\n return urlAsString\n }\n\n const origin = urlToOrigin(url)\n const parentUrl = `${origin}${ressource.slice(0, slashPreviousIndex + 1)}`\n return parentUrl\n }\n\n const origin = urlToOrigin(url)\n const parentUrl = `${origin}${ressource.slice(0, slashLastIndex + 1)}`\n return parentUrl\n}\n",
|
|
122
|
-
"import { promises } from \"fs\"\nimport { assertAndNormalizeFileUrl } from \"./assertAndNormalizeFileUrl.js\"\nimport { urlToFileSystemPath } from \"./urlToFileSystemPath.js\"\nimport { ensureParentDirectories } from \"./ensureParentDirectories.js\"\n\n// https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_fspromises_writefile_file_data_options\nconst { writeFile: writeFileNode } = promises\n\nexport const writeFile = async (destination, content = \"\") => {\n const destinationUrl = assertAndNormalizeFileUrl(destination)\n\n const destinationPath = urlToFileSystemPath(destinationUrl)\n try {\n await writeFileNode(destinationPath, content)\n } catch (error) {\n if (error.code === \"ENOENT\") {\n await ensureParentDirectories(destinationUrl)\n await writeFileNode(destinationPath, content)\n return\n }\n throw error\n }\n}\n"
|
|
123
|
-
],
|
|
124
|
-
"names": [
|
|
125
|
-
"ensureUrlTrailingSlash",
|
|
126
|
-
"url",
|
|
127
|
-
"endsWith",
|
|
128
|
-
"isFileSystemPath",
|
|
129
|
-
"value",
|
|
130
|
-
"TypeError",
|
|
131
|
-
"startsWithWindowsDriveLetter",
|
|
132
|
-
"string",
|
|
133
|
-
"firstChar",
|
|
134
|
-
"test",
|
|
135
|
-
"secondChar",
|
|
136
|
-
"fileSystemPathToUrl",
|
|
137
|
-
"Error",
|
|
138
|
-
"String",
|
|
139
|
-
"pathToFileURL",
|
|
140
|
-
"assertAndNormalizeDirectoryUrl",
|
|
141
|
-
"urlString",
|
|
142
|
-
"URL",
|
|
143
|
-
"href",
|
|
144
|
-
"e",
|
|
145
|
-
"startsWith",
|
|
146
|
-
"assertAndNormalizeFileUrl",
|
|
147
|
-
"baseUrl",
|
|
148
|
-
"statsToType",
|
|
149
|
-
"stats",
|
|
150
|
-
"isFile",
|
|
151
|
-
"isDirectory",
|
|
152
|
-
"isSymbolicLink",
|
|
153
|
-
"isFIFO",
|
|
154
|
-
"isSocket",
|
|
155
|
-
"isCharacterDevice",
|
|
156
|
-
"isBlockDevice",
|
|
157
|
-
"undefined",
|
|
158
|
-
"urlToFileSystemPath",
|
|
159
|
-
"length",
|
|
160
|
-
"slice",
|
|
161
|
-
"fileSystemPath",
|
|
162
|
-
"fileURLToPath",
|
|
163
|
-
"S_IRUSR",
|
|
164
|
-
"S_IWUSR",
|
|
165
|
-
"S_IXUSR",
|
|
166
|
-
"S_IRGRP",
|
|
167
|
-
"S_IWGRP",
|
|
168
|
-
"S_IXGRP",
|
|
169
|
-
"S_IROTH",
|
|
170
|
-
"S_IWOTH",
|
|
171
|
-
"S_IXOTH",
|
|
172
|
-
"binaryFlagsToPermissions",
|
|
173
|
-
"binaryFlags",
|
|
174
|
-
"owner",
|
|
175
|
-
"read",
|
|
176
|
-
"Boolean",
|
|
177
|
-
"write",
|
|
178
|
-
"execute",
|
|
179
|
-
"group",
|
|
180
|
-
"others",
|
|
181
|
-
"permissionsToBinaryFlags",
|
|
182
|
-
"writeFileSystemNodePermissions",
|
|
183
|
-
"source",
|
|
184
|
-
"permissions",
|
|
185
|
-
"sourceUrl",
|
|
186
|
-
"sourcePath",
|
|
187
|
-
"getPermissionOrComputeDefault",
|
|
188
|
-
"chmodNaive",
|
|
189
|
-
"Promise",
|
|
190
|
-
"resolve",
|
|
191
|
-
"reject",
|
|
192
|
-
"chmod",
|
|
193
|
-
"error",
|
|
194
|
-
"actionLevels",
|
|
195
|
-
"subjectLevels",
|
|
196
|
-
"action",
|
|
197
|
-
"subject",
|
|
198
|
-
"subjectPermissions",
|
|
199
|
-
"actionLevel",
|
|
200
|
-
"actionFallback",
|
|
201
|
-
"Object",
|
|
202
|
-
"keys",
|
|
203
|
-
"find",
|
|
204
|
-
"actionFallbackCandidate",
|
|
205
|
-
"subjectLevel",
|
|
206
|
-
"subjectFallback",
|
|
207
|
-
"subjectFallbackCandidate",
|
|
208
|
-
"isWindows",
|
|
209
|
-
"process",
|
|
210
|
-
"platform",
|
|
211
|
-
"readFileSystemNodeStat",
|
|
212
|
-
"nullIfNotFound",
|
|
213
|
-
"followLink",
|
|
214
|
-
"handleNotFoundOption",
|
|
215
|
-
"handleNotFoundError",
|
|
216
|
-
"readStat",
|
|
217
|
-
"handlePermissionDeniedError",
|
|
218
|
-
"console",
|
|
219
|
-
"stack",
|
|
220
|
-
"nodeMethod",
|
|
221
|
-
"stat",
|
|
222
|
-
"lstat",
|
|
223
|
-
"statsObject",
|
|
224
|
-
"code",
|
|
225
|
-
"assertDirectoryPresence",
|
|
226
|
-
"sourceStats",
|
|
227
|
-
"assertFilePresence",
|
|
228
|
-
"ETAG_FOR_EMPTY_CONTENT",
|
|
229
|
-
"bufferToEtag",
|
|
230
|
-
"buffer",
|
|
231
|
-
"Buffer",
|
|
232
|
-
"isBuffer",
|
|
233
|
-
"hash",
|
|
234
|
-
"createHash",
|
|
235
|
-
"update",
|
|
236
|
-
"hashBase64String",
|
|
237
|
-
"digest",
|
|
238
|
-
"hashBase64StringSubset",
|
|
239
|
-
"toString",
|
|
240
|
-
"readDirectory",
|
|
241
|
-
"emfileMaxWait",
|
|
242
|
-
"directoryUrl",
|
|
243
|
-
"directoryPath",
|
|
244
|
-
"startMs",
|
|
245
|
-
"Date",
|
|
246
|
-
"now",
|
|
247
|
-
"attemptCount",
|
|
248
|
-
"attempt",
|
|
249
|
-
"readdirNaive",
|
|
250
|
-
"handleTooManyFilesOpenedError",
|
|
251
|
-
"nowMs",
|
|
252
|
-
"timeSpentWaiting",
|
|
253
|
-
"setTimeout",
|
|
254
|
-
"readdir",
|
|
255
|
-
"names",
|
|
256
|
-
"getCommonPathname",
|
|
257
|
-
"pathname",
|
|
258
|
-
"otherPathname",
|
|
259
|
-
"firstDifferentCharacterIndex",
|
|
260
|
-
"findFirstDifferentCharacterIndex",
|
|
261
|
-
"commonString",
|
|
262
|
-
"charAt",
|
|
263
|
-
"firstDifferentSlashIndex",
|
|
264
|
-
"lastIndexOf",
|
|
265
|
-
"otherString",
|
|
266
|
-
"maxCommonLength",
|
|
267
|
-
"Math",
|
|
268
|
-
"min",
|
|
269
|
-
"i",
|
|
270
|
-
"char",
|
|
271
|
-
"otherChar",
|
|
272
|
-
"pathnameToParentPathname",
|
|
273
|
-
"slashLastIndex",
|
|
274
|
-
"urlToRelativeUrl",
|
|
275
|
-
"urlObject",
|
|
276
|
-
"baseUrlObject",
|
|
277
|
-
"protocol",
|
|
278
|
-
"urlAsString",
|
|
279
|
-
"username",
|
|
280
|
-
"password",
|
|
281
|
-
"host",
|
|
282
|
-
"afterUrlScheme",
|
|
283
|
-
"search",
|
|
284
|
-
"baseUrlRessourceWithoutLeadingSlash",
|
|
285
|
-
"basePathname",
|
|
286
|
-
"commonPathname",
|
|
287
|
-
"specificPathname",
|
|
288
|
-
"baseSpecificPathname",
|
|
289
|
-
"includes",
|
|
290
|
-
"baseSpecificParentPathname",
|
|
291
|
-
"relativeDirectoriesNotation",
|
|
292
|
-
"replace",
|
|
293
|
-
"relativeUrl",
|
|
294
|
-
"comparePathnames",
|
|
295
|
-
"leftPathame",
|
|
296
|
-
"rightPathname",
|
|
297
|
-
"leftPartArray",
|
|
298
|
-
"split",
|
|
299
|
-
"rightPartArray",
|
|
300
|
-
"leftLength",
|
|
301
|
-
"rightLength",
|
|
302
|
-
"maxLength",
|
|
303
|
-
"max",
|
|
304
|
-
"leftPartExists",
|
|
305
|
-
"rightPartExists",
|
|
306
|
-
"leftPartIsLast",
|
|
307
|
-
"rightPartIsLast",
|
|
308
|
-
"leftPart",
|
|
309
|
-
"rightPart",
|
|
310
|
-
"comparison",
|
|
311
|
-
"localeCompare",
|
|
312
|
-
"collectDirectoryMatchReport",
|
|
313
|
-
"signal",
|
|
314
|
-
"AbortController",
|
|
315
|
-
"structuredMetaMap",
|
|
316
|
-
"predicate",
|
|
317
|
-
"matchingArray",
|
|
318
|
-
"ignoredArray",
|
|
319
|
-
"rootDirectoryUrl",
|
|
320
|
-
"structuredMetaMapNormalized",
|
|
321
|
-
"normalizeStructuredMetaMap",
|
|
322
|
-
"collectOperation",
|
|
323
|
-
"Abort",
|
|
324
|
-
"startOperation",
|
|
325
|
-
"addAbortSignal",
|
|
326
|
-
"visitDirectory",
|
|
327
|
-
"throwIfAborted",
|
|
328
|
-
"directoryItems",
|
|
329
|
-
"all",
|
|
330
|
-
"map",
|
|
331
|
-
"directoryItem",
|
|
332
|
-
"directoryChildNodeUrl",
|
|
333
|
-
"directoryChildNodeStats",
|
|
334
|
-
"subDirectoryUrl",
|
|
335
|
-
"urlCanContainsMetaMatching",
|
|
336
|
-
"push",
|
|
337
|
-
"fileStats",
|
|
338
|
-
"meta",
|
|
339
|
-
"urlToMeta",
|
|
340
|
-
"sortByRelativeUrl",
|
|
341
|
-
"end",
|
|
342
|
-
"array",
|
|
343
|
-
"sort",
|
|
344
|
-
"left",
|
|
345
|
-
"right",
|
|
346
|
-
"collectFiles",
|
|
347
|
-
"matchingFileResultArray",
|
|
348
|
-
"leftFile",
|
|
349
|
-
"rightFile",
|
|
350
|
-
"mkdir",
|
|
351
|
-
"promises",
|
|
352
|
-
"writeDirectory",
|
|
353
|
-
"destination",
|
|
354
|
-
"recursive",
|
|
355
|
-
"allowUseless",
|
|
356
|
-
"destinationUrl",
|
|
357
|
-
"destinationPath",
|
|
358
|
-
"destinationStats",
|
|
359
|
-
"destinationType",
|
|
360
|
-
"resolveUrl",
|
|
361
|
-
"specifier",
|
|
362
|
-
"removeFileSystemNode",
|
|
363
|
-
"maxRetries",
|
|
364
|
-
"retryDelay",
|
|
365
|
-
"onlyContent",
|
|
366
|
-
"removeOperation",
|
|
367
|
-
"removeNonDirectory",
|
|
368
|
-
"removeDirectory",
|
|
369
|
-
"retryCount",
|
|
370
|
-
"unlinkNaive",
|
|
371
|
-
"handleTemporaryError",
|
|
372
|
-
"unlink",
|
|
373
|
-
"removeDirectoryOperation",
|
|
374
|
-
"visit",
|
|
375
|
-
"visitFile",
|
|
376
|
-
"visitSymbolicLink",
|
|
377
|
-
"optionsFromRecursive",
|
|
378
|
-
"handleNotEmptyError",
|
|
379
|
-
"removeDirectoryContent",
|
|
380
|
-
"removeDirectoryNaive",
|
|
381
|
-
"handlePermissionError",
|
|
382
|
-
"openOrCloseError",
|
|
383
|
-
"fd",
|
|
384
|
-
"openSync",
|
|
385
|
-
"closeSync",
|
|
386
|
-
"name",
|
|
387
|
-
"fileUrl",
|
|
388
|
-
"symbolicLinkUrl",
|
|
389
|
-
"rmdir",
|
|
390
|
-
"lstatObject",
|
|
391
|
-
"ensureEmptyDirectory",
|
|
392
|
-
"sourceType",
|
|
393
|
-
"ensureParentDirectories",
|
|
394
|
-
"destinationParentPath",
|
|
395
|
-
"dirname",
|
|
396
|
-
"baseUrlFallback",
|
|
397
|
-
"cwd",
|
|
398
|
-
"ensureWindowsDriveLetter",
|
|
399
|
-
"afterProtocol",
|
|
400
|
-
"extractDriveLetter",
|
|
401
|
-
"baseUrlOrFallback",
|
|
402
|
-
"driveLetter",
|
|
403
|
-
"ressource",
|
|
404
|
-
"urlTargetsSameFileSystemPath",
|
|
405
|
-
"leftUrl",
|
|
406
|
-
"rightUrl",
|
|
407
|
-
"writeFileSystemNodeModificationTime",
|
|
408
|
-
"mtime",
|
|
409
|
-
"mtimeValue",
|
|
410
|
-
"floor",
|
|
411
|
-
"atimeValue",
|
|
412
|
-
"utimes",
|
|
413
|
-
"replaceBackSlashesWithSlashes",
|
|
414
|
-
"readSymbolicLink",
|
|
415
|
-
"symbolicLinkPath",
|
|
416
|
-
"readlink",
|
|
417
|
-
"resolvedPath",
|
|
418
|
-
"symlink",
|
|
419
|
-
"writeSymbolicLink",
|
|
420
|
-
"from",
|
|
421
|
-
"to",
|
|
422
|
-
"type",
|
|
423
|
-
"allowOverwrite",
|
|
424
|
-
"fromUrl",
|
|
425
|
-
"toInfo",
|
|
426
|
-
"getToInfo",
|
|
427
|
-
"toStats",
|
|
428
|
-
"existingSymbolicLinkUrl",
|
|
429
|
-
"urlIsInsideOf",
|
|
430
|
-
"otherUrl",
|
|
431
|
-
"otherUrlObject",
|
|
432
|
-
"origin",
|
|
433
|
-
"urlPathname",
|
|
434
|
-
"otherUrlPathname",
|
|
435
|
-
"isInside",
|
|
436
|
-
"copyFileSystemNode",
|
|
437
|
-
"overwrite",
|
|
438
|
-
"preserveStat",
|
|
439
|
-
"preserveMtime",
|
|
440
|
-
"preservePermissions",
|
|
441
|
-
"fromPath",
|
|
442
|
-
"toUrl",
|
|
443
|
-
"toPath",
|
|
444
|
-
"linkTarget",
|
|
445
|
-
"copyOperation",
|
|
446
|
-
"fileRelativeUrl",
|
|
447
|
-
"fileCopyUrl",
|
|
448
|
-
"copyFileContentNaive",
|
|
449
|
-
"copyStats",
|
|
450
|
-
"symbolicLinkRelativeUrl",
|
|
451
|
-
"symbolicLinkTarget",
|
|
452
|
-
"symbolicLinkTargetUrl",
|
|
453
|
-
"linkIsRelative",
|
|
454
|
-
"symbolicLinkCopyTarget",
|
|
455
|
-
"linkCopyTargetRelative",
|
|
456
|
-
"targetStats",
|
|
457
|
-
"linkType",
|
|
458
|
-
"symbolicLinkCopyUrl",
|
|
459
|
-
"mode",
|
|
460
|
-
"mtimeMs",
|
|
461
|
-
"directoryStats",
|
|
462
|
-
"directoryRelativeUrl",
|
|
463
|
-
"directoryCopyUrl",
|
|
464
|
-
"copyDirectoryContent",
|
|
465
|
-
"fileSystemNodeUrl",
|
|
466
|
-
"filePath",
|
|
467
|
-
"fileDestinationPath",
|
|
468
|
-
"copyFileNode",
|
|
469
|
-
"directoryEntries",
|
|
470
|
-
"directoryEntry",
|
|
471
|
-
"withSignal",
|
|
472
|
-
"readFileSystemNodePermissions",
|
|
473
|
-
"grantPermissionsOnFileSystemNode",
|
|
474
|
-
"filePermissions",
|
|
475
|
-
"listFilesMatching",
|
|
476
|
-
"patterns",
|
|
477
|
-
"Array",
|
|
478
|
-
"isArray",
|
|
479
|
-
"patternMap",
|
|
480
|
-
"forEach",
|
|
481
|
-
"pattern",
|
|
482
|
-
"index",
|
|
483
|
-
"fileDatas",
|
|
484
|
-
"matches",
|
|
485
|
-
"memoize",
|
|
486
|
-
"compute",
|
|
487
|
-
"memoized",
|
|
488
|
-
"memoizedValue",
|
|
489
|
-
"fnWithMemoization",
|
|
490
|
-
"args",
|
|
491
|
-
"forget",
|
|
492
|
-
"moveFileSystemNode",
|
|
493
|
-
"moveOperation",
|
|
494
|
-
"moveNaive",
|
|
495
|
-
"handleCrossDeviceError",
|
|
496
|
-
"rename",
|
|
497
|
-
"moveDirectoryContent",
|
|
498
|
-
"readFilePromisified",
|
|
499
|
-
"promisify",
|
|
500
|
-
"readFileNode",
|
|
501
|
-
"readFile",
|
|
502
|
-
"as",
|
|
503
|
-
"JSON",
|
|
504
|
-
"parse",
|
|
505
|
-
"readFileSystemNodeModificationTime",
|
|
506
|
-
"fileSystemNodeToTypeOrNull",
|
|
507
|
-
"path",
|
|
508
|
-
"statSync",
|
|
509
|
-
"createWatcher",
|
|
510
|
-
"options",
|
|
511
|
-
"watcher",
|
|
512
|
-
"watch",
|
|
513
|
-
"on",
|
|
514
|
-
"trackRessources",
|
|
515
|
-
"callbackArray",
|
|
516
|
-
"registerCleanupCallback",
|
|
517
|
-
"callback",
|
|
518
|
-
"indexOf",
|
|
519
|
-
"splice",
|
|
520
|
-
"cleanup",
|
|
521
|
-
"reason",
|
|
522
|
-
"localCallbackArray",
|
|
523
|
-
"isLinux",
|
|
524
|
-
"fsWatchSupportsRecursive",
|
|
525
|
-
"registerDirectoryLifecycle",
|
|
526
|
-
"added",
|
|
527
|
-
"updated",
|
|
528
|
-
"removed",
|
|
529
|
-
"watchDescription",
|
|
530
|
-
"notifyExistent",
|
|
531
|
-
"keepProcessAlive",
|
|
532
|
-
"undefinedOrFunction",
|
|
533
|
-
"entryShouldBeWatched",
|
|
534
|
-
"entryUrl",
|
|
535
|
-
"canContainEntryToWatch",
|
|
536
|
-
"entryMeta",
|
|
537
|
-
"tracker",
|
|
538
|
-
"contentMap",
|
|
539
|
-
"Map",
|
|
540
|
-
"handleDirectoryEvent",
|
|
541
|
-
"filename",
|
|
542
|
-
"eventType",
|
|
543
|
-
"handleChange",
|
|
544
|
-
"relativeUrlCandidateArray",
|
|
545
|
-
"filter",
|
|
546
|
-
"relativeUrlCandidate",
|
|
547
|
-
"afterDirectory",
|
|
548
|
-
"removedEntryRelativeUrl",
|
|
549
|
-
"handleEntryLost",
|
|
550
|
-
"get",
|
|
551
|
-
"previousType",
|
|
552
|
-
"handleEntryFound",
|
|
553
|
-
"existent",
|
|
554
|
-
"set",
|
|
555
|
-
"entryFound",
|
|
556
|
-
"entry",
|
|
557
|
-
"persistent",
|
|
558
|
-
"close",
|
|
559
|
-
"delete",
|
|
560
|
-
"fileSystemPathToDirectoryRelativeUrlAndFilename",
|
|
561
|
-
"readdirSync",
|
|
562
|
-
"normalizedPath",
|
|
563
|
-
"registerFileLifecycle",
|
|
564
|
-
"handleFileFound",
|
|
565
|
-
"fileMutationStopWatching",
|
|
566
|
-
"watchFileMutation",
|
|
567
|
-
"fileMutationStopTracking",
|
|
568
|
-
"watchFileAdded",
|
|
569
|
-
"fileCreationStopWatching",
|
|
570
|
-
"watchFileCreation",
|
|
571
|
-
"fileCreationgStopTracking",
|
|
572
|
-
"sourceFilename",
|
|
573
|
-
"basename",
|
|
574
|
-
"directoryWatcher",
|
|
575
|
-
"resolveDirectoryUrl",
|
|
576
|
-
"access",
|
|
577
|
-
"R_OK",
|
|
578
|
-
"W_OK",
|
|
579
|
-
"X_OK",
|
|
580
|
-
"constants",
|
|
581
|
-
"testFileSystemNodePermissions",
|
|
582
|
-
"allowedIfNotFound",
|
|
583
|
-
"urlToScheme",
|
|
584
|
-
"colonIndex",
|
|
585
|
-
"scheme",
|
|
586
|
-
"urlToRessource",
|
|
587
|
-
"urlAsStringWithoutFileProtocol",
|
|
588
|
-
"pathnameSlashIndex",
|
|
589
|
-
"urlAsStringWithoutOrigin",
|
|
590
|
-
"urlAsStringWithoutProtocol",
|
|
591
|
-
"urlToPathname",
|
|
592
|
-
"ressourceToPathname",
|
|
593
|
-
"searchSeparatorIndex",
|
|
594
|
-
"urlToFilename",
|
|
595
|
-
"pathnameBeforeLastSlash",
|
|
596
|
-
"urlToBasename",
|
|
597
|
-
"dotLastIndex",
|
|
598
|
-
"urlToExtension",
|
|
599
|
-
"pathnameToExtension",
|
|
600
|
-
"extension",
|
|
601
|
-
"urlToOrigin",
|
|
602
|
-
"urlToParentUrl",
|
|
603
|
-
"lastCharacterIndex",
|
|
604
|
-
"slashPreviousIndex",
|
|
605
|
-
"parentUrl",
|
|
606
|
-
"writeFile",
|
|
607
|
-
"writeFileNode",
|
|
608
|
-
"content"
|
|
609
|
-
],
|
|
610
|
-
"mappings": "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"
|
|
611
|
-
}
|