@poe-platform/safe-bash 0.1.53 → 0.1.55

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.
Files changed (137) hide show
  1. package/dist/safe-bash/browser.d.ts +2 -0
  2. package/dist/safe-bash/browser.d.ts.map +1 -1
  3. package/dist/safe-bash/browser.js +3951 -874
  4. package/dist/safe-bash/browser.js.map +4 -4
  5. package/dist/safe-bash/commands/basic.d.ts.map +1 -1
  6. package/dist/safe-bash/commands/basic.js +7 -1
  7. package/dist/safe-bash/commands/basic.js.map +1 -1
  8. package/dist/safe-bash/commands/filesystem-requirements.d.ts +67 -0
  9. package/dist/safe-bash/commands/filesystem-requirements.d.ts.map +1 -0
  10. package/dist/safe-bash/commands/filesystem-requirements.js +81 -0
  11. package/dist/safe-bash/commands/filesystem-requirements.js.map +1 -0
  12. package/dist/safe-bash/commands/filesystem.d.ts.map +1 -1
  13. package/dist/safe-bash/commands/filesystem.js +106 -9
  14. package/dist/safe-bash/commands/filesystem.js.map +1 -1
  15. package/dist/safe-bash/commands/grep.d.ts.map +1 -1
  16. package/dist/safe-bash/commands/grep.js +3 -109
  17. package/dist/safe-bash/commands/grep.js.map +1 -1
  18. package/dist/safe-bash/commands/internal.d.ts +1 -0
  19. package/dist/safe-bash/commands/internal.d.ts.map +1 -1
  20. package/dist/safe-bash/commands/internal.js +22 -0
  21. package/dist/safe-bash/commands/internal.js.map +1 -1
  22. package/dist/safe-bash/commands/move.d.ts.map +1 -1
  23. package/dist/safe-bash/commands/move.js +21 -0
  24. package/dist/safe-bash/commands/move.js.map +1 -1
  25. package/dist/safe-bash/commands/network/curl.js +2 -0
  26. package/dist/safe-bash/commands/network/curl.js.map +1 -1
  27. package/dist/safe-bash/commands/network/output.d.ts.map +1 -1
  28. package/dist/safe-bash/commands/network/output.js +37 -33
  29. package/dist/safe-bash/commands/network/output.js.map +1 -1
  30. package/dist/safe-bash/commands/portable-requirements.d.ts +6 -0
  31. package/dist/safe-bash/commands/portable-requirements.d.ts.map +1 -0
  32. package/dist/safe-bash/commands/portable-requirements.js +18 -0
  33. package/dist/safe-bash/commands/portable-requirements.js.map +1 -0
  34. package/dist/safe-bash/commands/predicates.d.ts.map +1 -1
  35. package/dist/safe-bash/commands/predicates.js +9 -1
  36. package/dist/safe-bash/commands/predicates.js.map +1 -1
  37. package/dist/safe-bash/commands/regex-execution/client.d.ts +5 -67
  38. package/dist/safe-bash/commands/regex-execution/client.d.ts.map +1 -1
  39. package/dist/safe-bash/commands/regex-execution/client.js +13 -379
  40. package/dist/safe-bash/commands/regex-execution/client.js.map +1 -1
  41. package/dist/safe-bash/commands/regex-execution/portable.d.ts +71 -0
  42. package/dist/safe-bash/commands/regex-execution/portable.d.ts.map +1 -0
  43. package/dist/safe-bash/commands/regex-execution/portable.js +385 -0
  44. package/dist/safe-bash/commands/regex-execution/portable.js.map +1 -0
  45. package/dist/safe-bash/commands/regex-execution/protocol.js +1 -1
  46. package/dist/safe-bash/commands/regex-execution/protocol.js.map +1 -1
  47. package/dist/safe-bash/commands/regex-execution/provider.d.ts +24 -0
  48. package/dist/safe-bash/commands/regex-execution/provider.d.ts.map +1 -0
  49. package/dist/safe-bash/commands/regex-execution/provider.js +2 -0
  50. package/dist/safe-bash/commands/regex-execution/provider.js.map +1 -0
  51. package/dist/safe-bash/commands/regex-execution/public.d.ts +9 -0
  52. package/dist/safe-bash/commands/regex-execution/public.d.ts.map +1 -0
  53. package/dist/safe-bash/commands/regex-execution/public.js +6 -0
  54. package/dist/safe-bash/commands/regex-execution/public.js.map +1 -0
  55. package/dist/safe-bash/commands/search/glob.d.ts +1 -1
  56. package/dist/safe-bash/commands/search/glob.d.ts.map +1 -1
  57. package/dist/safe-bash/commands/search/glob.js +1 -1
  58. package/dist/safe-bash/commands/search/glob.js.map +1 -1
  59. package/dist/safe-bash/commands/search/grep.d.ts +4 -0
  60. package/dist/safe-bash/commands/search/grep.d.ts.map +1 -0
  61. package/dist/safe-bash/commands/search/grep.js +119 -0
  62. package/dist/safe-bash/commands/search/grep.js.map +1 -0
  63. package/dist/safe-bash/commands/search/matcher.d.ts +1 -1
  64. package/dist/safe-bash/commands/search/matcher.d.ts.map +1 -1
  65. package/dist/safe-bash/commands/search/matcher.js +1 -1
  66. package/dist/safe-bash/commands/search/matcher.js.map +1 -1
  67. package/dist/safe-bash/commands/search/output.d.ts +1 -1
  68. package/dist/safe-bash/commands/search/output.d.ts.map +1 -1
  69. package/dist/safe-bash/commands/search/output.js +8 -2
  70. package/dist/safe-bash/commands/search/output.js.map +1 -1
  71. package/dist/safe-bash/commands/search/portable.d.ts +14 -0
  72. package/dist/safe-bash/commands/search/portable.d.ts.map +1 -0
  73. package/dist/safe-bash/commands/search/portable.js +22 -0
  74. package/dist/safe-bash/commands/search/portable.js.map +1 -0
  75. package/dist/safe-bash/commands/search/requirements.d.ts +9 -0
  76. package/dist/safe-bash/commands/search/requirements.d.ts.map +1 -0
  77. package/dist/safe-bash/commands/search/requirements.js +72 -0
  78. package/dist/safe-bash/commands/search/requirements.js.map +1 -0
  79. package/dist/safe-bash/commands/search/rg-command.d.ts +5 -0
  80. package/dist/safe-bash/commands/search/rg-command.d.ts.map +1 -0
  81. package/dist/safe-bash/commands/search/rg-command.js +230 -0
  82. package/dist/safe-bash/commands/search/rg-command.js.map +1 -0
  83. package/dist/safe-bash/commands/search/rg.d.ts +2 -2
  84. package/dist/safe-bash/commands/search/rg.d.ts.map +1 -1
  85. package/dist/safe-bash/commands/search/rg.js +3 -216
  86. package/dist/safe-bash/commands/search/rg.js.map +1 -1
  87. package/dist/safe-bash/commands/search/shared.d.ts.map +1 -1
  88. package/dist/safe-bash/commands/search/shared.js +2 -0
  89. package/dist/safe-bash/commands/search/shared.js.map +1 -1
  90. package/dist/safe-bash/commands/search/walk.d.ts +1 -1
  91. package/dist/safe-bash/commands/search/walk.d.ts.map +1 -1
  92. package/dist/safe-bash/commands/search/walk.js +8 -1
  93. package/dist/safe-bash/commands/search/walk.js.map +1 -1
  94. package/dist/safe-bash/commands/streams.d.ts.map +1 -1
  95. package/dist/safe-bash/commands/streams.js +52 -108
  96. package/dist/safe-bash/commands/streams.js.map +1 -1
  97. package/dist/safe-bash/commands/text-programs/sed.d.ts.map +1 -1
  98. package/dist/safe-bash/commands/text-programs/sed.js +23 -14
  99. package/dist/safe-bash/commands/text-programs/sed.js.map +1 -1
  100. package/dist/safe-bash/commands/text-programs/shared.d.ts.map +1 -1
  101. package/dist/safe-bash/commands/text-programs/shared.js +3 -5
  102. package/dist/safe-bash/commands/text-programs/shared.js.map +1 -1
  103. package/dist/safe-bash/commands/text.d.ts.map +1 -1
  104. package/dist/safe-bash/commands/text.js +22 -4
  105. package/dist/safe-bash/commands/text.js.map +1 -1
  106. package/dist/safe-bash/contracts/command-requirements.d.ts +22 -0
  107. package/dist/safe-bash/contracts/command-requirements.d.ts.map +1 -0
  108. package/dist/safe-bash/contracts/command-requirements.js +47 -0
  109. package/dist/safe-bash/contracts/command-requirements.js.map +1 -0
  110. package/dist/safe-bash/contracts/command.d.ts +2 -0
  111. package/dist/safe-bash/contracts/command.d.ts.map +1 -1
  112. package/dist/safe-bash/contracts/command.js.map +1 -1
  113. package/dist/safe-bash/contracts/filesystem-output.d.ts +12 -0
  114. package/dist/safe-bash/contracts/filesystem-output.d.ts.map +1 -0
  115. package/dist/safe-bash/contracts/filesystem-output.js +160 -0
  116. package/dist/safe-bash/contracts/filesystem-output.js.map +1 -0
  117. package/dist/safe-bash/contracts/index.d.ts +1 -0
  118. package/dist/safe-bash/contracts/index.d.ts.map +1 -1
  119. package/dist/safe-bash/contracts/index.js +1 -0
  120. package/dist/safe-bash/contracts/index.js.map +1 -1
  121. package/dist/safe-bash/contracts/io.d.ts +2 -0
  122. package/dist/safe-bash/contracts/io.d.ts.map +1 -1
  123. package/dist/safe-bash/contracts/io.js +2 -0
  124. package/dist/safe-bash/contracts/io.js.map +1 -1
  125. package/dist/safe-bash/contracts/output.d.ts +1 -0
  126. package/dist/safe-bash/contracts/output.d.ts.map +1 -1
  127. package/dist/safe-bash/contracts/output.js +6 -1
  128. package/dist/safe-bash/contracts/output.js.map +1 -1
  129. package/dist/safe-bash/index.d.ts +2 -1
  130. package/dist/safe-bash/index.d.ts.map +1 -1
  131. package/dist/safe-bash/index.js +2 -0
  132. package/dist/safe-bash/index.js.map +1 -1
  133. package/dist/safe-bash/shell/runtime.d.ts +7 -2
  134. package/dist/safe-bash/shell/runtime.d.ts.map +1 -1
  135. package/dist/safe-bash/shell/runtime.js +247 -185
  136. package/dist/safe-bash/shell/runtime.js.map +1 -1
  137. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/commands/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAGnH,wBAAgB,aAAa,IAAI,iBAAiB,EAAE,CAkKnD"}
