@jsenv/filesystem 4.1.9 → 4.2.0

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jsenv/filesystem",
3
- "version": "4.1.9",
3
+ "version": "4.2.0",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,20 +18,19 @@
18
18
  "type": "module",
19
19
  "exports": {
20
20
  ".": {
21
- "import": "./main.js"
21
+ "import": "./src/main.js"
22
22
  },
23
23
  "./*": "./*"
24
24
  },
25
25
  "files": [
26
- "/src/",
27
- "/main.js"
26
+ "/src/"
28
27
  ],
29
28
  "scripts": {
30
29
  "test": "node --conditions=development ./scripts/test.mjs"
31
30
  },
32
31
  "dependencies": {
33
32
  "@jsenv/urls": "1.2.8",
34
- "@jsenv/url-meta": "7.0.2",
33
+ "@jsenv/url-meta": "7.1.0",
35
34
  "@jsenv/abort": "4.2.4"
36
35
  }
37
36
  }
@@ -1,5 +1,6 @@
1
1
  import { urlToFileSystemPath } from "@jsenv/urls"
2
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
2
+
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
3
4
  import { statsToType } from "./internal/statsToType.js"
4
5
  import { readEntryStat } from "./readEntryStat.js"
5
6
 
@@ -1,5 +1,6 @@
1
1
  import { urlToFileSystemPath } from "@jsenv/urls"
2
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
2
+
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
3
4
  import { statsToType } from "./internal/statsToType.js"
4
5
  import { readEntryStat } from "./readEntryStat.js"
5
6
 
@@ -2,7 +2,7 @@ import { Abort } from "@jsenv/abort"
2
2
 
3
3
  import { URL_META } from "@jsenv/url-meta"
4
4
  import { urlToRelativeUrl } from "@jsenv/urls"
5
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
5
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
6
6
  import { readDirectory } from "./readDirectory.js"
7
7
  import { readEntryStat } from "./readEntryStat.js"
8
8
  import { comparePathnames } from "./comparePathnames.js"
@@ -2,7 +2,7 @@ import { Abort } from "@jsenv/abort"
2
2
  import { URL_META } from "@jsenv/url-meta"
3
3
  import { urlToRelativeUrl } from "@jsenv/urls"
4
4
 
5
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
5
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
6
6
  import { readDirectory } from "./readDirectory.js"
7
7
  import { readEntryStat } from "./readEntryStat.js"
8
8
  import { comparePathnames } from "./comparePathnames.js"
@@ -1,7 +1,7 @@
1
1
  import { Abort } from "@jsenv/abort"
2
2
  import { urlToFileSystemPath, resolveUrl } from "@jsenv/urls"
3
3
 
4
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
4
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
5
5
  import { readEntryStat } from "./readEntryStat.js"
6
6
  import { readSymbolicLink } from "./readSymbolicLink.js"
7
7
  import { readDirectory } from "./readDirectory.js"
