Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit4ac0cd1

Browse files
authored
feat(ts-client): use a global namespace (#808)
1 parent2a39e81 commit4ac0cd1

File tree

16 files changed

+102
-55
lines changed

16 files changed

+102
-55
lines changed

‎src/layers/1_Schema/Hybrid/types/Scalar/Scalar.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
/* eslint-disable @typescript-eslint/ban-types */
22

3+
importtype{GlobalRegistry}from'../../../../2_generator/globalRegistry.js'
34
importtype{Codec}from'./codec.js'
45
import{nativeScalarCodecs}from'./nativeScalarCodecs.js'
56

@@ -58,6 +59,12 @@ export const Scalars = {
5859
}
5960

6061
// todo this mixes scalars from different schemas
61-
exporttypeAny=String|Int|Boolean|ID|Float|Values<NamedSchemas[keyofNamedSchemas]['customScalars']>
62+
exporttypeAny=
63+
|String
64+
|Int
65+
|Boolean
66+
|ID
67+
|Float
68+
|Values<GlobalRegistry.Schemas[keyofGlobalRegistry.Schemas]['customScalars']>
6269

6370
typeValues<T>=Textendsany ?keyofTextendsnever ?never :T[keyofT] :never

‎src/layers/2_generator/__snapshots__/files.test.ts.snap

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,6 +178,7 @@ export interface Index {
178178
rootResultFields: {
179179
Query: {
180180
result:'result'
181+
resultNonNull:'resultNonNull'
181182
}
182183
Mutation: {}
183184
Subscription: {}
@@ -306,6 +307,12 @@ export namespace Root {
306307
case:Enum.Case
307308
}>
308309
>
310+
resultNonNull: $.Field<
311+
Union.Result,
312+
$.Args<{
313+
case:Enum.Case
314+
}>
315+
>
309316
string: $.Field<$.Output.Nullable<$Scalar.String>, null>
310317
stringWithArgEnum: $.Field<
311318
$.Output.Nullable<$Scalar.String>,
@@ -698,6 +705,7 @@ export const Query = $.Object$(\`Query\`, {
698705
}),
699706
),
700707
result:$.field($.Output.Nullable(()=>Result),$.Args({ case:Case })),
708+
resultNonNull:$.field(()=>Result,$.Args({ case:Case })),
701709
string:$.field($.Output.Nullable($Scalar.String)),
702710
stringWithArgEnum:$.field($.Output.Nullable($Scalar.String),$.Args({ ABCEnum:$.Input.Nullable(ABCEnum) })),
703711
stringWithArgInputObject:$.field(
@@ -773,6 +781,7 @@ export const $Index = {
773781
rootResultFields: {
774782
Query: {
775783
result:'result'asconst,
784+
resultNonNull:'resultNonNull'asconst,
776785
},
777786
Mutation: {},
778787
Subscription: {},

‎src/layers/2_generator/code/global.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -22,21 +22,23 @@ export const generateGlobal = (config: Config) => {
2222

2323
code.push(`
2424
declare global {
25-
interface NamedSchemas {
26-
${config.name}: {
27-
index: Index
28-
customScalars: {
29-
${
25+
export namespace GraphQLRequestTypes {
26+
export interface Schemas {
27+
${config.name}: {
28+
index: Index
29+
customScalars: {
30+
${
3031
config.typeMapByKind.GraphQLScalarTypeCustom
3132
.map((_)=>{
3233
return`${_.name}:${
3334
needsDefaultCustomScalarImplementation ?`${StandardScalarNamespace}.String` :`CustomScalar.${_.name}`
3435
}`
3536
}).join(`\n`)
3637
}
37-
}
38-
featureOptions: {
39-
schemaErrors:${config.options.errorTypeNamePattern ?`true` :`false`}
38+
}
39+
featureOptions: {
40+
schemaErrors:${config.options.errorTypeNamePattern ?`true` :`false`}
41+
}
4042
}
4143
}
4244
}

‎src/layers/2_generator/globalRegistry.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@ import type { TSError } from '../../lib/TSError.js'
22
importtype{Schema}from'../1_Schema/__.js'
33

44
declare global{
5-
// todo some kind of distinct prefix
6-
interfaceNamedSchemas{}
5+
exportnamespaceGraphQLRequestTypes{
6+
interfaceSchemas{
7+
}
8+
}
79
}
810

911
exporttypeGlobalRegistry=Record<string,{
@@ -15,27 +17,28 @@ export type GlobalRegistry = Record<string, {
1517
}>
1618

1719
exportnamespaceGlobalRegistry{
18-
exporttypeSchemas=NamedSchemas
20+
exporttypeSchemas=GraphQLRequestTypes.Schemas
1921

2022
exporttypeDefaultSchemaName='default'
2123

22-
exporttypeSchemaNames=keyofNamedSchemasextendsnever
24+
exporttypeSchemaNames=keyofGraphQLRequestTypes.Schemasextendsnever
2325
?TSError<'SchemaNames','No schemas have been registered. Did you run graphql-request generate?'>
24-
:keyofNamedSchemas
26+
:keyofGraphQLRequestTypes.Schemas
2527

26-
// todo use conditional types?
27-
// eslint-disable-next-line
28-
//@ts-ignore populated after generation
29-
exporttypeHasSchemaErrors<$NameextendsSchemaNames>=NamedSchemas[$Name]['featureOptions']['schemaErrors']
28+
exporttypeHasSchemaErrors<$NameextendsSchemaNames>=
29+
// todo use conditional types?
30+
// eslint-disable-next-line
31+
//@ts-ignore populated after generation
32+
GraphQLRequestTypes.Schemas[$Name]['featureOptions']['schemaErrors']
3033

3134
// todo use conditional types?
3235
// eslint-disable-next-line
3336
//@ts-ignore populated after generation
3437
exporttypeGetSchemaIndexOptionally<$NameextendsSchemaNames|undefined>=$NameextendsSchemaNames
3538
// eslint-disable-next-line
3639
//@ts-ignore populated after generation
37-
?NamedSchemas[$Name]['index']
40+
?GraphQLRequestTypes.Schemas[$Name]['index']
3841
// eslint-disable-next-line
3942
//@ts-ignore populated after generation
40-
:NamedSchemas['default']['index']
43+
:GraphQLRequestTypes.Schemas['default']['index']
4144
}

‎src/layers/5_client/client.returnMode.test-d.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ describe('default is data', () => {
3232
describe('data',()=>{
3333
constclient=create({ schema, schemaIndex,returnMode:'data'})
3434
test(`document.run`,async()=>{
35-
expectTypeOf(client.document({main:{query:{id:true}}}).run()).resolves.toEqualTypeOf<{id:string|null}>()
35+
expectTypeOf(client.document({x:{query:{id:true}}}).run()).resolves.toEqualTypeOf<{id:string|null}>()
3636
})
3737
test('query.<fieldMethod>',async()=>{
3838
awaitexpectTypeOf(client.query.__typename()).resolves.toEqualTypeOf<'Query'>()
@@ -78,7 +78,8 @@ describe('successData', () => {
7878
})
7979
describe('without explicit __typename',()=>{
8080
test('document',async()=>{
81-
awaitexpectTypeOf(client.document({x:{query:{result:{$:{case:'Object1'}}}}}).run()).resolves.toEqualTypeOf<{result:{__typename:"Object1"}|null}>()
81+
constresult=client.document({x:{query:{resultNonNull:{$:{case:'Object1'}}}}}).run()
82+
awaitexpectTypeOf(result).resolves.toEqualTypeOf<{resultNonNull:{__typename:"Object1"}}>()
8283
})
8384
test('query.<fieldMethod>',async()=>{
8485
awaitexpectTypeOf(client.query.result({$:{case:'Object1'}})).resolves.toEqualTypeOf<{__typename:"Object1"}|null>()

‎src/layers/5_client/client.ts

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ interface HookInputDocumentEncode {
3838
documentObject:GraphQLObjectSelection
3939
}
4040

41-
typeInputForSchema<$NameextendsGlobalRegistry.SchemaNames>=$Nameextendsany ?{
41+
typeInputForSchema2<$NameextendsGlobalRegistry.SchemaNames>=$Nameextendsany ?{
4242
/**
4343
*@defaultValue 'default'
4444
*/
@@ -67,14 +67,19 @@ type InputForSchema<$Name extends GlobalRegistry.SchemaNames> = $Name extends an
6767
}
6868
:never
6969

70-
typeInput=InputForSchema<GlobalRegistry.SchemaNames>
71-
72-
exportconstcreate=<$InputextendsInput>(
70+
typeCreate=<
71+
$InputextendsInputForSchema2<GlobalRegistry.SchemaNames>,
72+
>(
7373
input:$Input,
74-
):Client<
74+
)=>Client<
7575
GlobalRegistry.GetSchemaIndexOptionally<$Input['name']>,
7676
ApplyInputDefaults<{returnMode:$Input['returnMode']}>
77-
>=>{
77+
>
78+
79+
// export const create = <$Input extends Input>(
80+
exportconstcreate:Create=(
81+
input,
82+
)=>{
7883
// const parentInput = input
7984
/**
8085
*@remarks Without generation the type of returnMode can be `ReturnModeTypeBase` which leads

‎src/layers/5_select/select.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
importtype{RootTypeName}from'../../lib/graphql.js'
22
importtype{Exact}from'../../lib/prelude.js'
33
importtype{Schema}from'../1_Schema/__.js'
4+
importtype{GlobalRegistry}from'../2_generator/globalRegistry.js'
45
importtype{SelectionSet}from'../3_SelectionSet/__.js'
56

67
// dprint-ignore
@@ -36,4 +37,4 @@ const idProxy = new Proxy({}, {
3637

3738
// eslint-disable-next-line
3839
//@ts-ignore generated types
39-
exportconstselect:TypeSelectionSets<NamedSchemas['default']['index']>=idProxy
40+
exportconstselect:TypeSelectionSets<GlobalRegistry.Schemas['default']['index']>=idProxy

‎tests/_/schema/generated/Global.ts

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@ import { Index } from './Index.js'
33
importtype*asCustomScalarfrom'../../customScalarCodecs.js'
44

55
declare global{
6-
interfaceNamedSchemas{
7-
default:{
8-
index:Index
9-
customScalars:{
10-
Date:CustomScalar.Date
11-
}
12-
featureOptions:{
13-
schemaErrors:true
6+
exportnamespaceGraphQLRequestTypes{
7+
exportinterfaceSchemas{
8+
default:{
9+
index:Index
10+
customScalars:{
11+
Date:CustomScalar.Date
12+
}
13+
featureOptions:{
14+
schemaErrors:true
15+
}
1416
}
1517
}
1618
}

‎tests/_/schema/generated/Index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ export interface Index {
4747
rootResultFields:{
4848
Query:{
4949
result:'result'
50+
resultNonNull:'resultNonNull'
5051
}
5152
Mutation:{}
5253
Subscription:{}

‎tests/_/schema/generated/SchemaBuildtime.ts

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,12 @@ export namespace Root {
116116
case:Enum.Case
117117
}>
118118
>
119+
resultNonNull:$.Field<
120+
Union.Result,
121+
$.Args<{
122+
case:Enum.Case
123+
}>
124+
>
119125
string:$.Field<$.Output.Nullable<$Scalar.String>,null>
120126
stringWithArgEnum:$.Field<
121127
$.Output.Nullable<$Scalar.String>,

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp