Skip to content

Commit effea08

Browse files
authored
fix: scalar generation (#1348)
1 parent 7bc9847 commit effea08

22 files changed

+365
-291
lines changed

package.json

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -107,12 +107,12 @@
107107
"examples:link-mode": "cd examples && pnpm add ..",
108108
"examples:check:types": "cd examples && tsc --noEmit",
109109
"examples:test": "cd examples && pnpm test",
110-
"examples:gen:website": "tsx scripts/generate-examples-derivatives/generate.ts && pnpm format",
110+
"examples:gen:website": "tsx scripts/generate-examples-derivatives/generate.ts && pnpm fix:format",
111111
"examples:gen:outputs": "tsx scripts/generate-examples-derivatives/generate.ts --outputs",
112112
"examples:gen:tests": "tsx scripts/generate-examples-derivatives/generate.ts --tests && dprint fmt examples/__tests__/**/*",
113113
"website:gen:graffle": "pnpm build && cd website && pnpm i && pnpm gen:graffle",
114-
"format": "pnpm build:docs && dprint fmt",
115-
"lint": "eslint . --fix --ignore-pattern 'website' --ignore-pattern 'build'",
114+
"fix:format": "pnpm build:docs && dprint fmt",
115+
"fix:lint": "eslint . --fix --ignore-pattern 'website' --ignore-pattern 'build'",
116116
"check": "pnpm check:types && pnpm check:format && pnpm check:lint && pnpm check:publint && pnpm examples:check:types",
117117
"check:types": "tsc --noEmit",
118118
"check:format": "dprint check && pnpm build:docs && git diff --exit-code README.md",

sandbox.ts

Whitespace-only changes.

src/generator/generator/__snapshots__/generate.test.ts.snap

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,9 @@
22

33
exports[`custom scalars module results in client prefilling those custom scalars 1`] = `
44
"import type * as $$Utilities from "graffle/utilities-for-generated";
5-
65
import * as CustomScalars from "../../scalars.js";
76
87
export * from "../../scalars.js";
9-
export { Date } from "../../scalars.js";
108
//
119
//
1210
//
@@ -46,7 +44,7 @@ export * from "graffle/generator-helpers/standard-scalar-types";
4644
4745
export const $registry = {
4846
map: {
49-
Date: Date,
47+
Date: CustomScalars.Date,
5048
},
5149
} as $Registry;
5250

src/generator/generators/Client.ts

Lines changed: 14 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { identifiers } from '../helpers/identifiers.js'
1+
import { $ } from '../helpers/identifiers.js'
22
import { createModuleGenerator, importModuleGenerator } from '../helpers/moduleGenerator.js'
33
import { ModuleGeneratorData } from './Data.js'
44
import { ModuleGeneratorScalar } from './Scalar.js'
@@ -10,27 +10,25 @@ export const ModuleGeneratorClient = createModuleGenerator(
1010
code(importModuleGenerator(config, ModuleGeneratorSchemaDrivenDataMap))
1111
code(importModuleGenerator(config, ModuleGeneratorData))
1212
code(importModuleGenerator(config, ModuleGeneratorScalar))
13-
code(
14-
`import * as ${identifiers.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'`,
15-
`import { TransportHttp } from '${config.paths.imports.grafflePackage.extensionTransportHttp}'`,
16-
`import { DocumentBuilder } from '${config.paths.imports.grafflePackage.extensionDocumentBuilder}'`,
17-
)
18-
code()
19-
code(`
20-
const context = ${identifiers.$$Utilities}.pipe(
21-
${identifiers.$$Utilities}.contextEmpty,
22-
ctx => ${identifiers.$$Utilities}.Extensions.addAndApplyMany(ctx, [TransportHttp, DocumentBuilder]),
23-
ctx => ${identifiers.$$Utilities}.Transports.configureCurrentOrThrow(ctx, { url: $$Data.defaultSchemaUrl }),
24-
ctx => ${identifiers.$$Utilities}.Configuration.add(ctx, {
13+
code`
14+
import * as ${$.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'
15+
import { TransportHttp } from '${config.paths.imports.grafflePackage.extensionTransportHttp}'
16+
import { DocumentBuilder } from '${config.paths.imports.grafflePackage.extensionDocumentBuilder}'
17+
18+
const context = ${$.$$Utilities}.pipe(
19+
${$.$$Utilities}.contextEmpty,
20+
ctx => ${$.$$Utilities}.Extensions.addAndApplyMany(ctx, [TransportHttp, DocumentBuilder]),
21+
ctx => ${$.$$Utilities}.Transports.configureCurrentOrThrow(ctx, { url: $$Data.defaultSchemaUrl }),
22+
ctx => ${$.$$Utilities}.Configuration.add(ctx, {
2523
schema: {
2624
name: $$Data.Name,
2725
map: $$SchemaDrivenDataMap.schemaDrivenDataMap,
2826
},
2927
}),
30-
ctx => ${identifiers.$$Utilities}.Scalars.set(ctx, { scalars: $$Scalar.$registry }),
28+
ctx => ${$.$$Utilities}.Scalars.set(ctx, { scalars: $$Scalar.$registry }),
3129
)
3230
33-
export const create = ${identifiers.$$Utilities}.createConstructorWithContext(context)
34-
`)
31+
export const create = ${$.$$Utilities}.createConstructorWithContext(context)
32+
`
3533
},
3634
)

src/generator/generators/Data.ts

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,16 @@ import { createModuleGenerator } from '../helpers/moduleGenerator.js'
33
export const ModuleGeneratorData = createModuleGenerator(
44
`data`,
55
({ config, code }) => {
6-
code(
7-
`export const Name = \`${config.name}\``,
8-
`export type Name = '${config.name}'`,
9-
)
10-
code()
11-
code(
12-
`export const defaultSchemaUrl = ${
13-
config.options.defaultSchemaUrl ? `new URL("${config.options.defaultSchemaUrl.href}")` : `undefined`
14-
}`,
15-
)
6+
const defaultSchemaUrl = config.options.defaultSchemaUrl
7+
? `new URL("${config.options.defaultSchemaUrl.href}")`
8+
: `undefined`
9+
10+
code`
11+
export const Name = \`${config.name}\`
12+
13+
export type Name = '${config.name}'
14+
15+
export const defaultSchemaUrl = ${defaultSchemaUrl}
16+
`
1617
},
1718
)
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
// todo remove use of Utils.Aug when schema errors not in use
22
// todo jsdoc
33
import { Code } from '../../lib/Code.js'
4-
import { identifiers } from '../helpers/identifiers.js'
4+
import { $ } from '../helpers/identifiers.js'
55
import { createModuleGenerator, importModuleGenerator } from '../helpers/moduleGenerator.js'
66
import { ModuleGeneratorSchema } from './Schema.js'
77
import { ModuleGeneratorSelectionSets } from './SelectionSets.js'
@@ -11,31 +11,31 @@ export const ModuleGeneratorMethodsDocument = createModuleGenerator(
1111
({ config, code }) => {
1212
code(importModuleGenerator(config, ModuleGeneratorSelectionSets, true))
1313
code(importModuleGenerator(config, ModuleGeneratorSchema, true))
14-
code(`
15-
import type * as ${identifiers.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'
16-
`)
17-
code()
14+
code`
15+
import type * as ${$.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'
16+
`
17+
code``
1818

1919
const contextTsExpectError = config.code.schemaInterfaceExtendsEnabled
2020
? ``
2121
: `// @ts-expect-error Context constraint missing to avoid TS compare depth limit.`
2222
const contextExtendsClause = config.code.schemaInterfaceExtendsEnabled
23-
? `extends ${identifiers.$$Utilities}.Context`
23+
? `extends ${$.$$Utilities}.Context`
2424
: ``
2525
code(Code.tsInterface({
2626
name: `Document`,
2727
parameters: [`$Context ${contextExtendsClause}`],
2828
// dprint-ignore
2929
block: `
30-
<$Document>(document: ${identifiers.$$Utilities}.ExactNonEmpty<
30+
<$Document>(document: ${$.$$Utilities}.ExactNonEmpty<
3131
$Document,
32-
${identifiers.$$SelectionSets}.$Document<
32+
${$.$$SelectionSets}.$Document<
3333
${contextTsExpectError}
3434
$Context['scalars']>
3535
>
36-
): ${identifiers.$$Utilities}.DocumentBuilderKit.DocumentRunner<
36+
): ${$.$$Utilities}.DocumentBuilderKit.DocumentRunner<
3737
$Context,
38-
${identifiers.$$Schema}.${identifiers.Schema},
38+
${$.$$Schema}.${$.Schema},
3939
// @ts-expect-error We use Exact instead of constraint on this function. TypeScript does not see that as
4040
// Satisfying the constraint on the DocumentRunner type.
4141
$Document
@@ -47,11 +47,11 @@ export const ModuleGeneratorMethodsDocument = createModuleGenerator(
4747
const hktTsExpectError = config.code.schemaInterfaceExtendsEnabled
4848
? `// @ts-expect-error parameter is Untyped.`
4949
: ``
50-
code(`
51-
export interface BuilderMethodsDocumentFn extends ${identifiers.$$Utilities}.TypeFunction {
50+
code`
51+
export interface BuilderMethodsDocumentFn extends ${$.$$Utilities}.TypeFunction {
5252
${hktTsExpectError}
5353
return: Document<this['params']>
5454
}
55-
`)
55+
`
5656
},
5757
)

src/generator/generators/MethodsRoot.ts

Lines changed: 26 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { Grafaid } from '../../lib/grafaid/_namespace.js'
33
import { createFromObjectTypeAndMapOrThrow } from '../../lib/grafaid/schema/RootDetails.js'
44
import { capitalizeFirstLetter } from '../../lib/prelude.js'
5-
import { identifiers } from '../helpers/identifiers.js'
5+
import { $ } from '../helpers/identifiers.js'
66
import { createModuleGenerator, importModuleGenerator } from '../helpers/moduleGenerator.js'
77
import { createCodeGenerator } from '../helpers/moduleGeneratorRunner.js'
88
import { renderDocumentation, renderName } from '../helpers/render.js'
@@ -14,31 +14,27 @@ export const ModuleGeneratorMethodsRoot = createModuleGenerator(
1414
({ config, code }) => {
1515
code(importModuleGenerator(config, ModuleGeneratorSelectionSets, true))
1616
code(importModuleGenerator(config, ModuleGeneratorSchema, true))
17-
code(
18-
`import type * as ${identifiers.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}';`,
19-
)
20-
code()
21-
code()
17+
code`import type * as ${$.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'`
18+
code``
19+
code``
2220
config.schema.kindMap.list.Root.forEach(node => {
2321
code(renderRootType({ config, node }))
24-
code()
22+
code``
2523
})
26-
code(`
27-
export interface BuilderMethodsRoot<$Context extends ${identifiers.$$Utilities}.Context> {
24+
code`
25+
export interface BuilderMethodsRoot<$Context extends ${$.$$Utilities}.Context> {
2826
${
2927
config.schema.kindMap.root.list.map(node => {
3028
return `${node.operationType}: ${node.name.canonical}Methods<$Context>`
3129
}).join(`\n`)
3230
}
3331
}
34-
`)
35-
code()
36-
code(`
37-
export interface BuilderMethodsRootFn extends ${identifiers.$$Utilities}.TypeFunction {
32+
33+
export interface BuilderMethodsRootFn extends ${$.$$Utilities}.TypeFunction {
3834
// @ts-expect-error parameter is Untyped.
3935
return: BuilderMethodsRoot<this['params']>
4036
}
41-
`)
37+
`
4238
},
4339
)
4440

@@ -47,35 +43,36 @@ const renderRootType = createCodeGenerator<{ node: Grafaid.Schema.ObjectType }>(
4743
const { operationType } = createFromObjectTypeAndMapOrThrow(node, config.schema.kindMap.root)
4844

4945
// dprint-ignore
50-
code(`
51-
export interface ${node.name}Methods<$Context extends ${identifiers.$$Utilities}.Context> {
46+
code`
47+
export interface ${node.name}Methods<$Context extends ${$.$$Utilities}.Context> {
5248
$batch:
53-
${identifiers.$$Utilities}.GraffleKit.Context.Configuration.Check.Preflight<
49+
${$.$$Utilities}.GraffleKit.Context.Configuration.Check.Preflight<
5450
$Context,
55-
<$SelectionSet>(selectionSet: ${identifiers.$$Utilities}.Exact<$SelectionSet, ${identifiers.$$SelectionSets}.${node.name}<$Context['scalars']>>) =>
51+
<$SelectionSet>(selectionSet: ${$.$$Utilities}.Exact<$SelectionSet, ${$.$$SelectionSets}.${node.name}<$Context['scalars']>>) =>
5652
Promise<
5753
& (null | {})
58-
& ${identifiers.$$Utilities}.HandleOutput<
54+
& ${$.$$Utilities}.HandleOutput<
5955
$Context,
60-
${identifiers.$$Utilities}.DocumentBuilderKit.InferResult.Operation${capitalizeFirstLetter(operationType)}<${identifiers.$$Utilities}.AssertExtendsObject<$SelectionSet>, ${identifiers.$$Schema}.${identifiers.Schema}<$Context['scalars']>>
56+
${$.$$Utilities}.DocumentBuilderKit.InferResult.Operation${capitalizeFirstLetter(operationType)}<${$.$$Utilities}.AssertExtendsObject<$SelectionSet>, ${$.$$Schema}.${$.Schema}<$Context['scalars']>>
6157
>
6258
>
6359
>
6460
__typename:
65-
${identifiers.$$Utilities}.GraffleKit.Context.Configuration.Check.Preflight<
61+
${$.$$Utilities}.GraffleKit.Context.Configuration.Check.Preflight<
6662
$Context,
6763
() =>
6864
Promise<
6965
& (null | {})
70-
& ${identifiers.$$Utilities}.HandleOutputDocumentBuilderRootField<
66+
& ${$.$$Utilities}.HandleOutputDocumentBuilderRootField<
7167
$Context,
7268
{ __typename: '${node.name}' },
7369
'__typename'
7470
>
7571
>
7672
>
7773
${fieldMethods}
78-
}`)
74+
}
75+
`
7976
})
8077

8178
const renderFieldMethods = createCodeGenerator<{ node: Grafaid.Schema.ObjectType }>(({ node, config, code }) => {
@@ -90,20 +87,20 @@ const renderFieldMethods = createCodeGenerator<{ node: Grafaid.Schema.ObjectType
9087

9188
const { operationType } = createFromObjectTypeAndMapOrThrow(node, config.schema.kindMap.root)
9289
// dprint-ignore
93-
code(`
90+
code`
9491
${field.name}:
95-
${identifiers.$$Utilities}.GraffleKit.Context.Configuration.Check.Preflight<
92+
${$.$$Utilities}.GraffleKit.Context.Configuration.Check.Preflight<
9693
$Context,
97-
<$SelectionSet>(selectionSet${isOptional ? `?` : ``}: ${identifiers.$$Utilities}.Exact<$SelectionSet, ${identifiers.$$SelectionSets}.${renderName(node.name)}.${renderName(field)}<$Context['scalars']>>) =>
94+
<$SelectionSet>(selectionSet${isOptional ? `?` : ``}: ${$.$$Utilities}.Exact<$SelectionSet, ${$.$$SelectionSets}.${renderName(node.name)}.${renderName(field)}<$Context['scalars']>>) =>
9895
Promise<
9996
& (null | {})
100-
& ${identifiers.$$Utilities}.HandleOutputDocumentBuilderRootField<
97+
& ${$.$$Utilities}.HandleOutputDocumentBuilderRootField<
10198
$Context,
102-
${identifiers.$$Utilities}.DocumentBuilderKit.InferResult.Operation${capitalizeFirstLetter(operationType)}<{ ${field.name}: $SelectionSet}, ${identifiers.$$Schema}.${identifiers.Schema}<$Context['scalars']>>,
99+
${$.$$Utilities}.DocumentBuilderKit.InferResult.Operation${capitalizeFirstLetter(operationType)}<{ ${field.name}: $SelectionSet}, ${$.$$Schema}.${$.Schema}<$Context['scalars']>>,
103100
'${field.name}'
104101
>
105102
>
106103
>
107-
`)
104+
`
108105
}
109106
})

src/generator/generators/MethodsSelect.ts

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import { Code } from '../../lib/Code.js'
33
import { entries, pick, values } from '../../lib/prelude.js'
44
import { Tex } from '../../lib/tex/_namespace.js'
5-
import { identifiers } from '../helpers/identifiers.js'
5+
import { $ } from '../helpers/identifiers.js'
66
import { createModuleGenerator, importModuleGenerator } from '../helpers/moduleGenerator.js'
77
import { renderName } from '../helpers/render.js'
88
import { ModuleGeneratorSelectionSets } from './SelectionSets.js'
@@ -14,12 +14,10 @@ export const ModuleGeneratorMethodsSelect = createModuleGenerator(
1414
const kinds = entries(kindMap)
1515

1616
code(importModuleGenerator(config, ModuleGeneratorSelectionSets))
17-
code(
18-
`import type * as ${identifiers.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'`,
19-
)
20-
code()
17+
code`import type * as ${$.$$Utilities} from '${config.paths.imports.grafflePackage.utilitiesForGenerated}'`
18+
code``
2119
code(Tex.title1(`Select Methods Interface`))
22-
code()
20+
code``
2321
code(Code.tsInterface({
2422
name: `$MethodsSelect`,
2523
block: values(kindMap).flatMap(type => {
@@ -28,21 +26,19 @@ export const ModuleGeneratorMethodsSelect = createModuleGenerator(
2826
})
2927
}),
3028
}))
31-
code()
29+
code``
3230
for (const [kindName, kind] of kinds) {
3331
code(Tex.title1(kindName))
34-
code()
32+
code``
3533
for (const type of kind) {
3634
code(Code.tsInterface({
3735
name: type.name,
3836
block: `
39-
<$SelectionSet>(selectionSet: ${identifiers.$$Utilities}.Exact<$SelectionSet, $$SelectionSets.${
40-
renderName(type)
41-
}>):
37+
<$SelectionSet>(selectionSet: ${$.$$Utilities}.Exact<$SelectionSet, $$SelectionSets.${renderName(type)}>):
4238
$SelectionSet
4339
`,
4440
}))
45-
code()
41+
code``
4642
}
4743
}
4844
},

0 commit comments

Comments
 (0)