Skip to content

Commit a78ebbe

Browse files
authored
refactor(lib/anyware): data type oriented builders (#1274)
1 parent 5abf7a8 commit a78ebbe

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

67 files changed

+1335
-1162
lines changed

examples/__outputs__/20_output/output_preset__standard-graphql.output.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ ContextualError: There was an error in the core implementation of hook "exchange
2121
at new URL (node:internal/url:XX:XX)
2222
at new Request (node:internal/deps/undici/undici:XX:XX)
2323
at Object.run (/some/path/to/httpTransport.ts:XX:XX:27)
24-
at Object.run (/some/path/to/builder.ts:XX:XX:53)
24+
at Object.run (/some/path/to/Pipeline.ts:XX:XX:51)
2525
at runStep (/some/path/to/runStep.ts:XX:XX:37)
2626
at runPipeline (/some/path/to/runPipeline.ts:XX:XX:8)
2727
at runPipeline (/some/path/to/runPipeline.ts:XX:XX:20)

src/client/builderExtensions/anyware.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,13 @@ export interface Anyware<$Arguments extends Builder.Extension.Parameters<Builder
1515
* TODO Anyware Docs.
1616
*/
1717
anyware: (
18-
interceptor: AnywareLib.Interceptor.InferConstructor<
19-
RequestPipeline['spec']
20-
>,
18+
interceptor: AnywareLib.Interceptor.InferFromPipeline<RequestPipeline>,
2119
) => Builder.Definition.MaterializeWith<$Arguments['definition'], $Arguments['context']>
2220
}
2321

