git-remote-ops 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +177 -0
- package/LICENSE +21 -0
- package/README.md +247 -0
- package/esm/_dnt.shims.js +72 -0
- package/esm/cli.js +217 -0
- package/esm/client.js +439 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_argument_types.js +1 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_errors.js +133 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_spread.js +1 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_type_utils.js +1 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_utils.js +141 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/command.js +1861 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/help/_help_generator.js +357 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/mod.js +13 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/type.js +27 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/action_list.js +16 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/boolean.js +13 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/child_command.js +14 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/command.js +9 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/enum.js +24 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/file.js +12 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/integer.js +9 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/number.js +9 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/secret.js +7 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/string.js +9 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types.js +2 -0
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/upgrade/_check_version.js +26 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/_errors.js +129 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/_utils.js +100 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/_validate_flags.js +166 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/flags.js +750 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/mod.js +55 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/boolean.js +11 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/integer.js +9 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/number.js +11 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/string.js +4 -0
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types.js +1 -0
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/exit.js +16 -0
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_args.js +11 -0
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_columns.js +25 -0
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_env.js +18 -0
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/inspect.js +11 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/_layout.js +616 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/_utils.js +79 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/border.js +18 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/cell.js +190 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/column.js +117 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/consume_words.js +64 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/mod.js +42 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/row.js +82 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/table.js +341 -0
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.js +101 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_types.js +2 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.internal.js +237 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.js +2277 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_wasm/mod.js +46 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/aes_gcm.js +132 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/crypto.js +270 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/mod.js +23 -0
- package/esm/deps/jsr.io/@std/crypto/1.1.0/timing_safe_equal.js +61 -0
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +51 -0
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +13 -0
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +2 -0
- package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +87 -0
- package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.js +903 -0
- package/esm/deps/jsr.io/@std/text/1.0.18/closest_string.js +46 -0
- package/esm/deps/jsr.io/@std/text/1.0.18/levenshtein_distance.js +127 -0
- package/esm/errors.js +38 -0
- package/esm/index.js +10 -0
- package/esm/logger.js +216 -0
- package/esm/objects/commit.js +47 -0
- package/esm/objects/index.js +2 -0
- package/esm/objects/tree.js +149 -0
- package/esm/pack/delta.js +179 -0
- package/esm/pack/index.js +3 -0
- package/esm/pack/objects.js +72 -0
- package/esm/pack/parser.js +304 -0
- package/esm/package.json +3 -0
- package/esm/protocol/index.js +3 -0
- package/esm/protocol/pkt_line.js +103 -0
- package/esm/protocol/refs.js +100 -0
- package/esm/protocol/upload_pack.js +259 -0
- package/esm/transport.js +128 -0
- package/esm/types.js +8 -0
- package/package.json +50 -0
- package/types/_dnt.shims.d.ts +16 -0
- package/types/_dnt.shims.d.ts.map +1 -0
- package/types/cli.d.ts +3 -0
- package/types/cli.d.ts.map +1 -0
- package/types/client.d.ts +108 -0
- package/types/client.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_argument_types.d.ts +163 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_argument_types.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_errors.d.ts +71 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_errors.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_spread.d.ts +16 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_spread.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_type_utils.d.ts +15 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_type_utils.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_utils.d.ts +38 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_utils.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/command.d.ts +1086 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/command.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/help/_help_generator.d.ts +33 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/help/_help_generator.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/mod.d.ts +78 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/type.d.ts +51 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/type.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/action_list.d.ts +10 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/action_list.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/boolean.d.ts +10 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/boolean.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/child_command.d.ts +10 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/child_command.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/command.d.ts +8 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/command.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/enum.d.ts +11 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/enum.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/file.d.ts +6 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/file.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/integer.d.ts +8 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/integer.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/number.d.ts +8 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/number.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/secret.d.ts +6 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/secret.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/string.d.ts +8 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/string.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types.d.ts +161 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/upgrade/_check_version.d.ts +4 -0
- package/types/deps/jsr.io/@cliffy/command/1.1.0/upgrade/_check_version.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_errors.d.ts +67 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_errors.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_utils.d.ts +17 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_utils.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_validate_flags.d.ts +11 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_validate_flags.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/flags.d.ts +154 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/flags.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/mod.d.ts +57 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/boolean.d.ts +4 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/boolean.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/integer.d.ts +4 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/integer.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/number.d.ts +4 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/number.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/string.d.ts +4 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/string.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types.d.ts +170 -0
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/exit.d.ts +8 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/exit.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_args.d.ts +7 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_args.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_columns.d.ts +7 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_columns.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_env.d.ts +8 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_env.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/inspect.d.ts +7 -0
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/inspect.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_layout.d.ts +108 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_layout.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_utils.d.ts +26 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_utils.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/border.d.ts +21 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/border.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/cell.d.ts +155 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/cell.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/column.d.ts +97 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/column.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/consume_words.d.ts +30 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/consume_words.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/mod.d.ts +43 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/row.d.ts +67 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/row.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/table.d.ts +235 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/table.d.ts.map +1 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.d.ts +40 -0
- package/types/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_types.d.ts +9 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_types.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.d.ts +2 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.internal.d.ts +69 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.internal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/mod.d.ts +13 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/aes_gcm.d.ts +76 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/aes_gcm.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/crypto.d.ts +149 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/crypto.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/mod.d.ts +22 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/mod.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/timing_safe_equal.d.ts +40 -0
- package/types/deps/jsr.io/@std/crypto/1.1.0/timing_safe_equal.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +23 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +4 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +9 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +39 -0
- package/types/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts +700 -0
- package/types/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/1.0.18/closest_string.d.ts +42 -0
- package/types/deps/jsr.io/@std/text/1.0.18/closest_string.d.ts.map +1 -0
- package/types/deps/jsr.io/@std/text/1.0.18/levenshtein_distance.d.ts +23 -0
- package/types/deps/jsr.io/@std/text/1.0.18/levenshtein_distance.d.ts.map +1 -0
- package/types/errors.d.ts +73 -0
- package/types/errors.d.ts.map +1 -0
- package/types/index.d.ts +14 -0
- package/types/index.d.ts.map +1 -0
- package/types/logger.d.ts +70 -0
- package/types/logger.d.ts.map +1 -0
- package/types/objects/commit.d.ts +23 -0
- package/types/objects/commit.d.ts.map +1 -0
- package/types/objects/index.d.ts +3 -0
- package/types/objects/index.d.ts.map +1 -0
- package/types/objects/tree.d.ts +49 -0
- package/types/objects/tree.d.ts.map +1 -0
- package/types/pack/delta.d.ts +47 -0
- package/types/pack/delta.d.ts.map +1 -0
- package/types/pack/index.d.ts +4 -0
- package/types/pack/index.d.ts.map +1 -0
- package/types/pack/objects.d.ts +53 -0
- package/types/pack/objects.d.ts.map +1 -0
- package/types/pack/parser.d.ts +61 -0
- package/types/pack/parser.d.ts.map +1 -0
- package/types/protocol/index.d.ts +4 -0
- package/types/protocol/index.d.ts.map +1 -0
- package/types/protocol/pkt_line.d.ts +44 -0
- package/types/protocol/pkt_line.d.ts.map +1 -0
- package/types/protocol/refs.d.ts +40 -0
- package/types/protocol/refs.d.ts.map +1 -0
- package/types/protocol/upload_pack.d.ts +45 -0
- package/types/protocol/upload_pack.d.ts.map +1 -0
- package/types/transport.d.ts +24 -0
- package/types/transport.d.ts.map +1 -0
- package/types/types.d.ts +121 -0
- package/types/types.d.ts.map +1 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { didYouMeanOption, didYouMeanType, getFlag } from "./_utils.js";
|
|
2
|
+
export class FlagsError extends Error {
|
|
3
|
+
constructor(message) {
|
|
4
|
+
super(message);
|
|
5
|
+
Object.setPrototypeOf(this, FlagsError.prototype);
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
export class UnknownRequiredOptionError extends FlagsError {
|
|
9
|
+
constructor(option, options) {
|
|
10
|
+
super(`Unknown required option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
|
|
11
|
+
Object.setPrototypeOf(this, UnknownRequiredOptionError.prototype);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
export class UnknownConflictingOptionError extends FlagsError {
|
|
15
|
+
constructor(option, options) {
|
|
16
|
+
super(`Unknown conflicting option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
|
|
17
|
+
Object.setPrototypeOf(this, UnknownConflictingOptionError.prototype);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export class UnknownTypeError extends FlagsError {
|
|
21
|
+
constructor(type, types) {
|
|
22
|
+
super(`Unknown type "${type}".${didYouMeanType(type, types)}`);
|
|
23
|
+
Object.setPrototypeOf(this, UnknownTypeError.prototype);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/* Validation errors. */
|
|
27
|
+
/**
|
|
28
|
+
* A validation error is thrown when the command is wrongly used by the user.
|
|
29
|
+
* For example: If the user passes some invalid options or arguments to the
|
|
30
|
+
* command.
|
|
31
|
+
*/
|
|
32
|
+
export class ValidationError extends FlagsError {
|
|
33
|
+
constructor(message) {
|
|
34
|
+
super(message);
|
|
35
|
+
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
export class DuplicateOptionError extends ValidationError {
|
|
39
|
+
constructor(name) {
|
|
40
|
+
super(`Option "${getFlag(name).replace(/^--no-/, "--")}" can only occur once, but was found several times.`);
|
|
41
|
+
Object.setPrototypeOf(this, DuplicateOptionError.prototype);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class UnknownOptionError extends ValidationError {
|
|
45
|
+
constructor(option, options) {
|
|
46
|
+
super(`Unknown option "${getFlag(option)}".${didYouMeanOption(option, options)}`);
|
|
47
|
+
Object.setPrototypeOf(this, UnknownOptionError.prototype);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class MissingOptionValueError extends ValidationError {
|
|
51
|
+
constructor(option) {
|
|
52
|
+
super(`Missing value for option "${getFlag(option)}".`);
|
|
53
|
+
Object.setPrototypeOf(this, MissingOptionValueError.prototype);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export class InvalidOptionValueError extends ValidationError {
|
|
57
|
+
constructor(option, expected, value) {
|
|
58
|
+
super(`Option "${getFlag(option)}" must be of type "${expected}", but got "${value}".`);
|
|
59
|
+
Object.setPrototypeOf(this, InvalidOptionValueError.prototype);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export class UnexpectedOptionValueError extends ValidationError {
|
|
63
|
+
constructor(option, value) {
|
|
64
|
+
super(`Option "${getFlag(option)}" doesn't take a value, but got "${value}".`);
|
|
65
|
+
Object.setPrototypeOf(this, UnexpectedOptionValueError.prototype);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
export class OptionNotCombinableError extends ValidationError {
|
|
69
|
+
constructor(option) {
|
|
70
|
+
super(`Option "${getFlag(option)}" cannot be combined with other options.`);
|
|
71
|
+
Object.setPrototypeOf(this, OptionNotCombinableError.prototype);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export class ConflictingOptionError extends ValidationError {
|
|
75
|
+
constructor(option, conflictingOption) {
|
|
76
|
+
super(`Option "${getFlag(option)}" conflicts with option "${getFlag(conflictingOption)}".`);
|
|
77
|
+
Object.setPrototypeOf(this, ConflictingOptionError.prototype);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
export class DependingOptionError extends ValidationError {
|
|
81
|
+
constructor(option, dependingOption) {
|
|
82
|
+
super(`Option "${getFlag(option)}" depends on option "${getFlag(dependingOption)}".`);
|
|
83
|
+
Object.setPrototypeOf(this, DependingOptionError.prototype);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
export class MissingRequiredOptionError extends ValidationError {
|
|
87
|
+
constructor(option) {
|
|
88
|
+
super(`Missing required option "${getFlag(option)}".`);
|
|
89
|
+
Object.setPrototypeOf(this, MissingRequiredOptionError.prototype);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export class UnexpectedRequiredArgumentError extends ValidationError {
|
|
93
|
+
constructor(arg) {
|
|
94
|
+
super(`An required argument cannot follow an optional argument, but "${arg}" is defined as required.`);
|
|
95
|
+
Object.setPrototypeOf(this, UnexpectedRequiredArgumentError.prototype);
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
export class UnexpectedArgumentAfterVariadicArgumentError extends ValidationError {
|
|
99
|
+
constructor(arg) {
|
|
100
|
+
super(`An argument cannot follow an variadic argument, but got "${arg}".`);
|
|
101
|
+
Object.setPrototypeOf(this, UnexpectedArgumentAfterVariadicArgumentError.prototype);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
export class InvalidTypeError extends ValidationError {
|
|
105
|
+
constructor({ label, name, value, type }, expected) {
|
|
106
|
+
super(`${label} "${name}" must be of type "${type}", but got "${value}".` + (expected
|
|
107
|
+
? ` Expected values: ${expected.map((value) => `"${value}"`).join(", ")}`
|
|
108
|
+
: ""));
|
|
109
|
+
Object.setPrototypeOf(this, InvalidTypeError.prototype);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
export class MissingArgumentError extends ValidationError {
|
|
113
|
+
constructor(name) {
|
|
114
|
+
super(`Missing argument: ${name}`);
|
|
115
|
+
Object.setPrototypeOf(this, MissingArgumentError.prototype);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export class MissingArgumentsError extends ValidationError {
|
|
119
|
+
constructor(names) {
|
|
120
|
+
super(`Missing argument(s): ${names.join(", ")}`);
|
|
121
|
+
Object.setPrototypeOf(this, MissingArgumentsError.prototype);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
export class TooManyArgumentsError extends ValidationError {
|
|
125
|
+
constructor(args) {
|
|
126
|
+
super(`Too many arguments: ${args.join(" ")}`);
|
|
127
|
+
Object.setPrototypeOf(this, TooManyArgumentsError.prototype);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { closestString } from "../../../@std/text/1.0.18/closest_string.js";
|
|
2
|
+
/** Convert param case string to camel case. */
|
|
3
|
+
export function paramCaseToCamelCase(str) {
|
|
4
|
+
return str.replace(/-([a-z])/g, (g) => g[1].toUpperCase());
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Find option by flag, name or alias.
|
|
8
|
+
*
|
|
9
|
+
* @param flags Source options array.
|
|
10
|
+
* @param name Name of the option.
|
|
11
|
+
*/
|
|
12
|
+
export function getOption(flags, name) {
|
|
13
|
+
while (name[0] === "-") {
|
|
14
|
+
name = name.slice(1);
|
|
15
|
+
}
|
|
16
|
+
for (const flag of flags) {
|
|
17
|
+
if (isOption(flag, name)) {
|
|
18
|
+
return flag;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
export function didYouMeanOption(option, options) {
|
|
24
|
+
const optionNames = options
|
|
25
|
+
.map((option) => [option.name, ...(option.aliases ?? [])])
|
|
26
|
+
.flat()
|
|
27
|
+
.map((option) => getFlag(option));
|
|
28
|
+
return didYouMean(" Did you mean option", getFlag(option), optionNames);
|
|
29
|
+
}
|
|
30
|
+
export function didYouMeanType(type, types) {
|
|
31
|
+
return didYouMean(" Did you mean type", type, types);
|
|
32
|
+
}
|
|
33
|
+
export function didYouMean(message, type, types) {
|
|
34
|
+
const match = types.length
|
|
35
|
+
? closestString(type, types)
|
|
36
|
+
: undefined;
|
|
37
|
+
return match ? `${message} "${match}"?` : "";
|
|
38
|
+
}
|
|
39
|
+
export function getFlag(name) {
|
|
40
|
+
if (name.startsWith("-")) {
|
|
41
|
+
return name;
|
|
42
|
+
}
|
|
43
|
+
if (name.length > 1) {
|
|
44
|
+
return `--${name}`;
|
|
45
|
+
}
|
|
46
|
+
return `-${name}`;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if option has name or alias.
|
|
50
|
+
*
|
|
51
|
+
* @param option The option to check.
|
|
52
|
+
* @param name The option name or alias.
|
|
53
|
+
*/
|
|
54
|
+
function isOption(option, name) {
|
|
55
|
+
return option.name === name ||
|
|
56
|
+
(option.aliases && option.aliases.indexOf(name) !== -1);
|
|
57
|
+
}
|
|
58
|
+
export function matchWildCardOptions(name, flags) {
|
|
59
|
+
for (const option of flags) {
|
|
60
|
+
if (option.name.indexOf("*") === -1) {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
let matched = matchWildCardOption(name, option);
|
|
64
|
+
if (matched) {
|
|
65
|
+
matched = { ...matched, name };
|
|
66
|
+
flags.push(matched);
|
|
67
|
+
return matched;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function matchWildCardOption(name, option) {
|
|
72
|
+
const parts = option.name.split(".");
|
|
73
|
+
const parts2 = name.split(".");
|
|
74
|
+
if (parts.length !== parts2.length) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
const count = Math.max(parts.length, parts2.length);
|
|
78
|
+
for (let i = 0; i < count; i++) {
|
|
79
|
+
if (parts[i] !== parts2[i] && parts[i] !== "*") {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return option;
|
|
84
|
+
}
|
|
85
|
+
function getDefaultValues(option) {
|
|
86
|
+
const values = option.args?.map((arg) => getDefaultValue(arg)) ?? [];
|
|
87
|
+
while (values.length > 1 && values.at(-1) === undefined) {
|
|
88
|
+
values.pop();
|
|
89
|
+
}
|
|
90
|
+
return values.length ? values : undefined;
|
|
91
|
+
}
|
|
92
|
+
export function getDefaultValue(option) {
|
|
93
|
+
return typeof option.default === "function"
|
|
94
|
+
? option.default()
|
|
95
|
+
: option.default !== undefined
|
|
96
|
+
? option.default
|
|
97
|
+
: "args" in option && option.args?.some((arg) => arg.default !== undefined)
|
|
98
|
+
? getDefaultValues(option)
|
|
99
|
+
: undefined;
|
|
100
|
+
}
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import { getDefaultValue, getOption, paramCaseToCamelCase } from "./_utils.js";
|
|
2
|
+
import { ConflictingOptionError, DependingOptionError, MissingOptionValueError, MissingRequiredOptionError, OptionNotCombinableError, UnknownOptionError, } from "./_errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Flags post validation. Validations that are not already done by the parser.
|
|
5
|
+
*
|
|
6
|
+
* @param ctx Parse context.
|
|
7
|
+
* @param opts Parse options.
|
|
8
|
+
* @param options Option name mappings: propertyName -> option
|
|
9
|
+
*/
|
|
10
|
+
export function validateFlags(ctx, opts, options = new Map()) {
|
|
11
|
+
if (!opts.flags) {
|
|
12
|
+
return;
|
|
13
|
+
}
|
|
14
|
+
setDefaultValues(ctx, opts);
|
|
15
|
+
const optionNames = Object.keys(ctx.flags);
|
|
16
|
+
if (!optionNames.length && opts.allowEmpty) {
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
if (ctx.standalone) {
|
|
20
|
+
validateStandaloneOption(ctx, options, optionNames);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
for (const [name, option] of options) {
|
|
24
|
+
validateUnknownOption(option, opts);
|
|
25
|
+
validateConflictingOptions(ctx, option);
|
|
26
|
+
validateDependingOptions(ctx, option, opts);
|
|
27
|
+
validateRequiredValues(ctx, option, name);
|
|
28
|
+
}
|
|
29
|
+
validateRequiredOptions(ctx, options, opts);
|
|
30
|
+
}
|
|
31
|
+
function validateUnknownOption(option, opts) {
|
|
32
|
+
if (!getOption(opts.flags ?? [], option.name)) {
|
|
33
|
+
throw new UnknownOptionError(option.name, opts.flags ?? []);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Adds all default values to ctx.flags and returns a boolean object map with
|
|
38
|
+
* only the default option names `{ [OptionName: string]: boolean }`.
|
|
39
|
+
*/
|
|
40
|
+
function setDefaultValues(ctx, opts) {
|
|
41
|
+
if (!opts.flags?.length) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
// Set default values
|
|
45
|
+
for (const option of opts.flags) {
|
|
46
|
+
let name;
|
|
47
|
+
let defaultValue = undefined;
|
|
48
|
+
// if --no-[flag] is present set --[flag] default value to true
|
|
49
|
+
if (option.name.startsWith("no-")) {
|
|
50
|
+
const propName = option.name.replace(/^no-/, "");
|
|
51
|
+
if (typeof ctx.flags[propName] !== "undefined") {
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
const positiveOption = getOption(opts.flags, propName);
|
|
55
|
+
if (positiveOption) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
name = paramCaseToCamelCase(propName);
|
|
59
|
+
defaultValue = true;
|
|
60
|
+
}
|
|
61
|
+
if (!name) {
|
|
62
|
+
name = paramCaseToCamelCase(option.name);
|
|
63
|
+
}
|
|
64
|
+
// TODO: remove ignoreDefaults if flags module has support for environment variables
|
|
65
|
+
const hasDefaultValue = (!opts.ignoreDefaults ||
|
|
66
|
+
typeof opts.ignoreDefaults[name] === "undefined") &&
|
|
67
|
+
typeof ctx.flags[name] === "undefined" && (typeof option.default !== "undefined" ||
|
|
68
|
+
option.args?.some((arg) => arg.default !== undefined) ||
|
|
69
|
+
typeof defaultValue !== "undefined");
|
|
70
|
+
if (hasDefaultValue) {
|
|
71
|
+
ctx.flags[name] = getDefaultValue(option) ?? defaultValue;
|
|
72
|
+
ctx.defaults[option.name] = true;
|
|
73
|
+
if (typeof option.value === "function") {
|
|
74
|
+
ctx.flags[name] = option.value(ctx.flags[name]);
|
|
75
|
+
}
|
|
76
|
+
else if (option.args?.length) {
|
|
77
|
+
for (const [index, arg] of option.args.entries()) {
|
|
78
|
+
if (typeof arg.value === "function") {
|
|
79
|
+
ctx.flags[name][index] = arg.value(ctx.flags[name][index]);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
function validateStandaloneOption(ctx, options, optionNames) {
|
|
87
|
+
if (!ctx.standalone || optionNames.length === 1) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
// Don't throw an error if all values are coming from the default option.
|
|
91
|
+
for (const [_, opt] of options) {
|
|
92
|
+
if (!ctx.defaults[opt.name] && opt !== ctx.standalone) {
|
|
93
|
+
throw new OptionNotCombinableError(ctx.standalone.name);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
function validateConflictingOptions(ctx, option) {
|
|
98
|
+
if (!option.conflicts?.length) {
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
for (const flag of option.conflicts) {
|
|
102
|
+
if (isset(flag, ctx.flags)) {
|
|
103
|
+
throw new ConflictingOptionError(option.name, flag);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
function validateDependingOptions(ctx, option, opts) {
|
|
108
|
+
if (!option.depends) {
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
for (const flag of option.depends) {
|
|
112
|
+
// Don't throw an error if the value is coming from the default option.
|
|
113
|
+
if (!isset(flag, ctx.flags) && !ctx.defaults[option.name] &&
|
|
114
|
+
// TODO: remove ignoreDefaults if flags module has support for environment variables
|
|
115
|
+
(!opts.ignoreDefaults || typeof opts.ignoreDefaults[flag] === "undefined")) {
|
|
116
|
+
throw new DependingOptionError(option.name, flag);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function validateRequiredValues(ctx, option, name) {
|
|
121
|
+
if (!option.args) {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const isArray = option.args.length > 1;
|
|
125
|
+
for (let i = 0; i < option.args.length; i++) {
|
|
126
|
+
const arg = option.args[i];
|
|
127
|
+
if (arg.optional) {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
const hasValue = isArray
|
|
131
|
+
? typeof ctx.flags[name][i] !== "undefined"
|
|
132
|
+
: typeof ctx.flags[name] !== "undefined";
|
|
133
|
+
if (!hasValue) {
|
|
134
|
+
throw new MissingOptionValueError(option.name);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
function validateRequiredOptions(ctx, options, opts) {
|
|
139
|
+
if (!opts.flags?.length) {
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
const optionsValues = [...options.values()];
|
|
143
|
+
for (const option of opts.flags) {
|
|
144
|
+
if (!option.required || paramCaseToCamelCase(option.name) in ctx.flags) {
|
|
145
|
+
continue;
|
|
146
|
+
}
|
|
147
|
+
const conflicts = option.conflicts ?? [];
|
|
148
|
+
const hasConflict = conflicts.find((flag) => !!ctx.flags[flag]);
|
|
149
|
+
const hasConflicts = hasConflict ||
|
|
150
|
+
optionsValues.find((opt) => opt.conflicts?.find((flag) => flag === option.name));
|
|
151
|
+
if (hasConflicts) {
|
|
152
|
+
continue;
|
|
153
|
+
}
|
|
154
|
+
throw new MissingRequiredOptionError(option.name);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Check if value exists for flag.
|
|
159
|
+
* @param flagName Flag name.
|
|
160
|
+
* @param flags Parsed values.
|
|
161
|
+
*/
|
|
162
|
+
function isset(flagName, flags) {
|
|
163
|
+
const name = paramCaseToCamelCase(flagName);
|
|
164
|
+
// return typeof values[ name ] !== 'undefined' && values[ name ] !== false;
|
|
165
|
+
return typeof flags[name] !== "undefined";
|
|
166
|
+
}
|