git-remote-ops 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +33 -32
- package/README.md +80 -206
- package/dist/cli.js +215 -0
- package/dist/cli.js.map +1 -0
- package/{types → dist}/client.d.ts +11 -15
- package/dist/client.d.ts.map +1 -0
- package/{esm → dist}/client.js +107 -83
- package/dist/client.js.map +1 -0
- package/{types → dist}/errors.d.ts +30 -16
- package/dist/errors.d.ts.map +1 -0
- package/{esm → dist}/errors.js +17 -8
- package/dist/errors.js.map +1 -0
- package/{types → dist}/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/{esm → dist}/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/{types → dist}/logger.d.ts +11 -0
- package/dist/logger.d.ts.map +1 -0
- package/{esm → dist}/logger.js +3 -19
- package/dist/logger.js.map +1 -0
- package/{esm → dist}/objects/commit.js +1 -0
- package/dist/objects/commit.js.map +1 -0
- package/{esm → dist}/objects/index.js +1 -0
- package/dist/objects/index.js.map +1 -0
- package/{types → dist}/objects/tree.d.ts.map +1 -1
- package/{esm → dist}/objects/tree.js +2 -2
- package/dist/objects/tree.js.map +1 -0
- package/{esm → dist}/pack/delta.js +1 -0
- package/dist/pack/delta.js.map +1 -0
- package/{esm → dist}/pack/index.js +1 -0
- package/dist/pack/index.js.map +1 -0
- package/{types → dist}/pack/objects.d.ts.map +1 -1
- package/{esm → dist}/pack/objects.js +3 -3
- package/dist/pack/objects.js.map +1 -0
- package/{types → dist}/pack/parser.d.ts +19 -3
- package/dist/pack/parser.d.ts.map +1 -0
- package/{esm → dist}/pack/parser.js +46 -15
- package/dist/pack/parser.js.map +1 -0
- package/{esm → dist}/protocol/index.js +1 -0
- package/dist/protocol/index.js.map +1 -0
- package/{types → dist}/protocol/pkt_line.d.ts +3 -3
- package/{types → dist}/protocol/pkt_line.d.ts.map +1 -1
- package/{esm → dist}/protocol/pkt_line.js +1 -0
- package/dist/protocol/pkt_line.js.map +1 -0
- package/{esm → dist}/protocol/refs.js +1 -0
- package/dist/protocol/refs.js.map +1 -0
- package/{types → dist}/protocol/upload_pack.d.ts +1 -0
- package/{types → dist}/protocol/upload_pack.d.ts.map +1 -1
- package/{esm → dist}/protocol/upload_pack.js +10 -1
- package/dist/protocol/upload_pack.js.map +1 -0
- package/dist/store.d.ts +28 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +179 -0
- package/dist/store.js.map +1 -0
- package/{types → dist}/transport.d.ts +15 -2
- package/dist/transport.d.ts.map +1 -0
- package/{esm → dist}/transport.js +44 -15
- package/dist/transport.js.map +1 -0
- package/{types → dist}/types.d.ts +12 -7
- package/dist/types.d.ts.map +1 -0
- package/{esm → dist}/types.js +1 -0
- package/dist/types.js.map +1 -0
- package/package.json +42 -29
- package/esm/_dnt.shims.js +0 -72
- package/esm/cli.js +0 -217
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_argument_types.js +0 -1
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_errors.js +0 -133
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_spread.js +0 -1
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_type_utils.js +0 -1
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/_utils.js +0 -141
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/command.js +0 -1861
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/help/_help_generator.js +0 -357
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/mod.js +0 -13
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/type.js +0 -27
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/action_list.js +0 -16
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/boolean.js +0 -13
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/child_command.js +0 -14
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/command.js +0 -9
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/enum.js +0 -24
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/file.js +0 -12
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/integer.js +0 -9
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/number.js +0 -9
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/secret.js +0 -7
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types/string.js +0 -9
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/types.js +0 -2
- package/esm/deps/jsr.io/@cliffy/command/1.1.0/upgrade/_check_version.js +0 -26
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/_errors.js +0 -129
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/_utils.js +0 -100
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/_validate_flags.js +0 -166
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/flags.js +0 -750
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/mod.js +0 -55
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/boolean.js +0 -11
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/integer.js +0 -9
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/number.js +0 -11
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types/string.js +0 -4
- package/esm/deps/jsr.io/@cliffy/flags/1.1.0/types.js +0 -1
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/exit.js +0 -16
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_args.js +0 -11
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_columns.js +0 -25
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_env.js +0 -18
- package/esm/deps/jsr.io/@cliffy/internal/1.1.0/runtime/inspect.js +0 -11
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/_layout.js +0 -616
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/_utils.js +0 -79
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/border.js +0 -18
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/cell.js +0 -190
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/column.js +0 -117
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/consume_words.js +0 -64
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/mod.js +0 -42
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/row.js +0 -82
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/table.js +0 -341
- package/esm/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.js +0 -101
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_types.js +0 -2
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.internal.js +0 -237
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.js +0 -2277
- package/esm/deps/jsr.io/@std/crypto/1.1.0/_wasm/mod.js +0 -46
- package/esm/deps/jsr.io/@std/crypto/1.1.0/aes_gcm.js +0 -132
- package/esm/deps/jsr.io/@std/crypto/1.1.0/crypto.js +0 -270
- package/esm/deps/jsr.io/@std/crypto/1.1.0/mod.js +0 -23
- package/esm/deps/jsr.io/@std/crypto/1.1.0/timing_safe_equal.js +0 -61
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common16.js +0 -51
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_common_detach.js +0 -13
- package/esm/deps/jsr.io/@std/encoding/1.0.10/_types.js +0 -2
- package/esm/deps/jsr.io/@std/encoding/1.0.10/hex.js +0 -87
- package/esm/deps/jsr.io/@std/fmt/1.0.10/colors.js +0 -903
- package/esm/deps/jsr.io/@std/text/1.0.18/closest_string.js +0 -46
- package/esm/deps/jsr.io/@std/text/1.0.18/levenshtein_distance.js +0 -127
- package/esm/package.json +0 -3
- package/types/_dnt.shims.d.ts +0 -16
- package/types/_dnt.shims.d.ts.map +0 -1
- package/types/client.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_argument_types.d.ts +0 -163
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_argument_types.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_errors.d.ts +0 -71
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_errors.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_spread.d.ts +0 -16
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_spread.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_type_utils.d.ts +0 -15
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_type_utils.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_utils.d.ts +0 -38
- package/types/deps/jsr.io/@cliffy/command/1.1.0/_utils.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/command.d.ts +0 -1086
- package/types/deps/jsr.io/@cliffy/command/1.1.0/command.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/help/_help_generator.d.ts +0 -33
- package/types/deps/jsr.io/@cliffy/command/1.1.0/help/_help_generator.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/mod.d.ts +0 -78
- package/types/deps/jsr.io/@cliffy/command/1.1.0/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/type.d.ts +0 -51
- package/types/deps/jsr.io/@cliffy/command/1.1.0/type.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/action_list.d.ts +0 -10
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/action_list.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/boolean.d.ts +0 -10
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/boolean.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/child_command.d.ts +0 -10
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/child_command.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/command.d.ts +0 -8
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/command.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/enum.d.ts +0 -11
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/enum.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/file.d.ts +0 -6
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/file.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/integer.d.ts +0 -8
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/integer.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/number.d.ts +0 -8
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/number.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/secret.d.ts +0 -6
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/secret.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/string.d.ts +0 -8
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types/string.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types.d.ts +0 -161
- package/types/deps/jsr.io/@cliffy/command/1.1.0/types.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/command/1.1.0/upgrade/_check_version.d.ts +0 -4
- package/types/deps/jsr.io/@cliffy/command/1.1.0/upgrade/_check_version.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_errors.d.ts +0 -67
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_errors.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_utils.d.ts +0 -17
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_utils.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_validate_flags.d.ts +0 -11
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/_validate_flags.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/flags.d.ts +0 -154
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/flags.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/mod.d.ts +0 -57
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/boolean.d.ts +0 -4
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/boolean.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/integer.d.ts +0 -4
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/integer.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/number.d.ts +0 -4
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/number.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/string.d.ts +0 -4
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types/string.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types.d.ts +0 -170
- package/types/deps/jsr.io/@cliffy/flags/1.1.0/types.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/exit.d.ts +0 -8
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/exit.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_args.d.ts +0 -7
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_args.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_columns.d.ts +0 -7
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_columns.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_env.d.ts +0 -8
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/get_env.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/inspect.d.ts +0 -7
- package/types/deps/jsr.io/@cliffy/internal/1.1.0/runtime/inspect.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_layout.d.ts +0 -108
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_layout.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_utils.d.ts +0 -26
- package/types/deps/jsr.io/@cliffy/table/1.1.0/_utils.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/border.d.ts +0 -21
- package/types/deps/jsr.io/@cliffy/table/1.1.0/border.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/cell.d.ts +0 -155
- package/types/deps/jsr.io/@cliffy/table/1.1.0/cell.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/column.d.ts +0 -97
- package/types/deps/jsr.io/@cliffy/table/1.1.0/column.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/consume_words.d.ts +0 -30
- package/types/deps/jsr.io/@cliffy/table/1.1.0/consume_words.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/mod.d.ts +0 -43
- package/types/deps/jsr.io/@cliffy/table/1.1.0/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/row.d.ts +0 -67
- package/types/deps/jsr.io/@cliffy/table/1.1.0/row.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/table.d.ts +0 -235
- package/types/deps/jsr.io/@cliffy/table/1.1.0/table.d.ts.map +0 -1
- package/types/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.d.ts +0 -40
- package/types/deps/jsr.io/@cliffy/table/1.1.0/unicode_width.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/_types.d.ts +0 -9
- package/types/deps/jsr.io/@std/crypto/1.1.0/_types.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.d.ts +0 -2
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.internal.d.ts +0 -69
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/lib/deno_std_wasm_crypto.internal.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/mod.d.ts +0 -13
- package/types/deps/jsr.io/@std/crypto/1.1.0/_wasm/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/aes_gcm.d.ts +0 -76
- package/types/deps/jsr.io/@std/crypto/1.1.0/aes_gcm.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/crypto.d.ts +0 -149
- package/types/deps/jsr.io/@std/crypto/1.1.0/crypto.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/mod.d.ts +0 -22
- package/types/deps/jsr.io/@std/crypto/1.1.0/mod.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/crypto/1.1.0/timing_safe_equal.d.ts +0 -40
- package/types/deps/jsr.io/@std/crypto/1.1.0/timing_safe_equal.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts +0 -23
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common16.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts +0 -4
- package/types/deps/jsr.io/@std/encoding/1.0.10/_common_detach.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts +0 -9
- package/types/deps/jsr.io/@std/encoding/1.0.10/_types.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts +0 -39
- package/types/deps/jsr.io/@std/encoding/1.0.10/hex.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts +0 -700
- package/types/deps/jsr.io/@std/fmt/1.0.10/colors.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/1.0.18/closest_string.d.ts +0 -42
- package/types/deps/jsr.io/@std/text/1.0.18/closest_string.d.ts.map +0 -1
- package/types/deps/jsr.io/@std/text/1.0.18/levenshtein_distance.d.ts +0 -23
- package/types/deps/jsr.io/@std/text/1.0.18/levenshtein_distance.d.ts.map +0 -1
- package/types/errors.d.ts.map +0 -1
- package/types/index.d.ts.map +0 -1
- package/types/logger.d.ts.map +0 -1
- package/types/pack/parser.d.ts.map +0 -1
- package/types/transport.d.ts.map +0 -1
- package/types/types.d.ts.map +0 -1
- /package/{types → dist}/cli.d.ts +0 -0
- /package/{types → dist}/cli.d.ts.map +0 -0
- /package/{types → dist}/objects/commit.d.ts +0 -0
- /package/{types → dist}/objects/commit.d.ts.map +0 -0
- /package/{types → dist}/objects/index.d.ts +0 -0
- /package/{types → dist}/objects/index.d.ts.map +0 -0
- /package/{types → dist}/objects/tree.d.ts +0 -0
- /package/{types → dist}/pack/delta.d.ts +0 -0
- /package/{types → dist}/pack/delta.d.ts.map +0 -0
- /package/{types → dist}/pack/index.d.ts +0 -0
- /package/{types → dist}/pack/index.d.ts.map +0 -0
- /package/{types → dist}/pack/objects.d.ts +0 -0
- /package/{types → dist}/protocol/index.d.ts +0 -0
- /package/{types → dist}/protocol/index.d.ts.map +0 -0
- /package/{types → dist}/protocol/refs.d.ts +0 -0
- /package/{types → dist}/protocol/refs.d.ts.map +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "git-remote-ops",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "Read-only Git over smart HTTP. No clone, no subprocess.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Goulin Khoge",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=24"
|
|
10
|
+
},
|
|
11
|
+
"repository": {
|
|
12
|
+
"type": "git",
|
|
13
|
+
"url": "git+https://github.com/goulinkh/git-remote-ops.git"
|
|
14
|
+
},
|
|
15
|
+
"bugs": {
|
|
16
|
+
"url": "https://github.com/goulinkh/git-remote-ops/issues"
|
|
17
|
+
},
|
|
18
|
+
"homepage": "https://github.com/goulinkh/git-remote-ops#readme",
|
|
5
19
|
"keywords": [
|
|
6
20
|
"git",
|
|
7
21
|
"smart-http",
|
|
@@ -10,41 +24,40 @@
|
|
|
10
24
|
"partial-clone",
|
|
11
25
|
"shallow-clone"
|
|
12
26
|
],
|
|
13
|
-
"
|
|
14
|
-
|
|
15
|
-
"repository": {
|
|
16
|
-
"type": "git",
|
|
17
|
-
"url": "git+https://github.com/goulinkh/git-remote-ops.git"
|
|
18
|
-
},
|
|
19
|
-
"license": "MIT",
|
|
20
|
-
"bugs": {
|
|
21
|
-
"url": "https://github.com/goulinkh/git-remote-ops/issues"
|
|
27
|
+
"bin": {
|
|
28
|
+
"git-remote-ops": "./dist/cli.js"
|
|
22
29
|
},
|
|
23
|
-
"module": "./esm/index.js",
|
|
24
|
-
"types": "./types/index.d.ts",
|
|
25
30
|
"exports": {
|
|
26
31
|
".": {
|
|
27
|
-
"
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
32
|
+
"types": "./dist/index.d.ts",
|
|
33
|
+
"import": "./dist/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./cli": {
|
|
36
|
+
"types": "./dist/cli.d.ts",
|
|
37
|
+
"import": "./dist/cli.js"
|
|
31
38
|
}
|
|
32
39
|
},
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
"
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
},
|
|
40
|
+
"files": [
|
|
41
|
+
"dist",
|
|
42
|
+
"README.md",
|
|
43
|
+
"AGENTS.md",
|
|
44
|
+
"LICENSE"
|
|
45
|
+
],
|
|
40
46
|
"dependencies": {
|
|
41
|
-
"better-result": "^2",
|
|
42
|
-
"
|
|
43
|
-
"@deno/shim-crypto": "~0.3.1",
|
|
44
|
-
"undici": "^6.0.0"
|
|
47
|
+
"better-result": "^2.0.0",
|
|
48
|
+
"commander": "^12.1.0"
|
|
45
49
|
},
|
|
46
50
|
"devDependencies": {
|
|
47
|
-
"@types/node": "^
|
|
51
|
+
"@types/node": "^24.0.0",
|
|
52
|
+
"tsx": "^4.20.0",
|
|
53
|
+
"typescript": "^5.8.0"
|
|
48
54
|
},
|
|
49
|
-
"
|
|
55
|
+
"scripts": {
|
|
56
|
+
"build": "tsc -p tsconfig.build.json",
|
|
57
|
+
"typecheck": "tsc --noEmit -p tsconfig.json",
|
|
58
|
+
"test": "node --import tsx --test src/*.test.ts src/objects/*.test.ts src/pack/*.test.ts src/protocol/*.test.ts",
|
|
59
|
+
"test:integration": "node --import tsx --test src/testing/integration/*.test.ts",
|
|
60
|
+
"test:all": "pnpm test && pnpm test:integration",
|
|
61
|
+
"verify": "pnpm typecheck && pnpm test"
|
|
62
|
+
}
|
|
50
63
|
}
|
package/esm/_dnt.shims.js
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
import { Deno } from "@deno/shim-deno";
|
|
2
|
-
export { Deno } from "@deno/shim-deno";
|
|
3
|
-
import { crypto } from "@deno/shim-crypto";
|
|
4
|
-
export { crypto } from "@deno/shim-crypto";
|
|
5
|
-
import { fetch, File, FormData, Headers, Request, Response } from "undici";
|
|
6
|
-
export { fetch, File, FormData, Headers, Request, Response } from "undici";
|
|
7
|
-
const dntGlobals = {
|
|
8
|
-
Deno,
|
|
9
|
-
crypto,
|
|
10
|
-
fetch,
|
|
11
|
-
File,
|
|
12
|
-
FormData,
|
|
13
|
-
Headers,
|
|
14
|
-
Request,
|
|
15
|
-
Response,
|
|
16
|
-
};
|
|
17
|
-
export const dntGlobalThis = createMergeProxy(globalThis, dntGlobals);
|
|
18
|
-
function createMergeProxy(baseObj, extObj) {
|
|
19
|
-
return new Proxy(baseObj, {
|
|
20
|
-
get(_target, prop, _receiver) {
|
|
21
|
-
if (prop in extObj) {
|
|
22
|
-
return extObj[prop];
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return baseObj[prop];
|
|
26
|
-
}
|
|
27
|
-
},
|
|
28
|
-
set(_target, prop, value) {
|
|
29
|
-
if (prop in extObj) {
|
|
30
|
-
delete extObj[prop];
|
|
31
|
-
}
|
|
32
|
-
baseObj[prop] = value;
|
|
33
|
-
return true;
|
|
34
|
-
},
|
|
35
|
-
deleteProperty(_target, prop) {
|
|
36
|
-
let success = false;
|
|
37
|
-
if (prop in extObj) {
|
|
38
|
-
delete extObj[prop];
|
|
39
|
-
success = true;
|
|
40
|
-
}
|
|
41
|
-
if (prop in baseObj) {
|
|
42
|
-
delete baseObj[prop];
|
|
43
|
-
success = true;
|
|
44
|
-
}
|
|
45
|
-
return success;
|
|
46
|
-
},
|
|
47
|
-
ownKeys(_target) {
|
|
48
|
-
const baseKeys = Reflect.ownKeys(baseObj);
|
|
49
|
-
const extKeys = Reflect.ownKeys(extObj);
|
|
50
|
-
const extKeysSet = new Set(extKeys);
|
|
51
|
-
return [...baseKeys.filter((k) => !extKeysSet.has(k)), ...extKeys];
|
|
52
|
-
},
|
|
53
|
-
defineProperty(_target, prop, desc) {
|
|
54
|
-
if (prop in extObj) {
|
|
55
|
-
delete extObj[prop];
|
|
56
|
-
}
|
|
57
|
-
Reflect.defineProperty(baseObj, prop, desc);
|
|
58
|
-
return true;
|
|
59
|
-
},
|
|
60
|
-
getOwnPropertyDescriptor(_target, prop) {
|
|
61
|
-
if (prop in extObj) {
|
|
62
|
-
return Reflect.getOwnPropertyDescriptor(extObj, prop);
|
|
63
|
-
}
|
|
64
|
-
else {
|
|
65
|
-
return Reflect.getOwnPropertyDescriptor(baseObj, prop);
|
|
66
|
-
}
|
|
67
|
-
},
|
|
68
|
-
has(_target, prop) {
|
|
69
|
-
return prop in extObj || prop in baseObj;
|
|
70
|
-
},
|
|
71
|
-
});
|
|
72
|
-
}
|
package/esm/cli.js
DELETED
|
@@ -1,217 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import * as dntShim from "./_dnt.shims.js";
|
|
3
|
-
!/usr/bin / env - S;
|
|
4
|
-
deno;
|
|
5
|
-
run--;
|
|
6
|
-
allow - net;
|
|
7
|
-
/**
|
|
8
|
-
* @module cli
|
|
9
|
-
*
|
|
10
|
-
* Cliffy-driven command-line front-end. Each subcommand wires the global
|
|
11
|
-
* verbosity / stats flags into a freshly built {@link RemoteGit}, executes
|
|
12
|
-
* one operation, and prints a plain-text result to stdout. Errors come back
|
|
13
|
-
* through {@link unwrap} as `[Tag] message` lines on stderr with exit 1.
|
|
14
|
-
*
|
|
15
|
-
* Subcommands:
|
|
16
|
-
* - `probe` — capability + filter probe
|
|
17
|
-
* - `ls-refs` — list advertised refs
|
|
18
|
-
* - `cat-commit` — fetch one commit
|
|
19
|
-
* - `cat-tree` — fetch a commit's root tree (or a tree by sha)
|
|
20
|
-
* - `list-files` — walk a snapshot and emit every file path
|
|
21
|
-
* - `cat-blob` — pipe one blob's raw bytes to stdout
|
|
22
|
-
*/
|
|
23
|
-
import { Command, ValidationError } from "./deps/jsr.io/@cliffy/command/1.1.0/mod.js";
|
|
24
|
-
import { Logger, RemoteGit } from "./index.js";
|
|
25
|
-
import { parseTree } from "./objects/index.js";
|
|
26
|
-
/** Bumped in lockstep with `deno.json`. Surfaced by `git-remote-ops --version`. */
|
|
27
|
-
const VERSION = "0.1.0";
|
|
28
|
-
/** Octal mode of a subtree entry — used to recurse during `list-files`. */
|
|
29
|
-
const TREE_MODE = "40000";
|
|
30
|
-
function resolveLevel(flags) {
|
|
31
|
-
if (flags.quiet)
|
|
32
|
-
return "silent";
|
|
33
|
-
if (flags.debug)
|
|
34
|
-
return "trace";
|
|
35
|
-
if (flags.verbose)
|
|
36
|
-
return "debug";
|
|
37
|
-
return "info";
|
|
38
|
-
}
|
|
39
|
-
function makeClient(url, flags) {
|
|
40
|
-
const logger = new Logger({
|
|
41
|
-
level: resolveLevel(flags),
|
|
42
|
-
sink: (line) => console.error(line),
|
|
43
|
-
}, "client");
|
|
44
|
-
const client = new RemoteGit(url, { logger });
|
|
45
|
-
return { client, logger };
|
|
46
|
-
}
|
|
47
|
-
function unwrap(result) {
|
|
48
|
-
if (result.isErr()) {
|
|
49
|
-
console.error(`[${result.error._tag}] ${result.error.message}`);
|
|
50
|
-
dntShim.Deno.exit(1);
|
|
51
|
-
}
|
|
52
|
-
return result.value;
|
|
53
|
-
}
|
|
54
|
-
function maybeStats(logger, flags) {
|
|
55
|
-
if (flags.stats)
|
|
56
|
-
console.error(logger.summary());
|
|
57
|
-
}
|
|
58
|
-
function cachedTreeEntries(client, treeSha) {
|
|
59
|
-
const object = client.getObject(treeSha);
|
|
60
|
-
if (!object) {
|
|
61
|
-
console.error(`[ObjectNotFoundError] tree not present in fetched pack: ${treeSha}`);
|
|
62
|
-
dntShim.Deno.exit(1);
|
|
63
|
-
}
|
|
64
|
-
if (object.type !== "tree") {
|
|
65
|
-
console.error(`[ObjectDecodeError] object is not a tree: ${treeSha}`);
|
|
66
|
-
dntShim.Deno.exit(1);
|
|
67
|
-
}
|
|
68
|
-
const entries = parseTree(object.content);
|
|
69
|
-
if (entries.isErr()) {
|
|
70
|
-
console.error(`[${entries.error._tag}] ${entries.error.message}`);
|
|
71
|
-
dntShim.Deno.exit(1);
|
|
72
|
-
}
|
|
73
|
-
return entries.value;
|
|
74
|
-
}
|
|
75
|
-
function printCachedFiles(client, entries, prefix, details) {
|
|
76
|
-
for (const entry of entries) {
|
|
77
|
-
const path = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
78
|
-
if (entry.mode === TREE_MODE) {
|
|
79
|
-
printCachedFiles(client, cachedTreeEntries(client, entry.sha), path, details);
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
console.log(details ? `${entry.mode} ${entry.sha} ${path}` : path);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
await new Command()
|
|
87
|
-
.name("git-remote-ops")
|
|
88
|
-
.version(VERSION)
|
|
89
|
-
.description("Read-only Git remote operations over smart HTTP.")
|
|
90
|
-
.globalOption("-q, --quiet", "Suppress all log output (silent level).")
|
|
91
|
-
.globalOption("-v, --verbose", "Enable debug-level logs to stderr.", {
|
|
92
|
-
conflicts: ["quiet"],
|
|
93
|
-
})
|
|
94
|
-
.globalOption("--debug", "Enable trace-level logs to stderr (very chatty).", {
|
|
95
|
-
conflicts: ["quiet"],
|
|
96
|
-
})
|
|
97
|
-
.globalOption("--stats", "Print performance/analytics summary on stderr after completion.")
|
|
98
|
-
.action(function () {
|
|
99
|
-
this.showHelp();
|
|
100
|
-
})
|
|
101
|
-
.command("probe", "Probe server capabilities (protocol, filter, shallow).")
|
|
102
|
-
.arguments("<url:string>")
|
|
103
|
-
.action(async (flags, url) => {
|
|
104
|
-
const { client, logger } = makeClient(url, flags);
|
|
105
|
-
const profile = unwrap(await client.probe(true));
|
|
106
|
-
console.log(`refs=${profile.refs.size}`);
|
|
107
|
-
console.log(`protocol=${profile.protocolVersion}`);
|
|
108
|
-
console.log(`filter_blob_none=${profile.supportsFilterBlobNone}`);
|
|
109
|
-
console.log(`filter_tree_0=${profile.supportsFilterTree0}`);
|
|
110
|
-
console.log(`shallow=${profile.supportsShallow}`);
|
|
111
|
-
maybeStats(logger, flags);
|
|
112
|
-
})
|
|
113
|
-
.command("ls-refs", "List remote refs as '<sha> <name>' per line.")
|
|
114
|
-
.arguments("<url:string>")
|
|
115
|
-
.action(async (flags, url) => {
|
|
116
|
-
const { client, logger } = makeClient(url, flags);
|
|
117
|
-
for (const [name, sha] of unwrap(await client.lsRefs())) {
|
|
118
|
-
console.log(`${sha} ${name}`);
|
|
119
|
-
}
|
|
120
|
-
maybeStats(logger, flags);
|
|
121
|
-
})
|
|
122
|
-
.command("cat-commit", "Fetch & print a commit object.")
|
|
123
|
-
.arguments("<url:string>")
|
|
124
|
-
.option("--ref <ref:string>", "Ref or sha to resolve.", { default: "HEAD" })
|
|
125
|
-
.option("--depth <n:integer>", "Shallow depth (ignored if server lacks shallow).", {
|
|
126
|
-
default: 1,
|
|
127
|
-
value: (n) => {
|
|
128
|
-
if (n < 1)
|
|
129
|
-
throw new ValidationError("--depth must be >= 1");
|
|
130
|
-
return n;
|
|
131
|
-
},
|
|
132
|
-
})
|
|
133
|
-
.option("--filter <spec:string>", "Object filter spec (e.g. blob:none, tree:0).", {
|
|
134
|
-
default: "blob:none",
|
|
135
|
-
})
|
|
136
|
-
.option("--no-filter", "Fetch without object filter; may download a full snapshot pack.")
|
|
137
|
-
.action(async (flags, url) => {
|
|
138
|
-
const { client, logger } = makeClient(url, flags);
|
|
139
|
-
const filter = flags.filter === false ? undefined : flags.filter;
|
|
140
|
-
const { sha, commit } = unwrap(await client.fetchCommit(flags.ref, { depth: flags.depth, filter }));
|
|
141
|
-
console.log(`commit ${sha}`);
|
|
142
|
-
console.log(`tree ${commit.tree}`);
|
|
143
|
-
if (commit.parent)
|
|
144
|
-
console.log(`parent ${commit.parent}`);
|
|
145
|
-
if (commit.author)
|
|
146
|
-
console.log(`author ${commit.author}`);
|
|
147
|
-
if (commit.committer)
|
|
148
|
-
console.log(`committer ${commit.committer}`);
|
|
149
|
-
maybeStats(logger, flags);
|
|
150
|
-
})
|
|
151
|
-
.command("cat-tree", "Fetch a commit snapshot and print its root tree as '<mode> <sha> <name>' per entry.")
|
|
152
|
-
.arguments("<url:string>")
|
|
153
|
-
.option("--ref <ref:string>", "Ref or commit sha to resolve.", { default: "HEAD" })
|
|
154
|
-
.option("--depth <n:integer>", "Shallow depth (ignored if server lacks shallow).", {
|
|
155
|
-
default: 1,
|
|
156
|
-
value: (n) => {
|
|
157
|
-
if (n < 1)
|
|
158
|
-
throw new ValidationError("--depth must be >= 1");
|
|
159
|
-
return n;
|
|
160
|
-
},
|
|
161
|
-
})
|
|
162
|
-
.option("--filter <spec:string>", "Object filter spec (e.g. blob:none, tree:0).", {
|
|
163
|
-
default: "blob:none",
|
|
164
|
-
})
|
|
165
|
-
.option("--no-filter", "Fetch without object filter; downloads a full snapshot pack.")
|
|
166
|
-
.option("--tree-sha <sha:string>", "Fetch the tree by SHA directly (no commit snapshot).")
|
|
167
|
-
.action(async (flags, url) => {
|
|
168
|
-
const { client, logger } = makeClient(url, flags);
|
|
169
|
-
if (flags.treeSha) {
|
|
170
|
-
for (const entry of unwrap(await client.fetchTree(flags.treeSha))) {
|
|
171
|
-
console.log(`${entry.mode} ${entry.sha} ${entry.name}`);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
else {
|
|
175
|
-
const filter = flags.filter === false ? undefined : flags.filter;
|
|
176
|
-
const result = unwrap(await client.fetchTreeForCommit(flags.ref, { depth: flags.depth, filter }));
|
|
177
|
-
for (const entry of result.entries) {
|
|
178
|
-
console.log(`${entry.mode} ${entry.sha} ${entry.name}`);
|
|
179
|
-
}
|
|
180
|
-
}
|
|
181
|
-
maybeStats(logger, flags);
|
|
182
|
-
})
|
|
183
|
-
.command("list-files", "List all files in a commit snapshot without cloning.")
|
|
184
|
-
.arguments("<url:string>")
|
|
185
|
-
.option("--ref <ref:string>", "Ref or commit sha to resolve.", { default: "HEAD" })
|
|
186
|
-
.option("--depth <n:integer>", "Shallow depth (ignored if server lacks shallow).", {
|
|
187
|
-
default: 1,
|
|
188
|
-
value: (n) => {
|
|
189
|
-
if (n < 1)
|
|
190
|
-
throw new ValidationError("--depth must be >= 1");
|
|
191
|
-
return n;
|
|
192
|
-
},
|
|
193
|
-
})
|
|
194
|
-
.option("--filter <spec:string>", "Object filter spec (e.g. blob:none, tree:0).", {
|
|
195
|
-
default: "blob:none",
|
|
196
|
-
})
|
|
197
|
-
.option("--no-filter", "Fetch without object filter; downloads a full snapshot pack.")
|
|
198
|
-
.option("--details", "Print '<mode> <sha> <path>' instead of path only.")
|
|
199
|
-
.action(async (flags, url) => {
|
|
200
|
-
const { client, logger } = makeClient(url, flags);
|
|
201
|
-
const filter = flags.filter === false ? undefined : flags.filter;
|
|
202
|
-
const result = unwrap(await client.fetchTreeForCommit(flags.ref, {
|
|
203
|
-
depth: flags.depth,
|
|
204
|
-
filter,
|
|
205
|
-
parseFull: true,
|
|
206
|
-
}));
|
|
207
|
-
printCachedFiles(client, result.entries, "", !!flags.details);
|
|
208
|
-
maybeStats(logger, flags);
|
|
209
|
-
})
|
|
210
|
-
.command("cat-blob", "Fetch a blob and write raw bytes to stdout.")
|
|
211
|
-
.arguments("<url:string> <blob-sha:string>")
|
|
212
|
-
.action(async (flags, url, sha) => {
|
|
213
|
-
const { client, logger } = makeClient(url, flags);
|
|
214
|
-
await dntShim.Deno.stdout.write(unwrap(await client.fetchBlob(sha)));
|
|
215
|
-
maybeStats(logger, flags);
|
|
216
|
-
})
|
|
217
|
-
.parse(dntShim.Deno.args);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,133 +0,0 @@
|
|
|
1
|
-
import { didYouMeanCommand } from "./_utils.js";
|
|
2
|
-
import { getFlag } from "./_utils.js";
|
|
3
|
-
import { bold } from "../../../@std/fmt/1.0.10/colors.js";
|
|
4
|
-
export class CommandError extends Error {
|
|
5
|
-
constructor(message, options) {
|
|
6
|
-
super(message, options);
|
|
7
|
-
Object.setPrototypeOf(this, CommandError.prototype);
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
export class ValidationError extends CommandError {
|
|
11
|
-
exitCode;
|
|
12
|
-
cmd;
|
|
13
|
-
constructor(message, { exitCode, cause } = {}) {
|
|
14
|
-
super(message, { cause });
|
|
15
|
-
Object.setPrototypeOf(this, ValidationError.prototype);
|
|
16
|
-
this.exitCode = exitCode ?? 2;
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
export class DuplicateOptionNameError extends CommandError {
|
|
20
|
-
constructor(optionName, commandName) {
|
|
21
|
-
super(`An option with name '${bold(getFlag(optionName))}' is already registered on command '${bold(commandName)}'. If it is intended to override the option, set the '${bold("override")}' option of the '${bold("option")}' method to true.`);
|
|
22
|
-
Object.setPrototypeOf(this, DuplicateOptionNameError.prototype);
|
|
23
|
-
}
|
|
24
|
-
}
|
|
25
|
-
export class MissingCommandNameCompletionsError extends CommandError {
|
|
26
|
-
constructor(shell) {
|
|
27
|
-
super(`Failed to generate shell completions. Missing main command name. Use '${bold('cmd.name("<command-name>")')}' to set the name of the main command or use the '${bold("--name")}' option from the '${bold("completions")}' command to set the cli name: '${bold(`<command> completions ${shell} --name <cli-name>`)}'.`);
|
|
28
|
-
Object.setPrototypeOf(this, MissingCommandNameCompletionsError.prototype);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
export class MissingCommandNameError extends CommandError {
|
|
32
|
-
constructor() {
|
|
33
|
-
super("Missing command name.");
|
|
34
|
-
Object.setPrototypeOf(this, MissingCommandNameError.prototype);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
export class DuplicateCommandNameError extends CommandError {
|
|
38
|
-
constructor(name) {
|
|
39
|
-
super(`Duplicate command name "${name}".`);
|
|
40
|
-
Object.setPrototypeOf(this, DuplicateCommandNameError.prototype);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
export class DuplicateCommandAliasError extends CommandError {
|
|
44
|
-
constructor(alias) {
|
|
45
|
-
super(`Duplicate command alias "${alias}".`);
|
|
46
|
-
Object.setPrototypeOf(this, DuplicateCommandAliasError.prototype);
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
export class CommandNotFoundError extends CommandError {
|
|
50
|
-
constructor(name, commands, excluded) {
|
|
51
|
-
super(`Unknown command "${name}".${didYouMeanCommand(name, commands, excluded)}`);
|
|
52
|
-
Object.setPrototypeOf(this, CommandNotFoundError.prototype);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
export class DuplicateTypeError extends CommandError {
|
|
56
|
-
constructor(name) {
|
|
57
|
-
super(`Type with name "${name}" already exists.`);
|
|
58
|
-
Object.setPrototypeOf(this, DuplicateTypeError.prototype);
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export class DuplicateCompletionError extends CommandError {
|
|
62
|
-
constructor(name) {
|
|
63
|
-
super(`Completion with name "${name}" already exists.`);
|
|
64
|
-
Object.setPrototypeOf(this, DuplicateCompletionError.prototype);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
export class DuplicateExampleError extends CommandError {
|
|
68
|
-
constructor(name) {
|
|
69
|
-
super(`Example with name "${name}" already exists.`);
|
|
70
|
-
Object.setPrototypeOf(this, DuplicateExampleError.prototype);
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
export class DuplicateEnvVarError extends CommandError {
|
|
74
|
-
constructor(name) {
|
|
75
|
-
super(`Environment variable with name "${name}" already exists.`);
|
|
76
|
-
Object.setPrototypeOf(this, DuplicateEnvVarError.prototype);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
export class MissingRequiredEnvVarError extends ValidationError {
|
|
80
|
-
constructor(envVar) {
|
|
81
|
-
super(`Missing required environment variable "${envVar.names[0]}".`);
|
|
82
|
-
Object.setPrototypeOf(this, MissingRequiredEnvVarError.prototype);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
export class TooManyEnvVarValuesError extends CommandError {
|
|
86
|
-
constructor(name) {
|
|
87
|
-
super(`An environment variable can only have one value, but "${name}" has more than one.`);
|
|
88
|
-
Object.setPrototypeOf(this, TooManyEnvVarValuesError.prototype);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
export class UnexpectedOptionalEnvVarValueError extends CommandError {
|
|
92
|
-
constructor(name) {
|
|
93
|
-
super(`An environment variable cannot have an optional value, but "${name}" is defined as optional.`);
|
|
94
|
-
Object.setPrototypeOf(this, UnexpectedOptionalEnvVarValueError.prototype);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
export class UnexpectedVariadicEnvVarValueError extends CommandError {
|
|
98
|
-
constructor(name) {
|
|
99
|
-
super(`An environment variable cannot have an variadic value, but "${name}" is defined as variadic.`);
|
|
100
|
-
Object.setPrototypeOf(this, UnexpectedVariadicEnvVarValueError.prototype);
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
export class DefaultCommandNotFoundError extends CommandError {
|
|
104
|
-
constructor(name, commands) {
|
|
105
|
-
super(`Default command "${name}" not found.${didYouMeanCommand(name, commands)}`);
|
|
106
|
-
Object.setPrototypeOf(this, DefaultCommandNotFoundError.prototype);
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
export class UnknownCompletionCommandError extends CommandError {
|
|
110
|
-
constructor(name, commands) {
|
|
111
|
-
super(`Auto-completion failed. Unknown command "${name}".${didYouMeanCommand(name, commands)}`);
|
|
112
|
-
Object.setPrototypeOf(this, UnknownCompletionCommandError.prototype);
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
/* Validation errors. */
|
|
116
|
-
export class UnknownCommandError extends ValidationError {
|
|
117
|
-
constructor(name, commands, excluded) {
|
|
118
|
-
super(`Unknown command "${name}".${didYouMeanCommand(name, commands, excluded)}`);
|
|
119
|
-
Object.setPrototypeOf(this, UnknownCommandError.prototype);
|
|
120
|
-
}
|
|
121
|
-
}
|
|
122
|
-
export class NoArgumentsAllowedError extends ValidationError {
|
|
123
|
-
constructor(name) {
|
|
124
|
-
super(`No arguments allowed for command "${name}".`);
|
|
125
|
-
Object.setPrototypeOf(this, NoArgumentsAllowedError.prototype);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
export class TooManyArgumentsError extends ValidationError {
|
|
129
|
-
constructor(args) {
|
|
130
|
-
super(`Too many arguments: ${args.join(" ")}`);
|
|
131
|
-
Object.setPrototypeOf(this, TooManyArgumentsError.prototype);
|
|
132
|
-
}
|
|
133
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|
|
@@ -1,141 +0,0 @@
|
|
|
1
|
-
import { UnexpectedArgumentAfterVariadicArgumentError, UnexpectedRequiredArgumentError, } from "../../flags/1.1.0/mod.js";
|
|
2
|
-
import { closestString } from "../../../@std/text/1.0.18/closest_string.js";
|
|
3
|
-
export function getFlag(name) {
|
|
4
|
-
if (name.startsWith("-")) {
|
|
5
|
-
return name;
|
|
6
|
-
}
|
|
7
|
-
if (name.length > 1) {
|
|
8
|
-
return `--${name}`;
|
|
9
|
-
}
|
|
10
|
-
return `-${name}`;
|
|
11
|
-
}
|
|
12
|
-
export function didYouMean(message, type, types) {
|
|
13
|
-
const match = types.length
|
|
14
|
-
? closestString(type, types)
|
|
15
|
-
: undefined;
|
|
16
|
-
return match ? `${message} "${match}"?` : "";
|
|
17
|
-
}
|
|
18
|
-
export function didYouMeanCommand(command, commands, excludes = []) {
|
|
19
|
-
const commandNames = commands
|
|
20
|
-
.map((command) => command.getName())
|
|
21
|
-
.filter((command) => !excludes.includes(command));
|
|
22
|
-
return didYouMean(" Did you mean command", command, commandNames);
|
|
23
|
-
}
|
|
24
|
-
const ARGUMENT_REGEX = /^[<\[].+[\]>]$/;
|
|
25
|
-
const ARGUMENT_DETAILS_REGEX = /[<\[:>\]]/;
|
|
26
|
-
/**
|
|
27
|
-
* Split options and arguments.
|
|
28
|
-
* @param args Arguments definition: `--color, -c <color1:string> <color2:string>`
|
|
29
|
-
*
|
|
30
|
-
* For example: `-c, --color <color1:string> <color2:string>`
|
|
31
|
-
*
|
|
32
|
-
* Will result in:
|
|
33
|
-
* ```json
|
|
34
|
-
* {
|
|
35
|
-
* flags: [ "-c", "--color" ],
|
|
36
|
-
* typeDefinition: "<color1:string> <color2:string>",
|
|
37
|
-
* }
|
|
38
|
-
* ```
|
|
39
|
-
*/
|
|
40
|
-
export function splitArguments(args) {
|
|
41
|
-
const parts = args.trim().split(/[, =] */g);
|
|
42
|
-
const typeParts = [];
|
|
43
|
-
while (parts[parts.length - 1] &&
|
|
44
|
-
ARGUMENT_REGEX.test(parts[parts.length - 1])) {
|
|
45
|
-
typeParts.unshift(parts.pop());
|
|
46
|
-
}
|
|
47
|
-
const typeDefinition = typeParts.join(" ");
|
|
48
|
-
return { flags: parts, typeDefinition, equalsSign: args.includes("=") };
|
|
49
|
-
}
|
|
50
|
-
export function parseArgumentsDefinition(argsDefinition, validate = true, all) {
|
|
51
|
-
const argumentDetails = [];
|
|
52
|
-
let hasOptional = false;
|
|
53
|
-
let hasVariadic = false;
|
|
54
|
-
const parts = Array.isArray(argsDefinition)
|
|
55
|
-
? argsDefinition
|
|
56
|
-
: argsDefinition.split(/ +/);
|
|
57
|
-
for (let argDef of parts) {
|
|
58
|
-
if (typeof argDef === "string") {
|
|
59
|
-
argDef = { arg: argDef };
|
|
60
|
-
}
|
|
61
|
-
if (validate && hasVariadic) {
|
|
62
|
-
throw new UnexpectedArgumentAfterVariadicArgumentError(argDef.arg);
|
|
63
|
-
}
|
|
64
|
-
const parts = argDef.arg.split(ARGUMENT_DETAILS_REGEX);
|
|
65
|
-
if (!parts[1]) {
|
|
66
|
-
if (all) {
|
|
67
|
-
argumentDetails.push(parts[0]);
|
|
68
|
-
}
|
|
69
|
-
continue;
|
|
70
|
-
}
|
|
71
|
-
const type = parts[2] || "string";
|
|
72
|
-
const details = {
|
|
73
|
-
description: argDef.description,
|
|
74
|
-
optional: argDef.arg[0] === "[",
|
|
75
|
-
raw: argDef.arg,
|
|
76
|
-
name: parts[1],
|
|
77
|
-
action: parts[3] || type,
|
|
78
|
-
variadic: false,
|
|
79
|
-
list: type ? argDef.arg.indexOf(type + "[]") !== -1 : false,
|
|
80
|
-
type,
|
|
81
|
-
};
|
|
82
|
-
if (argDef.value !== undefined) {
|
|
83
|
-
details.value = argDef.value;
|
|
84
|
-
}
|
|
85
|
-
if (argDef.default !== undefined) {
|
|
86
|
-
details.default = argDef.default;
|
|
87
|
-
}
|
|
88
|
-
if (argDef.separator !== undefined) {
|
|
89
|
-
details.separator = argDef.separator;
|
|
90
|
-
}
|
|
91
|
-
if (validate && !details.optional && hasOptional) {
|
|
92
|
-
throw new UnexpectedRequiredArgumentError(details.name);
|
|
93
|
-
}
|
|
94
|
-
if (argDef.arg[0] === "[") {
|
|
95
|
-
hasOptional = true;
|
|
96
|
-
}
|
|
97
|
-
if (details.name.length > 3) {
|
|
98
|
-
const istVariadicLeft = details.name.slice(0, 3) === "...";
|
|
99
|
-
const istVariadicRight = details.name.slice(-3) === "...";
|
|
100
|
-
hasVariadic = details.variadic = istVariadicLeft || istVariadicRight;
|
|
101
|
-
if (istVariadicLeft) {
|
|
102
|
-
details.name = details.name.slice(3);
|
|
103
|
-
}
|
|
104
|
-
else if (istVariadicRight) {
|
|
105
|
-
details.name = details.name.slice(0, -3);
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
argumentDetails.push(details);
|
|
109
|
-
}
|
|
110
|
-
return argumentDetails;
|
|
111
|
-
}
|
|
112
|
-
export function dedent(str) {
|
|
113
|
-
const lines = str.split(/\r?\n|\r/g);
|
|
114
|
-
let text = "";
|
|
115
|
-
let indent = 0;
|
|
116
|
-
for (const line of lines) {
|
|
117
|
-
if (text || line.trim()) {
|
|
118
|
-
if (!text) {
|
|
119
|
-
text = line.trimStart();
|
|
120
|
-
indent = line.length - text.length;
|
|
121
|
-
}
|
|
122
|
-
else {
|
|
123
|
-
text += line.slice(indent);
|
|
124
|
-
}
|
|
125
|
-
text += "\n";
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
return text.trimEnd();
|
|
129
|
-
}
|
|
130
|
-
export function getDescription(description, short) {
|
|
131
|
-
return short
|
|
132
|
-
? description.trim().split("\n", 1)[0].trim()
|
|
133
|
-
: dedent(description);
|
|
134
|
-
}
|
|
135
|
-
/** Convert underscore case string to camel case. */
|
|
136
|
-
export function underscoreToCamelCase(str) {
|
|
137
|
-
return str
|
|
138
|
-
.replace(/([a-z])([A-Z])/g, "$1_$2")
|
|
139
|
-
.toLowerCase()
|
|
140
|
-
.replace(/_([a-z])/g, (g) => g[1].toUpperCase());
|
|
141
|
-
}
|