@gunshi/plugin 0.31.0 → 0.33.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.
Files changed (2) hide show
  1. package/lib/index.d.ts +80 -51
  2. package/package.json +2 -2
package/lib/index.d.ts CHANGED
@@ -581,15 +581,6 @@ type ArgExplicitlyProvided<A extends Args> = { [K in keyof A]: boolean };
581
581
  */
582
582
  //#endregion
583
583
  //#region ../gunshi/src/plugin/context.d.ts
584
- /**
585
- * Type helper to create GunshiParams from extracted args and extensions
586
- *
587
- * @internal
588
- */
589
- type ExtractedParams<G extends GunshiParamsConstraint, L extends Record<string, unknown> = {}> = {
590
- args: ExtractArgs<G>;
591
- extensions: ExtractExtensions<G> & L;
592
- };
593
584
  /**
594
585
  * Gunshi plugin context interface.
595
586
  *
@@ -638,7 +629,7 @@ interface PluginContext<G extends GunshiParamsConstraint = DefaultGunshiParams>
638
629
  *
639
630
  * @param decorator - A decorator function that wraps the base header renderer.
640
631
  */
641
- decorateHeaderRenderer<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRenderer: (ctx: Readonly<CommandContext<ExtractedParams<G, L>>>) => Promise<string>, ctx: Readonly<CommandContext<ExtractedParams<G, L>>>) => Promise<string>): void;
632
+ decorateHeaderRenderer<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRenderer: (ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>) => Promise<string>, ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>) => Promise<string>): void;
642
633
  /**
643
634
  * Decorate the usage renderer.
644
635
  *
@@ -646,7 +637,7 @@ interface PluginContext<G extends GunshiParamsConstraint = DefaultGunshiParams>
646
637
  *
647
638
  * @param decorator - A decorator function that wraps the base usage renderer.
648
639
  */
649
- decorateUsageRenderer<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRenderer: (ctx: Readonly<CommandContext<ExtractedParams<G, L>>>) => Promise<string>, ctx: Readonly<CommandContext<ExtractedParams<G, L>>>) => Promise<string>): void;
640
+ decorateUsageRenderer<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRenderer: (ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>) => Promise<string>, ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>) => Promise<string>): void;
650
641
  /**
651
642
  * Decorate the validation errors renderer.
652
643
  *
@@ -654,7 +645,7 @@ interface PluginContext<G extends GunshiParamsConstraint = DefaultGunshiParams>
654
645
  *
655
646
  * @param decorator - A decorator function that wraps the base validation errors renderer.
656
647
  */
657
- decorateValidationErrorsRenderer<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRenderer: (ctx: Readonly<CommandContext<ExtractedParams<G, L>>>, error: AggregateError) => Promise<string>, ctx: Readonly<CommandContext<ExtractedParams<G, L>>>, error: AggregateError) => Promise<string>): void;
648
+ decorateValidationErrorsRenderer<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRenderer: (ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>, error: AggregateError) => Promise<string>, ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>, error: AggregateError) => Promise<string>): void;
658
649
  /**
659
650
  * Decorate the command execution.
660
651
  *
@@ -664,7 +655,7 @@ interface PluginContext<G extends GunshiParamsConstraint = DefaultGunshiParams>
664
655
  *
665
656
  * @param decorator - A decorator function that wraps the command runner
666
657
  */
667
- decorateCommand<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRunner: (ctx: Readonly<CommandContext<ExtractedParams<G, L>>>) => Awaitable<void | string>) => (ctx: Readonly<CommandContext<ExtractedParams<G, L>>>) => Awaitable<void | string>): void;
658
+ decorateCommand<L extends Record<string, unknown> = DefaultGunshiParams['extensions']>(decorator: (baseRunner: (ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>) => Awaitable<void | string>) => (ctx: Readonly<CommandContext<MergeGunshiExtensions<G, L>>>) => Awaitable<void | string>): void;
668
659
  }
669
660
  //#endregion
670
661
  //#region ../gunshi/src/plugin/core.d.ts
@@ -730,6 +721,36 @@ type PluginExtension<T = Record<string, unknown>, G extends GunshiParams = Defau
730
721
  type OnPluginExtension<G extends GunshiParams = DefaultGunshiParams> = (ctx: Readonly<CommandContext<G>>, cmd: Readonly<Command<G>>) => Awaitable<void>;
731
722
  type IsStringLiteral<S extends string> = string extends S ? false : true;