1
+ {"version":3,"file":"basic.d.ts","sourceRoot":"","sources":["../../src/commands/basic.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsD,KAAK,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAKnH,wBAAgB,aAAa,IAAI,iBAAiB,EAAE,CAsKnD"}
@@ -1,5 +1,7 @@
1
1
  import { basename, dirname, getCommandArguments, writeBytes } from "../contracts/index.js";
2
2
  import { decoder, define, encoder, escapeBytes, options, output, requireOperands, UsageError, value } from "./internal.js";
3
+ import { assertCommandRequirements } from "../contracts/command-requirements.js";
4
+ import { pwdRequirements } from "./portable-requirements.js";
3
5
  export function basicCommands() {
4
6
  return [
5
7
  define("true", () => ({ exitCode: 0 })),
@@ -35,6 +37,10 @@ export function basicCommands() {
35
37
  define("pwd", async (context) => {
36
38
  const parsed = options(context.args, "LP");
37
39
  requireOperands(parsed.operands, 0, 0);
40
+ const mode = parsed.flags.has("P") ? "physical" : "logical";
41
+ assertCommandRequirements(context, pwdRequirements, [mode]);
42
+ if (mode === "physical" && context.fs.capabilitiesFor)
43
+ assertCommandRequirements(context, pwdRequirements, [mode], await context.fs.capabilitiesFor(context.cwd, { signal: context.signal }));
38
44
  await output(context, `${parsed.flags.has("P") ? await context.fs.realpath(context.cwd, { signal: context.signal }) : context.cwd}\n`);
39
45
  return { exitCode: 0 };
40
46
  }),
@@ -203,6 +209,6 @@ export function basicCommands() {
203
209
  } while (argument < args.length && !stopped);
204
210
  return { exitCode };
205
211
  }),
206
- ];
212
+ ].map(command => ({ ...command, filesystemRequirements: command.name === "pwd" ? pwdRequirements : [] }));
207
213
  }
