Skip to content

Commit

Permalink
fix for blocks chaining types
Browse files Browse the repository at this point in the history
  • Loading branch information
madimp committed Mar 14, 2024
1 parent cc2b024 commit 2c29596
Show file tree
Hide file tree
Showing 8 changed files with 73 additions and 77 deletions.
20 changes: 4 additions & 16 deletions docs/typescript-examples/array.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,10 @@ interface ParamsIn1 {
id_1: string;
}

interface ParamsOut1 {
s1: string;
}

interface ResultOut1 {
a: string;
}

const block_1 = de.http<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, ParamsOut1>, ResultOut1>( {
const block_1 = de.http( {
block: {},
options: {
params: ( { params }) => {
params: ( { params }: { params: ParamsIn1 } ) => {
return {
s1: params.id_1,
};
Expand All @@ -44,14 +36,10 @@ interface ParamsIn2 {
id_2: number;
}

interface ResultOut2 {
b: number;
}

const block_2 = de.http<Context, ParamsIn2, ResultOut2>( {
const block_2 = de.http( {
block: {},
options: {
params: ( { params }) => {
params: ( { params }: { params: ParamsIn2 }) => {
return params;
},

Expand Down
6 changes: 3 additions & 3 deletions docs/typescript-examples/func.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ interface ResultOut {
foo: string;
}

const block_1 = de.func<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, ParamsOut>, DescriptBlockResult<DescriptBlockResultJSON<ResultIn>, ResultOut>>( {
const block_1 = de.func( {
block: ( { params, context, generate_id } ) => {
// Здесь нужно вернуть тот же тип, что указан в after в качестве входящего результата.
// Если after нет, то можно ничего не указывать, все выведется.
Expand All @@ -30,7 +30,7 @@ const block_1 = de.func<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, Param
};
},
options: {
params: ( { params } ) => {
params: ( { params }: { params: ParamsIn1 } ) => {
return {
s1: params.id,
};
Expand Down Expand Up @@ -58,7 +58,7 @@ de.run( block_1, {
console.log( result );
});

const block_2 = de.func<Context, never, DescriptBlockResult<ResultOut, string>>({
const block_2 = de.func({
block: () => {
const result = { foo: 'bar' };
return Promise.resolve(result);
Expand Down
8 changes: 4 additions & 4 deletions docs/typescript-examples/http.ts
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ interface ResultOut1 {
b: string;
}

const block1 = de.http<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, ParamsOut1>, DescriptBlockResult<DescriptBlockResultJSON<ResultIn1>, ResultOut1>>( {
const block1 = de.http( {
block: {
parse_body({ body, headers}) {
if (!body) {
Expand All @@ -45,7 +45,7 @@ const block1 = de.http<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, Params

return de.request.DEFAULT_OPTIONS.is_error(error, request_options);
},
is_retry_allowed: (error: de.DescriptError, request_options: DescriptRequestOptions) => {
is_retry_allowed: (error, request_options) => {
// POST-запросы по умолчанию не ретраются
const method = request_options.http_options.method;
if ( method === 'POST' ) {
Expand All @@ -66,13 +66,13 @@ const block1 = de.http<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, Params
},

options: ({
params: ( { params }) => {
params: ( { params }: { params: ParamsIn1 }) => {
return {
s1: params.id_1,
};
},

after: ( { params, result } ) => {
after: ( { params, result }: { params: { s1: ParamsIn1['id_1']}; result: DescriptBlockResultJSON<ResultIn1> } ) => {
return {
a: params.s1,
b: result.result.foo,
Expand Down
14 changes: 3 additions & 11 deletions docs/typescript-examples/object.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,18 +13,10 @@ interface ParamsIn1 {
id_1: string;
}

interface ParamsOut1 {
s1: string;
}

interface ResultOut1 {
a: string;
}

const block_1 = de.http<Context, DescriptBlockParams<ParamsIn1, ParamsIn1, ParamsOut1>, ResultOut1>( {
const block_1 = de.http( {
block: {},
options: {
params: ( { params } ) => {
params: ( { params }: { params: ParamsIn1, context: Context } ) => {
return {
s1: params.id_1,
};
Expand All @@ -48,7 +40,7 @@ interface ResultOut2 {
b: string;
}

const block_2 = de.http<Context, DescriptBlockParams<ParamsIn2>, ResultOut2>( {
const block_2 = de.http( {
block: {},
options: {
params: ( { params }: {params: ParamsIn2} ) => {
Expand Down
15 changes: 6 additions & 9 deletions docs/typescript-examples/options.ts
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ interface ResultRaw {
// * Обрабатываем результат.
// * Используем вычисленные параметры.

const block1 = de.http<Context, DescriptBlockParams<ParamsIn, ParamsIn, ParamsOut>, DescriptBlockResult<ResultRaw, string>>( {
const block1 = de.http( {
block: {},
options: {
// Имеет смысл сделать явный интерфейс для вычисленных параметров.
Expand All @@ -44,7 +44,7 @@ const block1 = de.http<Context, DescriptBlockParams<ParamsIn, ParamsIn, ParamsOu
//
// Если нам где-то вообще понадобится context, то лучше всего задать его тип здесь.
//
params: ( { params, context }) => {
params: ( { params, context }:{ params: ParamsIn, context: Context } ): ParamsOut => {
return {
foo: params.id,
};
Expand All @@ -65,7 +65,7 @@ const block1 = de.http<Context, DescriptBlockParams<ParamsIn, ParamsIn, ParamsOu
// Если мы здесь хотим использовать params, то нам приходится прописать тип явно.
// Typescript не позволяет частично задавать тип при destructure.
//
after: ( { params, result }) => {
after: ( { params, result }: { params: ParamsOut, result: ResultRaw }) => {
// Тип для обработанного результата нам в принципе не нужен.
// Он выведется из того, что мы вернули.
//
Expand All @@ -90,13 +90,10 @@ de.run( block1, {
// * Вычисляем новые параметры.
// * Обрабатываем результат, но params нам в after не нужны.

const block2 = de.http<Context, DescriptBlockParams<ParamsIn, ParamsIn, ParamsOut>, DescriptBlockResult<ResultRaw, string>>( {
const block2 = de.http( {
block: {},
options: {
// Не объявляем тип ParamsOut, он выведется из того, что мы вернем из options.params.
// этот кейс я сломал. автовыведение магии работать не будет пока что
//params: ( { params, context }: { params: ParamsIn, context: Context } ) => {
params: ( { params, context }) => {
params: ( { params, context }: { params: ParamsIn, context: Context }) => {
return {
foo: params.id,
};
Expand All @@ -108,7 +105,7 @@ const block2 = de.http<Context, DescriptBlockParams<ParamsIn, ParamsIn, ParamsOu
}
},

after: ( { result } ) => {
after: ( { result }: { result: ResultRaw } ) => {
return result.a;
},
},
Expand Down
Loading

0 comments on commit 2c29596

Please sign in to comment.