732
723
  type MergeExtension<Id, ResolvedDepExt extends ExtendContext, PluginExt extends ExtendContext> = Id extends infer I ? I extends string ? IsStringLiteral<I> extends true ? ResolvedDepExt & { [K in I]: PluginExt } : ResolvedDepExt : ResolvedDepExt : ResolvedDepExt;
724
+ /**
725
+ * Extensions resolved from the declared plugin dependencies.
726
+ *
727
+ * @internal
728
+ */
729
+ type DependencyExtensions<Deps extends ReadonlyArray<PluginDependency | string>, Context extends ExtendContext> = InferDependencyExtensions<Deps, Context>;
730
+ /**
731
+ * Gunshi params available while a plugin extension resolves its dependencies.
732
+ *
733
+ * @internal
734
+ */
735
+ type DependencyParams<Deps extends ReadonlyArray<PluginDependency | string>, Context extends ExtendContext> = GunshiParams<{
736
+ args: Args;
737
+ extensions: DependencyExtensions<Deps, Context>;
738
+ }>;
739
+ /**
740
+ * Extensions available after applying the current plugin extension.
741
+ *
742
+ * @internal
743
+ */
744
+ type MergedPluginExtensions<Id extends string, Deps extends ReadonlyArray<PluginDependency | string>, Context extends ExtendContext, Ext extends ExtendContext> = MergeExtension<Id, DependencyExtensions<Deps, Context>, Ext>;
745
+ /**
746
+ * Gunshi params available after applying the current plugin extension.
747
+ *
748
+ * @internal
749
+ */
750
+ type MergedPluginParams<Id extends string, Deps extends ReadonlyArray<PluginDependency | string>, Context extends ExtendContext, Ext extends ExtendContext> = GunshiParams<{
751
+ args: Args;
752
+ extensions: MergedPluginExtensions<Id, Deps, Context, Ext>;
753
+ }>;
733
754
  /**
734
755
  * Plugin definition options
735
756
  *
@@ -743,13 +764,7 @@ Deps extends ReadonlyArray<PluginDependency | string> = (PluginDependency | stri
743
764
  // for plugin dependencies
744
765
  Ext extends Record<string, unknown> = {},
745
766
  // for plugin extension type
746
- ResolvedDepExt extends GunshiParams = GunshiParams<{
747
- args: Args;
748
- extensions: InferDependencyExtensions<Deps, DepExt>;
749
- }>, PluginExt extends PluginExtension<Ext, ResolvedDepExt> = PluginExtension<Ext, ResolvedDepExt>, MergedExt extends GunshiParams = GunshiParams<{
750
- args: Args;
751
- extensions: MergeExtension<Id, InferDependencyExtensions<Deps, DepExt>, Awaited<ReturnType<PluginExt>>>;
752
- }>> {
767
+ ResolvedDepExt extends GunshiParams = DependencyParams<Deps, DepExt>, PluginExt extends PluginExtension<Ext, ResolvedDepExt> = PluginExtension<Ext, ResolvedDepExt>, MergedExt extends GunshiParams = MergedPluginParams<Id, Deps, DepExt, Awaited<ReturnType<PluginExt>>>> {
753
768
  /**
754
769
  * Plugin unique identifier
755
770
  */
@@ -858,20 +873,11 @@ Deps extends ReadonlyArray<PluginDependency | string> = [],
858
873
  // for plugin dependencies
859
874
  Extension extends {} = {},
860
875
  // for plugin extension type