208
214
  //# sourceMappingURL=basic.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/commands/basic.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"basic.js","sourceRoot":"","sources":["../../src/commands/basic.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ import { type CommandContext } from "../contracts/index.js";
2
+ export declare const filesystemCommandRequirements: {
3
+ mkdir: {
4
+ id: string;
5
+ description: string;
6
+ capabilities: string[];
7
+ mutates: true;
8
+ }[];
9
+ touch: ({
10
+ id: string;
11
+ description: string;
12
+ capabilities: string[];
13
+ mutates: true;
14
+ } | {
15
+ id: string;
16
+ description: string;
17
+ capabilities: string[];
18
+ mutates?: never;
19
+ })[];
20
+ cp: {
21
+ id: string;
22
+ description: string;
23
+ capabilities: string[];
24
+ mutates: true;
25
+ }[];
26
+ mv: {
27
+ id: string;
28
+ description: string;
29
+ capabilities: string[];
30
+ mutates: true;
31
+ }[];
32
+ rm: {
33
+ id: string;
34
+ description: string;
35
+ capabilities: string[];
36
+ mutates: true;
37
+ }[];
38
+ rmdir: {
39
+ id: string;
40
+ description: string;
41
+ capabilities: string[];
42
+ mutates: true;
43
+ }[];
44
+ ln: {
45
+ id: string;
46
+ description: string;
47
+ capabilities: string[];
48
+ mutates: true;
49
+ }[];
50
+ readlink: {
51
+ id: string;
52
+ description: string;
53
+ capabilities: string[];
54
+ }[];
55
+ realpath: {
56
+ id: string;
57
+ description: string;
58
+ capabilities: string[];
59
+ }[];
60
+ ls: {
61
+ id: string;
62
+ description: string;
63
+ capabilities: string[];
64
+ }[];
65
+ };
66
+ export declare function admitFilesystemModes(context: CommandContext, command: keyof typeof filesystemCommandRequirements, modes: readonly string[], paths: readonly string[]): Promise<void>;
67
+ //# sourceMappingURL=filesystem-requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-requirements.d.ts","sourceRoot":"","sources":["../../src/commands/filesystem-requirements.ts"],"names":[],"mappings":"AACA,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG9E,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqDyB,CAAC;AAEpE,wBAAsB,oBAAoB,CACxC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,OAAO,6BAA6B,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAC/H,OAAO,CAAC,IAAI,CAAC,CAoBf"}
@@ -0,0 +1,81 @@
1
+ import { assertCommandRequirements } from "../contracts/command-requirements.js";
2
+ import { dirname, FsError } from "../contracts/index.js";
3
+ import { codeOf } from "./internal.js";
4
+ export const filesystemCommandRequirements = {
5
+ mkdir: [
6
+ { id: "directory", description: "Create explicit directories", capabilities: ["explicitDirectories", "mkdir"], mutates: true },
7
+ { id: "parents", description: "Create parent directories (-p)", capabilities: ["explicitDirectories", "recursiveMkdir"], mutates: true },
8
+ ],
9
+ touch: [
10
+ { id: "create", description: "Create a missing file exclusively", capabilities: ["stat", "exclusiveCreate"], mutates: true },
11
+ { id: "existing", description: "Update existing file timestamps", capabilities: ["stat", "timestamps"], mutates: true },
12
+ { id: "no-create", description: "Skip missing files (-c)", capabilities: ["stat"] },
13
+ ],
14
+ cp: [
15
+ { id: "file", description: "Copy file contents", capabilities: ["stat", "realpath", "copy"], mutates: true },
16
+ { id: "recursive", description: "Copy directory trees (-r/-R)", capabilities: ["stat", "realpath", "readdir", "explicitDirectories", "mkdir", "copy"], mutates: true },
17
+ { id: "symlink", description: "Copy symbolic links without dereferencing", capabilities: ["stat", "realpath", "readlink", "symlinks"], mutates: true },
18
+ { id: "replace", description: "Remove a destination before replacing it", capabilities: ["remove"], mutates: true },
19
+ { id: "exclusive", description: "Exclusively copy after forced removal", capabilities: ["exclusiveCopy"], mutates: true },
20
+ ],
21
+ mv: [
22
+ { id: "rename", description: "Rename files or directories", capabilities: ["stat", "rename"], mutates: true },
23
+ { id: "cross-source", description: "Remove file sources after an existing cross-device transfer", capabilities: ["stat", "remove"], mutates: true },
24
+ { id: "cross-directory-source", description: "Traverse and remove cross-device source directories", capabilities: ["stat", "readdir", "removeDirectory"], mutates: true },
25
+ { id: "cross-link-source", description: "Inspect and remove cross-device source links", capabilities: ["stat", "readlink", "remove"], mutates: true },
26
+ { id: "cross-file", description: "Publish file contents through the existing cross-device copy route", capabilities: ["stat", "copy"], mutates: true },
27
+ { id: "cross-exclusive", description: "Publish a missing cross-device destination exclusively", capabilities: ["exclusiveCopy"], mutates: true },
28
+ { id: "cross-directory", description: "Create missing cross-device destination directories", capabilities: ["mkdir"], mutates: true },
29
+ { id: "cross-link", description: "Publish cross-device destination links", capabilities: ["symlinks"], mutates: true },
30
+ { id: "cross-replace", description: "Remove entries replaced by a cross-device transfer", capabilities: ["remove"], mutates: true },
31
+ ],
32
+ rm: [
33
+ { id: "file", description: "Remove file entries", capabilities: ["stat", "remove"], mutates: true },
34
+ { id: "directory", description: "Remove empty directories (-d)", capabilities: ["stat", "removeDirectory"], mutates: true },
35
+ { id: "recursive", description: "Remove directory trees (-r/-R)", capabilities: ["stat", "recursiveRemove"], mutates: true },
36
+ ],
37
+ rmdir: [
38
+ { id: "directory", description: "Remove empty directories, including parents (-p)", capabilities: ["removeDirectory"], mutates: true },
39
+ ],
40
+ ln: [
41
+ { id: "hard", description: "Create hard links", capabilities: ["stat", "hardlinks"], mutates: true },
42
+ { id: "symbolic", description: "Create symbolic links (-s)", capabilities: ["stat", "symlinks"], mutates: true },
43
+ { id: "replace", description: "Remove existing destinations (-f)", capabilities: ["remove"], mutates: true },
44
+ ],
45
+ readlink: [
46
+ { id: "link", description: "Read symbolic link targets", capabilities: ["readlink"] },
47
+ { id: "canonical", description: "Canonicalize paths (-f/-e)", capabilities: ["stat", "realpath"] },
48
+ ],
49
+ realpath: [
50
+ { id: "canonical", description: "Canonicalize existing or missing paths", capabilities: ["stat", "realpath"] },
51
+ ],
52
+ ls: [
53
+ { id: "entry", description: "Inspect individual directory entries", capabilities: ["stat"] },
54
+ { id: "directory", description: "List directories, including recursive listings (-R)", capabilities: ["stat", "readdir", "realpath"] },
55
+ { id: "link", description: "Show symbolic link targets in long listings (-l)", capabilities: ["readlink"] },
56
+ ],
57
+ };
58
+ export async function admitFilesystemModes(context, command, modes, paths) {
59
+ const requirements = filesystemCommandRequirements[command];
60
+ for (const path of paths) {
61
+ let candidate = path;
62
+ while (true) {
63
+ try {
64
+ assertCommandRequirements(context, requirements, modes, context.fs.capabilities.readOnly === true ? { readOnly: true } : {});
65
+ const capabilities = await context.fs.capabilitiesFor?.(candidate, { signal: context.signal }) ?? context.fs.capabilities;
66
+ assertCommandRequirements(context, requirements, modes, capabilities);
67
+ break;
68
+ }
69
+ catch (error) {
70
+ context.signal.throwIfAborted();
71
+ if (codeOf(error) === "ENOTSUP" || codeOf(error) === "EROFS") {
72
+ throw new FsError(codeOf(error) === "EROFS" ? "EROFS" : "ENOTSUP", { syscall: command, path, cause: error });
73
+ }
74
+ if (codeOf(error) !== "ENOENT" || candidate === "/")
75
+ throw error;
76
+ candidate = dirname(candidate);
77
+ }
78
+ }
79
+ }
80
+ }
81
+ //# sourceMappingURL=filesystem-requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"filesystem-requirements.js","sourceRoot":"","sources":["../../src/commands/filesystem-requirements.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/commands/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAEgB,KAAK,iBAAiB,EAC5C,MAAM,uBAAuB,CAAC;AAyH/B,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CAgOxD"}
1
+ {"version":3,"file":"filesystem.d.ts","sourceRoot":"","sources":["../../src/commands/filesystem.ts"],"names":[],"mappings":"AAAA,OAAO,EAEgB,KAAK,iBAAiB,EAC5C,MAAM,uBAAuB,CAAC;AAgK/B,wBAAgB,kBAAkB,IAAI,iBAAiB,EAAE,CAsRxD"}
@@ -2,6 +2,20 @@ import { basename, dirname, FsError, isPathWithin, joinPath, relativePath, } fro
2
2
  import { codeOf, define, eachOperand, options, output, pathOf, requireOperands, UsageError, value } from "./internal.js";