package/src/copyEntry.js CHANGED
@@ -11,7 +11,7 @@ import {
11
11
  import { urlTargetsSameFileSystemPath } from "./internal/urlTargetsSameFileSystemPath.js"
12
12
  import { statsToType } from "./internal/statsToType.js"
13
13
  import { binaryFlagsToPermissions } from "./internal/permissions.js"
14
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
14
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
15
15
  import { writeDirectory } from "./writeDirectory.js"
16
16
  import { readEntryStat } from "./readEntryStat.js"
17
17
  import { ensureParentDirectories } from "./ensureParentDirectories.js"
@@ -0,0 +1,52 @@
1
+ import {
2
+ fileSystemPathToUrl,
3
+ isFileSystemPath,
4
+ ensurePathnameTrailingSlash,
5
+ } from "@jsenv/urls"
6
+
7
+ export const validateDirectoryUrl = (value) => {
8
+ let urlString
9
+
10
+ if (value instanceof URL) {
11
+ urlString = value.href
12
+ } else if (typeof value === "string") {
13
+ if (isFileSystemPath(value)) {
14
+ urlString = fileSystemPathToUrl(value)
15
+ } else {
16
+ try {
17
+ urlString = String(new URL(value))
18
+ } catch (e) {
19
+ return {
20
+ valid: false,
21
+ value,
22
+ message: `must be a valid url`,
23
+ }
24
+ }
25
+ }
26
+ } else {
27
+ return {
28
+ valid: false,
29
+ value,
30
+ message: `must be a string or an url`,
31
+ }
32
+ }
33
+ if (!urlString.startsWith("file://")) {
34
+ return {
35
+ valid: false,
36
+ value,
37
+ message: 'must start with "file://"',
38
+ }
39
+ }
40
+ return {
41
+ valid: true,
42
+ value: ensurePathnameTrailingSlash(urlString),
43
+ }
44
+ }
45
+
46
+ export const assertAndNormalizeDirectoryUrl = (directoryUrl) => {
47
+ const { valid, message, value } = validateDirectoryUrl(directoryUrl)
48
+ if (!valid) {
49
+ throw new TypeError(`directoryUrl ${message}, got ${value}`)
50
+ }
51
+ return value
52
+ }
@@ -1,5 +1,6 @@
1
1
  import { urlToFileSystemPath } from "@jsenv/urls"
2
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
2
+
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
3
4
  import { statsToType } from "./internal/statsToType.js"
4
5
  import { writeDirectory } from "./writeDirectory.js"
5
6
  import { readEntryStat } from "./readEntryStat.js"
@@ -1,7 +1,7 @@
1
1
  import { dirname } from "node:path"
2
2
  import { urlToFileSystemPath } from "@jsenv/urls"
3
3
 
4
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
4
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
5
5
  import { writeDirectory } from "./writeDirectory.js"
6
6
 
7
7
  export const ensureParentDirectories = async (destination) => {
@@ -0,0 +1,50 @@
1
+ import { fileSystemPathToUrl, isFileSystemPath } from "@jsenv/urls"
2
+
3
+ export const validateFileUrl = (value, baseUrl) => {
4
+ let urlString
5
+
6
+ if (value instanceof URL) {
7
+ urlString = value.href
8
+ } else if (typeof value === "string") {
9
+ if (isFileSystemPath(value)) {
10
+ urlString = fileSystemPathToUrl(value)
11
+ } else {
12
+ try {
13
+ urlString = String(new URL(value, baseUrl))
14
+ } catch (e) {
15
+ return {
16
+ valid: false,
17
+ value,
18
+ message: "must be a valid url",
19
+ }
20
+ }
21
+ }
22
+ } else {
23
+ return {
24
+ valid: false,
25
+ value,
26
+ message: "must be a string or an url",
27
+ }
28
+ }
29
+
30
+ if (!urlString.startsWith("file://")) {
31
+ return {
32
+ valid: false,
33
+ value,
34
+ message: 'must start with "file://"',
35
+ }
36
+ }
37
+
38
+ return {
39
+ valid: true,
40
+ value: urlString,
41
+ }
42
+ }
43
+
44
+ export const assertAndNormalizeFileUrl = (fileUrl, baseUrl) => {
45
+ const { valid, message, value } = validateFileUrl(fileUrl, baseUrl)
46
+ if (!valid) {
47
+ throw new TypeError(`fileUrl ${message}, got ${fileUrl}`)
48
+ }
49
+ return value
50
+ }
@@ -1,4 +1,4 @@
1
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
1
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
2
2
  import { readEntryPermissions } from "./readEntryPermissions.js"
3
3
  import { writeEntryPermissions } from "./writeEntryPermissions.js"
4
4
 
package/src/main.js ADDED
@@ -0,0 +1,41 @@
1
+ export {
2
+ validateDirectoryUrl,
3
+ assertAndNormalizeDirectoryUrl,
4
+ } from "./directory_url_validation.js"
5
+ export {
6
+ validateFileUrl,
7
+ assertAndNormalizeFileUrl,
8
+ } from "./file_url_validation.js"
9
+ export { assertDirectoryPresence } from "./assertDirectoryPresence.js"
10
+ export { assertFilePresence } from "./assertFilePresence.js"
11
+ export { bufferToEtag } from "./bufferToEtag.js"
12
+ export { collectDirectoryMatchReport } from "./collectDirectoryMatchReport.js"
13
+ export { collectFiles } from "./collectFiles.js"
14
+ export { comparePathnames } from "./comparePathnames.js"
15
+ export { ensureEmptyDirectory } from "./ensureEmptyDirectory.js"
16
+ export { ensureParentDirectories } from "./ensureParentDirectories.js"
17
+ export { ensureWindowsDriveLetter } from "./ensureWindowsDriveLetter.js"
18
+ export { copyEntry } from "./copyEntry.js"
19
+ export { copyDirectoryContent } from "./copyDirectoryContent.js"
20
+ export { getRealFileSystemUrlSync } from "./getRealFileSystemUrlSync.js"
21
+ export { grantPermissionsOnEntry } from "./grantPermissionsOnEntry.js"
22
+ export { listFilesMatching } from "./listFilesMatching.js"
23
+ export { moveDirectoryContent } from "./moveDirectoryContent.js"
24
+ export { moveEntry } from "./moveEntry.js"
25
+ export { readDirectory } from "./readDirectory.js"
26
+ export { readFile } from "./readFile.js"
27
+ export { readFileSync } from "./readFileSync.js"
28
+ export { readEntryModificationTime } from "./readEntryModificationTime.js"
29
+ export { readEntryPermissions } from "./readEntryPermissions.js"
30
+ export { readEntryStat } from "./readEntryStat.js"
31
+ export { readSymbolicLink } from "./readSymbolicLink.js"
32
+ export { registerDirectoryLifecycle } from "./registerDirectoryLifecycle.js"
33
+ export { registerFileLifecycle } from "./registerFileLifecycle.js"
34
+ export { removeEntry } from "./removeEntry.js"
35
+ export { testEntryPermissions } from "./testEntryPermissions.js"
36
+ export { writeDirectory } from "./writeDirectory.js"
37
+ export { writeFile } from "./writeFile.js"
38
+ export { writeFileSync } from "./writeFileSync.js"
39
+ export { writeEntryModificationTime } from "./writeEntryModificationTime.js"
40
+ export { writeEntryPermissions } from "./writeEntryPermissions.js"
41
+ export { writeSymbolicLink } from "./writeSymbolicLink.js"
@@ -1,7 +1,7 @@
1
1
  import { Abort } from "@jsenv/abort"
2
2
  import { urlToFileSystemPath, resolveUrl } from "@jsenv/urls"
3
3
 
4
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
4
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
5
5
  import { readEntryStat } from "./readEntryStat.js"
6
6
  import { readSymbolicLink } from "./readSymbolicLink.js"
7
7
  import { readDirectory } from "./readDirectory.js"
package/src/moveEntry.js CHANGED
@@ -4,7 +4,7 @@ import { urlToFileSystemPath, resolveUrl } from "@jsenv/urls"
4
4
 
5
5
  import { urlTargetsSameFileSystemPath } from "./internal/urlTargetsSameFileSystemPath.js"
6
6
  import { statsToType } from "./internal/statsToType.js"
7
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
7
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
8
8
  import { ensureParentDirectories } from "./ensureParentDirectories.js"
9
9
  import { removeEntry } from "./removeEntry.js"
10
10
  import { copyEntry } from "./copyEntry.js"
@@ -1,5 +1,5 @@
1
1
  import { readdir } from "node:fs"
2
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
2
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
3
3
 
4
4
  export const readDirectory = async (url, { emfileMaxWait = 1000 } = {}) => {
5
5
  const directoryUrl = assertAndNormalizeDirectoryUrl(url)
@@ -7,7 +7,7 @@ import { promises } from "node:fs"
7
7
  import { urlToFileSystemPath } from "@jsenv/urls"
8
8
 
9
9
  import { binaryFlagsToPermissions } from "./internal/permissions.js"
10
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
10
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
11
11
 
12
12
  const { stat } = promises
13
13
 
@@ -6,7 +6,7 @@
6
6
  import { lstat, stat } from "node:fs"
7
7
  import { urlToFileSystemPath } from "@jsenv/urls"
8
8
 
9
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
9
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
10
10
  import { writeEntryPermissions } from "./writeEntryPermissions.js"
11
11
 
12
12
  const isWindows = process.platform === "win32"
package/src/readFile.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { readFile as readFileNode } from "node:fs"
2
2
 
3
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
4
4
 
5
5
  export const readFile = async (value, { as = "buffer" } = {}) => {
6
6
  const fileUrl = assertAndNormalizeFileUrl(value)
@@ -1,6 +1,6 @@
1
1
  import { readFileSync as readFileSyncNode } from "node:fs"
2
2
 
3
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
4
4
 
5
5
  export const readFileSync = (value, { as = "buffer" } = {}) => {
6
6
  const fileUrl = assertAndNormalizeFileUrl(value)
@@ -6,7 +6,7 @@
6
6
  import { readlink } from "node:fs"
7
7
  import { isFileSystemPath, fileSystemPathToUrl } from "@jsenv/urls"
8
8
 
9
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
9
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
10
10
 
11
11
  export const readSymbolicLink = (url) => {
12
12
  const symbolicLinkUrl = assertAndNormalizeFileUrl(url)
@@ -2,7 +2,7 @@ import { readdirSync, statSync } from "node:fs"
2
2
  import { URL_META } from "@jsenv/url-meta"
3
3
  import { urlToFileSystemPath, urlToRelativeUrl } from "@jsenv/urls"
4
4
 
5
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
5
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
6
6
  import { statsToType } from "./internal/statsToType.js"
7
7
  import { guardTooFastSecondCallPerFile } from "./internal/guard_second_call.js"
8
8
  import { createWatcher } from "./internal/createWatcher.js"
@@ -2,7 +2,7 @@ import { statSync } from "node:fs"
2
2
  import { dirname, basename } from "node:path"
3
3
  import { urlToFileSystemPath } from "@jsenv/urls"
4
4
 
5
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
5
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
6
6
  import { guardTooFastSecondCall } from "./internal/guard_second_call.js"
7
7
  import { statsToType } from "./internal/statsToType.js"
8
8
  import { createWatcher } from "./internal/createWatcher.js"
@@ -6,7 +6,7 @@ import {
6
6
  resolveUrl,
7
7
  } from "@jsenv/urls"
8
8
 
9
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
9
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
10
10
  import { readEntryStat } from "./readEntryStat.js"
11
11
  import { readDirectory } from "./readDirectory.js"
12
12
 
@@ -1,6 +1,6 @@
1
1
  import { promises, constants } from "node:fs"
2
2
 
3
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
4
4
 
5
5
  const { access } = promises
6
6
  const {
@@ -1,7 +1,7 @@
1
1
  import { promises } from "node:fs"
2
2
  import { urlToFileSystemPath } from "@jsenv/urls"
3
3
 
4
- import { assertAndNormalizeDirectoryUrl } from "./assertAndNormalizeDirectoryUrl.js"
4
+ import { assertAndNormalizeDirectoryUrl } from "./directory_url_validation.js"
5
5
  import { statsToType } from "./internal/statsToType.js"
6
6
  import { readEntryStat } from "./readEntryStat.js"
7
7
 
@@ -1,6 +1,6 @@
1
1
  import { utimes } from "node:fs"
2
2
 
3
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
4
4
 
5
5
  export const writeEntryModificationTime = (source, mtime) => {
6
6
  const sourceUrl = assertAndNormalizeFileUrl(source)
@@ -1,7 +1,7 @@
1
1
  import { chmod } from "node:fs"
2
2
 
3
3
  import { permissionsToBinaryFlags } from "./internal/permissions.js"
4
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
4
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
5
5
 
6
6
  export const writeEntryPermissions = async (source, permissions) => {
7
7
  const sourceUrl = assertAndNormalizeFileUrl(source)
package/src/writeFile.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import { writeFile as writeFileNode } from "node:fs"
2
2
 
3
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
4
4
  import { ensureParentDirectories } from "./ensureParentDirectories.js"
5
5
 
6
6
  export const writeFile = async (destination, content = "") => {
@@ -1,6 +1,6 @@
1
1
  import { writeFileSync as writeFileSyncNode, mkdirSync } from "node:fs"
2
2
 
3
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
3
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
4
4
 
5
5
  export const writeFileSync = (destination, content = "") => {
6
6
  const destinationUrl = assertAndNormalizeFileUrl(destination)
@@ -6,7 +6,7 @@ import {
6
6
  isFileSystemPath,
7
7
  } from "@jsenv/urls"
8
8
 
9
- import { assertAndNormalizeFileUrl } from "./assertAndNormalizeFileUrl.js"
9
+ import { assertAndNormalizeFileUrl } from "./file_url_validation.js"
10
10
  import { ensureParentDirectories } from "./ensureParentDirectories.js"
11
11
  import { readEntryStat } from "./readEntryStat.js"
12
12
  import { readSymbolicLink } from "./readSymbolicLink.js"
package/main.js DELETED
@@ -1,35 +0,0 @@
1
- export { assertAndNormalizeDirectoryUrl } from "./src/assertAndNormalizeDirectoryUrl.js"
2
- export { assertAndNormalizeFileUrl } from "./src/assertAndNormalizeFileUrl.js"
3
- export { assertDirectoryPresence } from "./src/assertDirectoryPresence.js"
4
- export { assertFilePresence } from "./src/assertFilePresence.js"
5
- export { bufferToEtag } from "./src/bufferToEtag.js"
6
- export { collectDirectoryMatchReport } from "./src/collectDirectoryMatchReport.js"
7
- export { collectFiles } from "./src/collectFiles.js"
8
- export { comparePathnames } from "./src/comparePathnames.js"
9
- export { ensureEmptyDirectory } from "./src/ensureEmptyDirectory.js"
10
- export { ensureParentDirectories } from "./src/ensureParentDirectories.js"
11
- export { ensureWindowsDriveLetter } from "./src/ensureWindowsDriveLetter.js"
12
- export { copyEntry } from "./src/copyEntry.js"
13
- export { copyDirectoryContent } from "./src/copyDirectoryContent.js"
14
- export { getRealFileSystemUrlSync } from "./src/getRealFileSystemUrlSync.js"
15
- export { grantPermissionsOnEntry } from "./src/grantPermissionsOnEntry.js"
16
- export { listFilesMatching } from "./src/listFilesMatching.js"
17
- export { moveDirectoryContent } from "./src/moveDirectoryContent.js"
18
- export { moveEntry } from "./src/moveEntry.js"
19
- export { readDirectory } from "./src/readDirectory.js"
20
- export { readFile } from "./src/readFile.js"
21
- export { readFileSync } from "./src/readFileSync.js"
22
- export { readEntryModificationTime } from "./src/readEntryModificationTime.js"
23
- export { readEntryPermissions } from "./src/readEntryPermissions.js"
24
- export { readEntryStat } from "./src/readEntryStat.js"
25
- export { readSymbolicLink } from "./src/readSymbolicLink.js"
26
- export { registerDirectoryLifecycle } from "./src/registerDirectoryLifecycle.js"
27
- export { registerFileLifecycle } from "./src/registerFileLifecycle.js"
28
- export { removeEntry } from "./src/removeEntry.js"
29
- export { testEntryPermissions } from "./src/testEntryPermissions.js"
30
- export { writeDirectory } from "./src/writeDirectory.js"
31
- export { writeFile } from "./src/writeFile.js"
32
- export { writeFileSync } from "./src/writeFileSync.js"
33
- export { writeEntryModificationTime } from "./src/writeEntryModificationTime.js"
34
- export { writeEntryPermissions } from "./src/writeEntryPermissions.js"
35
- export { writeSymbolicLink } from "./src/writeSymbolicLink.js"
@@ -1,35 +0,0 @@
1
- import {
2
- fileSystemPathToUrl,
3
- isFileSystemPath,
4
- ensurePathnameTrailingSlash,
5
- } from "@jsenv/urls"
6
-
7
- export const assertAndNormalizeDirectoryUrl = (value) => {
8
- let urlString
9
-
10
- if (value instanceof URL) {
11
- urlString = value.href
12
- } else if (typeof value === "string") {
13
- if (isFileSystemPath(value)) {
14
- urlString = fileSystemPathToUrl(value)
15
- } else {
16
- try {
17
- urlString = String(new URL(value))
18
- } catch (e) {
19
- throw new TypeError(
20
- `directoryUrl must be a valid url, received ${value}`,
21
- )
22
- }
23
- }
24
- } else {
25
- throw new TypeError(
26
- `directoryUrl must be a string or an url, received ${value}`,
27
- )
28
- }
29
-
30
- if (!urlString.startsWith("file://")) {
31
- throw new Error(`directoryUrl must starts with file://, received ${value}`)
32
- }
33
-
34
- return ensurePathnameTrailingSlash(urlString)
35
- }
@@ -1,27 +0,0 @@
1
- import { fileSystemPathToUrl, isFileSystemPath } from "@jsenv/urls"
2
-
3
- export const assertAndNormalizeFileUrl = (value, baseUrl) => {
4
- let urlString
5
-
6
- if (value instanceof URL) {
7
- urlString = value.href
8
- } else if (typeof value === "string") {
9
- if (isFileSystemPath(value)) {
10
- urlString = fileSystemPathToUrl(value)
11
- } else {
12
- try {
13
- urlString = String(new URL(value, baseUrl))
14
- } catch (e) {
15
- throw new TypeError(`fileUrl must be a valid url, received ${value}`)
16
- }
17
- }
18
- } else {
19
- throw new TypeError(`fileUrl must be a string or an url, received ${value}`)
20
- }
21
-
22
- if (!urlString.startsWith("file://")) {
23
- throw new Error(`fileUrl must starts with file://, received ${value}`)
24
- }
25
-
26
- return urlString
27
- }