861
- ResolvedDepExtensions extends GunshiParams = GunshiParams<{
862
- args: Args;
863
- extensions: InferDependencyExtensions<Deps, Context>;
864
- }>, PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<Extension, ResolvedDepExtensions>, MergedExtensions extends GunshiParams = GunshiParams<{
865
- args: Args;
866
- extensions: MergeExtension<Id, InferDependencyExtensions<Deps, Context>, Awaited<ReturnType<PluginExt>>>;
867
- }>>(options: {
876
+ ResolvedDepExtensions extends GunshiParams = DependencyParams<Deps, Context>, PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<Extension, ResolvedDepExtensions>, MergedExtensions extends GunshiParams = MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>(options: {
868
877
  id: Id;
869
878
  name?: string;
870
879
  dependencies?: Deps;
871
- setup?: (ctx: Readonly<PluginContext<GunshiParams<{
872
- args: Args;
873
- extensions: MergeExtension<Id, InferDependencyExtensions<Deps, Context>, Awaited<ReturnType<PluginExt>>>;
874
- }>>>) => Awaitable<void>;
880
+ setup?: (ctx: Readonly<PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>>) => Awaitable<void>;
875
881
  extension: PluginExt;
876
882
  onExtension?: OnPluginExtension<MergedExtensions>;
877
883
  }): PluginWithExtension<Awaited<ReturnType<PluginExt>>>;
@@ -896,20 +902,11 @@ Deps extends ReadonlyArray<PluginDependency | string> = [],
896
902
  // for plugin dependencies
897
903
  Extension extends Record<string, unknown> = {},
898
904
  // for plugin extension type
899
- ResolvedDepExtensions extends GunshiParams = GunshiParams<{
900
- args: Args;
901
- extensions: InferDependencyExtensions<Deps, Context>;
902
- }>, PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<Extension, ResolvedDepExtensions>, MergedExtensions extends GunshiParams = GunshiParams<{
903
- args: Args;
904
- extensions: MergeExtension<Id, InferDependencyExtensions<Deps, Context>, Awaited<ReturnType<PluginExt>>>;
905
- }>>(options: {
905
+ ResolvedDepExtensions extends GunshiParams = DependencyParams<Deps, Context>, PluginExt extends PluginExtension<Extension, DefaultGunshiParams> = PluginExtension<Extension, ResolvedDepExtensions>, MergedExtensions extends GunshiParams = MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>(options: {
906
906
  id: Id;
907
907
  name?: string;
908
908
  dependencies?: Deps;
909
- setup?: (ctx: Readonly<PluginContext<GunshiParams<{
910
- args: Args;
911
- extensions: MergeExtension<Id, InferDependencyExtensions<Deps, Context>, Awaited<ReturnType<PluginExt>>>;
912
- }>>>) => Awaitable<void>;
909
+ setup?: (ctx: Readonly<PluginContext<MergedPluginParams<Id, Deps, Context, Awaited<ReturnType<PluginExt>>>>>) => Awaitable<void>;
913
910
  onExtension?: OnPluginExtension<MergedExtensions>;
914
911
  }): PluginWithoutExtension<DefaultGunshiParams['extensions']>;
915
912
  //#endregion
@@ -1011,11 +1008,37 @@ type ExtractExtensions<G> = G extends GunshiParams<any> ? G['extensions'] : G ex
1011
1008
  * @internal
1012
1009
  */
1013
1010
  type NormalizeToGunshiParams<G> = G extends GunshiParams<any> ? G : G extends {
1014
- extensions: ExtendContext;
1011
+ args: infer A extends Args;
1012
+ extensions: infer E extends ExtendContext;
1013
+ } ? GunshiParams<{
1014
+ args: A;
1015
+ extensions: E;
1016
+ }> : G extends {
1017
+ args: infer A extends Args;
1018
+ } ? GunshiParams<{
1019
+ args: A;
1020
+ extensions: {};
1021
+ }> : G extends {
1022
+ extensions: infer E extends ExtendContext;
1015
1023
  } ? GunshiParams<{
1016
1024
  args: Args;
1017
- extensions: G['extensions'];
1025
+ extensions: E;
1018
1026
  }> : DefaultGunshiParams;
1027
+ /**
1028
+ * Type helper to merge command context extensions into G
1029
+ *
1030
+ * @internal
1031
+ */
1032
+ type MergeGunshiExtensions<G extends GunshiParamsConstraint, E extends ExtendContext> = GunshiParams<{
1033
+ /**
1034
+ * Command argument definitions.
1035
+ */
1036
+ args: ExtractArgs<G>;
1037
+ /**
1038
+ * Merged command context extensions.
1039
+ */
1040
+ extensions: ExtractExtensions<G> & E;
1041
+ }>;
1019
1042
  /**
1020
1043
  * Command environment.
1021
1044
  *
@@ -1329,7 +1352,7 @@ interface CommandContext<G extends GunshiParamsConstraint = DefaultGunshiParams>
1329
1352
  validationError?: AggregateError;
1330
1353
  }
1331
1354
  /**
1332
- * CommandContextCore type (base type without extensions)
1355
+ * Readonly command context available to a command context extension factory.
1333
1356
  *
1334
1357
  * @typeParam G - A type extending {@linkcode GunshiParams} to specify the shape of command context.
1335
1358
  *
@@ -1605,7 +1628,16 @@ declare const CLI_OPTIONS_DEFAULT: CliOptions<DefaultGunshiParams>;
1605
1628
  *
1606
1629
  * @internal
1607
1630
  */
1608
- type ExtractExtensions$1<E extends Record<string, CommandContextExtension>> = { [K in keyof E]: E[K] extends CommandContextExtension<infer T> ? T : never };
1631
+ type ExtractExtensionValues<E extends Record<string, CommandContextExtension>> = { [K in keyof E]: E[K] extends CommandContextExtension<infer T> ? T : never };
1632
+ /**
1633
+ * Return type of {@link createCommandContext}
1634
+ *
1635
+ * @internal
1636
+ */
1637
+ type CommandContextResult<G extends GunshiParamsConstraint, E extends Record<string, CommandContextExtension>> = {} extends ExtractExtensionValues<E> ? Readonly<CommandContext<G>> : Readonly<CommandContext<GunshiParams<{
1638
+ args: ExtractArgs<G>;
1639
+ extensions: ExtractExtensionValues<E>;
1640
+ }>>>;
1609
1641
  /**
1610
1642
  * Parameters of {@link createCommandContext}
1611
1643
  */
@@ -1692,10 +1724,7 @@ declare function createCommandContext<G extends GunshiParamsConstraint = Default
1692
1724
  commandPath,
1693
1725
  omitted,
1694
1726
  validationError
1695
- }: CommandContextParams<G, V, C, E>): Promise<{} extends ExtractExtensions$1<E> ? Readonly<CommandContext<G>> : Readonly<CommandContext<GunshiParams<{
1696
- args: ExtractArgs<G>;
1697
- extensions: ExtractExtensions$1<E>;
1698
- }>>>>;
1727
+ }: CommandContextParams<G, V, C, E>): Promise<CommandContextResult<G, E>>;
1699
1728
  //#endregion
