Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
45 changes: 33 additions & 12 deletions lib/arrayBlock.ts
Original file line number Diff line number Diff line change
@@ -1,10 +1,9 @@
import CompositeBlock from './compositeBlock';
import { createError, ERROR_ID } from './error';
import type { DescriptError } from './error';
import type {
BlockResultOut,
First,
InferResultFromBlock,
InferResultOrError,
InferParamsInFromBlock,
Tail,
DescriptBlockOptions,
Expand All @@ -17,15 +16,15 @@

export type GetArrayBlockResult<T extends ReadonlyArray<unknown>> = {
0: never;
1: [ InferResultFromBlock<First<T>> | DescriptError ];
2: [ InferResultFromBlock<First<T>> | DescriptError, ...GetArrayBlockResult<Tail<T>> ];
1: [ InferResultOrError<First<T>> ];
2: [ InferResultOrError<First<T>>, ...GetArrayBlockResult<Tail<T>> ];
}[ T extends [] ? 0 : T extends ((readonly [ any ]) | [ any ]) ? 1 : 2 ];

Check warning on line 21 in lib/arrayBlock.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type

Check warning on line 21 in lib/arrayBlock.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type

export type GetArrayBlockParamsUnion<T extends ReadonlyArray<unknown>> = {
0: never;
1: First<T>;
2: First<T> & GetArrayBlockParamsUnion<Tail<T>>;
}[ T extends [] ? 0 : T extends ((readonly [ any ]) | [ any ]) ? 1 : 2 ];

Check warning on line 27 in lib/arrayBlock.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type

Check warning on line 27 in lib/arrayBlock.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type

type GetArrayBlockParamsMap<T extends ReadonlyArray<unknown>> = {
[ P in keyof T ]: InferParamsInFromBlock<T[ P ]>;
Expand Down Expand Up @@ -72,20 +71,42 @@
> {

extend<
// eslint-disable-next-line @typescript-eslint/no-unused-vars
ExtendedResultOut extends
BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(args: {
options: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required: true };
}): ArrayBlock<Context, Block, ExtendedResultOut, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(
this: ArrayBlock<Context, Block, ResultOut, ParamsOut, BlockResult, BeforeResultOut, AfterResultOut, ErrorResultOut, Params> & { readonly __isRequired: true },
args: {
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required?: true };
}
): ArrayBlock<Context, Block, ExtendedResultOut, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>({ options }: {
options: DescriptBlockOptions<
Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams
>;
}) {
>(args: {
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
}): ArrayBlock<Context, Block, ExtendedResultOut, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
extend({ options }: { options?: any }): any {

Check warning on line 109 in lib/arrayBlock.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type

Check warning on line 109 in lib/arrayBlock.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type
return new ArrayBlock({
block: this.extendBlock(this.block),
options: this.extendOptions(this.options, options) as typeof options,
Expand Down
41 changes: 27 additions & 14 deletions lib/block.ts
Original file line number Diff line number Diff line change
Expand Up @@ -66,27 +66,40 @@
}

abstract extend<

// ExtendedResultOut extends
// BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
// ExtendedCustomBlock = CustomBlock,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>({ block, options }: {
>(args: {
block?: CustomBlock;
options?: DescriptBlockOptions<
Context,
ParamsOut & ExtendedParamsOut,
ExtendedBlockResult,
ExtendedBeforeResultOut,
ExtendedAfterResultOut,
ExtendedErrorResultOut,
ExtendedParams
>;
options: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required: true };
}): unknown;
abstract extend<
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(
this: BaseBlock<Context, CustomBlock, ParamsOut, ResultOut, IntermediateResult, BlockResult, BeforeResultOut, AfterResultOut, ErrorResultOut, Params> & { readonly __isRequired: true },
args: {
block?: CustomBlock;
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required?: true };
}
): unknown;
abstract extend<
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(args: {
block?: CustomBlock;
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
}): unknown;

protected initBlock(block: CustomBlock) {
Expand Down Expand Up @@ -442,7 +455,7 @@
blockCancel.throwIfCancelled();

if (typeof step.after === 'function') {
resultAfter = await step.after({ cancel, params, context, deps, dep, result: (resultBefore || resultBlock) as any });

Check warning on line 458 in lib/block.ts

View workflow job for this annotation

GitHub Actions / build (20.x)

Unexpected any. Specify a different type
blockCancel.throwIfCancelled();

if (resultAfter instanceof BaseBlock) {
Expand Down
56 changes: 35 additions & 21 deletions lib/firstBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import type BaseBlock from './block';
import type {
BlockResultOut,
First,
InferResultFromBlock,
InferResultOrError,
InferParamsInFromBlock,
Tail,
DescriptBlockOptions,
Expand All @@ -32,21 +32,14 @@ export type GetFirstBlockParams<
PU = GetFirstBlockParamsUnion<PA>,
> = PU;

type GetFirstBlockResultMap<T extends ReadonlyArray<unknown>> = {
[ P in keyof T ]: InferResultFromBlock<T[ P ]>;
};

type GetFirstBlockResultUnion<T extends ReadonlyArray<unknown>> = {
0: never;
1: First<T> | DescriptError;
2: First<T> | DescriptError | GetFirstBlockResultUnion<Tail<T>>;
1: InferResultOrError<First<T>>;
2: InferResultOrError<First<T>> | GetFirstBlockResultUnion<Tail<T>>;
}[ T extends [] ? 0 : T extends ((readonly [ any ]) | [ any ]) ? 1 : 2 ];

export type GetFirstBlockResult<
T extends ReadonlyArray<unknown>,
PA extends ReadonlyArray<unknown> = GetFirstBlockResultMap<T>,
PU = GetFirstBlockResultUnion<PA>,
> = PU;
export type GetFirstBlockResult<T extends ReadonlyArray<unknown>> =
GetFirstBlockResultUnion<T>;

export type FirstBlockDefinition<T> = {
[ P in keyof T ]: T[ P ] extends BaseBlock<
Expand Down Expand Up @@ -83,21 +76,42 @@ class FirstBlock<
> {

extend<
// eslint-disable-next-line @typescript-eslint/no-unused-vars
ExtendedResultOut extends
BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
// ExtendedCustomBlock extends FirstBlockDefinition<Block>,
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(args: {
options: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required: true };
}): FirstBlock<Context, Block, ExtendedResultOut, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(
this: FirstBlock<Context, Block, ResultOut, ParamsOut, BlockResult, BeforeResultOut, AfterResultOut, ErrorResultOut, Params> & { readonly __isRequired: true },
args: {
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required?: true };
}
): FirstBlock<Context, Block, ExtendedResultOut, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>({ options }: {
options: DescriptBlockOptions<
Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams
>;
}) {
>(args: {
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
}): FirstBlock<Context, Block, ExtendedResultOut, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
extend({ options }: { options?: any }): any {
return new FirstBlock({
block: this.extendBlock(this.block),
options: this.extendOptions(this.options, options) as typeof options,
Expand Down
43 changes: 27 additions & 16 deletions lib/functionBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -97,28 +97,39 @@ class FunctionBlock<
extend<
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
// eslint-disable-next-line @typescript-eslint/no-unused-vars
// ExtendedCustomBlock = DescriptHttpBlockDescription<ExtendedParamsOut, Context, HttpResult>,

ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>({ options }: {
options: DescriptBlockOptions<
Context,
ExtendedParamsOut,
ExtendedBlockResult,
ExtendedBeforeResultOut,
ExtendedAfterResultOut,
ExtendedErrorResultOut,
ExtendedParams
>;
}) {
>(args: {
options: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required: true };
}): FunctionBlock<Context, ExtendedParamsOut, ExtendedBlockResult, BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(
this: FunctionBlock<Context, ParamsOut, BlockResult, ResultOut, BeforeResultOut, AfterResultOut, ErrorResultOut, Params> & { readonly __isRequired: true },
args: {
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required?: true };
}
): FunctionBlock<Context, ExtendedParamsOut, ExtendedBlockResult, BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(args: {
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
}): FunctionBlock<Context, ExtendedParamsOut, ExtendedBlockResult, BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
extend({ options }: { options?: any }): any {
return new FunctionBlock({
block: this.extendBlock(this.block) as typeof this.block,
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
// @ts-expect-error
options: this.extendOptions(this.options, options) as typeof options,
});
}
Expand Down
51 changes: 32 additions & 19 deletions lib/httpBlock.ts
Original file line number Diff line number Diff line change
Expand Up @@ -205,30 +205,43 @@ class HttpBlock<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,

// ExtendedCustomBlock = DescriptHttpBlockDescription<ExtendedParamsOut, Context, HttpResult>,

ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>({ options, block }: {
>(args: {
block?: DescriptHttpBlockDescription<ParamsOut & ExtendedParamsOut, Context, HttpResult>;
options?: DescriptBlockOptions<
Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams
>;
}) {
const x = new HttpBlock<
Context,
ExtendedParamsOut,
HttpResult,
ExtendedResultOut,
ExtendedBlockResult,
ExtendedBeforeResultOut,
ExtendedAfterResultOut,
ExtendedErrorResultOut,
ExtendedParams
>({
options: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required: true };
}): HttpBlock<Context, ExtendedParamsOut, HttpResult, ExtendedResultOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(
this: HttpBlock<Context, ParamsOut, HttpResult, ResultOut, BlockResult, BeforeResultOut, AfterResultOut, ErrorResultOut, Params> & { readonly __isRequired: true },
args: {
block?: DescriptHttpBlockDescription<ParamsOut & ExtendedParamsOut, Context, HttpResult>;
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { required?: true };
}
): HttpBlock<Context, ExtendedParamsOut, HttpResult, ExtendedResultOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams> & { readonly __isRequired: true };
extend<
ExtendedResultOut extends BlockResultOut<ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut>,
ExtendedParamsOut extends Params = Params,
ExtendedParams = Params,
ExtendedBlockResult = ResultOut,
ExtendedBeforeResultOut = unknown,
ExtendedAfterResultOut = unknown,
ExtendedErrorResultOut = unknown,
>(args: {
block?: DescriptHttpBlockDescription<ParamsOut & ExtendedParamsOut, Context, HttpResult>;
options?: DescriptBlockOptions<Context, ExtendedParamsOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
}): HttpBlock<Context, ExtendedParamsOut, HttpResult, ExtendedResultOut, ExtendedBlockResult, ExtendedBeforeResultOut, ExtendedAfterResultOut, ExtendedErrorResultOut, ExtendedParams>;
extend({ options, block }: { block?: any; options?: any }): any {
const x = new HttpBlock({
block: this.extendBlock(block),
options: this.extendOptions(this.options, options),
});
Expand Down
Loading
Loading