@duplojs/server 0.0.0-stage → 0.1.0-beta.10
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 +8 -2
- package/dist/_virtual/_rolldown/runtime.cjs +33 -0
- package/dist/_virtual/_rolldown/runtime.mjs +17 -0
- package/dist/command/argument.cjs +27 -0
- package/dist/command/argument.d.ts +18 -0
- package/dist/command/argument.mjs +24 -0
- package/dist/command/create.cjs +102 -0
- package/dist/command/create.d.ts +47 -0
- package/dist/command/create.mjs +96 -0
- package/dist/command/error.cjs +206 -0
- package/dist/command/error.d.ts +61 -0
- package/dist/command/error.mjs +193 -0
- package/dist/command/exec.cjs +19 -0
- package/dist/command/exec.d.ts +14 -0
- package/dist/command/exec.mjs +17 -0
- package/dist/command/execOptions.cjs +41 -0
- package/dist/command/execOptions.d.ts +14 -0
- package/dist/command/execOptions.mjs +37 -0
- package/dist/command/help.cjs +250 -0
- package/dist/command/help.d.ts +10 -0
- package/dist/command/help.mjs +237 -0
- package/dist/command/index.cjs +82 -0
- package/dist/command/index.d.ts +8 -0
- package/dist/command/index.mjs +47 -0
- package/dist/command/kind.cjs +7 -0
- package/dist/command/kind.d.ts +2 -0
- package/dist/command/kind.mjs +5 -0
- package/dist/command/options/base.cjs +76 -0
- package/dist/command/options/base.d.ts +30 -0
- package/dist/command/options/base.mjs +69 -0
- package/dist/command/options/defaults/array.cjs +35 -0
- package/dist/command/options/defaults/array.d.ts +26 -0
- package/dist/command/options/defaults/array.mjs +29 -0
- package/dist/command/options/defaults/boolean.cjs +28 -0
- package/dist/command/options/defaults/boolean.d.ts +14 -0
- package/dist/command/options/defaults/boolean.mjs +25 -0
- package/dist/command/options/defaults/index.d.ts +3 -0
- package/dist/command/options/defaults/simple.cjs +25 -0
- package/dist/command/options/defaults/simple.d.ts +18 -0
- package/dist/command/options/defaults/simple.mjs +22 -0
- package/dist/command/options/identifier.cjs +7 -0
- package/dist/command/options/identifier.d.ts +4 -0
- package/dist/command/options/identifier.mjs +5 -0
- package/dist/command/options/index.d.ts +4 -0
- package/dist/command/options/types/index.d.ts +1 -0
- package/dist/command/options/types/options.d.ts +9 -0
- package/dist/command/types/eligibleType.d.ts +4 -0
- package/dist/command/types/forbiddenDuplicateName.d.ts +11 -0
- package/dist/command/types/forbiddenInvalidIdentifier.d.ts +6 -0
- package/dist/command/types/index.d.ts +3 -0
- package/dist/common/environmentVariable/expandEnvironmentVariables.cjs +27 -0
- package/dist/common/environmentVariable/expandEnvironmentVariables.d.ts +2 -0
- package/dist/common/environmentVariable/expandEnvironmentVariables.mjs +22 -0
- package/dist/common/environmentVariable/index.cjs +47 -0
- package/dist/common/environmentVariable/index.d.ts +16 -0
- package/dist/common/environmentVariable/index.mjs +41 -0
- package/dist/common/environmentVariable/overrideEnvironmentVariables.cjs +13 -0
- package/dist/common/environmentVariable/overrideEnvironmentVariables.d.ts +3 -0
- package/dist/common/environmentVariable/overrideEnvironmentVariables.mjs +9 -0
- package/dist/common/environmentVariable/parseEnvironmentFiles.cjs +32 -0
- package/dist/common/environmentVariable/parseEnvironmentFiles.d.ts +5 -0
- package/dist/common/environmentVariable/parseEnvironmentFiles.mjs +26 -0
- package/dist/common/environmentVariableOrThrow.cjs +23 -0
- package/dist/common/environmentVariableOrThrow.d.ts +12 -0
- package/dist/common/environmentVariableOrThrow.mjs +19 -0
- package/dist/common/exitProcess.cjs +7 -0
- package/dist/common/exitProcess.d.ts +6 -0
- package/dist/common/exitProcess.mjs +8 -0
- package/dist/common/getCurrentWorkDirectory.cjs +15 -0
- package/dist/common/getCurrentWorkDirectory.d.ts +8 -0
- package/dist/common/getCurrentWorkDirectory.mjs +11 -0
- package/dist/common/getCurrentWorkDirectoryOrThrow.cjs +25 -0
- package/dist/common/getCurrentWorkDirectoryOrThrow.d.ts +8 -0
- package/dist/common/getCurrentWorkDirectoryOrThrow.mjs +20 -0
- package/dist/common/getProcessArguments.cjs +18 -0
- package/dist/common/getProcessArguments.d.ts +6 -0
- package/dist/common/getProcessArguments.mjs +18 -0
- package/dist/common/index.cjs +44 -0
- package/dist/common/index.d.ts +9 -0
- package/dist/common/index.mjs +27 -0
- package/dist/common/meta/getCurrentDirectoryName.cjs +10 -0
- package/dist/common/meta/getCurrentDirectoryName.d.ts +7 -0
- package/dist/common/meta/getCurrentDirectoryName.mjs +7 -0
- package/dist/common/meta/index.d.ts +7 -0
- package/dist/common/setCurrentWorkingDirectory.cjs +11 -0
- package/dist/common/setCurrentWorkingDirectory.d.ts +8 -0
- package/dist/common/setCurrentWorkingDirectory.mjs +9 -0
- package/dist/common/setCurrentWorkingDirectoryOrThrow.cjs +23 -0
- package/dist/common/setCurrentWorkingDirectoryOrThrow.d.ts +8 -0
- package/dist/common/setCurrentWorkingDirectoryOrThrow.mjs +18 -0
- package/dist/dataStructure/common/codec/defaults/index.d.ts +2 -0
- package/dist/dataStructure/common/codec/defaults/json.cjs +25 -0
- package/dist/dataStructure/common/codec/defaults/json.d.ts +9 -0
- package/dist/dataStructure/common/codec/defaults/json.mjs +22 -0
- package/dist/dataStructure/common/codec/defaults/string.cjs +25 -0
- package/dist/dataStructure/common/codec/defaults/string.d.ts +13 -0
- package/dist/dataStructure/common/codec/defaults/string.mjs +22 -0
- package/dist/dataStructure/common/codec/index.d.ts +1 -0
- package/dist/dataStructure/common/error/defaultInterpreter.cjs +29 -0
- package/dist/dataStructure/common/error/defaultInterpreter.d.ts +69 -0
- package/dist/dataStructure/common/error/defaultInterpreter.mjs +26 -0
- package/dist/dataStructure/common/error/index.d.ts +1 -0
- package/dist/dataStructure/common/index.d.ts +2 -0
- package/dist/dataStructure/constraint/fileExist.cjs +19 -0
- package/dist/dataStructure/constraint/fileExist.d.ts +10 -0
- package/dist/dataStructure/constraint/fileExist.mjs +15 -0
- package/dist/dataStructure/constraint/folderExist.cjs +19 -0
- package/dist/dataStructure/constraint/folderExist.d.ts +10 -0
- package/dist/dataStructure/constraint/folderExist.mjs +15 -0
- package/dist/dataStructure/constraint/index.d.ts +5 -0
- package/dist/dataStructure/constraint/mimeType.cjs +18 -0
- package/dist/dataStructure/constraint/mimeType.d.ts +11 -0
- package/dist/dataStructure/constraint/mimeType.mjs +14 -0
- package/dist/dataStructure/constraint/size.cjs +29 -0
- package/dist/dataStructure/constraint/size.d.ts +16 -0
- package/dist/dataStructure/constraint/size.mjs +24 -0
- package/dist/dataStructure/constraint/types/constraints.d.ts +12 -0
- package/dist/dataStructure/constraint/types/index.d.ts +1 -0
- package/dist/dataStructure/fundamentalType/file.cjs +11 -0
- package/dist/dataStructure/fundamentalType/file.d.ts +8 -0
- package/dist/dataStructure/fundamentalType/file.mjs +8 -0
- package/dist/dataStructure/fundamentalType/folder.cjs +11 -0
- package/dist/dataStructure/fundamentalType/folder.d.ts +8 -0
- package/dist/dataStructure/fundamentalType/folder.mjs +8 -0
- package/dist/dataStructure/fundamentalType/index.d.ts +3 -0
- package/dist/dataStructure/fundamentalType/types/fundamentalTypes.d.ts +8 -0
- package/dist/dataStructure/fundamentalType/types/index.d.ts +1 -0
- package/dist/dataStructure/helper/file.cjs +10 -0
- package/dist/dataStructure/helper/file.d.ts +3 -0
- package/dist/dataStructure/helper/file.mjs +8 -0
- package/dist/dataStructure/helper/fileExist.cjs +7 -0
- package/dist/dataStructure/helper/fileExist.d.ts +2 -0
- package/dist/dataStructure/helper/fileExist.mjs +7 -0
- package/dist/dataStructure/helper/folder.cjs +10 -0
- package/dist/dataStructure/helper/folder.d.ts +3 -0
- package/dist/dataStructure/helper/folder.mjs +8 -0
- package/dist/dataStructure/helper/folderExist.cjs +7 -0
- package/dist/dataStructure/helper/folderExist.d.ts +2 -0
- package/dist/dataStructure/helper/folderExist.mjs +7 -0
- package/dist/dataStructure/helper/index.d.ts +6 -0
- package/dist/dataStructure/helper/mimeType.cjs +7 -0
- package/dist/dataStructure/helper/mimeType.d.ts +2 -0
- package/dist/dataStructure/helper/mimeType.mjs +7 -0
- package/dist/dataStructure/helper/size.cjs +7 -0
- package/dist/dataStructure/helper/size.d.ts +2 -0
- package/dist/dataStructure/helper/size.mjs +7 -0
- package/dist/dataStructure/index.cjs +83 -0
- package/dist/dataStructure/index.d.ts +6 -0
- package/dist/dataStructure/index.mjs +51 -0
- package/dist/dataStructure/kind.cjs +7 -0
- package/dist/dataStructure/kind.d.ts +2 -0
- package/dist/dataStructure/kind.mjs +5 -0
- package/dist/dataStructure/type/file.cjs +14 -0
- package/dist/dataStructure/type/file.d.ts +11 -0
- package/dist/dataStructure/type/file.mjs +11 -0
- package/dist/dataStructure/type/folder.cjs +14 -0
- package/dist/dataStructure/type/folder.d.ts +11 -0
- package/dist/dataStructure/type/folder.mjs +11 -0
- package/dist/dataStructure/type/index.d.ts +3 -0
- package/dist/dataStructure/type/types/index.d.ts +1 -0
- package/dist/dataStructure/type/types/types.d.ts +8 -0
- package/dist/file/appendFile.cjs +67 -0
- package/dist/file/appendFile.d.ts +43 -0
- package/dist/file/appendFile.mjs +54 -0
- package/dist/file/appendTextFile.cjs +67 -0
- package/dist/file/appendTextFile.d.ts +43 -0
- package/dist/file/appendTextFile.mjs +54 -0
- package/dist/file/copy.cjs +53 -0
- package/dist/file/copy.d.ts +43 -0
- package/dist/file/copy.mjs +40 -0
- package/dist/file/createEntryInterface.cjs +19 -0
- package/dist/file/createEntryInterface.d.ts +3 -0
- package/dist/file/createEntryInterface.mjs +15 -0
- package/dist/file/ensureDirectory.cjs +52 -0
- package/dist/file/ensureDirectory.d.ts +36 -0
- package/dist/file/ensureDirectory.mjs +41 -0
- package/dist/file/ensureFile.cjs +60 -0
- package/dist/file/ensureFile.d.ts +39 -0
- package/dist/file/ensureFile.mjs +48 -0
- package/dist/file/exists.cjs +43 -0
- package/dist/file/exists.d.ts +27 -0
- package/dist/file/exists.mjs +35 -0
- package/dist/file/fileInterface.cjs +76 -0
- package/dist/file/fileInterface.d.ts +31 -0
- package/dist/file/fileInterface.mjs +70 -0
- package/dist/file/folderInterface.cjs +76 -0
- package/dist/file/folderInterface.d.ts +33 -0
- package/dist/file/folderInterface.mjs +70 -0
- package/dist/file/index.cjs +634 -0
- package/dist/file/index.d.ts +35 -0
- package/dist/file/index.mjs +335 -0
- package/dist/file/link.cjs +70 -0
- package/dist/file/link.d.ts +46 -0
- package/dist/file/link.mjs +56 -0
- package/dist/file/linkStat.cjs +98 -0
- package/dist/file/linkStat.d.ts +31 -0
- package/dist/file/linkStat.mjs +88 -0
- package/dist/file/makeDirectory.cjs +60 -0
- package/dist/file/makeDirectory.d.ts +45 -0
- package/dist/file/makeDirectory.mjs +47 -0
- package/dist/file/makeTemporaryDirectory.cjs +48 -0
- package/dist/file/makeTemporaryDirectory.d.ts +32 -0
- package/dist/file/makeTemporaryDirectory.mjs +38 -0
- package/dist/file/makeTemporaryFile.cjs +62 -0
- package/dist/file/makeTemporaryFile.d.ts +36 -0
- package/dist/file/makeTemporaryFile.mjs +50 -0
- package/dist/file/move.cjs +71 -0
- package/dist/file/move.d.ts +46 -0
- package/dist/file/move.mjs +57 -0
- package/dist/file/readDirectory.cjs +44 -0
- package/dist/file/readDirectory.d.ts +35 -0
- package/dist/file/readDirectory.mjs +33 -0
- package/dist/file/readFile.cjs +51 -0
- package/dist/file/readFile.d.ts +33 -0
- package/dist/file/readFile.mjs +41 -0
- package/dist/file/readJsonFile.cjs +51 -0
- package/dist/file/readJsonFile.d.ts +33 -0
- package/dist/file/readJsonFile.mjs +41 -0
- package/dist/file/readLink.cjs +46 -0
- package/dist/file/readLink.d.ts +30 -0
- package/dist/file/readLink.mjs +37 -0
- package/dist/file/readTextFile.cjs +51 -0
- package/dist/file/readTextFile.d.ts +33 -0
- package/dist/file/readTextFile.mjs +41 -0
- package/dist/file/realPath.cjs +42 -0
- package/dist/file/realPath.d.ts +27 -0
- package/dist/file/realPath.mjs +34 -0
- package/dist/file/relocate.cjs +83 -0
- package/dist/file/relocate.d.ts +46 -0
- package/dist/file/relocate.mjs +68 -0
- package/dist/file/remove.cjs +60 -0
- package/dist/file/remove.d.ts +42 -0
- package/dist/file/remove.mjs +48 -0
- package/dist/file/rename.cjs +83 -0
- package/dist/file/rename.d.ts +46 -0
- package/dist/file/rename.mjs +68 -0
- package/dist/file/setMode.cjs +65 -0
- package/dist/file/setMode.d.ts +45 -0
- package/dist/file/setMode.mjs +56 -0
- package/dist/file/setOwner.cjs +53 -0
- package/dist/file/setOwner.d.ts +35 -0
- package/dist/file/setOwner.mjs +44 -0
- package/dist/file/setTime.cjs +55 -0
- package/dist/file/setTime.d.ts +36 -0
- package/dist/file/setTime.mjs +45 -0
- package/dist/file/stat.cjs +99 -0
- package/dist/file/stat.d.ts +62 -0
- package/dist/file/stat.mjs +89 -0
- package/dist/file/symlink.cjs +64 -0
- package/dist/file/symlink.d.ts +48 -0
- package/dist/file/symlink.mjs +52 -0
- package/dist/file/truncate.cjs +60 -0
- package/dist/file/truncate.d.ts +42 -0
- package/dist/file/truncate.mjs +47 -0
- package/dist/file/unknownEntryInterface.cjs +40 -0
- package/dist/file/unknownEntryInterface.d.ts +17 -0
- package/dist/file/unknownEntryInterface.mjs +35 -0
- package/dist/file/walkDirectory.cjs +57 -0
- package/dist/file/walkDirectory.d.ts +37 -0
- package/dist/file/walkDirectory.mjs +45 -0
- package/dist/file/writeFile.cjs +68 -0
- package/dist/file/writeFile.d.ts +43 -0
- package/dist/file/writeFile.mjs +55 -0
- package/dist/file/writeJsonFile.cjs +77 -0
- package/dist/file/writeJsonFile.d.ts +46 -0
- package/dist/file/writeJsonFile.mjs +64 -0
- package/dist/file/writeTextFile.cjs +68 -0
- package/dist/file/writeTextFile.d.ts +43 -0
- package/dist/file/writeTextFile.mjs +55 -0
- package/dist/implementor.cjs +67 -0
- package/dist/implementor.d.ts +35 -0
- package/dist/implementor.mjs +55 -0
- package/dist/index.cjs +76 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.mjs +15 -0
- package/dist/kind.cjs +7 -0
- package/dist/kind.d.ts +2 -0
- package/dist/kind.mjs +5 -0
- package/dist/override.d.ts +8 -0
- package/package.json +81 -3
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { implementFunction, nodeFileSystem } from "../implementor.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
import * as DPath from "@duplojs/lang/path";
|
|
5
|
+
//#region scripts/file/relocate.ts
|
|
6
|
+
var RelocateErrorNotFound = class extends DCommon.DuploJSError.parentClass("file-system-relocate-not-found", Error) {};
|
|
7
|
+
var RelocateErrorPermissionDenied = class extends DCommon.DuploJSError.parentClass("file-system-relocate-permission-denied", Error) {};
|
|
8
|
+
var RelocateErrorAlreadyExists = class extends DCommon.DuploJSError.parentClass("file-system-relocate-already-exists", Error) {};
|
|
9
|
+
var RelocateErrorIsDirectory = class extends DCommon.DuploJSError.parentClass("file-system-relocate-is-directory", Error) {};
|
|
10
|
+
var RelocateErrorNotDirectory = class extends DCommon.DuploJSError.parentClass("file-system-relocate-not-directory", Error) {};
|
|
11
|
+
var RelocateErrorDirectoryNotEmpty = class extends DCommon.DuploJSError.parentClass("file-system-relocate-directory-not-empty", Error) {};
|
|
12
|
+
var RelocateErrorReadOnly = class extends DCommon.DuploJSError.parentClass("file-system-relocate-read-only", Error) {};
|
|
13
|
+
var RelocateErrorInvalidArgument = class extends DCommon.DuploJSError.parentClass("file-system-relocate-invalid-argument", Error) {};
|
|
14
|
+
var RelocateErrorBusy = class extends DCommon.DuploJSError.parentClass("file-system-relocate-busy", Error) {};
|
|
15
|
+
var RelocateErrorCrossDevice = class extends DCommon.DuploJSError.parentClass("file-system-relocate-cross-device", Error) {};
|
|
16
|
+
var RelocateError = class extends DCommon.DuploJSError.parentClass("file-system-relocate-error", Error) {};
|
|
17
|
+
function handleNodeRelocateError(error) {
|
|
18
|
+
let relocateError = void 0;
|
|
19
|
+
if ("code" in error) {
|
|
20
|
+
if (error.code === "ENOENT") relocateError = new RelocateErrorNotFound(error);
|
|
21
|
+
else if (error.code === "EACCES" || error.code === "EPERM") relocateError = new RelocateErrorPermissionDenied(error);
|
|
22
|
+
else if (error.code === "EEXIST") relocateError = new RelocateErrorAlreadyExists(error);
|
|
23
|
+
else if (error.code === "EISDIR") relocateError = new RelocateErrorIsDirectory(error);
|
|
24
|
+
else if (error.code === "ENOTDIR") relocateError = new RelocateErrorNotDirectory(error);
|
|
25
|
+
else if (error.code === "ENOTEMPTY") relocateError = new RelocateErrorDirectoryNotEmpty(error);
|
|
26
|
+
else if (error.code === "EROFS") relocateError = new RelocateErrorReadOnly(error);
|
|
27
|
+
else if (error.code === "EINVAL") relocateError = new RelocateErrorInvalidArgument(error);
|
|
28
|
+
else if (error.code === "EBUSY") relocateError = new RelocateErrorBusy(error);
|
|
29
|
+
else if (error.code === "EXDEV") relocateError = new RelocateErrorCrossDevice(error);
|
|
30
|
+
}
|
|
31
|
+
if (relocateError === void 0) relocateError = new RelocateError(error);
|
|
32
|
+
return DEither.left("file-system-relocate-error", relocateError);
|
|
33
|
+
}
|
|
34
|
+
function handleDenoRelocateError(error) {
|
|
35
|
+
let relocateError = void 0;
|
|
36
|
+
if (error instanceof Deno.errors.NotFound) relocateError = new RelocateErrorNotFound(error);
|
|
37
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) relocateError = new RelocateErrorPermissionDenied(error);
|
|
38
|
+
else if (error instanceof Deno.errors.AlreadyExists) relocateError = new RelocateErrorAlreadyExists(error);
|
|
39
|
+
else if (error instanceof Deno.errors.IsADirectory) relocateError = new RelocateErrorIsDirectory(error);
|
|
40
|
+
else if (error instanceof Deno.errors.NotADirectory) relocateError = new RelocateErrorNotDirectory(error);
|
|
41
|
+
else if (error instanceof Deno.errors.InvalidData) relocateError = new RelocateErrorInvalidArgument(error);
|
|
42
|
+
else if (error instanceof Deno.errors.Busy) relocateError = new RelocateErrorBusy(error);
|
|
43
|
+
if (relocateError === void 0) relocateError = new RelocateError(error);
|
|
44
|
+
return DEither.left("file-system-relocate-error", relocateError);
|
|
45
|
+
}
|
|
46
|
+
const relocateImplementation = implementFunction("relocate", {
|
|
47
|
+
NODE: async (fromPath, newParentPath) => {
|
|
48
|
+
const baseName = DPath.getBaseName(fromPath);
|
|
49
|
+
if (!baseName) return DEither.left("file-system-relocate-error", new RelocateErrorInvalidArgument(/* @__PURE__ */ new Error(`Invalid base name ${fromPath}`)));
|
|
50
|
+
const newPath = DPath.resolveRelative([newParentPath, baseName]);
|
|
51
|
+
return nodeFileSystem.value.rename(fromPath, newPath).then(() => DEither.right("file-system-relocate", newPath)).catch(handleNodeRelocateError);
|
|
52
|
+
},
|
|
53
|
+
DENO: async (fromPath, newParentPath) => {
|
|
54
|
+
const baseName = DPath.getBaseName(fromPath);
|
|
55
|
+
if (!baseName) return Promise.resolve(DEither.left("file-system-relocate-error", new RelocateErrorInvalidArgument(/* @__PURE__ */ new Error(`Invalid base name ${fromPath}`))));
|
|
56
|
+
const newPath = DPath.resolveRelative([newParentPath, baseName]);
|
|
57
|
+
return Deno.rename(fromPath, newPath).then(() => DEither.right("file-system-relocate", newPath)).catch(handleDenoRelocateError);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
function relocate(...args) {
|
|
61
|
+
if (args.length === 1) {
|
|
62
|
+
const [toPath] = args;
|
|
63
|
+
return (fromPath) => relocateImplementation(fromPath, toPath);
|
|
64
|
+
}
|
|
65
|
+
return relocateImplementation(...args);
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { RelocateError, RelocateErrorAlreadyExists, RelocateErrorBusy, RelocateErrorCrossDevice, RelocateErrorDirectoryNotEmpty, RelocateErrorInvalidArgument, RelocateErrorIsDirectory, RelocateErrorNotDirectory, RelocateErrorNotFound, RelocateErrorPermissionDenied, RelocateErrorReadOnly, relocate };
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_implementor = require("../implementor.cjs");
|
|
3
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
4
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
//#region scripts/file/remove.ts
|
|
8
|
+
var RemoveErrorNotFound = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-not-found", Error) {};
|
|
9
|
+
var RemoveErrorPermissionDenied = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-permission-denied", Error) {};
|
|
10
|
+
var RemoveErrorIsDirectory = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-is-directory", Error) {};
|
|
11
|
+
var RemoveErrorNotDirectory = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-not-directory", Error) {};
|
|
12
|
+
var RemoveErrorDirectoryNotEmpty = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-directory-not-empty", Error) {};
|
|
13
|
+
var RemoveErrorReadOnly = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-read-only", Error) {};
|
|
14
|
+
var RemoveErrorInvalidArgument = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-invalid-argument", Error) {};
|
|
15
|
+
var RemoveErrorBusy = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-busy", Error) {};
|
|
16
|
+
var RemoveError = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-remove-error", Error) {};
|
|
17
|
+
function handleNodeRemoveError(error) {
|
|
18
|
+
let removeError = void 0;
|
|
19
|
+
if ("code" in error) {
|
|
20
|
+
if (error.code === "ENOENT") removeError = new RemoveErrorNotFound(error);
|
|
21
|
+
else if (error.code === "EACCES" || error.code === "EPERM") removeError = new RemoveErrorPermissionDenied(error);
|
|
22
|
+
else if (error.code === "EISDIR") removeError = new RemoveErrorIsDirectory(error);
|
|
23
|
+
else if (error.code === "ENOTDIR") removeError = new RemoveErrorNotDirectory(error);
|
|
24
|
+
else if (error.code === "ENOTEMPTY") removeError = new RemoveErrorDirectoryNotEmpty(error);
|
|
25
|
+
else if (error.code === "EROFS") removeError = new RemoveErrorReadOnly(error);
|
|
26
|
+
else if (error.code === "EINVAL") removeError = new RemoveErrorInvalidArgument(error);
|
|
27
|
+
else if (error.code === "EBUSY") removeError = new RemoveErrorBusy(error);
|
|
28
|
+
}
|
|
29
|
+
if (removeError === void 0) removeError = new RemoveError(error);
|
|
30
|
+
return _duplojs_lang_either.left("file-system-remove-error", removeError);
|
|
31
|
+
}
|
|
32
|
+
function handleDenoRemoveError(error) {
|
|
33
|
+
let removeError = void 0;
|
|
34
|
+
if (error instanceof Deno.errors.NotFound) removeError = new RemoveErrorNotFound(error);
|
|
35
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) removeError = new RemoveErrorPermissionDenied(error);
|
|
36
|
+
else if (error instanceof Deno.errors.IsADirectory) removeError = new RemoveErrorIsDirectory(error);
|
|
37
|
+
else if (error instanceof Deno.errors.NotADirectory) removeError = new RemoveErrorNotDirectory(error);
|
|
38
|
+
else if (error instanceof Deno.errors.InvalidData) removeError = new RemoveErrorInvalidArgument(error);
|
|
39
|
+
else if (error instanceof Deno.errors.Busy) removeError = new RemoveErrorBusy(error);
|
|
40
|
+
if (removeError === void 0) removeError = new RemoveError(error);
|
|
41
|
+
return _duplojs_lang_either.left("file-system-remove-error", removeError);
|
|
42
|
+
}
|
|
43
|
+
const remove = require_implementor.implementFunction("remove", {
|
|
44
|
+
NODE: async (path, params) => require_implementor.nodeFileSystem.value.rm(path, {
|
|
45
|
+
recursive: params?.recursive ?? false,
|
|
46
|
+
force: true
|
|
47
|
+
}).then(() => _duplojs_lang_either.right("file-system-remove")).catch(handleNodeRemoveError),
|
|
48
|
+
DENO: (path, params) => Deno.remove(path, { recursive: params?.recursive }).then(() => _duplojs_lang_either.right("file-system-remove")).catch(handleDenoRemoveError)
|
|
49
|
+
});
|
|
50
|
+
//#endregion
|
|
51
|
+
exports.RemoveError = RemoveError;
|
|
52
|
+
exports.RemoveErrorBusy = RemoveErrorBusy;
|
|
53
|
+
exports.RemoveErrorDirectoryNotEmpty = RemoveErrorDirectoryNotEmpty;
|
|
54
|
+
exports.RemoveErrorInvalidArgument = RemoveErrorInvalidArgument;
|
|
55
|
+
exports.RemoveErrorIsDirectory = RemoveErrorIsDirectory;
|
|
56
|
+
exports.RemoveErrorNotDirectory = RemoveErrorNotDirectory;
|
|
57
|
+
exports.RemoveErrorNotFound = RemoveErrorNotFound;
|
|
58
|
+
exports.RemoveErrorPermissionDenied = RemoveErrorPermissionDenied;
|
|
59
|
+
exports.RemoveErrorReadOnly = RemoveErrorReadOnly;
|
|
60
|
+
exports.remove = remove;
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
2
|
+
import * as DEither from "@duplojs/lang/either";
|
|
3
|
+
import type * as DPath from "@duplojs/lang/path";
|
|
4
|
+
interface RemoveDirectoryParams {
|
|
5
|
+
recursive?: boolean;
|
|
6
|
+
}
|
|
7
|
+
declare const RemoveErrorNotFound_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-not-found", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-not-found", unknown>>, unknown>;
|
|
8
|
+
export declare class RemoveErrorNotFound extends RemoveErrorNotFound_base {
|
|
9
|
+
}
|
|
10
|
+
declare const RemoveErrorPermissionDenied_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-permission-denied", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-permission-denied", unknown>>, unknown>;
|
|
11
|
+
export declare class RemoveErrorPermissionDenied extends RemoveErrorPermissionDenied_base {
|
|
12
|
+
}
|
|
13
|
+
declare const RemoveErrorIsDirectory_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-is-directory", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-is-directory", unknown>>, unknown>;
|
|
14
|
+
export declare class RemoveErrorIsDirectory extends RemoveErrorIsDirectory_base {
|
|
15
|
+
}
|
|
16
|
+
declare const RemoveErrorNotDirectory_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-not-directory", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-not-directory", unknown>>, unknown>;
|
|
17
|
+
export declare class RemoveErrorNotDirectory extends RemoveErrorNotDirectory_base {
|
|
18
|
+
}
|
|
19
|
+
declare const RemoveErrorDirectoryNotEmpty_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-directory-not-empty", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-directory-not-empty", unknown>>, unknown>;
|
|
20
|
+
export declare class RemoveErrorDirectoryNotEmpty extends RemoveErrorDirectoryNotEmpty_base {
|
|
21
|
+
}
|
|
22
|
+
declare const RemoveErrorReadOnly_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-read-only", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-read-only", unknown>>, unknown>;
|
|
23
|
+
export declare class RemoveErrorReadOnly extends RemoveErrorReadOnly_base {
|
|
24
|
+
}
|
|
25
|
+
declare const RemoveErrorInvalidArgument_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-invalid-argument", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-invalid-argument", unknown>>, unknown>;
|
|
26
|
+
export declare class RemoveErrorInvalidArgument extends RemoveErrorInvalidArgument_base {
|
|
27
|
+
}
|
|
28
|
+
declare const RemoveErrorBusy_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-busy", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-busy", unknown>>, unknown>;
|
|
29
|
+
export declare class RemoveErrorBusy extends RemoveErrorBusy_base {
|
|
30
|
+
}
|
|
31
|
+
declare const RemoveError_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-remove-error", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-remove-error", unknown>>, unknown>;
|
|
32
|
+
export declare class RemoveError extends RemoveError_base {
|
|
33
|
+
}
|
|
34
|
+
export type RemoveErrors = (RemoveErrorNotFound | RemoveErrorPermissionDenied | RemoveErrorIsDirectory | RemoveErrorNotDirectory | RemoveErrorDirectoryNotEmpty | RemoveErrorReadOnly | RemoveErrorInvalidArgument | RemoveErrorBusy | RemoveError);
|
|
35
|
+
export type RemoveResult = (DEither.Right<"file-system-remove", void> | DEither.Left<"file-system-remove-error", RemoveErrors>);
|
|
36
|
+
declare module '../implementor' {
|
|
37
|
+
interface ServerFunction {
|
|
38
|
+
remove(path: DPath.AnyPath, params?: RemoveDirectoryParams): Promise<RemoveResult>;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
export declare const remove: (path: DPath.AnyPath, params?: RemoveDirectoryParams) => Promise<RemoveResult>;
|
|
42
|
+
export {};
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { implementFunction, nodeFileSystem } from "../implementor.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
//#region scripts/file/remove.ts
|
|
5
|
+
var RemoveErrorNotFound = class extends DCommon.DuploJSError.parentClass("file-system-remove-not-found", Error) {};
|
|
6
|
+
var RemoveErrorPermissionDenied = class extends DCommon.DuploJSError.parentClass("file-system-remove-permission-denied", Error) {};
|
|
7
|
+
var RemoveErrorIsDirectory = class extends DCommon.DuploJSError.parentClass("file-system-remove-is-directory", Error) {};
|
|
8
|
+
var RemoveErrorNotDirectory = class extends DCommon.DuploJSError.parentClass("file-system-remove-not-directory", Error) {};
|
|
9
|
+
var RemoveErrorDirectoryNotEmpty = class extends DCommon.DuploJSError.parentClass("file-system-remove-directory-not-empty", Error) {};
|
|
10
|
+
var RemoveErrorReadOnly = class extends DCommon.DuploJSError.parentClass("file-system-remove-read-only", Error) {};
|
|
11
|
+
var RemoveErrorInvalidArgument = class extends DCommon.DuploJSError.parentClass("file-system-remove-invalid-argument", Error) {};
|
|
12
|
+
var RemoveErrorBusy = class extends DCommon.DuploJSError.parentClass("file-system-remove-busy", Error) {};
|
|
13
|
+
var RemoveError = class extends DCommon.DuploJSError.parentClass("file-system-remove-error", Error) {};
|
|
14
|
+
function handleNodeRemoveError(error) {
|
|
15
|
+
let removeError = void 0;
|
|
16
|
+
if ("code" in error) {
|
|
17
|
+
if (error.code === "ENOENT") removeError = new RemoveErrorNotFound(error);
|
|
18
|
+
else if (error.code === "EACCES" || error.code === "EPERM") removeError = new RemoveErrorPermissionDenied(error);
|
|
19
|
+
else if (error.code === "EISDIR") removeError = new RemoveErrorIsDirectory(error);
|
|
20
|
+
else if (error.code === "ENOTDIR") removeError = new RemoveErrorNotDirectory(error);
|
|
21
|
+
else if (error.code === "ENOTEMPTY") removeError = new RemoveErrorDirectoryNotEmpty(error);
|
|
22
|
+
else if (error.code === "EROFS") removeError = new RemoveErrorReadOnly(error);
|
|
23
|
+
else if (error.code === "EINVAL") removeError = new RemoveErrorInvalidArgument(error);
|
|
24
|
+
else if (error.code === "EBUSY") removeError = new RemoveErrorBusy(error);
|
|
25
|
+
}
|
|
26
|
+
if (removeError === void 0) removeError = new RemoveError(error);
|
|
27
|
+
return DEither.left("file-system-remove-error", removeError);
|
|
28
|
+
}
|
|
29
|
+
function handleDenoRemoveError(error) {
|
|
30
|
+
let removeError = void 0;
|
|
31
|
+
if (error instanceof Deno.errors.NotFound) removeError = new RemoveErrorNotFound(error);
|
|
32
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) removeError = new RemoveErrorPermissionDenied(error);
|
|
33
|
+
else if (error instanceof Deno.errors.IsADirectory) removeError = new RemoveErrorIsDirectory(error);
|
|
34
|
+
else if (error instanceof Deno.errors.NotADirectory) removeError = new RemoveErrorNotDirectory(error);
|
|
35
|
+
else if (error instanceof Deno.errors.InvalidData) removeError = new RemoveErrorInvalidArgument(error);
|
|
36
|
+
else if (error instanceof Deno.errors.Busy) removeError = new RemoveErrorBusy(error);
|
|
37
|
+
if (removeError === void 0) removeError = new RemoveError(error);
|
|
38
|
+
return DEither.left("file-system-remove-error", removeError);
|
|
39
|
+
}
|
|
40
|
+
const remove = implementFunction("remove", {
|
|
41
|
+
NODE: async (path, params) => nodeFileSystem.value.rm(path, {
|
|
42
|
+
recursive: params?.recursive ?? false,
|
|
43
|
+
force: true
|
|
44
|
+
}).then(() => DEither.right("file-system-remove")).catch(handleNodeRemoveError),
|
|
45
|
+
DENO: (path, params) => Deno.remove(path, { recursive: params?.recursive }).then(() => DEither.right("file-system-remove")).catch(handleDenoRemoveError)
|
|
46
|
+
});
|
|
47
|
+
//#endregion
|
|
48
|
+
export { RemoveError, RemoveErrorBusy, RemoveErrorDirectoryNotEmpty, RemoveErrorInvalidArgument, RemoveErrorIsDirectory, RemoveErrorNotDirectory, RemoveErrorNotFound, RemoveErrorPermissionDenied, RemoveErrorReadOnly, remove };
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_implementor = require("../implementor.cjs");
|
|
3
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
4
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
let _duplojs_lang_path = require("@duplojs/lang/path");
|
|
8
|
+
_duplojs_lang_path = require_runtime.__toESM(_duplojs_lang_path, 1);
|
|
9
|
+
//#region scripts/file/rename.ts
|
|
10
|
+
var RenameErrorNotFound = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-not-found", Error) {};
|
|
11
|
+
var RenameErrorPermissionDenied = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-permission-denied", Error) {};
|
|
12
|
+
var RenameErrorAlreadyExists = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-already-exists", Error) {};
|
|
13
|
+
var RenameErrorIsDirectory = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-is-directory", Error) {};
|
|
14
|
+
var RenameErrorNotDirectory = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-not-directory", Error) {};
|
|
15
|
+
var RenameErrorDirectoryNotEmpty = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-directory-not-empty", Error) {};
|
|
16
|
+
var RenameErrorReadOnly = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-read-only", Error) {};
|
|
17
|
+
var RenameErrorInvalidArgument = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-invalid-argument", Error) {};
|
|
18
|
+
var RenameErrorBusy = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-busy", Error) {};
|
|
19
|
+
var RenameErrorCrossDevice = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-cross-device", Error) {};
|
|
20
|
+
var RenameError = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-rename-error", Error) {};
|
|
21
|
+
function handleNodeRenameError(error) {
|
|
22
|
+
let renameError = void 0;
|
|
23
|
+
if ("code" in error) {
|
|
24
|
+
if (error.code === "ENOENT") renameError = new RenameErrorNotFound(error);
|
|
25
|
+
else if (error.code === "EACCES" || error.code === "EPERM") renameError = new RenameErrorPermissionDenied(error);
|
|
26
|
+
else if (error.code === "EEXIST") renameError = new RenameErrorAlreadyExists(error);
|
|
27
|
+
else if (error.code === "EISDIR") renameError = new RenameErrorIsDirectory(error);
|
|
28
|
+
else if (error.code === "ENOTDIR") renameError = new RenameErrorNotDirectory(error);
|
|
29
|
+
else if (error.code === "ENOTEMPTY") renameError = new RenameErrorDirectoryNotEmpty(error);
|
|
30
|
+
else if (error.code === "EROFS") renameError = new RenameErrorReadOnly(error);
|
|
31
|
+
else if (error.code === "EINVAL") renameError = new RenameErrorInvalidArgument(error);
|
|
32
|
+
else if (error.code === "EBUSY") renameError = new RenameErrorBusy(error);
|
|
33
|
+
else if (error.code === "EXDEV") renameError = new RenameErrorCrossDevice(error);
|
|
34
|
+
}
|
|
35
|
+
if (renameError === void 0) renameError = new RenameError(error);
|
|
36
|
+
return _duplojs_lang_either.left("file-system-rename-error", renameError);
|
|
37
|
+
}
|
|
38
|
+
function handleDenoRenameError(error) {
|
|
39
|
+
let renameError = void 0;
|
|
40
|
+
if (error instanceof Deno.errors.NotFound) renameError = new RenameErrorNotFound(error);
|
|
41
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) renameError = new RenameErrorPermissionDenied(error);
|
|
42
|
+
else if (error instanceof Deno.errors.AlreadyExists) renameError = new RenameErrorAlreadyExists(error);
|
|
43
|
+
else if (error instanceof Deno.errors.IsADirectory) renameError = new RenameErrorIsDirectory(error);
|
|
44
|
+
else if (error instanceof Deno.errors.NotADirectory) renameError = new RenameErrorNotDirectory(error);
|
|
45
|
+
else if (error instanceof Deno.errors.InvalidData) renameError = new RenameErrorInvalidArgument(error);
|
|
46
|
+
else if (error instanceof Deno.errors.Busy) renameError = new RenameErrorBusy(error);
|
|
47
|
+
if (renameError === void 0) renameError = new RenameError(error);
|
|
48
|
+
return _duplojs_lang_either.left("file-system-rename-error", renameError);
|
|
49
|
+
}
|
|
50
|
+
const renameImplementation = require_implementor.implementFunction("rename", {
|
|
51
|
+
NODE: async (path, newName) => {
|
|
52
|
+
const parentPath = _duplojs_lang_path.getParentFolderPath(path);
|
|
53
|
+
if (!parentPath) return _duplojs_lang_either.left("file-system-rename-error", new RenameErrorInvalidArgument(/* @__PURE__ */ new Error(`Invalid parent path ${path}.`)));
|
|
54
|
+
const newPath = _duplojs_lang_path.resolveRelative([parentPath, newName]);
|
|
55
|
+
return require_implementor.nodeFileSystem.value.rename(path, newPath).then(() => _duplojs_lang_either.right("file-system-rename", newPath)).catch(handleNodeRenameError);
|
|
56
|
+
},
|
|
57
|
+
DENO: async (path, newName) => {
|
|
58
|
+
const parentPath = _duplojs_lang_path.getParentFolderPath(path);
|
|
59
|
+
if (!parentPath) return Promise.resolve(_duplojs_lang_either.left("file-system-rename-error", new RenameErrorInvalidArgument(/* @__PURE__ */ new Error(`Invalid parent path ${path}.`))));
|
|
60
|
+
const newPath = _duplojs_lang_path.resolveRelative([parentPath, newName]);
|
|
61
|
+
return Deno.rename(path, newPath).then(() => _duplojs_lang_either.right("file-system-rename", newPath)).catch(handleDenoRenameError);
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
function rename(...args) {
|
|
65
|
+
if (args.length === 1) {
|
|
66
|
+
const [newName] = args;
|
|
67
|
+
return (path) => renameImplementation(path, newName);
|
|
68
|
+
}
|
|
69
|
+
return renameImplementation(...args);
|
|
70
|
+
}
|
|
71
|
+
//#endregion
|
|
72
|
+
exports.RenameError = RenameError;
|
|
73
|
+
exports.RenameErrorAlreadyExists = RenameErrorAlreadyExists;
|
|
74
|
+
exports.RenameErrorBusy = RenameErrorBusy;
|
|
75
|
+
exports.RenameErrorCrossDevice = RenameErrorCrossDevice;
|
|
76
|
+
exports.RenameErrorDirectoryNotEmpty = RenameErrorDirectoryNotEmpty;
|
|
77
|
+
exports.RenameErrorInvalidArgument = RenameErrorInvalidArgument;
|
|
78
|
+
exports.RenameErrorIsDirectory = RenameErrorIsDirectory;
|
|
79
|
+
exports.RenameErrorNotDirectory = RenameErrorNotDirectory;
|
|
80
|
+
exports.RenameErrorNotFound = RenameErrorNotFound;
|
|
81
|
+
exports.RenameErrorPermissionDenied = RenameErrorPermissionDenied;
|
|
82
|
+
exports.RenameErrorReadOnly = RenameErrorReadOnly;
|
|
83
|
+
exports.rename = rename;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import * as DPath from "@duplojs/lang/path";
|
|
2
|
+
import * as DEither from "@duplojs/lang/either";
|
|
3
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
4
|
+
declare const RenameErrorNotFound_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-not-found", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-not-found", unknown>>, unknown>;
|
|
5
|
+
export declare class RenameErrorNotFound extends RenameErrorNotFound_base {
|
|
6
|
+
}
|
|
7
|
+
declare const RenameErrorPermissionDenied_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-permission-denied", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-permission-denied", unknown>>, unknown>;
|
|
8
|
+
export declare class RenameErrorPermissionDenied extends RenameErrorPermissionDenied_base {
|
|
9
|
+
}
|
|
10
|
+
declare const RenameErrorAlreadyExists_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-already-exists", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-already-exists", unknown>>, unknown>;
|
|
11
|
+
export declare class RenameErrorAlreadyExists extends RenameErrorAlreadyExists_base {
|
|
12
|
+
}
|
|
13
|
+
declare const RenameErrorIsDirectory_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-is-directory", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-is-directory", unknown>>, unknown>;
|
|
14
|
+
export declare class RenameErrorIsDirectory extends RenameErrorIsDirectory_base {
|
|
15
|
+
}
|
|
16
|
+
declare const RenameErrorNotDirectory_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-not-directory", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-not-directory", unknown>>, unknown>;
|
|
17
|
+
export declare class RenameErrorNotDirectory extends RenameErrorNotDirectory_base {
|
|
18
|
+
}
|
|
19
|
+
declare const RenameErrorDirectoryNotEmpty_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-directory-not-empty", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-directory-not-empty", unknown>>, unknown>;
|
|
20
|
+
export declare class RenameErrorDirectoryNotEmpty extends RenameErrorDirectoryNotEmpty_base {
|
|
21
|
+
}
|
|
22
|
+
declare const RenameErrorReadOnly_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-read-only", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-read-only", unknown>>, unknown>;
|
|
23
|
+
export declare class RenameErrorReadOnly extends RenameErrorReadOnly_base {
|
|
24
|
+
}
|
|
25
|
+
declare const RenameErrorInvalidArgument_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-invalid-argument", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-invalid-argument", unknown>>, unknown>;
|
|
26
|
+
export declare class RenameErrorInvalidArgument extends RenameErrorInvalidArgument_base {
|
|
27
|
+
}
|
|
28
|
+
declare const RenameErrorBusy_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-busy", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-busy", unknown>>, unknown>;
|
|
29
|
+
export declare class RenameErrorBusy extends RenameErrorBusy_base {
|
|
30
|
+
}
|
|
31
|
+
declare const RenameErrorCrossDevice_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-cross-device", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-cross-device", unknown>>, unknown>;
|
|
32
|
+
export declare class RenameErrorCrossDevice extends RenameErrorCrossDevice_base {
|
|
33
|
+
}
|
|
34
|
+
declare const RenameError_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-rename-error", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-rename-error", unknown>>, unknown>;
|
|
35
|
+
export declare class RenameError extends RenameError_base {
|
|
36
|
+
}
|
|
37
|
+
export type RenameErrors = (RenameErrorNotFound | RenameErrorPermissionDenied | RenameErrorAlreadyExists | RenameErrorIsDirectory | RenameErrorNotDirectory | RenameErrorDirectoryNotEmpty | RenameErrorReadOnly | RenameErrorInvalidArgument | RenameErrorBusy | RenameErrorCrossDevice | RenameError);
|
|
38
|
+
export type RenameResult = (DEither.Right<"file-system-rename", string & DPath.Path> | DEither.Left<"file-system-rename-error", RenameErrors>);
|
|
39
|
+
declare module '../implementor' {
|
|
40
|
+
interface ServerFunction {
|
|
41
|
+
rename(path: DPath.AnyPath, newName: string & DPath.Segment): Promise<RenameResult>;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export declare function rename(newName: string & DPath.Segment): (path: DPath.AnyPath) => Promise<RenameResult>;
|
|
45
|
+
export declare function rename(path: DPath.AnyPath, newName: string & DPath.Segment): Promise<RenameResult>;
|
|
46
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { implementFunction, nodeFileSystem } from "../implementor.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
import * as DPath from "@duplojs/lang/path";
|
|
5
|
+
//#region scripts/file/rename.ts
|
|
6
|
+
var RenameErrorNotFound = class extends DCommon.DuploJSError.parentClass("file-system-rename-not-found", Error) {};
|
|
7
|
+
var RenameErrorPermissionDenied = class extends DCommon.DuploJSError.parentClass("file-system-rename-permission-denied", Error) {};
|
|
8
|
+
var RenameErrorAlreadyExists = class extends DCommon.DuploJSError.parentClass("file-system-rename-already-exists", Error) {};
|
|
9
|
+
var RenameErrorIsDirectory = class extends DCommon.DuploJSError.parentClass("file-system-rename-is-directory", Error) {};
|
|
10
|
+
var RenameErrorNotDirectory = class extends DCommon.DuploJSError.parentClass("file-system-rename-not-directory", Error) {};
|
|
11
|
+
var RenameErrorDirectoryNotEmpty = class extends DCommon.DuploJSError.parentClass("file-system-rename-directory-not-empty", Error) {};
|
|
12
|
+
var RenameErrorReadOnly = class extends DCommon.DuploJSError.parentClass("file-system-rename-read-only", Error) {};
|
|
13
|
+
var RenameErrorInvalidArgument = class extends DCommon.DuploJSError.parentClass("file-system-rename-invalid-argument", Error) {};
|
|
14
|
+
var RenameErrorBusy = class extends DCommon.DuploJSError.parentClass("file-system-rename-busy", Error) {};
|
|
15
|
+
var RenameErrorCrossDevice = class extends DCommon.DuploJSError.parentClass("file-system-rename-cross-device", Error) {};
|
|
16
|
+
var RenameError = class extends DCommon.DuploJSError.parentClass("file-system-rename-error", Error) {};
|
|
17
|
+
function handleNodeRenameError(error) {
|
|
18
|
+
let renameError = void 0;
|
|
19
|
+
if ("code" in error) {
|
|
20
|
+
if (error.code === "ENOENT") renameError = new RenameErrorNotFound(error);
|
|
21
|
+
else if (error.code === "EACCES" || error.code === "EPERM") renameError = new RenameErrorPermissionDenied(error);
|
|
22
|
+
else if (error.code === "EEXIST") renameError = new RenameErrorAlreadyExists(error);
|
|
23
|
+
else if (error.code === "EISDIR") renameError = new RenameErrorIsDirectory(error);
|
|
24
|
+
else if (error.code === "ENOTDIR") renameError = new RenameErrorNotDirectory(error);
|
|
25
|
+
else if (error.code === "ENOTEMPTY") renameError = new RenameErrorDirectoryNotEmpty(error);
|
|
26
|
+
else if (error.code === "EROFS") renameError = new RenameErrorReadOnly(error);
|
|
27
|
+
else if (error.code === "EINVAL") renameError = new RenameErrorInvalidArgument(error);
|
|
28
|
+
else if (error.code === "EBUSY") renameError = new RenameErrorBusy(error);
|
|
29
|
+
else if (error.code === "EXDEV") renameError = new RenameErrorCrossDevice(error);
|
|
30
|
+
}
|
|
31
|
+
if (renameError === void 0) renameError = new RenameError(error);
|
|
32
|
+
return DEither.left("file-system-rename-error", renameError);
|
|
33
|
+
}
|
|
34
|
+
function handleDenoRenameError(error) {
|
|
35
|
+
let renameError = void 0;
|
|
36
|
+
if (error instanceof Deno.errors.NotFound) renameError = new RenameErrorNotFound(error);
|
|
37
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) renameError = new RenameErrorPermissionDenied(error);
|
|
38
|
+
else if (error instanceof Deno.errors.AlreadyExists) renameError = new RenameErrorAlreadyExists(error);
|
|
39
|
+
else if (error instanceof Deno.errors.IsADirectory) renameError = new RenameErrorIsDirectory(error);
|
|
40
|
+
else if (error instanceof Deno.errors.NotADirectory) renameError = new RenameErrorNotDirectory(error);
|
|
41
|
+
else if (error instanceof Deno.errors.InvalidData) renameError = new RenameErrorInvalidArgument(error);
|
|
42
|
+
else if (error instanceof Deno.errors.Busy) renameError = new RenameErrorBusy(error);
|
|
43
|
+
if (renameError === void 0) renameError = new RenameError(error);
|
|
44
|
+
return DEither.left("file-system-rename-error", renameError);
|
|
45
|
+
}
|
|
46
|
+
const renameImplementation = implementFunction("rename", {
|
|
47
|
+
NODE: async (path, newName) => {
|
|
48
|
+
const parentPath = DPath.getParentFolderPath(path);
|
|
49
|
+
if (!parentPath) return DEither.left("file-system-rename-error", new RenameErrorInvalidArgument(/* @__PURE__ */ new Error(`Invalid parent path ${path}.`)));
|
|
50
|
+
const newPath = DPath.resolveRelative([parentPath, newName]);
|
|
51
|
+
return nodeFileSystem.value.rename(path, newPath).then(() => DEither.right("file-system-rename", newPath)).catch(handleNodeRenameError);
|
|
52
|
+
},
|
|
53
|
+
DENO: async (path, newName) => {
|
|
54
|
+
const parentPath = DPath.getParentFolderPath(path);
|
|
55
|
+
if (!parentPath) return Promise.resolve(DEither.left("file-system-rename-error", new RenameErrorInvalidArgument(/* @__PURE__ */ new Error(`Invalid parent path ${path}.`))));
|
|
56
|
+
const newPath = DPath.resolveRelative([parentPath, newName]);
|
|
57
|
+
return Deno.rename(path, newPath).then(() => DEither.right("file-system-rename", newPath)).catch(handleDenoRenameError);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
function rename(...args) {
|
|
61
|
+
if (args.length === 1) {
|
|
62
|
+
const [newName] = args;
|
|
63
|
+
return (path) => renameImplementation(path, newName);
|
|
64
|
+
}
|
|
65
|
+
return renameImplementation(...args);
|
|
66
|
+
}
|
|
67
|
+
//#endregion
|
|
68
|
+
export { RenameError, RenameErrorAlreadyExists, RenameErrorBusy, RenameErrorCrossDevice, RenameErrorDirectoryNotEmpty, RenameErrorInvalidArgument, RenameErrorIsDirectory, RenameErrorNotDirectory, RenameErrorNotFound, RenameErrorPermissionDenied, RenameErrorReadOnly, rename };
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
const require_runtime = require("../_virtual/_rolldown/runtime.cjs");
|
|
2
|
+
const require_implementor = require("../implementor.cjs");
|
|
3
|
+
let _duplojs_lang_common = require("@duplojs/lang/common");
|
|
4
|
+
_duplojs_lang_common = require_runtime.__toESM(_duplojs_lang_common, 1);
|
|
5
|
+
let _duplojs_lang_either = require("@duplojs/lang/either");
|
|
6
|
+
_duplojs_lang_either = require_runtime.__toESM(_duplojs_lang_either, 1);
|
|
7
|
+
//#region scripts/file/setMode.ts
|
|
8
|
+
var SetModeErrorNotFound = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-set-mode-not-found", Error) {};
|
|
9
|
+
var SetModeErrorPermissionDenied = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-set-mode-permission-denied", Error) {};
|
|
10
|
+
var SetModeErrorNotDirectory = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-set-mode-not-directory", Error) {};
|
|
11
|
+
var SetModeErrorReadOnly = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-set-mode-read-only", Error) {};
|
|
12
|
+
var SetModeErrorInvalidArgument = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-set-mode-invalid-argument", Error) {};
|
|
13
|
+
var SetModeError = class extends _duplojs_lang_common.DuploJSError.parentClass("file-system-set-mode-error", Error) {};
|
|
14
|
+
function handleNodeSetModeError(error) {
|
|
15
|
+
let setModeError = void 0;
|
|
16
|
+
if ("code" in error) {
|
|
17
|
+
if (error.code === "ENOENT") setModeError = new SetModeErrorNotFound(error);
|
|
18
|
+
else if (error.code === "EACCES" || error.code === "EPERM") setModeError = new SetModeErrorPermissionDenied(error);
|
|
19
|
+
else if (error.code === "ENOTDIR") setModeError = new SetModeErrorNotDirectory(error);
|
|
20
|
+
else if (error.code === "EROFS") setModeError = new SetModeErrorReadOnly(error);
|
|
21
|
+
else if (error.code === "EINVAL") setModeError = new SetModeErrorInvalidArgument(error);
|
|
22
|
+
}
|
|
23
|
+
if (setModeError === void 0) setModeError = new SetModeError(error);
|
|
24
|
+
return _duplojs_lang_either.left("file-system-set-mode-error", setModeError);
|
|
25
|
+
}
|
|
26
|
+
function handleDenoSetModeError(error) {
|
|
27
|
+
let setModeError = void 0;
|
|
28
|
+
if (error instanceof Deno.errors.NotFound) setModeError = new SetModeErrorNotFound(error);
|
|
29
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) setModeError = new SetModeErrorPermissionDenied(error);
|
|
30
|
+
else if (error instanceof Deno.errors.NotADirectory) setModeError = new SetModeErrorNotDirectory(error);
|
|
31
|
+
else if (error instanceof Deno.errors.InvalidData) setModeError = new SetModeErrorInvalidArgument(error);
|
|
32
|
+
if (setModeError === void 0) setModeError = new SetModeError(error);
|
|
33
|
+
return _duplojs_lang_either.left("file-system-set-mode-error", setModeError);
|
|
34
|
+
}
|
|
35
|
+
function calculatePermissions(permissions) {
|
|
36
|
+
if (!permissions) return 0;
|
|
37
|
+
return (permissions.read ? 4 : 0) + (permissions.write ? 2 : 0) + (permissions.exec ? 1 : 0);
|
|
38
|
+
}
|
|
39
|
+
function toMode(mode) {
|
|
40
|
+
if (_duplojs_lang_common.isType(mode, "number")) return mode;
|
|
41
|
+
const special = (mode.setUserId ? 4 : 0) + (mode.setGroupId ? 2 : 0) + (mode.sticky ? 1 : 0);
|
|
42
|
+
const user = calculatePermissions(mode.user);
|
|
43
|
+
const group = calculatePermissions(mode.group);
|
|
44
|
+
const other = calculatePermissions(mode.other);
|
|
45
|
+
return special * 512 + user * 64 + group * 8 + other;
|
|
46
|
+
}
|
|
47
|
+
const setModeImplementation = require_implementor.implementFunction("setMode", {
|
|
48
|
+
NODE: async (path, mode) => require_implementor.nodeFileSystem.value.chmod(path, toMode(mode)).then(() => _duplojs_lang_either.right("file-system-set-mode")).catch(handleNodeSetModeError),
|
|
49
|
+
DENO: (path, mode) => Deno.chmod(path, toMode(mode)).then(() => _duplojs_lang_either.right("file-system-set-mode")).catch(handleDenoSetModeError)
|
|
50
|
+
});
|
|
51
|
+
function setMode(...args) {
|
|
52
|
+
if (args.length === 1) {
|
|
53
|
+
const [mode] = args;
|
|
54
|
+
return (path) => setModeImplementation(path, mode);
|
|
55
|
+
}
|
|
56
|
+
return setModeImplementation(...args);
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
exports.SetModeError = SetModeError;
|
|
60
|
+
exports.SetModeErrorInvalidArgument = SetModeErrorInvalidArgument;
|
|
61
|
+
exports.SetModeErrorNotDirectory = SetModeErrorNotDirectory;
|
|
62
|
+
exports.SetModeErrorNotFound = SetModeErrorNotFound;
|
|
63
|
+
exports.SetModeErrorPermissionDenied = SetModeErrorPermissionDenied;
|
|
64
|
+
exports.SetModeErrorReadOnly = SetModeErrorReadOnly;
|
|
65
|
+
exports.setMode = setMode;
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
2
|
+
import * as DEither from "@duplojs/lang/either";
|
|
3
|
+
import type * as DPath from "@duplojs/lang/path";
|
|
4
|
+
interface Permissions {
|
|
5
|
+
read?: boolean;
|
|
6
|
+
write?: boolean;
|
|
7
|
+
exec?: boolean;
|
|
8
|
+
}
|
|
9
|
+
interface ModeObject {
|
|
10
|
+
user?: Permissions;
|
|
11
|
+
group?: Permissions;
|
|
12
|
+
other?: Permissions;
|
|
13
|
+
setUserId?: boolean;
|
|
14
|
+
setGroupId?: boolean;
|
|
15
|
+
sticky?: boolean;
|
|
16
|
+
}
|
|
17
|
+
type SetMode = ModeObject | number;
|
|
18
|
+
declare const SetModeErrorNotFound_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-set-mode-not-found", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-set-mode-not-found", unknown>>, unknown>;
|
|
19
|
+
export declare class SetModeErrorNotFound extends SetModeErrorNotFound_base {
|
|
20
|
+
}
|
|
21
|
+
declare const SetModeErrorPermissionDenied_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-set-mode-permission-denied", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-set-mode-permission-denied", unknown>>, unknown>;
|
|
22
|
+
export declare class SetModeErrorPermissionDenied extends SetModeErrorPermissionDenied_base {
|
|
23
|
+
}
|
|
24
|
+
declare const SetModeErrorNotDirectory_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-set-mode-not-directory", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-set-mode-not-directory", unknown>>, unknown>;
|
|
25
|
+
export declare class SetModeErrorNotDirectory extends SetModeErrorNotDirectory_base {
|
|
26
|
+
}
|
|
27
|
+
declare const SetModeErrorReadOnly_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-set-mode-read-only", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-set-mode-read-only", unknown>>, unknown>;
|
|
28
|
+
export declare class SetModeErrorReadOnly extends SetModeErrorReadOnly_base {
|
|
29
|
+
}
|
|
30
|
+
declare const SetModeErrorInvalidArgument_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-set-mode-invalid-argument", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-set-mode-invalid-argument", unknown>>, unknown>;
|
|
31
|
+
export declare class SetModeErrorInvalidArgument extends SetModeErrorInvalidArgument_base {
|
|
32
|
+
}
|
|
33
|
+
declare const SetModeError_base: abstract new (error: Error) => DCommon.DuploJSError<"file-system-set-mode-error", Error> & import('@duplojs/lang/kind').Kind<import('@duplojs/lang/kind').Handler<import('@duplojs/lang/kind').Definition<"@DuplojsLangCommon/duplojs-error-file-system-set-mode-error", unknown>>, unknown>;
|
|
34
|
+
export declare class SetModeError extends SetModeError_base {
|
|
35
|
+
}
|
|
36
|
+
export type SetModeErrors = (SetModeErrorNotFound | SetModeErrorPermissionDenied | SetModeErrorNotDirectory | SetModeErrorReadOnly | SetModeErrorInvalidArgument | SetModeError);
|
|
37
|
+
export type SetModeResult = (DEither.Right<"file-system-set-mode", void> | DEither.Left<"file-system-set-mode-error", SetModeErrors>);
|
|
38
|
+
declare module '../implementor' {
|
|
39
|
+
interface ServerFunction {
|
|
40
|
+
setMode(path: DPath.AnyPath, mode: SetMode): Promise<SetModeResult>;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export declare function setMode(mode: SetMode): (path: DPath.AnyPath) => Promise<SetModeResult>;
|
|
44
|
+
export declare function setMode(path: DPath.AnyPath, mode: SetMode): Promise<SetModeResult>;
|
|
45
|
+
export {};
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { implementFunction, nodeFileSystem } from "../implementor.mjs";
|
|
2
|
+
import * as DCommon from "@duplojs/lang/common";
|
|
3
|
+
import * as DEither from "@duplojs/lang/either";
|
|
4
|
+
//#region scripts/file/setMode.ts
|
|
5
|
+
var SetModeErrorNotFound = class extends DCommon.DuploJSError.parentClass("file-system-set-mode-not-found", Error) {};
|
|
6
|
+
var SetModeErrorPermissionDenied = class extends DCommon.DuploJSError.parentClass("file-system-set-mode-permission-denied", Error) {};
|
|
7
|
+
var SetModeErrorNotDirectory = class extends DCommon.DuploJSError.parentClass("file-system-set-mode-not-directory", Error) {};
|
|
8
|
+
var SetModeErrorReadOnly = class extends DCommon.DuploJSError.parentClass("file-system-set-mode-read-only", Error) {};
|
|
9
|
+
var SetModeErrorInvalidArgument = class extends DCommon.DuploJSError.parentClass("file-system-set-mode-invalid-argument", Error) {};
|
|
10
|
+
var SetModeError = class extends DCommon.DuploJSError.parentClass("file-system-set-mode-error", Error) {};
|
|
11
|
+
function handleNodeSetModeError(error) {
|
|
12
|
+
let setModeError = void 0;
|
|
13
|
+
if ("code" in error) {
|
|
14
|
+
if (error.code === "ENOENT") setModeError = new SetModeErrorNotFound(error);
|
|
15
|
+
else if (error.code === "EACCES" || error.code === "EPERM") setModeError = new SetModeErrorPermissionDenied(error);
|
|
16
|
+
else if (error.code === "ENOTDIR") setModeError = new SetModeErrorNotDirectory(error);
|
|
17
|
+
else if (error.code === "EROFS") setModeError = new SetModeErrorReadOnly(error);
|
|
18
|
+
else if (error.code === "EINVAL") setModeError = new SetModeErrorInvalidArgument(error);
|
|
19
|
+
}
|
|
20
|
+
if (setModeError === void 0) setModeError = new SetModeError(error);
|
|
21
|
+
return DEither.left("file-system-set-mode-error", setModeError);
|
|
22
|
+
}
|
|
23
|
+
function handleDenoSetModeError(error) {
|
|
24
|
+
let setModeError = void 0;
|
|
25
|
+
if (error instanceof Deno.errors.NotFound) setModeError = new SetModeErrorNotFound(error);
|
|
26
|
+
else if (error instanceof Deno.errors.PermissionDenied || error instanceof Deno.errors.NotCapable) setModeError = new SetModeErrorPermissionDenied(error);
|
|
27
|
+
else if (error instanceof Deno.errors.NotADirectory) setModeError = new SetModeErrorNotDirectory(error);
|
|
28
|
+
else if (error instanceof Deno.errors.InvalidData) setModeError = new SetModeErrorInvalidArgument(error);
|
|
29
|
+
if (setModeError === void 0) setModeError = new SetModeError(error);
|
|
30
|
+
return DEither.left("file-system-set-mode-error", setModeError);
|
|
31
|
+
}
|
|
32
|
+
function calculatePermissions(permissions) {
|
|
33
|
+
if (!permissions) return 0;
|
|
34
|
+
return (permissions.read ? 4 : 0) + (permissions.write ? 2 : 0) + (permissions.exec ? 1 : 0);
|
|
35
|
+
}
|
|
36
|
+
function toMode(mode) {
|
|
37
|
+
if (DCommon.isType(mode, "number")) return mode;
|
|
38
|
+
const special = (mode.setUserId ? 4 : 0) + (mode.setGroupId ? 2 : 0) + (mode.sticky ? 1 : 0);
|
|
39
|
+
const user = calculatePermissions(mode.user);
|
|
40
|
+
const group = calculatePermissions(mode.group);
|
|
41
|
+
const other = calculatePermissions(mode.other);
|
|
42
|
+
return special * 512 + user * 64 + group * 8 + other;
|
|
43
|
+
}
|
|
44
|
+
const setModeImplementation = implementFunction("setMode", {
|
|
45
|
+
NODE: async (path, mode) => nodeFileSystem.value.chmod(path, toMode(mode)).then(() => DEither.right("file-system-set-mode")).catch(handleNodeSetModeError),
|
|
46
|
+
DENO: (path, mode) => Deno.chmod(path, toMode(mode)).then(() => DEither.right("file-system-set-mode")).catch(handleDenoSetModeError)
|
|
47
|
+
});
|
|
48
|
+
function setMode(...args) {
|
|
49
|
+
if (args.length === 1) {
|
|
50
|
+
const [mode] = args;
|
|
51
|
+
return (path) => setModeImplementation(path, mode);
|
|
52
|
+
}
|
|
53
|
+
return setModeImplementation(...args);
|
|
54
|
+
}
|
|
55
|
+
//#endregion
|
|
56
|
+
export { SetModeError, SetModeErrorInvalidArgument, SetModeErrorNotDirectory, SetModeErrorNotFound, SetModeErrorPermissionDenied, SetModeErrorReadOnly, setMode };
|