1700
1729
  //#region src/index.d.ts
1701
1730
  /**
@@ -1704,4 +1733,4 @@ declare function createCommandContext<G extends GunshiParamsConstraint = Default
1704
1733
  */
1705
1734
 
1706
1735
  //#endregion
1707
- export { ANONYMOUS_COMMAND_NAME, type ArgSchema, type ArgToken, type ArgValues, type Args, Awaitable, CLI_OPTIONS_DEFAULT, Command, CommandContext, CommandContextCore, CommandContextExtension, CommandContextParams, CommandDecorator, CommandExamplesFetcher, CommandRunner, DefaultGunshiParams, ExtendContext, ExtractArgs, ExtractExtensions, GunshiParams, GunshiParamsConstraint, LazyCommand, NormalizeToGunshiParams, OnPluginExtension, Plugin, PluginContext, PluginDependency, PluginExtension, PluginFunction, PluginOptions, PluginWithExtension, PluginWithoutExtension, Prettify, RendererDecorator, ValidationErrorsDecorator, createCommandContext, plugin };
1736
+ export { ANONYMOUS_COMMAND_NAME, type ArgSchema, type ArgToken, type ArgValues, type Args, Awaitable, CLI_OPTIONS_DEFAULT, Command, CommandContext, CommandContextCore, CommandContextExtension, CommandContextParams, CommandDecorator, CommandExamplesFetcher, CommandRunner, DefaultGunshiParams, ExtendContext, ExtractArgs, ExtractExtensions, GunshiParams, GunshiParamsConstraint, LazyCommand, MergeGunshiExtensions, NormalizeToGunshiParams, OnPluginExtension, Plugin, PluginContext, PluginDependency, PluginExtension, PluginFunction, PluginOptions, PluginWithExtension, PluginWithoutExtension, Prettify, RendererDecorator, ValidationErrorsDecorator, createCommandContext, plugin };
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@gunshi/plugin",
3
3
  "description": "plugin development kit for gunshi",
4
- "version": "0.31.0",
4
+ "version": "0.33.0",
5
5
  "author": {
6
6
  "name": "kazuya kawaguchi",
7
7
  "email": "kawakazu80@gmail.com"
@@ -56,7 +56,7 @@
56
56
  "jsr-exports-lint": "^0.4.2",
57
57
  "publint": "^0.3.20",
58
58
  "tsdown": "0.21.0",
59
- "gunshi": "0.31.0"
59
+ "gunshi": "0.33.0"
60
60
  },
61
61
  "scripts": {
62
62
  "build": "tsdown",