zod-args-parser 2.0.0-alpha.0 → 2.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +525 -588
- package/lib/cjs/autocomplete-scripts/bash-autocomplete-script.cjs +2 -0
- package/lib/cjs/autocomplete-scripts/bash-autocomplete-script.cjs.map +1 -0
- package/lib/cjs/autocomplete-scripts/powershell-autocomplete-script.cjs +2 -0
- package/lib/cjs/autocomplete-scripts/powershell-autocomplete-script.cjs.map +1 -0
- package/lib/cjs/autocomplete-scripts/zsh-autocomplete-script.cjs +42 -0
- package/lib/cjs/autocomplete-scripts/zsh-autocomplete-script.cjs.map +1 -0
- package/lib/cjs/coerce/coerce-methods.cjs +2 -0
- package/lib/cjs/coerce/coerce-methods.cjs.map +1 -0
- package/lib/cjs/coerce/string-to-array.cjs +2 -0
- package/lib/cjs/coerce/string-to-array.cjs.map +1 -0
- package/lib/cjs/coerce/string-to-primitive.cjs +2 -0
- package/lib/cjs/coerce/string-to-primitive.cjs.map +1 -0
- package/lib/cjs/coerce/string-to-set.cjs +2 -0
- package/lib/cjs/coerce/string-to-set.cjs.map +1 -0
- package/lib/cjs/definitions/define-arguments.cjs +2 -0
- package/lib/cjs/definitions/define-arguments.cjs.map +1 -0
- package/lib/cjs/definitions/define-cli.cjs +2 -0
- package/lib/cjs/definitions/define-cli.cjs.map +1 -0
- package/lib/cjs/definitions/define-options.cjs +2 -0
- package/lib/cjs/definitions/define-options.cjs.map +1 -0
- package/lib/cjs/definitions/define-subcommand.cjs +2 -0
- package/lib/cjs/definitions/define-subcommand.cjs.map +1 -0
- package/lib/cjs/definitions/validate-cli-definition.cjs +2 -0
- package/lib/cjs/definitions/validate-cli-definition.cjs.map +1 -0
- package/lib/cjs/help-message/format-arguments.cjs +2 -0
- package/lib/cjs/help-message/format-arguments.cjs.map +1 -0
- package/lib/cjs/help-message/format-options.cjs +2 -0
- package/lib/cjs/help-message/format-options.cjs.map +1 -0
- package/lib/cjs/help-message/format-subcommands.cjs +2 -0
- package/lib/cjs/help-message/format-subcommands.cjs.map +1 -0
- package/lib/cjs/help-message/generate-for-cli.cjs +2 -0
- package/lib/cjs/help-message/generate-for-cli.cjs.map +1 -0
- package/lib/cjs/help-message/generate-for-subcommand.cjs +2 -0
- package/lib/cjs/help-message/generate-for-subcommand.cjs.map +1 -0
- package/lib/cjs/help-message/print-help.cjs +2 -0
- package/lib/cjs/help-message/print-help.cjs.map +1 -0
- package/lib/cjs/help-message/set-defaults.cjs +2 -0
- package/lib/cjs/help-message/set-defaults.cjs.map +1 -0
- package/lib/cjs/help-message/styles.cjs +2 -0
- package/lib/cjs/help-message/styles.cjs.map +1 -0
- package/lib/cjs/help-message/terminal-markdown.cjs +2 -0
- package/lib/cjs/help-message/terminal-markdown.cjs.map +1 -0
- package/lib/cjs/index.cjs +2 -0
- package/lib/cjs/index.cjs.map +1 -0
- package/lib/cjs/markdown/generate-markdown.cjs +2 -0
- package/lib/cjs/markdown/generate-markdown.cjs.map +1 -0
- package/lib/cjs/metadata/arguments-metadata.cjs +2 -0
- package/lib/cjs/metadata/arguments-metadata.cjs.map +1 -0
- package/lib/cjs/metadata/cli-metadata.cjs +2 -0
- package/lib/cjs/metadata/cli-metadata.cjs.map +1 -0
- package/lib/cjs/metadata/options-metadata.cjs +2 -0
- package/lib/cjs/metadata/options-metadata.cjs.map +1 -0
- package/lib/cjs/metadata/subcommands-metadata.cjs +2 -0
- package/lib/cjs/metadata/subcommands-metadata.cjs.map +1 -0
- package/lib/cjs/parse/context/cli-context-builder.cjs +2 -0
- package/lib/cjs/parse/context/cli-context-builder.cjs.map +1 -0
- package/lib/cjs/parse/context/object-context-builder.cjs +2 -0
- package/lib/cjs/parse/context/object-context-builder.cjs.map +1 -0
- package/lib/cjs/parse/parser-utilities.cjs +2 -0
- package/lib/cjs/parse/parser-utilities.cjs.map +1 -0
- package/lib/cjs/parse/safe-parse.cjs +2 -0
- package/lib/cjs/parse/safe-parse.cjs.map +1 -0
- package/lib/cjs/parse/validation/validate-context.cjs +2 -0
- package/lib/cjs/parse/validation/validate-context.cjs.map +1 -0
- package/lib/cjs/parse/validation/validators/arguments.cjs +2 -0
- package/lib/cjs/parse/validation/validators/arguments.cjs.map +1 -0
- package/lib/cjs/parse/validation/validators/conflict.cjs +2 -0
- package/lib/cjs/parse/validation/validators/conflict.cjs.map +1 -0
- package/lib/cjs/parse/validation/validators/exclusive.cjs +2 -0
- package/lib/cjs/parse/validation/validators/exclusive.cjs.map +1 -0
- package/lib/cjs/parse/validation/validators/explicitly-passed.cjs +2 -0
- package/lib/cjs/parse/validation/validators/explicitly-passed.cjs.map +1 -0
- package/lib/cjs/parse/validation/validators/options.cjs +2 -0
- package/lib/cjs/parse/validation/validators/options.cjs.map +1 -0
- package/lib/cjs/parse/validation/validators/requires.cjs +2 -0
- package/lib/cjs/parse/validation/validators/requires.cjs.map +1 -0
- package/lib/cjs/utilities.cjs +2 -0
- package/lib/cjs/utilities.cjs.map +1 -0
- package/lib/esm/autocomplete-scripts/bash-autocomplete-script.js +2 -0
- package/lib/esm/autocomplete-scripts/bash-autocomplete-script.js.map +1 -0
- package/lib/esm/autocomplete-scripts/powershell-autocomplete-script.js +2 -0
- package/lib/esm/autocomplete-scripts/powershell-autocomplete-script.js.map +1 -0
- package/lib/esm/autocomplete-scripts/zsh-autocomplete-script.js +42 -0
- package/lib/esm/autocomplete-scripts/zsh-autocomplete-script.js.map +1 -0
- package/lib/esm/coerce/coerce-methods.js +2 -0
- package/lib/esm/coerce/coerce-methods.js.map +1 -0
- package/lib/esm/coerce/string-to-array.js +2 -0
- package/lib/esm/coerce/string-to-array.js.map +1 -0
- package/lib/esm/coerce/string-to-primitive.js +2 -0
- package/lib/esm/coerce/string-to-primitive.js.map +1 -0
- package/lib/esm/coerce/string-to-set.js +2 -0
- package/lib/esm/coerce/string-to-set.js.map +1 -0
- package/lib/esm/definitions/define-arguments.js +2 -0
- package/lib/esm/definitions/define-arguments.js.map +1 -0
- package/lib/esm/definitions/define-cli.js +2 -0
- package/lib/esm/definitions/define-cli.js.map +1 -0
- package/lib/esm/definitions/define-options.js +2 -0
- package/lib/esm/definitions/define-options.js.map +1 -0
- package/lib/esm/definitions/define-subcommand.js +2 -0
- package/lib/esm/definitions/define-subcommand.js.map +1 -0
- package/lib/esm/definitions/validate-cli-definition.js +2 -0
- package/lib/esm/definitions/validate-cli-definition.js.map +1 -0
- package/lib/esm/help-message/format-arguments.js +2 -0
- package/lib/esm/help-message/format-arguments.js.map +1 -0
- package/lib/esm/help-message/format-options.js +2 -0
- package/lib/esm/help-message/format-options.js.map +1 -0
- package/lib/esm/help-message/format-subcommands.js +2 -0
- package/lib/esm/help-message/format-subcommands.js.map +1 -0
- package/lib/esm/help-message/generate-for-cli.js +2 -0
- package/lib/esm/help-message/generate-for-cli.js.map +1 -0
- package/lib/esm/help-message/generate-for-subcommand.js +2 -0
- package/lib/esm/help-message/generate-for-subcommand.js.map +1 -0
- package/lib/esm/help-message/print-help.js +2 -0
- package/lib/esm/help-message/print-help.js.map +1 -0
- package/lib/esm/help-message/set-defaults.js +2 -0
- package/lib/esm/help-message/set-defaults.js.map +1 -0
- package/lib/esm/help-message/styles.js +2 -0
- package/lib/esm/help-message/styles.js.map +1 -0
- package/lib/esm/help-message/terminal-markdown.js +2 -0
- package/lib/esm/help-message/terminal-markdown.js.map +1 -0
- package/lib/esm/index.js +2 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/markdown/generate-markdown.js +2 -0
- package/lib/esm/markdown/generate-markdown.js.map +1 -0
- package/lib/esm/metadata/arguments-metadata.js +2 -0
- package/lib/esm/metadata/arguments-metadata.js.map +1 -0
- package/lib/esm/metadata/cli-metadata.js +2 -0
- package/lib/esm/metadata/cli-metadata.js.map +1 -0
- package/lib/esm/metadata/options-metadata.js +2 -0
- package/lib/esm/metadata/options-metadata.js.map +1 -0
- package/lib/esm/metadata/subcommands-metadata.js +2 -0
- package/lib/esm/metadata/subcommands-metadata.js.map +1 -0
- package/lib/esm/parse/context/cli-context-builder.js +2 -0
- package/lib/esm/parse/context/cli-context-builder.js.map +1 -0
- package/lib/esm/parse/context/object-context-builder.js +2 -0
- package/lib/esm/parse/context/object-context-builder.js.map +1 -0
- package/lib/esm/parse/parser-utilities.js +2 -0
- package/lib/esm/parse/parser-utilities.js.map +1 -0
- package/lib/esm/parse/safe-parse.js +2 -0
- package/lib/esm/parse/safe-parse.js.map +1 -0
- package/lib/esm/parse/validation/validate-context.js +2 -0
- package/lib/esm/parse/validation/validate-context.js.map +1 -0
- package/lib/esm/parse/validation/validators/arguments.js +2 -0
- package/lib/esm/parse/validation/validators/arguments.js.map +1 -0
- package/lib/esm/parse/validation/validators/conflict.js +2 -0
- package/lib/esm/parse/validation/validators/conflict.js.map +1 -0
- package/lib/esm/parse/validation/validators/exclusive.js +2 -0
- package/lib/esm/parse/validation/validators/exclusive.js.map +1 -0
- package/lib/esm/parse/validation/validators/explicitly-passed.js +2 -0
- package/lib/esm/parse/validation/validators/explicitly-passed.js.map +1 -0
- package/lib/esm/parse/validation/validators/options.js +2 -0
- package/lib/esm/parse/validation/validators/options.js.map +1 -0
- package/lib/esm/parse/validation/validators/requires.js +2 -0
- package/lib/esm/parse/validation/validators/requires.js.map +1 -0
- package/lib/esm/utilities.js +2 -0
- package/lib/esm/utilities.js.map +1 -0
- package/lib/iife/index.js +2 -0
- package/lib/iife/index.js.map +1 -0
- package/lib/mjs/autocomplete-scripts/bash-autocomplete-script.mjs +2 -0
- package/lib/mjs/autocomplete-scripts/bash-autocomplete-script.mjs.map +1 -0
- package/lib/mjs/autocomplete-scripts/powershell-autocomplete-script.mjs +2 -0
- package/lib/mjs/autocomplete-scripts/powershell-autocomplete-script.mjs.map +1 -0
- package/lib/mjs/autocomplete-scripts/zsh-autocomplete-script.mjs +42 -0
- package/lib/mjs/autocomplete-scripts/zsh-autocomplete-script.mjs.map +1 -0
- package/lib/mjs/coerce/coerce-methods.mjs +2 -0
- package/lib/mjs/coerce/coerce-methods.mjs.map +1 -0
- package/lib/mjs/coerce/string-to-array.mjs +2 -0
- package/lib/mjs/coerce/string-to-array.mjs.map +1 -0
- package/lib/mjs/coerce/string-to-primitive.mjs +2 -0
- package/lib/mjs/coerce/string-to-primitive.mjs.map +1 -0
- package/lib/mjs/coerce/string-to-set.mjs +2 -0
- package/lib/mjs/coerce/string-to-set.mjs.map +1 -0
- package/lib/mjs/definitions/define-arguments.mjs +2 -0
- package/lib/mjs/definitions/define-arguments.mjs.map +1 -0
- package/lib/mjs/definitions/define-cli.mjs +2 -0
- package/lib/mjs/definitions/define-cli.mjs.map +1 -0
- package/lib/mjs/definitions/define-options.mjs +2 -0
- package/lib/mjs/definitions/define-options.mjs.map +1 -0
- package/lib/mjs/definitions/define-subcommand.mjs +2 -0
- package/lib/mjs/definitions/define-subcommand.mjs.map +1 -0
- package/lib/mjs/definitions/validate-cli-definition.mjs +2 -0
- package/lib/mjs/definitions/validate-cli-definition.mjs.map +1 -0
- package/lib/mjs/help-message/format-arguments.mjs +2 -0
- package/lib/mjs/help-message/format-arguments.mjs.map +1 -0
- package/lib/mjs/help-message/format-options.mjs +2 -0
- package/lib/mjs/help-message/format-options.mjs.map +1 -0
- package/lib/mjs/help-message/format-subcommands.mjs +2 -0
- package/lib/mjs/help-message/format-subcommands.mjs.map +1 -0
- package/lib/mjs/help-message/generate-for-cli.mjs +2 -0
- package/lib/mjs/help-message/generate-for-cli.mjs.map +1 -0
- package/lib/mjs/help-message/generate-for-subcommand.mjs +2 -0
- package/lib/mjs/help-message/generate-for-subcommand.mjs.map +1 -0
- package/lib/mjs/help-message/print-help.mjs +2 -0
- package/lib/mjs/help-message/print-help.mjs.map +1 -0
- package/lib/mjs/help-message/set-defaults.mjs +2 -0
- package/lib/mjs/help-message/set-defaults.mjs.map +1 -0
- package/lib/mjs/help-message/styles.mjs +2 -0
- package/lib/mjs/help-message/styles.mjs.map +1 -0
- package/lib/mjs/help-message/terminal-markdown.mjs +2 -0
- package/lib/mjs/help-message/terminal-markdown.mjs.map +1 -0
- package/lib/mjs/index.mjs +2 -0
- package/lib/mjs/index.mjs.map +1 -0
- package/lib/mjs/markdown/generate-markdown.mjs +2 -0
- package/lib/mjs/markdown/generate-markdown.mjs.map +1 -0
- package/lib/mjs/metadata/arguments-metadata.mjs +2 -0
- package/lib/mjs/metadata/arguments-metadata.mjs.map +1 -0
- package/lib/mjs/metadata/cli-metadata.mjs +2 -0
- package/lib/mjs/metadata/cli-metadata.mjs.map +1 -0
- package/lib/mjs/metadata/options-metadata.mjs +2 -0
- package/lib/mjs/metadata/options-metadata.mjs.map +1 -0
- package/lib/mjs/metadata/subcommands-metadata.mjs +2 -0
- package/lib/mjs/metadata/subcommands-metadata.mjs.map +1 -0
- package/lib/mjs/parse/context/cli-context-builder.mjs +2 -0
- package/lib/mjs/parse/context/cli-context-builder.mjs.map +1 -0
- package/lib/mjs/parse/context/object-context-builder.mjs +2 -0
- package/lib/mjs/parse/context/object-context-builder.mjs.map +1 -0
- package/lib/mjs/parse/parser-utilities.mjs +2 -0
- package/lib/mjs/parse/parser-utilities.mjs.map +1 -0
- package/lib/mjs/parse/safe-parse.mjs +2 -0
- package/lib/mjs/parse/safe-parse.mjs.map +1 -0
- package/lib/mjs/parse/validation/validate-context.mjs +2 -0
- package/lib/mjs/parse/validation/validate-context.mjs.map +1 -0
- package/lib/mjs/parse/validation/validators/arguments.mjs +2 -0
- package/lib/mjs/parse/validation/validators/arguments.mjs.map +1 -0
- package/lib/mjs/parse/validation/validators/conflict.mjs +2 -0
- package/lib/mjs/parse/validation/validators/conflict.mjs.map +1 -0
- package/lib/mjs/parse/validation/validators/exclusive.mjs +2 -0
- package/lib/mjs/parse/validation/validators/exclusive.mjs.map +1 -0
- package/lib/mjs/parse/validation/validators/explicitly-passed.mjs +2 -0
- package/lib/mjs/parse/validation/validators/explicitly-passed.mjs.map +1 -0
- package/lib/mjs/parse/validation/validators/options.mjs +2 -0
- package/lib/mjs/parse/validation/validators/options.mjs.map +1 -0
- package/lib/mjs/parse/validation/validators/requires.mjs +2 -0
- package/lib/mjs/parse/validation/validators/requires.mjs.map +1 -0
- package/lib/mjs/utilities.mjs +2 -0
- package/lib/mjs/utilities.mjs.map +1 -0
- package/lib/typescript/autocomplete-scripts/bash-autocomplete-script.d.ts +2 -2
- package/lib/typescript/autocomplete-scripts/bash-autocomplete-script.d.ts.map +1 -1
- package/lib/typescript/autocomplete-scripts/powershell-autocomplete-script.d.ts +2 -2
- package/lib/typescript/autocomplete-scripts/powershell-autocomplete-script.d.ts.map +1 -1
- package/lib/typescript/autocomplete-scripts/zsh-autocomplete-script.d.ts +2 -2
- package/lib/typescript/autocomplete-scripts/zsh-autocomplete-script.d.ts.map +1 -1
- package/lib/typescript/coerce/coerce-methods.d.ts +20 -0
- package/lib/typescript/coerce/coerce-methods.d.ts.map +1 -0
- package/lib/typescript/coerce/string-to-array.d.ts +6 -0
- package/lib/typescript/coerce/string-to-array.d.ts.map +1 -0
- package/lib/typescript/coerce/string-to-primitive.d.ts +5 -0
- package/lib/typescript/coerce/string-to-primitive.d.ts.map +1 -0
- package/lib/typescript/coerce/string-to-set.d.ts +6 -0
- package/lib/typescript/coerce/string-to-set.d.ts.map +1 -0
- package/lib/typescript/definitions/define-arguments.d.ts +7 -0
- package/lib/typescript/definitions/define-arguments.d.ts.map +1 -0
- package/lib/typescript/definitions/define-cli.d.ts +24 -0
- package/lib/typescript/definitions/define-cli.d.ts.map +1 -0
- package/lib/typescript/definitions/define-options.d.ts +7 -0
- package/lib/typescript/definitions/define-options.d.ts.map +1 -0
- package/lib/typescript/definitions/define-subcommand.d.ts +17 -0
- package/lib/typescript/definitions/define-subcommand.d.ts.map +1 -0
- package/lib/typescript/definitions/validate-cli-definition.d.ts +4 -0
- package/lib/typescript/definitions/validate-cli-definition.d.ts.map +1 -0
- package/lib/typescript/help-message/format-arguments.d.ts +3 -3
- package/lib/typescript/help-message/format-arguments.d.ts.map +1 -1
- package/lib/typescript/help-message/format-options.d.ts +3 -3
- package/lib/typescript/help-message/format-options.d.ts.map +1 -1
- package/lib/typescript/help-message/format-subcommands.d.ts +3 -3
- package/lib/typescript/help-message/format-subcommands.d.ts.map +1 -1
- package/lib/typescript/help-message/generate-for-cli.d.ts +8 -0
- package/lib/typescript/help-message/generate-for-cli.d.ts.map +1 -0
- package/lib/typescript/help-message/generate-for-subcommand.d.ts +4 -0
- package/lib/typescript/help-message/generate-for-subcommand.d.ts.map +1 -0
- package/lib/typescript/help-message/print-help.d.ts +5 -0
- package/lib/typescript/help-message/print-help.d.ts.map +1 -0
- package/lib/typescript/help-message/set-defaults.d.ts +4 -0
- package/lib/typescript/help-message/set-defaults.d.ts.map +1 -0
- package/lib/typescript/help-message/styles.d.ts +30 -106
- package/lib/typescript/help-message/styles.d.ts.map +1 -1
- package/lib/typescript/help-message/terminal-markdown.d.ts +3 -0
- package/lib/typescript/help-message/terminal-markdown.d.ts.map +1 -0
- package/lib/typescript/index.d.ts +23 -35
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/markdown/generate-markdown.d.ts +2 -2
- package/lib/typescript/markdown/generate-markdown.d.ts.map +1 -1
- package/lib/typescript/metadata/arguments-metadata.d.ts +4 -0
- package/lib/typescript/metadata/arguments-metadata.d.ts.map +1 -0
- package/lib/typescript/metadata/cli-metadata.d.ts +4 -0
- package/lib/typescript/metadata/cli-metadata.d.ts.map +1 -0
- package/lib/typescript/metadata/options-metadata.d.ts +4 -0
- package/lib/typescript/metadata/options-metadata.d.ts.map +1 -0
- package/lib/typescript/metadata/subcommands-metadata.d.ts +4 -0
- package/lib/typescript/metadata/subcommands-metadata.d.ts.map +1 -0
- package/lib/typescript/parse/context/cli-context-builder.d.ts +9 -0
- package/lib/typescript/parse/context/cli-context-builder.d.ts.map +1 -0
- package/lib/typescript/parse/context/object-context-builder.d.ts +6 -0
- package/lib/typescript/parse/context/object-context-builder.d.ts.map +1 -0
- package/lib/typescript/{parser/parse/parser-helpers.d.ts → parse/parser-utilities.d.ts} +18 -9
- package/lib/typescript/parse/parser-utilities.d.ts.map +1 -0
- package/lib/typescript/parse/safe-parse.d.ts +5 -0
- package/lib/typescript/parse/safe-parse.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validate-context.d.ts +6 -0
- package/lib/typescript/parse/validation/validate-context.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validators/arguments.d.ts +12 -0
- package/lib/typescript/parse/validation/validators/arguments.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validators/conflict.d.ts +16 -0
- package/lib/typescript/parse/validation/validators/conflict.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validators/exclusive.d.ts +16 -0
- package/lib/typescript/parse/validation/validators/exclusive.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validators/explicitly-passed.d.ts +5 -0
- package/lib/typescript/parse/validation/validators/explicitly-passed.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validators/options.d.ts +12 -0
- package/lib/typescript/parse/validation/validators/options.d.ts.map +1 -0
- package/lib/typescript/parse/validation/validators/requires.d.ts +18 -0
- package/lib/typescript/parse/validation/validators/requires.d.ts.map +1 -0
- package/lib/typescript/types/context-types.d.ts +135 -0
- package/lib/typescript/types/context-types.d.ts.map +1 -0
- package/lib/typescript/types/definitions-types.d.ts +294 -0
- package/lib/typescript/types/definitions-types.d.ts.map +1 -0
- package/lib/typescript/types/help-message-types.d.ts +134 -0
- package/lib/typescript/types/help-message-types.d.ts.map +1 -0
- package/lib/typescript/types/io-types.d.ts +96 -0
- package/lib/typescript/types/io-types.d.ts.map +1 -0
- package/lib/typescript/types/metadata-types.d.ts +75 -0
- package/lib/typescript/types/metadata-types.d.ts.map +1 -0
- package/lib/typescript/types/schema-types.d.ts +6 -0
- package/lib/typescript/types/schema-types.d.ts.map +1 -0
- package/lib/typescript/types/types.d.ts +61 -0
- package/lib/typescript/types/types.d.ts.map +1 -0
- package/lib/typescript/types/utilities-types.d.ts +17 -0
- package/lib/typescript/types/utilities-types.d.ts.map +1 -0
- package/lib/typescript/utilities.d.ts +24 -10
- package/lib/typescript/utilities.d.ts.map +1 -1
- package/package.json +29 -26
- package/src/autocomplete-scripts/bash-autocomplete-script.ts +13 -9
- package/src/autocomplete-scripts/powershell-autocomplete-script.ts +21 -13
- package/src/autocomplete-scripts/zsh-autocomplete-script.ts +27 -23
- package/src/coerce/coerce-methods.ts +75 -0
- package/src/coerce/string-to-array.ts +18 -0
- package/src/coerce/string-to-primitive.ts +31 -0
- package/src/coerce/string-to-set.ts +15 -0
- package/src/definitions/define-arguments.ts +10 -0
- package/src/definitions/define-cli.ts +105 -0
- package/src/definitions/define-options.ts +12 -0
- package/src/definitions/define-subcommand.ts +57 -0
- package/src/definitions/validate-cli-definition.ts +331 -0
- package/src/help-message/format-arguments.ts +57 -33
- package/src/help-message/format-options.ts +59 -34
- package/src/help-message/format-subcommands.ts +43 -21
- package/src/help-message/generate-for-cli.ts +114 -0
- package/src/help-message/generate-for-subcommand.ts +32 -0
- package/src/help-message/print-help.ts +13 -0
- package/src/help-message/set-defaults.ts +34 -0
- package/src/help-message/styles.ts +148 -103
- package/src/help-message/terminal-markdown.ts +147 -0
- package/src/index.ts +28 -97
- package/src/markdown/generate-markdown.ts +47 -58
- package/src/metadata/arguments-metadata.ts +28 -0
- package/src/metadata/cli-metadata.ts +26 -0
- package/src/metadata/options-metadata.ts +38 -0
- package/src/metadata/subcommands-metadata.ts +35 -0
- package/src/parse/context/cli-context-builder.ts +246 -0
- package/src/parse/context/object-context-builder.ts +63 -0
- package/src/{parser/parse/parser-helpers.ts → parse/parser-utilities.ts} +46 -25
- package/src/parse/safe-parse.ts +76 -0
- package/src/parse/validation/validate-context.ts +23 -0
- package/src/parse/validation/validators/arguments.ts +59 -0
- package/src/parse/validation/validators/conflict.ts +68 -0
- package/src/parse/validation/validators/exclusive.ts +70 -0
- package/src/parse/validation/validators/explicitly-passed.ts +15 -0
- package/src/parse/validation/validators/options.ts +59 -0
- package/src/parse/validation/validators/requires.ts +82 -0
- package/src/types/context-types.ts +171 -0
- package/src/types/definitions-types.ts +340 -0
- package/src/types/help-message-types.ts +153 -0
- package/src/types/io-types.ts +131 -0
- package/src/types/metadata-types.ts +104 -0
- package/src/types/schema-types.ts +9 -0
- package/src/types/types.ts +72 -0
- package/src/types/utilities-types.ts +26 -0
- package/src/utilities.ts +200 -23
- package/lib/commonjs/autocomplete-scripts/bash-autocomplete-script.cjs +0 -42
- package/lib/commonjs/autocomplete-scripts/bash-autocomplete-script.cjs.map +0 -1
- package/lib/commonjs/autocomplete-scripts/powershell-autocomplete-script.cjs +0 -31
- package/lib/commonjs/autocomplete-scripts/powershell-autocomplete-script.cjs.map +0 -1
- package/lib/commonjs/autocomplete-scripts/zsh-autocomplete-script.cjs +0 -41
- package/lib/commonjs/autocomplete-scripts/zsh-autocomplete-script.cjs.map +0 -1
- package/lib/commonjs/help-message/format-arguments.cjs +0 -1
- package/lib/commonjs/help-message/format-arguments.cjs.map +0 -1
- package/lib/commonjs/help-message/format-cli.cjs +0 -1
- package/lib/commonjs/help-message/format-cli.cjs.map +0 -1
- package/lib/commonjs/help-message/format-options.cjs +0 -1
- package/lib/commonjs/help-message/format-options.cjs.map +0 -1
- package/lib/commonjs/help-message/format-subcommands.cjs +0 -1
- package/lib/commonjs/help-message/format-subcommands.cjs.map +0 -1
- package/lib/commonjs/help-message/styles.cjs +0 -1
- package/lib/commonjs/help-message/styles.cjs.map +0 -1
- package/lib/commonjs/index.cjs +0 -1
- package/lib/commonjs/index.cjs.map +0 -1
- package/lib/commonjs/markdown/generate-markdown.cjs +0 -1
- package/lib/commonjs/markdown/generate-markdown.cjs.map +0 -1
- package/lib/commonjs/metadata/get-arguments-metadata.cjs +0 -1
- package/lib/commonjs/metadata/get-arguments-metadata.cjs.map +0 -1
- package/lib/commonjs/metadata/get-cli-metadata.cjs +0 -1
- package/lib/commonjs/metadata/get-cli-metadata.cjs.map +0 -1
- package/lib/commonjs/metadata/get-options-metadata.cjs +0 -1
- package/lib/commonjs/metadata/get-options-metadata.cjs.map +0 -1
- package/lib/commonjs/metadata/get-subcommands-metadata.cjs +0 -1
- package/lib/commonjs/metadata/get-subcommands-metadata.cjs.map +0 -1
- package/lib/commonjs/parser/parse/parse.cjs +0 -1
- package/lib/commonjs/parser/parse/parse.cjs.map +0 -1
- package/lib/commonjs/parser/parse/parser-helpers.cjs +0 -1
- package/lib/commonjs/parser/parse/parser-helpers.cjs.map +0 -1
- package/lib/commonjs/parser/safe-parse.cjs +0 -1
- package/lib/commonjs/parser/safe-parse.cjs.map +0 -1
- package/lib/commonjs/parser/unsafe-parse.cjs +0 -1
- package/lib/commonjs/parser/unsafe-parse.cjs.map +0 -1
- package/lib/commonjs/parser/validate/validate-type.cjs +0 -1
- package/lib/commonjs/parser/validate/validate-type.cjs.map +0 -1
- package/lib/commonjs/parser/validate/validate.cjs +0 -1
- package/lib/commonjs/parser/validate/validate.cjs.map +0 -1
- package/lib/commonjs/utilities.cjs +0 -1
- package/lib/commonjs/utilities.cjs.map +0 -1
- package/lib/commonjs/zod-utilities.cjs +0 -1
- package/lib/commonjs/zod-utilities.cjs.map +0 -1
- package/lib/module/autocomplete-scripts/bash-autocomplete-script.mjs +0 -42
- package/lib/module/autocomplete-scripts/bash-autocomplete-script.mjs.map +0 -1
- package/lib/module/autocomplete-scripts/powershell-autocomplete-script.mjs +0 -31
- package/lib/module/autocomplete-scripts/powershell-autocomplete-script.mjs.map +0 -1
- package/lib/module/autocomplete-scripts/zsh-autocomplete-script.mjs +0 -41
- package/lib/module/autocomplete-scripts/zsh-autocomplete-script.mjs.map +0 -1
- package/lib/module/help-message/format-arguments.mjs +0 -1
- package/lib/module/help-message/format-arguments.mjs.map +0 -1
- package/lib/module/help-message/format-cli.mjs +0 -1
- package/lib/module/help-message/format-cli.mjs.map +0 -1
- package/lib/module/help-message/format-options.mjs +0 -1
- package/lib/module/help-message/format-options.mjs.map +0 -1
- package/lib/module/help-message/format-subcommands.mjs +0 -1
- package/lib/module/help-message/format-subcommands.mjs.map +0 -1
- package/lib/module/help-message/styles.mjs +0 -1
- package/lib/module/help-message/styles.mjs.map +0 -1
- package/lib/module/index.mjs +0 -1
- package/lib/module/index.mjs.map +0 -1
- package/lib/module/markdown/generate-markdown.mjs +0 -1
- package/lib/module/markdown/generate-markdown.mjs.map +0 -1
- package/lib/module/metadata/get-arguments-metadata.mjs +0 -1
- package/lib/module/metadata/get-arguments-metadata.mjs.map +0 -1
- package/lib/module/metadata/get-cli-metadata.mjs +0 -1
- package/lib/module/metadata/get-cli-metadata.mjs.map +0 -1
- package/lib/module/metadata/get-options-metadata.mjs +0 -1
- package/lib/module/metadata/get-options-metadata.mjs.map +0 -1
- package/lib/module/metadata/get-subcommands-metadata.mjs +0 -1
- package/lib/module/metadata/get-subcommands-metadata.mjs.map +0 -1
- package/lib/module/parser/parse/parse.mjs +0 -1
- package/lib/module/parser/parse/parse.mjs.map +0 -1
- package/lib/module/parser/parse/parser-helpers.mjs +0 -1
- package/lib/module/parser/parse/parser-helpers.mjs.map +0 -1
- package/lib/module/parser/safe-parse.mjs +0 -1
- package/lib/module/parser/safe-parse.mjs.map +0 -1
- package/lib/module/parser/unsafe-parse.mjs +0 -1
- package/lib/module/parser/unsafe-parse.mjs.map +0 -1
- package/lib/module/parser/validate/validate-type.mjs +0 -1
- package/lib/module/parser/validate/validate-type.mjs.map +0 -1
- package/lib/module/parser/validate/validate.mjs +0 -1
- package/lib/module/parser/validate/validate.mjs.map +0 -1
- package/lib/module/utilities.mjs +0 -1
- package/lib/module/utilities.mjs.map +0 -1
- package/lib/module/zod-utilities.mjs +0 -1
- package/lib/module/zod-utilities.mjs.map +0 -1
- package/lib/typescript/help-message/format-cli.d.ts +0 -6
- package/lib/typescript/help-message/format-cli.d.ts.map +0 -1
- package/lib/typescript/metadata/get-arguments-metadata.d.ts +0 -4
- package/lib/typescript/metadata/get-arguments-metadata.d.ts.map +0 -1
- package/lib/typescript/metadata/get-cli-metadata.d.ts +0 -4
- package/lib/typescript/metadata/get-cli-metadata.d.ts.map +0 -1
- package/lib/typescript/metadata/get-options-metadata.d.ts +0 -4
- package/lib/typescript/metadata/get-options-metadata.d.ts.map +0 -1
- package/lib/typescript/metadata/get-subcommands-metadata.d.ts +0 -4
- package/lib/typescript/metadata/get-subcommands-metadata.d.ts.map +0 -1
- package/lib/typescript/metadata/metadata-types.d.ts +0 -80
- package/lib/typescript/metadata/metadata-types.d.ts.map +0 -1
- package/lib/typescript/parser/parse/parse-types.d.ts +0 -85
- package/lib/typescript/parser/parse/parse-types.d.ts.map +0 -1
- package/lib/typescript/parser/parse/parse.d.ts +0 -4
- package/lib/typescript/parser/parse/parse.d.ts.map +0 -1
- package/lib/typescript/parser/parse/parser-helpers.d.ts.map +0 -1
- package/lib/typescript/parser/safe-parse.d.ts +0 -4
- package/lib/typescript/parser/safe-parse.d.ts.map +0 -1
- package/lib/typescript/parser/unsafe-parse.d.ts +0 -4
- package/lib/typescript/parser/unsafe-parse.d.ts.map +0 -1
- package/lib/typescript/parser/validate/validate-type.d.ts +0 -23
- package/lib/typescript/parser/validate/validate-type.d.ts.map +0 -1
- package/lib/typescript/parser/validate/validate.d.ts +0 -12
- package/lib/typescript/parser/validate/validate.d.ts.map +0 -1
- package/lib/typescript/types.d.ts +0 -294
- package/lib/typescript/types.d.ts.map +0 -1
- package/lib/typescript/zod-utilities.d.ts +0 -28
- package/lib/typescript/zod-utilities.d.ts.map +0 -1
- package/src/help-message/format-cli.ts +0 -141
- package/src/metadata/get-arguments-metadata.ts +0 -25
- package/src/metadata/get-cli-metadata.ts +0 -23
- package/src/metadata/get-options-metadata.ts +0 -35
- package/src/metadata/get-subcommands-metadata.ts +0 -32
- package/src/metadata/metadata-types.ts +0 -114
- package/src/parser/parse/parse-types.ts +0 -89
- package/src/parser/parse/parse.ts +0 -235
- package/src/parser/safe-parse.ts +0 -103
- package/src/parser/unsafe-parse.ts +0 -98
- package/src/parser/validate/validate-type.ts +0 -20
- package/src/parser/validate/validate.ts +0 -71
- package/src/types.ts +0 -365
- package/src/zod-utilities.ts +0 -214
|
@@ -1,46 +1,70 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { indent, indentLines, insertAtEndOfFirstLine, ln, toKebabCase } from "../utilities.ts";
|
|
2
|
+
import { terminalMarkdown } from "./terminal-markdown.ts";
|
|
2
3
|
|
|
3
|
-
import type { ArgumentMetadata } from "../
|
|
4
|
-
import type {
|
|
4
|
+
import type { ArgumentMetadata } from "../types/metadata-types.ts";
|
|
5
|
+
import type { FormatOptions } from "./generate-for-cli.ts";
|
|
5
6
|
|
|
6
|
-
export function formatHelpMessageArguments(
|
|
7
|
-
argumentsMetadata: ArgumentMetadata[],
|
|
8
|
-
c: HelpMessageStyle,
|
|
9
|
-
longest: number,
|
|
10
|
-
): string {
|
|
7
|
+
export function formatHelpMessageArguments(argumentsMetadata: ArgumentMetadata[], options: FormatOptions): string {
|
|
11
8
|
if (argumentsMetadata.length === 0) return "";
|
|
12
9
|
|
|
13
|
-
|
|
10
|
+
const {
|
|
11
|
+
style,
|
|
12
|
+
indentBeforeName,
|
|
13
|
+
indentAfterName,
|
|
14
|
+
indentBeforePlaceholder,
|
|
15
|
+
newLineIndent,
|
|
16
|
+
longest,
|
|
17
|
+
argumentsTitle,
|
|
18
|
+
defaultKeyword,
|
|
19
|
+
optionalKeyword,
|
|
20
|
+
exampleKeyword,
|
|
21
|
+
emptyLines,
|
|
22
|
+
emptyLinesBeforeTitle,
|
|
23
|
+
emptyLinesAfterTitle,
|
|
24
|
+
markdownRenderer,
|
|
25
|
+
kebabCaseArgumentName,
|
|
26
|
+
} = options;
|
|
27
|
+
|
|
28
|
+
let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(argumentsTitle) + ln(1 + emptyLinesAfterTitle);
|
|
29
|
+
|
|
30
|
+
// the space from the beginning to the start of the next column.
|
|
31
|
+
const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
|
|
14
32
|
|
|
15
33
|
for (const metadata of argumentsMetadata) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
34
|
+
if (metadata.hidden) continue;
|
|
35
|
+
|
|
36
|
+
let description = metadata.description
|
|
37
|
+
? style.description(metadata.description)
|
|
38
|
+
: terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
|
|
39
|
+
|
|
40
|
+
description = indentLines(description, totalSpacing);
|
|
41
|
+
|
|
42
|
+
let defaultOrOptional = "";
|
|
43
|
+
|
|
44
|
+
if (metadata.defaultValueAsString) {
|
|
45
|
+
defaultOrOptional = style.default(defaultKeyword.replace("{{ value }}", metadata.defaultValueAsString));
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
if (metadata.optional && !defaultOrOptional) {
|
|
49
|
+
defaultOrOptional = style.optional(optionalKeyword);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
const spacing = longest - metadata.name.length;
|
|
53
|
+
|
|
54
|
+
message +=
|
|
55
|
+
indent(indentBeforeName) +
|
|
56
|
+
style.argument(kebabCaseArgumentName ? toKebabCase(metadata.name) : metadata.name) +
|
|
57
|
+
indent(indentBeforePlaceholder + indentAfterName) +
|
|
58
|
+
indent(spacing) +
|
|
59
|
+
insertAtEndOfFirstLine(description, defaultOrOptional) +
|
|
60
|
+
ln(1 + emptyLines);
|
|
32
61
|
|
|
33
62
|
if (metadata.example) {
|
|
34
|
-
const normalizeExample = metadata.example
|
|
35
|
-
message +=
|
|
36
|
-
indent(
|
|
37
|
-
c.punctuation("└") + c.exampleTitle("Example:"),
|
|
38
|
-
c.example(normalizeExample) + ln(1),
|
|
39
|
-
);
|
|
63
|
+
const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // +1 for the space after the keyword
|
|
64
|
+
message +=
|
|
65
|
+
indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);
|
|
40
66
|
}
|
|
41
67
|
}
|
|
42
68
|
|
|
43
|
-
message += ln(1);
|
|
44
|
-
|
|
45
69
|
return message;
|
|
46
70
|
}
|
|
@@ -1,51 +1,76 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { indent, indentLines, insertAtEndOfFirstLine, ln } from "../utilities.ts";
|
|
2
|
+
import { terminalMarkdown } from "./terminal-markdown.ts";
|
|
2
3
|
|
|
3
|
-
import type { OptionMetadata } from "../
|
|
4
|
-
import type {
|
|
4
|
+
import type { OptionMetadata } from "../types/metadata-types.ts";
|
|
5
|
+
import type { FormatOptions } from "./generate-for-cli.ts";
|
|
5
6
|
|
|
6
|
-
export function formatHelpMessageOptions(
|
|
7
|
-
optionsMetadata: OptionMetadata[],
|
|
8
|
-
c: HelpMessageStyle,
|
|
9
|
-
longest: number,
|
|
10
|
-
): string {
|
|
7
|
+
export function formatHelpMessageOptions(optionsMetadata: OptionMetadata[], options: FormatOptions): string {
|
|
11
8
|
if (optionsMetadata.length === 0) return "";
|
|
12
9
|
|
|
13
|
-
|
|
10
|
+
const {
|
|
11
|
+
style,
|
|
12
|
+
indentBeforeName,
|
|
13
|
+
indentAfterName,
|
|
14
|
+
indentBeforePlaceholder,
|
|
15
|
+
newLineIndent,
|
|
16
|
+
emptyLines,
|
|
17
|
+
longest,
|
|
18
|
+
exampleKeyword,
|
|
19
|
+
optionalKeyword,
|
|
20
|
+
defaultKeyword,
|
|
21
|
+
optionsTitle,
|
|
22
|
+
emptyLinesBeforeTitle,
|
|
23
|
+
emptyLinesAfterTitle,
|
|
24
|
+
markdownRenderer,
|
|
25
|
+
} = options;
|
|
26
|
+
|
|
27
|
+
let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(optionsTitle) + ln(1 + emptyLinesAfterTitle);
|
|
28
|
+
|
|
29
|
+
// the space from the beginning to the start of the next column.
|
|
30
|
+
const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
|
|
14
31
|
|
|
15
32
|
for (const metadata of optionsMetadata) {
|
|
16
|
-
|
|
17
|
-
const normalizeDesc = metadata.description.replace(/\n+/g, "\n" + indent(longest + 6) + c.punctuation("└"));
|
|
18
|
-
const defaultString = metadata.defaultValue === undefined ? "" : `(default: ${metadata.defaultValueAsString})`;
|
|
33
|
+
if (metadata.hidden) continue;
|
|
19
34
|
|
|
20
|
-
const
|
|
21
|
-
const
|
|
35
|
+
const names = [...metadata.aliasesAsArgs, metadata.nameAsArg];
|
|
36
|
+
const coloredNames = names.map(name => style.option(name)).join(style.punctuation(", "));
|
|
22
37
|
|
|
23
|
-
|
|
38
|
+
let description = metadata.description
|
|
39
|
+
? style.description(metadata.description)
|
|
40
|
+
: terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
|
|
24
41
|
|
|
25
|
-
|
|
26
|
-
? c.default(defaultString)
|
|
27
|
-
: metadata.optional
|
|
28
|
-
? c.optional("(optional)")
|
|
29
|
-
: "";
|
|
42
|
+
description = indentLines(description, totalSpacing);
|
|
30
43
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
)
|
|
44
|
+
let defaultOrOptional = "";
|
|
45
|
+
|
|
46
|
+
if (metadata.defaultValueAsString) {
|
|
47
|
+
defaultOrOptional = style.default(defaultKeyword.replace("{{ value }}", metadata.defaultValueAsString));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
if (metadata.optional && !defaultOrOptional) {
|
|
51
|
+
defaultOrOptional = style.optional(optionalKeyword);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
// space between the option and the description
|
|
55
|
+
const optLength = names.join(", ").length + metadata.placeholder.length;
|
|
56
|
+
const spacing = longest - optLength;
|
|
57
|
+
|
|
58
|
+
message +=
|
|
59
|
+
indent(indentBeforeName) +
|
|
60
|
+
coloredNames +
|
|
61
|
+
indent(indentBeforePlaceholder) +
|
|
62
|
+
style.placeholder(metadata.placeholder) +
|
|
63
|
+
indent(indentAfterName) +
|
|
64
|
+
indent(spacing) +
|
|
65
|
+
insertAtEndOfFirstLine(description, defaultOrOptional) +
|
|
66
|
+
ln(1 + emptyLines);
|
|
38
67
|
|
|
39
68
|
if (metadata.example) {
|
|
40
|
-
const normalizeExample = metadata.example
|
|
41
|
-
message +=
|
|
42
|
-
indent(
|
|
43
|
-
c.example(normalizeExample) + ln(1),
|
|
44
|
-
);
|
|
69
|
+
const normalizeExample = indentLines(metadata.example, totalSpacing + exampleKeyword.length + 1); // + 1 for the space after the keyword
|
|
70
|
+
message +=
|
|
71
|
+
indent(totalSpacing) + style.exampleTitle(exampleKeyword) + indent(1) + style.example(normalizeExample) + ln(1);
|
|
45
72
|
}
|
|
46
73
|
}
|
|
47
74
|
|
|
48
|
-
message += ln(1);
|
|
49
|
-
|
|
50
75
|
return message;
|
|
51
76
|
}
|
|
@@ -1,36 +1,58 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { indent, indentLines, ln, subcommandPlaceholder } from "../utilities.ts";
|
|
2
|
+
import { terminalMarkdown } from "./terminal-markdown.ts";
|
|
2
3
|
|
|
3
|
-
import type { SubcommandMetadata } from "../
|
|
4
|
-
import type {
|
|
4
|
+
import type { SubcommandMetadata } from "../types/metadata-types.ts";
|
|
5
|
+
import type { FormatOptions } from "./generate-for-cli.ts";
|
|
5
6
|
|
|
6
|
-
export function formatHelpMessageCommands(
|
|
7
|
-
subcommandsMetadata: SubcommandMetadata[],
|
|
8
|
-
c: HelpMessageStyle,
|
|
9
|
-
longest: number,
|
|
10
|
-
): string {
|
|
7
|
+
export function formatHelpMessageCommands(subcommandsMetadata: SubcommandMetadata[], options: FormatOptions): string {
|
|
11
8
|
if (subcommandsMetadata.length === 0) return "";
|
|
12
9
|
|
|
13
|
-
|
|
10
|
+
const {
|
|
11
|
+
style,
|
|
12
|
+
indentBeforeName,
|
|
13
|
+
indentAfterName,
|
|
14
|
+
indentBeforePlaceholder,
|
|
15
|
+
newLineIndent,
|
|
16
|
+
longest,
|
|
17
|
+
commandsTitle,
|
|
18
|
+
emptyLines,
|
|
19
|
+
emptyLinesBeforeTitle,
|
|
20
|
+
emptyLinesAfterTitle,
|
|
21
|
+
markdownRenderer,
|
|
22
|
+
} = options;
|
|
23
|
+
|
|
24
|
+
let message = ln(emptyLinesBeforeTitle) + indent(1) + style.title(commandsTitle) + ln(1 + emptyLinesAfterTitle);
|
|
25
|
+
|
|
26
|
+
// the space from the beginning to the start of the next column.
|
|
27
|
+
const totalSpacing = longest + indentBeforeName + indentAfterName + indentBeforePlaceholder + newLineIndent;
|
|
14
28
|
|
|
15
29
|
for (const metadata of subcommandsMetadata) {
|
|
30
|
+
if (metadata.hidden) continue;
|
|
31
|
+
|
|
16
32
|
const names = metadata.aliases.concat([metadata.name]);
|
|
17
33
|
const placeholder = subcommandPlaceholder(metadata);
|
|
18
|
-
const normalizeDesc = metadata.description.replace(/\n+/g, "\n" + indent(longest + 6) + c.punctuation("└"));
|
|
19
34
|
|
|
20
|
-
|
|
21
|
-
|
|
35
|
+
let description = metadata.description
|
|
36
|
+
? style.description(metadata.description)
|
|
37
|
+
: terminalMarkdown(metadata.descriptionMarkdown, markdownRenderer, style.description);
|
|
22
38
|
|
|
23
|
-
|
|
39
|
+
description = indentLines(description, totalSpacing);
|
|
24
40
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
41
|
+
const optLength = names.join(", ").length + placeholder.length;
|
|
42
|
+
const spacing = longest - optLength;
|
|
43
|
+
|
|
44
|
+
const coloredNames = names.map(name => style.command(name)).join(style.punctuation(", "));
|
|
45
|
+
|
|
46
|
+
message +=
|
|
47
|
+
indent(indentBeforeName) +
|
|
48
|
+
coloredNames +
|
|
49
|
+
indent(indentBeforePlaceholder) +
|
|
50
|
+
style.placeholder(placeholder) +
|
|
51
|
+
indent(indentAfterName) +
|
|
52
|
+
indent(spacing) +
|
|
53
|
+
description +
|
|
54
|
+
ln(1 + emptyLines);
|
|
31
55
|
}
|
|
32
56
|
|
|
33
|
-
message += ln(1);
|
|
34
|
-
|
|
35
57
|
return message;
|
|
36
58
|
}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { getCliMetadata } from "../metadata/cli-metadata.ts";
|
|
2
|
+
import { indent, indentLines, ln, subcommandPlaceholder } from "../utilities.ts";
|
|
3
|
+
import { formatHelpMessageArguments } from "./format-arguments.ts";
|
|
4
|
+
import { formatHelpMessageOptions } from "./format-options.ts";
|
|
5
|
+
import { formatHelpMessageCommands } from "./format-subcommands.ts";
|
|
6
|
+
import { setPrintHelpOptionsDefaults } from "./set-defaults.ts";
|
|
7
|
+
import { helpMessageStyles } from "./styles.ts";
|
|
8
|
+
import { terminalMarkdown } from "./terminal-markdown.ts";
|
|
9
|
+
|
|
10
|
+
import type { Cli } from "../types/definitions-types.ts";
|
|
11
|
+
import type { HelpMessageStyleImpl, PrintHelpOptions } from "../types/help-message-types.ts";
|
|
12
|
+
|
|
13
|
+
export interface FormatOptions extends Required<PrintHelpOptions> {
|
|
14
|
+
style: HelpMessageStyleImpl;
|
|
15
|
+
longest: number;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function generateCliHelpMessage(cliDefinition: Cli, printOptions: PrintHelpOptions = {}): string {
|
|
19
|
+
const options = setPrintHelpOptionsDefaults(printOptions);
|
|
20
|
+
|
|
21
|
+
const style = { ...helpMessageStyles.default, ...options.style };
|
|
22
|
+
|
|
23
|
+
const metadata = getCliMetadata(cliDefinition);
|
|
24
|
+
|
|
25
|
+
const formatTitle = (title: string) => indent(1) + style.title(title);
|
|
26
|
+
|
|
27
|
+
let message = "";
|
|
28
|
+
|
|
29
|
+
// CLI usage
|
|
30
|
+
let usage = metadata.usage;
|
|
31
|
+
if (!usage) {
|
|
32
|
+
usage = style.punctuation("$");
|
|
33
|
+
usage += metadata.name ? style.description("", metadata.name) : "";
|
|
34
|
+
usage += metadata.subcommands.length > 0 ? style.command("", "[command]") : "";
|
|
35
|
+
usage += metadata.options.length > 0 ? style.option("", "[options]") : "";
|
|
36
|
+
usage += metadata.arguments.length > 0 ? style.argument("", "<arguments>") : "";
|
|
37
|
+
usage += metadata.allowPositionals ? style.argument("", "<positionals>") : "";
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
message += formatTitle(options.usageTitle) + ln(1 + options.emptyLinesAfterTitle);
|
|
41
|
+
message += indent(options.indentBeforeName) + usage + ln(1);
|
|
42
|
+
|
|
43
|
+
// CLI description
|
|
44
|
+
if (metadata.description || metadata.descriptionMarkdown) {
|
|
45
|
+
message +=
|
|
46
|
+
ln(options.emptyLinesBeforeTitle) + formatTitle(options.descriptionTitle) + ln(1 + options.emptyLinesAfterTitle);
|
|
47
|
+
|
|
48
|
+
let description = metadata.description
|
|
49
|
+
? style.description(metadata.description)
|
|
50
|
+
: terminalMarkdown(metadata.descriptionMarkdown, options.markdownRenderer, style.description);
|
|
51
|
+
|
|
52
|
+
description = indentLines(description, options.indentBeforeName);
|
|
53
|
+
|
|
54
|
+
message += indent(options.indentBeforeName) + description + ln(1);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let longest = 0;
|
|
58
|
+
|
|
59
|
+
// Prepare CLI options
|
|
60
|
+
const optionsMetadata = metadata.options;
|
|
61
|
+
|
|
62
|
+
let longestOptionTitle = 0;
|
|
63
|
+
for (const metadata of optionsMetadata) {
|
|
64
|
+
const names = [...metadata.aliasesAsArgs, metadata.nameAsArg].join(", ");
|
|
65
|
+
const optLength = names.length + metadata.placeholder.length;
|
|
66
|
+
longestOptionTitle = Math.max(optLength, longestOptionTitle);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
longest = Math.max(longestOptionTitle, longest);
|
|
70
|
+
|
|
71
|
+
// Prepare CLI commands
|
|
72
|
+
const subcommandsMetadata = metadata.subcommands;
|
|
73
|
+
|
|
74
|
+
let longestSubcommandTitle = 0;
|
|
75
|
+
for (const metadata of subcommandsMetadata) {
|
|
76
|
+
const names = [...metadata.aliases, metadata.name].join(", ");
|
|
77
|
+
const placeholder = subcommandPlaceholder(metadata);
|
|
78
|
+
const optLength = names.length + placeholder.length;
|
|
79
|
+
longestSubcommandTitle = Math.max(optLength, longestSubcommandTitle);
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
longest = Math.max(longestSubcommandTitle, longest);
|
|
83
|
+
|
|
84
|
+
// Prepare CLI arguments
|
|
85
|
+
const argumentsMetadata = metadata.arguments;
|
|
86
|
+
|
|
87
|
+
let longestArgumentTitle = 0;
|
|
88
|
+
for (const argument of argumentsMetadata) {
|
|
89
|
+
longestArgumentTitle = Math.max(argument.name.length, longestArgumentTitle);
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
longest = Math.max(longestArgumentTitle, longest);
|
|
93
|
+
|
|
94
|
+
const formatOptions = Object.assign({ ...options }, { style, longest }) as FormatOptions;
|
|
95
|
+
|
|
96
|
+
// CLI options
|
|
97
|
+
message += formatHelpMessageOptions(optionsMetadata, formatOptions);
|
|
98
|
+
|
|
99
|
+
// CLI commands
|
|
100
|
+
message += formatHelpMessageCommands(subcommandsMetadata, formatOptions);
|
|
101
|
+
|
|
102
|
+
// CLI arguments
|
|
103
|
+
message += formatHelpMessageArguments(argumentsMetadata, formatOptions);
|
|
104
|
+
|
|
105
|
+
// CLI example
|
|
106
|
+
if (metadata.example) {
|
|
107
|
+
message +=
|
|
108
|
+
ln(options.emptyLinesBeforeTitle) + formatTitle(options.exampleTitle) + ln(1 + options.emptyLinesAfterTitle);
|
|
109
|
+
const normalizeExample = indentLines(metadata.example, options.indentBeforeName);
|
|
110
|
+
message += indent(options.indentBeforeName) + style.example(normalizeExample);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
return message;
|
|
114
|
+
}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { generateCliHelpMessage } from "./generate-for-cli.ts";
|
|
2
|
+
import { setPrintHelpOptionsDefaults } from "./set-defaults.ts";
|
|
3
|
+
import { helpMessageStyles } from "./styles.ts";
|
|
4
|
+
|
|
5
|
+
import type { Cli, Subcommand } from "../types/definitions-types.ts";
|
|
6
|
+
import type { PrintHelpOptions } from "../types/help-message-types.ts";
|
|
7
|
+
|
|
8
|
+
export function generateSubcommandHelpMessage(
|
|
9
|
+
commandDefinition: Subcommand,
|
|
10
|
+
options: PrintHelpOptions = {},
|
|
11
|
+
cliName = "",
|
|
12
|
+
): string {
|
|
13
|
+
setPrintHelpOptionsDefaults(options);
|
|
14
|
+
|
|
15
|
+
const style = { ...helpMessageStyles.default, ...options.style };
|
|
16
|
+
|
|
17
|
+
const meta = commandDefinition.meta ?? {};
|
|
18
|
+
|
|
19
|
+
let usage = meta.usage;
|
|
20
|
+
if (!usage) {
|
|
21
|
+
usage = style.punctuation("$");
|
|
22
|
+
usage += cliName ? ` ${cliName}` : "";
|
|
23
|
+
usage += style.command("", commandDefinition.name);
|
|
24
|
+
usage += commandDefinition.options ? style.option(" [options]") : "";
|
|
25
|
+
usage += commandDefinition.arguments || commandDefinition.allowPositionals ? style.argument(" <arguments>") : "";
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// convert to cli object without subcommands
|
|
29
|
+
const asCliDefinition: Cli = { ...commandDefinition, cliName: commandDefinition.name, meta: { usage, ...meta } };
|
|
30
|
+
|
|
31
|
+
return generateCliHelpMessage(asCliDefinition, options);
|
|
32
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { generateCliHelpMessage } from "./generate-for-cli.ts";
|
|
2
|
+
import { generateSubcommandHelpMessage } from "./generate-for-subcommand.ts";
|
|
3
|
+
|
|
4
|
+
import type { Cli, Subcommand } from "../types/definitions-types.ts";
|
|
5
|
+
import type { PrintHelpOptions } from "../types/help-message-types.ts";
|
|
6
|
+
|
|
7
|
+
export function printCliHelp(cliDefinition: Cli, options: PrintHelpOptions = {}) {
|
|
8
|
+
console.log(generateCliHelpMessage(cliDefinition, options));
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export function printSubcommandHelp(commandDefinition: Subcommand, options: PrintHelpOptions = {}, cliName = "") {
|
|
12
|
+
console.log(generateSubcommandHelpMessage(commandDefinition, options, cliName));
|
|
13
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { helpMessageStyles } from "./styles.ts";
|
|
2
|
+
|
|
3
|
+
import type { PrintHelpOptions } from "../types/help-message-types.ts";
|
|
4
|
+
import type { FormatOptions } from "./generate-for-cli.ts";
|
|
5
|
+
|
|
6
|
+
export function setPrintHelpOptionsDefaults(options: PrintHelpOptions) {
|
|
7
|
+
const clone = { ...options };
|
|
8
|
+
|
|
9
|
+
clone.style ??= helpMessageStyles.default;
|
|
10
|
+
clone.markdownRenderer ??= "terminal";
|
|
11
|
+
clone.kebabCaseArgumentName ??= true;
|
|
12
|
+
|
|
13
|
+
clone.indentBeforeName ??= 2;
|
|
14
|
+
clone.indentAfterName ??= 4;
|
|
15
|
+
clone.indentBeforePlaceholder ??= 1;
|
|
16
|
+
clone.newLineIndent ??= 0;
|
|
17
|
+
|
|
18
|
+
clone.emptyLines ??= 0;
|
|
19
|
+
clone.emptyLinesBeforeTitle ??= 1;
|
|
20
|
+
clone.emptyLinesAfterTitle ??= 0;
|
|
21
|
+
|
|
22
|
+
clone.exampleKeyword ??= "Example";
|
|
23
|
+
clone.optionalKeyword ??= "(optional)";
|
|
24
|
+
clone.defaultKeyword ??= "(default: {{ value }})";
|
|
25
|
+
|
|
26
|
+
clone.usageTitle ??= "USAGE";
|
|
27
|
+
clone.descriptionTitle ??= "DESCRIPTION";
|
|
28
|
+
clone.commandsTitle ??= "COMMANDS";
|
|
29
|
+
clone.optionsTitle ??= "OPTIONS";
|
|
30
|
+
clone.argumentsTitle ??= "ARGUMENTS";
|
|
31
|
+
clone.exampleTitle ??= "EXAMPLE";
|
|
32
|
+
|
|
33
|
+
return clone as Required<FormatOptions>;
|
|
34
|
+
}
|