@jsenv/filesystem 4.8.1 → 4.9.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 +2 -2
- package/src/copy/copy_directory_content.js +4 -4
- package/src/copy/copy_directory_content_sync.js +4 -4
- package/src/copy/copy_entry.js +8 -8
- package/src/copy/copy_entry_sync.js +8 -8
- package/src/lifecycle/create_watcher.js +1 -1
- package/src/lifecycle/register_directory_lifecycle.js +2 -2
- package/src/lifecycle/register_file_lifecycle.js +3 -3
- package/src/list/collect_directory_match_report.js +1 -1
- package/src/list/collect_files.js +2 -2
- package/src/list/visit_structure_sync.js +2 -2
- package/src/main.js +5 -0
- package/src/move/move_directory_content.js +3 -3
- package/src/move/move_entry.js +5 -5
- package/src/move/move_entry_sync.js +111 -0
- package/src/move/move_file.js +5 -0
- package/src/move/move_file_sync.js +5 -0
- package/src/path_and_url/directory_url_validation.js +1 -1
- package/src/read_write/ensure_parent_directories.js +1 -1
- package/src/read_write/ensure_parent_directories_sync.js +1 -1
- package/src/read_write/get_real_file_system_url_sync.js +1 -1
- package/src/read_write/read_file_structure_sync.js +2 -2
- package/src/read_write/read_symbolic_link.js +1 -1
- package/src/read_write/read_symbolic_link_sync.js +1 -1
- package/src/read_write/stat/read_entry_permissions.js +1 -1
- package/src/read_write/stat/read_entry_stat.js +1 -1
- package/src/read_write/stat/read_entry_stat_sync.js +1 -1
- package/src/read_write/stat/test_entry_permissions.js +1 -1
- package/src/read_write/write_directory.js +2 -2
- package/src/read_write/write_directory_sync.js +1 -1
- package/src/read_write/write_file_sync.js +1 -1
- package/src/read_write/write_symbolic_link.js +5 -5
- package/src/read_write/write_symbolic_link_sync.js +5 -5
- package/src/remove/clear_directory_sync.js +1 -1
- package/src/remove/ensure_empty_directory.js +1 -1
- package/src/remove/remove_entry.js +3 -3
- package/src/remove/remove_entry_sync.js +8 -8
- package/src/remove/remove_file.js +2 -2
- package/src/remove/remove_file_sync.js +1 -1
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jsenv/filesystem",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.9.0",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"test": "node --conditions=development ./scripts/test.mjs"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@jsenv/urls": "2.3.
|
|
34
|
+
"@jsenv/urls": "2.3.1",
|
|
35
35
|
"@jsenv/url-meta": "8.4.2",
|
|
36
36
|
"@jsenv/abort": "4.3.0",
|
|
37
37
|
"@jsenv/utils": "2.1.1"
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Abort } from "@jsenv/abort";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveUrl, urlToFileSystemPath } from "@jsenv/urls";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
5
5
|
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
6
|
-
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
7
|
-
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
8
|
-
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
9
6
|
import { readDirectory } from "../read_write/read_directory.js";
|
|
7
|
+
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
8
|
+
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
9
|
+
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
10
10
|
import { copyEntry } from "./copy_entry.js";
|
|
11
11
|
|
|
12
12
|
export const copyDirectoryContent = async ({
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Abort } from "@jsenv/abort";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveUrl, urlToFileSystemPath } from "@jsenv/urls";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
5
5
|
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
6
|
-
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
7
|
-
import { readEntryStatSync } from "../read_write/stat/read_entry_stat_sync.js";
|
|
8
|
-
import { readSymbolicLinkSync } from "../read_write/read_symbolic_link_sync.js";
|
|
9
6
|
import { readDirectorySync } from "../read_write/read_directory_sync.js";
|
|
7
|
+
import { readSymbolicLinkSync } from "../read_write/read_symbolic_link_sync.js";
|
|
8
|
+
import { readEntryStatSync } from "../read_write/stat/read_entry_stat_sync.js";
|
|
9
|
+
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
10
10
|
import { copyEntrySync } from "./copy_entry_sync.js";
|
|
11
11
|
|
|
12
12
|
export const copyDirectoryContentSync = ({
|
package/src/copy/copy_entry.js
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { copyFile as copyFileNode } from "node:fs";
|
|
2
1
|
import { Abort } from "@jsenv/abort";
|
|
3
2
|
import {
|
|
4
|
-
resolveUrl,
|
|
5
|
-
urlToRelativeUrl,
|
|
6
3
|
ensurePathnameTrailingSlash,
|
|
4
|
+
resolveUrl,
|
|
7
5
|
urlIsInsideOf,
|
|
8
6
|
urlToFileSystemPath,
|
|
7
|
+
urlToRelativeUrl,
|
|
9
8
|
} from "@jsenv/urls";
|
|
9
|
+
import { copyFile as copyFileNode } from "node:fs";
|
|
10
10
|
|
|
11
11
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
12
12
|
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
13
|
+
import { ensureParentDirectories } from "../read_write/ensure_parent_directories.js";
|
|
14
|
+
import { readDirectory } from "../read_write/read_directory.js";
|
|
15
|
+
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
16
|
+
import { binaryFlagsToPermissions } from "../read_write/stat/permissions.js";
|
|
13
17
|
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
14
18
|
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
15
|
-
import { binaryFlagsToPermissions } from "../read_write/stat/permissions.js";
|
|
16
|
-
import { writeEntryPermissions } from "../read_write/stat/write_entry_permissions.js";
|
|
17
19
|
import { writeEntryModificationTime } from "../read_write/stat/write_entry_modification_time.js";
|
|
20
|
+
import { writeEntryPermissions } from "../read_write/stat/write_entry_permissions.js";
|
|
18
21
|
import { writeDirectory } from "../read_write/write_directory.js";
|
|
19
|
-
import { ensureParentDirectories } from "../read_write/ensure_parent_directories.js";
|
|
20
|
-
import { readDirectory } from "../read_write/read_directory.js";
|
|
21
|
-
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
22
22
|
import { writeSymbolicLink } from "../read_write/write_symbolic_link.js";
|
|
23
23
|
import { removeEntry } from "../remove/remove_entry.js";
|
|
24
24
|
|
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
import { copyFileSync as copyFileSyncNode } from "node:fs";
|
|
2
1
|
import { Abort } from "@jsenv/abort";
|
|
3
2
|
import {
|
|
4
|
-
resolveUrl,
|
|
5
|
-
urlToRelativeUrl,
|
|
6
3
|
ensurePathnameTrailingSlash,
|
|
4
|
+
resolveUrl,
|
|
7
5
|
urlIsInsideOf,
|
|
8
6
|
urlToFileSystemPath,
|
|
7
|
+
urlToRelativeUrl,
|
|
9
8
|
} from "@jsenv/urls";
|
|
9
|
+
import { copyFileSync as copyFileSyncNode } from "node:fs";
|
|
10
10
|
|
|
11
11
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
12
12
|
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
13
|
+
import { ensureParentDirectoriesSync } from "../read_write/ensure_parent_directories_sync.js";
|
|
14
|
+
import { readDirectorySync } from "../read_write/read_directory_sync.js";
|
|
15
|
+
import { readSymbolicLinkSync } from "../read_write/read_symbolic_link_sync.js";
|
|
16
|
+
import { binaryFlagsToPermissions } from "../read_write/stat/permissions.js";
|
|
13
17
|
import { readEntryStatSync } from "../read_write/stat/read_entry_stat_sync.js";
|
|
14
18
|
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
15
|
-
import { binaryFlagsToPermissions } from "../read_write/stat/permissions.js";
|
|
16
|
-
import { writeEntryPermissionsSync } from "../read_write/stat/write_entry_permissions_sync.js";
|
|
17
19
|
import { writeEntryModificationTimeSync } from "../read_write/stat/write_entry_modification_time_sync.js";
|
|
20
|
+
import { writeEntryPermissionsSync } from "../read_write/stat/write_entry_permissions_sync.js";
|
|
18
21
|
import { writeDirectorySync } from "../read_write/write_directory_sync.js";
|
|
19
|
-
import { ensureParentDirectoriesSync } from "../read_write/ensure_parent_directories_sync.js";
|
|
20
|
-
import { readDirectorySync } from "../read_write/read_directory_sync.js";
|
|
21
|
-
import { readSymbolicLinkSync } from "../read_write/read_symbolic_link_sync.js";
|
|
22
22
|
import { writeSymbolicLinkSync } from "../read_write/write_symbolic_link_sync.js";
|
|
23
23
|
import { removeEntrySync } from "../remove/remove_entry_sync.js";
|
|
24
24
|
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { readdirSync, statSync } from "node:fs";
|
|
2
1
|
import { URL_META } from "@jsenv/url-meta";
|
|
3
2
|
import { urlToFileSystemPath, urlToRelativeUrl } from "@jsenv/urls";
|
|
3
|
+
import { readdirSync, statSync } from "node:fs";
|
|
4
4
|
|
|
5
5
|
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
6
6
|
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
7
|
-
import { guardTooFastSecondCallPerFile } from "./guard_second_call.js";
|
|
8
7
|
import { createWatcher } from "./create_watcher.js";
|
|
8
|
+
import { guardTooFastSecondCallPerFile } from "./guard_second_call.js";
|
|
9
9
|
import { trackResources } from "./track_resources.js";
|
|
10
10
|
|
|
11
11
|
const isLinux = process.platform === "linux";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
import { statSync } from "node:fs";
|
|
2
|
-
import { dirname, basename } from "node:path";
|
|
3
1
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
2
|
+
import { statSync } from "node:fs";
|
|
3
|
+
import { basename, dirname } from "node:path";
|
|
4
4
|
|
|
5
5
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
6
6
|
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
7
|
-
import { trackResources } from "./track_resources.js";
|
|
8
7
|
import { createWatcher } from "./create_watcher.js";
|
|
9
8
|
import { guardTooFastSecondCall } from "./guard_second_call.js";
|
|
9
|
+
import { trackResources } from "./track_resources.js";
|
|
10
10
|
|
|
11
11
|
export const registerFileLifecycle = (
|
|
12
12
|
source,
|
|
@@ -2,8 +2,8 @@ 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 "../path_and_url/directory_url_validation.js";
|
|
6
5
|
import { comparePathnames } from "../path_and_url/compare_pathnames.js";
|
|
6
|
+
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
7
7
|
import { readDirectory } from "../read_write/read_directory.js";
|
|
8
8
|
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
9
9
|
|
|
@@ -2,10 +2,10 @@ 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 "../path_and_url/directory_url_validation.js";
|
|
6
5
|
import { comparePathnames } from "../path_and_url/compare_pathnames.js";
|
|
7
|
-
import {
|
|
6
|
+
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
8
7
|
import { readDirectory } from "../read_write/read_directory.js";
|
|
8
|
+
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
9
9
|
|
|
10
10
|
export const collectFiles = async ({
|
|
11
11
|
signal = new AbortController().signal,
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { URL_META } from "@jsenv/url-meta";
|
|
2
2
|
import { urlToRelativeUrl } from "@jsenv/urls";
|
|
3
3
|
|
|
4
|
-
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
5
4
|
import { comparePathnames } from "../path_and_url/compare_pathnames.js";
|
|
6
|
-
import {
|
|
5
|
+
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
7
6
|
import { readDirectorySync } from "../read_write/read_directory_sync.js";
|
|
7
|
+
import { readEntryStatSync } from "../read_write/stat/read_entry_stat_sync.js";
|
|
8
8
|
|
|
9
9
|
export const visitStructureSync = ({
|
|
10
10
|
directoryUrl,
|
package/src/main.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
// tslint:disable:ordered-imports
|
|
2
|
+
|
|
1
3
|
// we might wanna expose the sync versions as follows:
|
|
2
4
|
// readDirectory.sync()
|
|
3
5
|
// +1: very easy to switch between sync/async versions of a given function
|
|
@@ -57,7 +59,10 @@ export { writeEntryModificationTimeSync } from "./read_write/stat/write_entry_mo
|
|
|
57
59
|
|
|
58
60
|
// move
|
|
59
61
|
export { moveDirectoryContent } from "./move/move_directory_content.js";
|
|
62
|
+
export { moveFile } from "./move/move_file.js";
|
|
60
63
|
export { moveEntry } from "./move/move_entry.js";
|
|
64
|
+
export { moveFileSync } from "./move/move_file_sync.js";
|
|
65
|
+
export { moveEntrySync } from "./move/move_entry_sync.js";
|
|
61
66
|
|
|
62
67
|
// copy
|
|
63
68
|
export { copyEntry } from "./copy/copy_entry.js";
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { Abort } from "@jsenv/abort";
|
|
2
|
-
import {
|
|
2
|
+
import { resolveUrl, urlToFileSystemPath } from "@jsenv/urls";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
5
5
|
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
6
|
+
import { readDirectory } from "../read_write/read_directory.js";
|
|
7
|
+
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
6
8
|
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
7
9
|
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
8
|
-
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
9
|
-
import { readDirectory } from "../read_write/read_directory.js";
|
|
10
10
|
import { moveEntry } from "./move_entry.js";
|
|
11
11
|
|
|
12
12
|
export const moveDirectoryContent = async ({
|
package/src/move/move_entry.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { rename } from "node:fs";
|
|
2
1
|
import { Abort } from "@jsenv/abort";
|
|
3
|
-
import {
|
|
2
|
+
import { resolveUrl, urlToFileSystemPath } from "@jsenv/urls";
|
|
3
|
+
import { rename } from "node:fs";
|
|
4
4
|
|
|
5
|
+
import { copyEntry } from "../copy/copy_entry.js";
|
|
5
6
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
6
7
|
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
7
|
-
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
8
|
-
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
9
8
|
import { ensureParentDirectories } from "../read_write/ensure_parent_directories.js";
|
|
10
9
|
import { readSymbolicLink } from "../read_write/read_symbolic_link.js";
|
|
11
|
-
import {
|
|
10
|
+
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
11
|
+
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
12
12
|
import { removeEntry } from "../remove/remove_entry.js";
|
|
13
13
|
|
|
14
14
|
export const moveEntry = async ({
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
import { resolveUrl, urlToFileSystemPath } from "@jsenv/urls";
|
|
2
|
+
import { renameSync } from "node:fs";
|
|
3
|
+
|
|
4
|
+
import { copyEntry } from "../copy/copy_entry.js";
|
|
5
|
+
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
6
|
+
import { urlTargetsSameFileSystemPath } from "../path_and_url/url_targets_same_file_system_path.js";
|
|
7
|
+
import { ensureParentDirectoriesSync } from "../read_write/ensure_parent_directories_sync.js";
|
|
8
|
+
import { readSymbolicLinkSync } from "../read_write/read_symbolic_link_sync.js";
|
|
9
|
+
import { readEntryStatSync } from "../read_write/stat/read_entry_stat_sync.js";
|
|
10
|
+
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
11
|
+
import { removeEntrySync } from "../remove/remove_entry_sync.js";
|
|
12
|
+
|
|
13
|
+
export const moveEntrySync = ({
|
|
14
|
+
from,
|
|
15
|
+
to,
|
|
16
|
+
overwrite = false,
|
|
17
|
+
allowUseless = false,
|
|
18
|
+
followLink = true,
|
|
19
|
+
}) => {
|
|
20
|
+
const fromUrl = assertAndNormalizeFileUrl(from);
|
|
21
|
+
const fromPath = urlToFileSystemPath(fromUrl);
|
|
22
|
+
let toUrl = assertAndNormalizeFileUrl(to);
|
|
23
|
+
let toPath = urlToFileSystemPath(toUrl);
|
|
24
|
+
|
|
25
|
+
const sourceStats = readEntryStatSync(fromUrl, {
|
|
26
|
+
nullIfNotFound: true,
|
|
27
|
+
followLink: false,
|
|
28
|
+
});
|
|
29
|
+
if (!sourceStats) {
|
|
30
|
+
throw new Error(`nothing to move from ${fromPath}`);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
let destinationStats = readEntryStatSync(toUrl, {
|
|
34
|
+
nullIfNotFound: true,
|
|
35
|
+
// we force false here but in fact we will follow the destination link
|
|
36
|
+
// to know where we will actually move and detect useless move overrite etc..
|
|
37
|
+
followLink: false,
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
if (followLink && destinationStats && destinationStats.isSymbolicLink()) {
|
|
41
|
+
const linkTarget = readSymbolicLinkSync(toUrl);
|
|
42
|
+
toUrl = resolveUrl(linkTarget, toUrl);
|
|
43
|
+
toPath = urlToFileSystemPath(toUrl);
|
|
44
|
+
destinationStats = readEntryStatSync(toUrl, {
|
|
45
|
+
nullIfNotFound: true,
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
if (urlTargetsSameFileSystemPath(fromUrl, toUrl)) {
|
|
50
|
+
if (allowUseless) {
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
throw new Error(
|
|
54
|
+
`no move needed for ${fromPath} because destination and source are the same`,
|
|
55
|
+
);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
if (destinationStats) {
|
|
59
|
+
const sourceType = statsToType(sourceStats);
|
|
60
|
+
const destinationType = statsToType(destinationStats);
|
|
61
|
+
|
|
62
|
+
if (sourceType !== destinationType) {
|
|
63
|
+
throw new Error(
|
|
64
|
+
`cannot move ${sourceType} from ${fromPath} to ${toPath} because destination exists and is not a ${sourceType} (it's a ${destinationType})`,
|
|
65
|
+
);
|
|
66
|
+
}
|
|
67
|
+
if (!overwrite) {
|
|
68
|
+
throw new Error(
|
|
69
|
+
`cannot move ${sourceType} from ${fromPath} to ${toPath} because destination exists and overwrite option is disabled`,
|
|
70
|
+
);
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// remove file, link, directory...
|
|
74
|
+
removeEntrySync(toUrl, {
|
|
75
|
+
recursive: true,
|
|
76
|
+
});
|
|
77
|
+
} else {
|
|
78
|
+
ensureParentDirectoriesSync(toUrl);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
moveNaiveSync(fromPath, toPath, {
|
|
82
|
+
handleCrossDeviceError: () => {
|
|
83
|
+
copyEntry({
|
|
84
|
+
from: fromUrl,
|
|
85
|
+
to: toUrl,
|
|
86
|
+
preserveStat: true,
|
|
87
|
+
});
|
|
88
|
+
removeEntrySync(fromUrl, {
|
|
89
|
+
recursive: true,
|
|
90
|
+
});
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
const moveNaiveSync = (
|
|
96
|
+
fromPath,
|
|
97
|
+
destinationPath,
|
|
98
|
+
{ handleCrossDeviceError = null } = {},
|
|
99
|
+
) => {
|
|
100
|
+
try {
|
|
101
|
+
renameSync(fromPath, destinationPath);
|
|
102
|
+
} catch (error) {
|
|
103
|
+
if (error) {
|
|
104
|
+
if (handleCrossDeviceError && error.code === "EXDEV") {
|
|
105
|
+
handleCrossDeviceError(error);
|
|
106
|
+
} else {
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { dirname } from "node:path";
|
|
2
1
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
5
5
|
import { writeDirectory } from "./write_directory.js";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { dirname } from "node:path";
|
|
2
1
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
5
5
|
import { writeDirectorySync } from "./write_directory_sync.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { readdirSync, statSync, readFileSync } from "node:fs";
|
|
2
1
|
import { urlToRelativeUrl } from "@jsenv/urls";
|
|
3
2
|
import { CONTENT_TYPE } from "@jsenv/utils/src/content_type/content_type.js";
|
|
3
|
+
import { readdirSync, readFileSync, statSync } from "node:fs";
|
|
4
4
|
|
|
5
|
-
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
6
5
|
import { comparePathnames } from "../path_and_url/compare_pathnames.js";
|
|
6
|
+
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
7
7
|
|
|
8
8
|
export const readFileStructureSync = (directoryUrl) => {
|
|
9
9
|
directoryUrl = assertAndNormalizeDirectoryUrl(directoryUrl);
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_fs_symlink_target_path_type_callback
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { fileSystemPathToUrl, isFileSystemPath } from "@jsenv/urls";
|
|
6
7
|
import { readlink } from "node:fs";
|
|
7
|
-
import { isFileSystemPath, fileSystemPathToUrl } from "@jsenv/urls";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
10
10
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_fs_symlink_target_path_type_callback
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
+
import { fileSystemPathToUrl, isFileSystemPath } from "@jsenv/urls";
|
|
6
7
|
import { readlinkSync } from "node:fs";
|
|
7
|
-
import { isFileSystemPath, fileSystemPathToUrl } from "@jsenv/urls";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
10
10
|
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_file_modes
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { promises } from "node:fs";
|
|
7
6
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
7
|
+
import { promises } from "node:fs";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../../path_and_url/file_url_validation.js";
|
|
10
10
|
import { binaryFlagsToPermissions } from "./permissions.js";
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_class_fs_stats
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { lstat, stat } from "node:fs";
|
|
7
6
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
7
|
+
import { lstat, stat } from "node:fs";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../../path_and_url/file_url_validation.js";
|
|
10
10
|
import { writeEntryPermissions } from "./write_entry_permissions.js";
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
* https://nodejs.org/docs/latest-v13.x/api/fs.html#fs_class_fs_stats
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
|
-
import { lstatSync, statSync } from "node:fs";
|
|
7
6
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
7
|
+
import { lstatSync, statSync } from "node:fs";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../../path_and_url/file_url_validation.js";
|
|
10
10
|
import { writeEntryPermissionsSync } from "./write_entry_permissions_sync.js";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { promises } from "node:fs";
|
|
2
1
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
2
|
+
import { promises } from "node:fs";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
5
|
-
import { statsToType } from "./stat/stats_to_type.js";
|
|
6
5
|
import { readEntryStat } from "./stat/read_entry_stat.js";
|
|
6
|
+
import { statsToType } from "./stat/stats_to_type.js";
|
|
7
7
|
|
|
8
8
|
// https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_fspromises_mkdir_path_options
|
|
9
9
|
const { mkdir } = promises;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { mkdirSync } from "node:fs";
|
|
2
1
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
2
|
+
import { mkdirSync } from "node:fs";
|
|
3
3
|
|
|
4
4
|
import { assertAndNormalizeDirectoryUrl } from "../path_and_url/directory_url_validation.js";
|
|
5
5
|
import { readEntryStatSync } from "./stat/read_entry_stat_sync.js";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { promises } from "node:fs";
|
|
2
1
|
import {
|
|
3
2
|
fileSystemPathToUrl,
|
|
4
|
-
urlToFileSystemPath,
|
|
5
|
-
resolveUrl,
|
|
6
3
|
isFileSystemPath,
|
|
4
|
+
resolveUrl,
|
|
5
|
+
urlToFileSystemPath,
|
|
7
6
|
} from "@jsenv/urls";
|
|
7
|
+
import { promises } from "node:fs";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
10
10
|
import { removeEntry } from "../remove/remove_entry.js";
|
|
11
|
-
import { readEntryStat } from "./stat/read_entry_stat.js";
|
|
12
|
-
import { readSymbolicLink } from "./read_symbolic_link.js";
|
|
13
11
|
import { ensureParentDirectories } from "./ensure_parent_directories.js";
|
|
12
|
+
import { readSymbolicLink } from "./read_symbolic_link.js";
|
|
13
|
+
import { readEntryStat } from "./stat/read_entry_stat.js";
|
|
14
14
|
|
|
15
15
|
// https://nodejs.org/dist/latest-v13.x/docs/api/fs.html#fs_fspromises_symlink_target_path_type
|
|
16
16
|
const { symlink } = promises;
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import { symlinkSync } from "node:fs";
|
|
2
1
|
import {
|
|
3
2
|
fileSystemPathToUrl,
|
|
4
|
-
urlToFileSystemPath,
|
|
5
|
-
resolveUrl,
|
|
6
3
|
isFileSystemPath,
|
|
4
|
+
resolveUrl,
|
|
5
|
+
urlToFileSystemPath,
|
|
7
6
|
} from "@jsenv/urls";
|
|
7
|
+
import { symlinkSync } from "node:fs";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
10
10
|
import { removeEntrySync } from "../remove/remove_entry_sync.js";
|
|
11
|
-
import { readEntryStatSync } from "./stat/read_entry_stat_sync.js";
|
|
12
|
-
import { readSymbolicLinkSync } from "./read_symbolic_link_sync.js";
|
|
13
11
|
import { ensureParentDirectoriesSync } from "./ensure_parent_directories_sync.js";
|
|
12
|
+
import { readSymbolicLinkSync } from "./read_symbolic_link_sync.js";
|
|
13
|
+
import { readEntryStatSync } from "./stat/read_entry_stat_sync.js";
|
|
14
14
|
|
|
15
15
|
const isWindows = process.platform === "win32";
|
|
16
16
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { urlToFileSystemPath } from "@jsenv/urls";
|
|
2
2
|
|
|
3
3
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
4
|
-
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
5
4
|
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
5
|
+
import { statsToType } from "../read_write/stat/stats_to_type.js";
|
|
6
6
|
import { writeDirectory } from "../read_write/write_directory.js";
|
|
7
7
|
import { removeEntry } from "./remove_entry.js";
|
|
8
8
|
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { unlink, rmdir, openSync, closeSync } from "node:fs";
|
|
2
1
|
import { Abort } from "@jsenv/abort";
|
|
3
2
|
import {
|
|
4
3
|
ensurePathnameTrailingSlash,
|
|
5
|
-
urlToFileSystemPath,
|
|
6
4
|
resolveUrl,
|
|
5
|
+
urlToFileSystemPath,
|
|
7
6
|
} from "@jsenv/urls";
|
|
7
|
+
import { closeSync, openSync, rmdir, unlink } from "node:fs";
|
|
8
8
|
|
|
9
9
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
10
|
-
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
11
10
|
import { readDirectory } from "../read_write/read_directory.js";
|
|
11
|
+
import { readEntryStat } from "../read_write/stat/read_entry_stat.js";
|
|
12
12
|
|
|
13
13
|
export const removeEntry = async (
|
|
14
14
|
source,
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import {
|
|
2
|
-
unlinkSync,
|
|
3
|
-
rmdirSync,
|
|
4
|
-
readdirSync,
|
|
5
|
-
openSync,
|
|
6
|
-
closeSync,
|
|
7
|
-
} from "node:fs";
|
|
8
1
|
import { Abort } from "@jsenv/abort";
|
|
9
2
|
import {
|
|
10
3
|
ensurePathnameTrailingSlash,
|
|
11
|
-
urlToFileSystemPath,
|
|
12
4
|
resolveUrl,
|
|
5
|
+
urlToFileSystemPath,
|
|
13
6
|
} from "@jsenv/urls";
|
|
7
|
+
import {
|
|
8
|
+
closeSync,
|
|
9
|
+
openSync,
|
|
10
|
+
readdirSync,
|
|
11
|
+
rmdirSync,
|
|
12
|
+
unlinkSync,
|
|
13
|
+
} from "node:fs";
|
|
14
14
|
|
|
15
15
|
import { assertAndNormalizeFileUrl } from "../path_and_url/file_url_validation.js";
|
|
16
16
|
import { readEntryStatSync } from "../read_write/stat/read_entry_stat_sync.js";
|