2422
export const builderExtensionAnyware = Builder.Extension.create<BuilderExtensionAnyware>((builder, context) => {
2523
const properties = {
26-
anyware: (interceptor: AnywareLib.Interceptor.InferConstructor<RequestPipeline['spec']>) => {
24+
anyware: (interceptor: AnywareLib.Interceptor.InferFromPipeline<RequestPipeline>) => {
2725
return builder({
2826
...context,
2927
extensions: [

src/client/gql/gql.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,9 @@ export const builderExtensionGql = Builder.Extension.create<BuilderExtensionGql>
7070
url,
7171
schema,
7272
request: analyzedRequest,
73-
} as RequestPipeline['spec']['input']
73+
} as RequestPipeline['input']
7474

75-
const result = await Anyware.Pipeline.run(requestPipeline, {
75+
const result = await Anyware.PipelineDef.run(requestPipeline, {
7676
initialInput,
7777
// retryingExtension: context.retry as any,
7878
interceptors: context.extensions.filter(_ => _.onRequest !== undefined).map(_ => _.onRequest!) as any,

src/client/handleOutput.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import type { GraphQLError } from 'graphql'
22
import type { Simplify } from 'type-fest'
33
import type { SimplifyDeepExcept } from '../documentBuilder/Simplify.js'
44
import type { RunTypeHookOnRequestResult } from '../extension/extension.js'
5+
import type { Anyware } from '../lib/anyware/__.js'
56
import { Errors } from '../lib/errors/__.js'
67
import type { Grafaid } from '../lib/grafaid/__.js'
78
import type { SomeObjectData } from '../lib/grafaid/graphql.js'
@@ -13,7 +14,7 @@ import {
1314
type GetOrNever,
1415
type Values,
1516
} from '../lib/prelude.js'
16-
import type { RequestPipeline, requestPipeline } from '../requestPipeline/RequestPipeline.js'
17+
import type { requestPipeline, RequestPipelineSpec } from '../requestPipeline/RequestPipeline.js'
1718
import type { GlobalRegistry } from '../types/GlobalRegistry/GlobalRegistry.js'
1819
import type { TransportHttp } from '../types/Transport.js'
1920
import type { Context } from './context.js'
@@ -52,7 +53,7 @@ export type GraffleExecutionResultEnvelope<$Config extends Config = Config> =
5253

5354
export const handleOutput = (
5455
state: Context,
55-
result: RequestPipeline['output'],
56+
result: Anyware.PipelineDef.Utilities.InferResult<RequestPipelineSpec>,
5657
) => {
5758
if (isContextConfigTraditionalGraphQLOutput(state.config)) {
5859
if (result instanceof Error) throw result

src/documentBuilder/requestMethods/requestMethods.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ const executeDocument = async (
137137
request,
138138
} as RequestPipeline['input']
139139

140-
const result = await Anyware.Pipeline.run(requestPipeline, {
140+
const result = await Anyware.PipelineDef.run(requestPipeline, {
141141
initialInput,
142142
// retryingExtension: state.retry as any,
143143
interceptors: state.extensions.filter(_ => _.onRequest !== undefined).map(_ => _.onRequest!) as any,

src/extension/extension.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ export interface Extension<
5757
/**
5858
* Anyware executed on every request.
5959
*/
60-
onRequest?: Anyware.Interceptor.InferConstructor<RequestPipeline['spec']>
60+
onRequest?: Anyware.Interceptor.InferFromPipeline<RequestPipeline>
6161
/**
6262
* Manipulate the builder.
6363
* You can extend the builder with new properties at both runtime AND buildtime (types, TypeScript).
@@ -168,7 +168,7 @@ export const createExtension = <
168168
custom?: $Custom
169169
create: (params: { config: $Config }) => {
170170
builder?: $BuilderExtension
171-
onRequest?: Anyware.Interceptor.InferConstructor<RequestPipeline['spec']>
171+
onRequest?: Anyware.Interceptor.InferFromPipeline<RequestPipeline>
172172
typeHooks?: () => $TypeHooks
173173
}
174174
},

src/extensions/Throws/Throws.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ interface BuilderExtension_<$Args extends Builder.Extension.Parameters<BuilderEx
4040
*/
4141
throws: () => Builder.Definition.MaterializeWith<
4242
$Args['definition'],
43-
ConfigManager.UpdateAtKey<
43+
ConfigManager.SetKey<
4444
$Args['context'],
4545
'config',
4646
// @ts-expect-error fixme
@@ -49,7 +49,7 @@ interface BuilderExtension_<$Args extends Builder.Extension.Parameters<BuilderEx
4949
>
5050
}
5151

52-
type ThrowsifyConfig<$BuilderConfig extends BuilderConfig> = ConfigManager.SetAtKeyPath<
52+
type ThrowsifyConfig<$BuilderConfig extends BuilderConfig> = ConfigManager.SetKeyAtPath<
5353
$BuilderConfig,
5454
['output', 'errors'],
5555
{ other: 'throw'; execution: 'throw' }

src/lib/anyware/ExecutableStep.ts

Lines changed: 0 additions & 6 deletions
This file was deleted.

src/lib/anyware/Extension/Builder.ts

Lines changed: 28 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,40 @@
1-
import type { ConfigManager } from '../../config-manager/__.js'
2-
import type { Overload } from '../Overload/__.js'
3-
import type { Pipeline } from '../Pipeline/__.js'
1+
import { Overload } from '../Overload/__.js'
2+
import type { PipelineDef } from '../PipelineDef/__.js'
3+
import type { Extension } from './__.js'
4+
5+
type Create = <$Pipeline extends PipelineDef>() => Builder<$Pipeline, Extension.States.Empty>
46

57
export interface Builder<
6-
$PipelineContext extends Pipeline.Context = Pipeline.Context,
7-
$Context extends Context = Context,
8+
$Pipeline extends PipelineDef = PipelineDef,
9+
$Extension extends Extension = Extension,
810
> {
9-
context: $Context
11+
type: $Extension
1012
/**
1113
* TODO
1214
*/
13-
overload: <$OverloadBuilder extends Overload.Builder<$PipelineContext>>(
14-
overloadBuilder: Overload.BuilderCallback<$PipelineContext, $OverloadBuilder>,
15+
overload: <$OverloadBuilder extends Overload.Builder<$Pipeline>>(
16+
overloadBuilderCallback: Overload.BuilderCallback<$Pipeline, $OverloadBuilder>,
1517
) => Builder<
16-
$PipelineContext,
17-
ConfigManager.AppendAtKey<
18-
$Context,
19-
'overloads',
20-
$OverloadBuilder['context']
21-
>
18+
$Pipeline,
19+
Extension.Updaters.AddOverload<$Extension, $OverloadBuilder['type']>
2220
>
2321
}
2422

25-
export interface Context {
26-
overloads: Overload.BuilderContext[]
27-
}
23+
export namespace Builder {
24+
export const create: Create = () => {
25+
const extension: Extension = {
26+
overloads: [],
27+
}
28+
29+
const builder: Builder = {
30+
type: extension,
31+
overload: (builderCallback) => {
32+
const overload = builderCallback({ create: Overload.create })
33+
extension.overloads.push(overload.type)
34+
return builder as any
35+
},
36+
}
2837

29-
export interface ContextEmpty extends Context {
30-
overloads: []
38+
return builder as any
39+
}
3140
}
Lines changed: 0 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +0,0 @@
1-
import { __ } from '../../prelude.js'
2-
import { Overload } from '../Overload/__.js'
3-
import type { Pipeline } from '../Pipeline/__.js'
4-
import type { Builder, Context, ContextEmpty } from './Builder.js'
5-
6-
export * from './Builder.js'
7-
8-
export const create: Create = () => {
9-
const context: Context = {
10-
overloads: [],
11-
}
12-
13-
const builder: Builder = {
14-
context,
15-
overload: (builderCallback) => {
16-
const overload = builderCallback({ create: Overload.create })
17-
context.overloads.push(overload.context)
18-
return builder as any
19-
},
20-
}
21-
22-
return builder as any
23-
}
24-
25-
type Create = <$PipelineContext extends Pipeline.Context>() => Builder<$PipelineContext, ContextEmpty>

0 commit comments

Comments
 (0)