3
3
  import { compareCopyIdentity, compareObservedEntries } from "./copy-identity.js";
4
4
  import { MoveBudget, moveAcrossDevices } from "./move.js";
5
+ import { admitFilesystemModes, filesystemCommandRequirements } from "./filesystem-requirements.js";
6
+ async function preflightOperands(context, operands, check) {
7
+ for (const operand of operands) {
8
+ try {
9
+ await check(operand);
10
+ }
11
+ catch (error) {
12
+ context.signal.throwIfAborted();
13
+ if (codeOf(error) === "ENOTSUP" || codeOf(error) === "EROFS"
14
+ || codeOf(error) === "ENOTEMPTY" && error instanceof FsError && codeOf(error.cause) === "ENOTSUP")
15
+ throw error;
16
+ }
17
+ }
18
+ }
5
19
  async function maybeStat(context, path, follow = true) {
6
20
  try {
7
21
  return await context.fs[follow ? "stat" : "lstat"](path, { signal: context.signal });
@@ -28,10 +42,30 @@ async function canonicalMissing(context, path) {
28
42
  }
29
43
  }
30
44
  function needCapability(context, capability) {
45
+ const declaration = { symlink: "symlinks", link: "hardlinks", readlink: "readlink", utimes: "timestamps" }[capability];
46
+ if (!context.fs.capabilitiesFor && context.fs.capabilities[declaration] === false)
47
+ throw new FsError("ENOTSUP", { syscall: capability });
31
48
  if (!context.fs[capability])
32
49
  throw new FsError("ENOTSUP", { syscall: capability });
33
50
  }
51
+ async function admitEmptyDirectory(context, path) {
52
+ try {
53
+ await admitFilesystemModes(context, "rmdir", ["directory"], [path]);
54
+ }
55
+ catch (error) {
56
+ context.signal.throwIfAborted();
57
+ if (codeOf(error) === "ENOTSUP") {
58
+ const capabilities = await context.fs.capabilitiesFor?.(path, { signal: context.signal }) ?? context.fs.capabilities;
59
+ if (capabilities.write !== false && capabilities.readdir !== false
60
+ && (await context.fs.readdir(path, { signal: context.signal })).length) {
61
+ throw new FsError("ENOTEMPTY", { syscall: "rmdir", path, cause: error });
62
+ }
63
+ }
64
+ throw error;
65
+ }
66
+ }
34
67
  async function removeEmptyDirectory(context, path) {
68
+ await admitEmptyDirectory(context, path);
35
69
  context.signal.throwIfAborted();
36
70
  if (!context.fs.rmdir)
37
71
  throw new FsError("ENOTSUP", { syscall: "rmdir", path });
@@ -45,7 +79,7 @@ async function destinations(context, operands) {
45
79
  throw new FsError("ENOTDIR", { path: target });
46
80
  return { target, directory, sources: operands.slice(0, -1) };
47
81
  }
48
- async function copy(context, source, target, flags, top = true, ancestors = new Set()) {
82
+ async function copy(context, source, target, flags, top = true, ancestors = new Set(), preflight = false) {
49
83
  context.signal.throwIfAborted();
50
84
  const link = await context.fs.lstat(source, { signal: context.signal });
51
85
  const preserveLink = link.type === "symlink" && !flags.has("L") && (flags.has("P") || !top);
@@ -55,14 +89,15 @@ async function copy(context, source, target, flags, top = true, ancestors = new
55
89
  ? joinPath(await context.fs.realpath(dirname(source), { signal: context.signal }), basename(source))
56
90
  : await context.fs.realpath(source, { signal: context.signal });
57
91
  const physicalTarget = preserveLink
58
- ? joinPath(await context.fs.realpath(dirname(target), { signal: context.signal }), basename(target))
92
+ ? joinPath(preflight ? await canonicalMissing(context, dirname(target))
93
+ : await context.fs.realpath(dirname(target), { signal: context.signal }), basename(target))
59
94
  : await canonicalMissing(context, target);
60
95
  if (physicalSource === physicalTarget || compareCopyIdentity(sourceStat, targetStat) === "same") {
61
96
  throw new FsError("EINVAL", { path: source, dest: target, message: "source and destination are the same file" });
62
97
  }
63
98
  if (flags.has("n") && await maybeStat(context, target, false))
64
99
  return;
65
- if (!preserveLink && targetStat && await compareObservedEntries(context.fs, source, sourceStat, context.fs, target, targetStat, { signal: context.signal }) === "same") {
100
+ if (!preflight && !preserveLink && targetStat && await compareObservedEntries(context.fs, source, sourceStat, context.fs, target, targetStat, { signal: context.signal }) === "same") {
66
101
  throw new FsError("EINVAL", { path: source, dest: target, message: "source and destination are the same file" });
67
102
  }
68
103
  if (sourceStat.type === "directory") {
@@ -74,19 +109,22 @@ async function copy(context, source, target, flags, top = true, ancestors = new
74
109
  throw new FsError("ELOOP", { path: source });
75
110
  if (targetStat && targetStat.type !== "directory")
76
111
  throw new FsError("ENOTDIR", { path: target });
77
- if (!targetStat)
112
+ await admitFilesystemModes(context, "cp", ["recursive"], [target]);
113
+ if (!targetStat && !preflight)
78
114
  await context.fs.mkdir(target, { mode: sourceStat.mode & 0o777, signal: context.signal });
79
115
  const next = new Set(ancestors).add(physicalSource);
80
116
  for (const entry of (await context.fs.readdir(source, { signal: context.signal })).sort((left, right) => left.name < right.name ? -1 : left.name > right.name ? 1 : 0)) {
81
- await copy(context, joinPath(source, entry.name), joinPath(target, entry.name), flags, false, next);
117
+ await copy(context, joinPath(source, entry.name), joinPath(target, entry.name), flags, false, next, preflight);
82
118
  }
83
119
  }
84
120
  else if (preserveLink) {
121
+ await admitFilesystemModes(context, "cp", ["symlink"], [target]);
85
122
  needCapability(context, "symlink");
86
123
  needCapability(context, "readlink");
87
124
  const linkTarget = await context.fs.readlink(source, { signal: context.signal });
88
125
  const existing = await maybeStat(context, target, false);
89
126
  if (existing) {
127
+ await admitFilesystemModes(context, "cp", ["replace"], [target]);
90
128
  if (existing.type === "directory")
91
129
  throw new FsError("EISDIR", { path: target });
92
130
  const sourceEntry = await context.fs.lstat(source, { signal: context.signal });
@@ -96,13 +134,18 @@ async function copy(context, source, target, flags, top = true, ancestors = new
96
134
  if (identity === "unknown")
97
135
  throw new FsError("ENOTSUP", { path: source, dest: target, message: "symbolic link copy unlink lacks authoritative distinctness" });
98
136
  context.signal.throwIfAborted();
99
- await context.fs.rm(target, { recursive: false, signal: context.signal });
137
+ if (!preflight)
138
+ await context.fs.rm(target, { recursive: false, signal: context.signal });
100
139
  }
101
- await context.fs.symlink(linkTarget, target, { signal: context.signal });
140
+ if (!preflight)
141
+ await context.fs.symlink(linkTarget, target, { signal: context.signal });
102
142
  }
103
143
  else {
144
+ await admitFilesystemModes(context, "cp", ["file", ...flags.has("f") && targetStat ? ["replace", "exclusive"] : []], [target]);
104
145
  if (targetStat?.type === "directory")
105
146
  throw new FsError("EISDIR", { path: target });
147
+ if (preflight)
148
+ return;
106
149
  try {
107
150
  await context.fs.copyFile(source, target, { signal: context.signal });
108
151
  }
@@ -127,7 +170,7 @@ async function copy(context, source, target, flags, top = true, ancestors = new
127
170
  await context.fs.copyFile(source, target, { exclusive: true, signal: context.signal });
128
171
  }
129
172
  }
130
- if (flags.has("v"))
173
+ if (!preflight && flags.has("v"))
131
174
  await output(context, `'${source}' -> '${target}'\n`);
132
175
  }
133
176
  function modeText(stat) {
@@ -152,6 +195,7 @@ export function filesystemCommands() {
152
195
  const mode = value(parsed, "m");
153
196
  if (mode !== undefined && !/^[0-7]{1,4}$/u.test(mode))
154
197
  throw new UsageError(`invalid mode '${mode}' (octal required)`);
198
+ await preflightOperands(context, parsed.operands, operand => admitFilesystemModes(context, "mkdir", [parsed.flags.has("p") ? "parents" : "directory"], [pathOf(context, operand)]));
155
199
  return eachOperand(context, parsed.operands, async (operand) => {
156
200
  await context.fs.mkdir(pathOf(context, operand), { recursive: parsed.flags.has("p"), ...(mode === undefined ? {} : { mode: parseInt(mode, 8) }), signal: context.signal });
157
201
  if (parsed.flags.has("v"))
@@ -164,12 +208,20 @@ export function filesystemCommands() {
164
208
  const reference = value(parsed, "r");
165
209
  const times = reference === undefined ? undefined : await context.fs.stat(pathOf(context, reference), { signal: context.signal });
166
210
  const now = Date.now();
211
+ await preflightOperands(context, parsed.operands, async (operand) => {
212
+ const path = pathOf(context, operand);
213
+ const existing = await maybeStat(context, path);
214
+ const modes = existing ? ["existing"] : parsed.flags.has("c") ? ["no-create"]
215
+ : reference === undefined ? ["create"] : ["create", "existing"];
216
+ await admitFilesystemModes(context, "touch", modes, [path]);
217
+ });
167
218
  return eachOperand(context, parsed.operands, async (operand) => {
168
219
  const path = pathOf(context, operand);
169
220
  let existing = await maybeStat(context, path);
170
221
  if (!existing) {
171
222
  if (parsed.flags.has("c"))
172
223
  return;
224
+ await admitFilesystemModes(context, "touch", reference === undefined ? ["create"] : ["create", "existing"], [path]);
173
225
  if (reference !== undefined)
174
226
  needCapability(context, "utimes");
175
227
  await context.fs.writeFile(path, new Uint8Array(), { flag: "wx", signal: context.signal });
@@ -178,6 +230,7 @@ export function filesystemCommands() {
178
230
  existing = await context.fs.stat(path, { signal: context.signal });
179
231
  }
180
232
  needCapability(context, "utimes");
233
+ await admitFilesystemModes(context, "touch", ["existing"], [path]);
181
234
  const accessOnly = parsed.flags.has("a") && !parsed.flags.has("m");
182
235
  const modifyOnly = parsed.flags.has("m") && !parsed.flags.has("a");
183
236
  await context.fs.utimes(path, modifyOnly ? existing.atimeMs : times?.atimeMs ?? now, accessOnly ? existing.mtimeMs : times?.mtimeMs ?? now, { signal: context.signal });
@@ -188,6 +241,10 @@ export function filesystemCommands() {
188
241
  if (parsed.flags.has("P") && parsed.flags.has("L"))
189
242
  throw new UsageError("-P and -L cannot be combined");
190
243
  const destination = await destinations(context, parsed.operands);
244
+ await preflightOperands(context, destination.sources, async (operand) => {
245
+ const source = pathOf(context, operand);
246
+ await copy(context, source, destination.directory ? joinPath(destination.target, basename(source)) : destination.target, parsed.flags, true, new Set(), true);
247
+ });
191
248
  return eachOperand(context, destination.sources, async (operand) => {
192
249
  const source = pathOf(context, operand);
193
250
  await copy(context, source, destination.directory ? joinPath(destination.target, basename(source)) : destination.target, parsed.flags);
@@ -197,6 +254,13 @@ export function filesystemCommands() {
197
254
  const parsed = options(context.args, "fnv", { force: "f", "no-clobber": "n", verbose: "v" });
198
255
  const destination = await destinations(context, parsed.operands);
199
256
  const budget = new MoveBudget(context.signal);
257
+ await preflightOperands(context, destination.sources, async (operand) => {
258
+ const source = pathOf(context, operand);
259
+ const target = destination.directory ? joinPath(destination.target, basename(source)) : destination.target;
260
+ if (parsed.flags.has("n") && await maybeStat(context, target, false))
261
+ return;
262
+ await admitFilesystemModes(context, "mv", ["rename"], [source, target]);
263
+ });
200
264
  return eachOperand(context, destination.sources, async (operand) => {
201
265
  const source = pathOf(context, operand);
202
266
  const target = destination.directory ? joinPath(destination.target, basename(source)) : destination.target;
@@ -223,6 +287,17 @@ export function filesystemCommands() {
223
287
  const parsed = options(context.args, "rRfdv", { recursive: "r", force: "f", dir: "d", verbose: "v" });
224
288
  if (!parsed.flags.has("f"))
225
289
  requireOperands(parsed.operands);
290
+ await preflightOperands(context, parsed.operands, async (operand) => {
291
+ const path = pathOf(context, operand);
292
+ const stat = await maybeStat(context, path, false);
293
+ if (!stat)
294
+ return;
295
+ const mode = stat.type === "directory" ? parsed.flags.has("r") || parsed.flags.has("R") ? "recursive" : "directory" : "file";
296
+ if (mode === "directory")
297
+ await admitEmptyDirectory(context, path);
298
+ else
299
+ await admitFilesystemModes(context, "rm", [mode], [path]);
300
+ });
226
301
  return eachOperand(context, parsed.operands, async (operand) => {
227
302
  const path = pathOf(context, operand);
228
303
  if (path === "/" || [".", ".."].includes(operand.replace(/\/+$/u, "").split("/").at(-1)))
@@ -256,6 +331,14 @@ export function filesystemCommands() {
256
331
  define("rmdir", async (context) => {
257
332
  const parsed = options(context.args, "pv", { parents: "p", verbose: "v" });
258
333
  requireOperands(parsed.operands);
334
+ await preflightOperands(context, parsed.operands, async (operand) => {
335
+ let path = pathOf(context, operand);
336
+ const stop = dirname(pathOf(context, operand.split("/").find(part => part && part !== ".") ?? operand));
337
+ do {
338
+ await admitEmptyDirectory(context, path);
339
+ path = dirname(path);
340
+ } while (parsed.flags.has("p") && path !== "/" && path !== stop);
341
+ });
259
342
  return eachOperand(context, parsed.operands, async (operand) => {
260
343
  let path = pathOf(context, operand);
261
344
  const stop = dirname(pathOf(context, operand.split("/").find(part => part && part !== ".") ?? operand));
@@ -281,6 +364,11 @@ export function filesystemCommands() {
281
364
  throw new FsError("ENOTDIR", { path: target });
282
365
  const symbolic = parsed.flags.has("s");
283
366
  needCapability(context, symbolic ? "symlink" : "link");
367
+ await preflightOperands(context, operands.slice(0, -1), async (operand) => {
368
+ const destination = directory ? joinPath(target, basename(operand)) : target;
369
+ const replacing = parsed.flags.has("f") && await maybeStat(context, destination, false);
370
+ await admitFilesystemModes(context, "ln", [symbolic ? "symbolic" : "hard", ...replacing ? ["replace"] : []], [destination]);
371
+ });
284
372
  return eachOperand(context, operands.slice(0, -1), async (operand) => {
285
373
  const destination = directory ? joinPath(target, basename(operand)) : target;
286
374
  const source = pathOf(context, operand);
@@ -310,6 +398,7 @@ export function filesystemCommands() {
310
398
  requireOperands(parsed.operands);
311
399
  return eachOperand(context, parsed.operands, async (operand) => {
312
400
  const path = pathOf(context, operand);
401
+ await admitFilesystemModes(context, "readlink", [parsed.flags.has("e") || parsed.flags.has("f") ? "canonical" : "link"], [path]);
313
402
  let result;
314
403
  if (parsed.flags.has("e"))
315
404
  result = await context.fs.realpath(path, { signal: context.signal });
@@ -347,6 +436,7 @@ export function filesystemCommands() {
347
436
  requireOperands(parsed.operands);
348
437
  const canonical = async (operand) => {
349
438
  const path = pathOf(context, operand);
439
+ await admitFilesystemModes(context, "realpath", ["canonical"], [path]);
350
440
  const existing = await maybeStat(context, path, false);
351
441
  return parsed.flags.has("m") ? await canonicalMissing(context, path)
352
442
  : parsed.flags.has("e") || existing ? await context.fs.realpath(path, { signal: context.signal })
@@ -368,6 +458,7 @@ export function filesystemCommands() {
368
458
  const operands = parsed.operands.length ? parsed.operands : ["."];
369
459
  let headerWritten = false;
370
460
  const render = async (path, display) => {
461
+ await admitFilesystemModes(context, "ls", ["entry"], [path]);
371
462
  const stat = await context.fs[parsed.flags.has("L") ? "stat" : "lstat"](path, { signal: context.signal });
372
463
  let suffix = stat.type === "directory" && (parsed.flags.has("F") || parsed.flags.has("p")) ? "/" : "";
373
464
  if (parsed.flags.has("F") && stat.type === "symlink")
@@ -378,6 +469,7 @@ export function filesystemCommands() {
378
469
  const date = new Date(stat.mtimeMs).toISOString().slice(0, 16).replace("T", " ");
379
470
  let target = "";
380
471
  if (stat.type === "symlink") {
472
+ await admitFilesystemModes(context, "ls", ["link"], [path]);
381
473
  needCapability(context, "readlink");
382
474
  target = ` -> ${await context.fs.readlink(path, { signal: context.signal })}`;
383
475
  }
@@ -388,11 +480,13 @@ export function filesystemCommands() {
388
480
  };
389
481
  const list = async (path, display, header, ancestors = new Set()) => {
390
482
  context.signal.throwIfAborted();
483
+ await admitFilesystemModes(context, "ls", ["entry"], [path]);
391
484
  const stat = await context.fs[parsed.flags.has("L") || !parsed.flags.has("d") && !parsed.flags.has("l") ? "stat" : "lstat"](path, { signal: context.signal });
392
485
  if (stat.type !== "directory" || parsed.flags.has("d")) {
393
486
  await render(path, display);
394
487
  return;
395
488
  }
489
+ await admitFilesystemModes(context, "ls", ["directory"], [path]);
396
490
  const physical = await context.fs.realpath(path, { signal: context.signal });
397
491
  if (ancestors.has(physical))
398
492
  throw new FsError("ELOOP", { path });
@@ -422,6 +516,9 @@ export function filesystemCommands() {
422
516
  };
423
517
  return eachOperand(context, operands, operand => list(pathOf(context, operand), operand, operands.length > 1 || parsed.flags.has("R")));
424
518
  }),
425
- ];
519
+ ].map(command => {
520
+ const requirements = filesystemCommandRequirements[command.name];
521
+ return requirements ? { ...command, filesystemRequirements: requirements } : command;
522
+ });
426
523
  }
427
524
  //# sourceMappingURL=filesystem.js.map