Skip to content

Commit 8fa0759

Browse files
committed
move ResolvedCodecType into the public API
1 parent 9dd8d3d commit 8fa0759

File tree

2 files changed

+31
-64
lines changed

2 files changed

+31
-64
lines changed

packages/gel/src/reflection/analyzeQuery.ts

Lines changed: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,14 @@ type QueryType = {
2323
imports: Set<string>;
2424
};
2525

26+
export type AnalyzeQueryOptions = {
27+
useResolvedCodecType?: boolean;
28+
};
29+
2630
export async function analyzeQuery(
2731
client: Client,
2832
query: string,
33+
{ useResolvedCodecType = false }: AnalyzeQueryOptions = {},
2934
): Promise<QueryType> {
3035
const {
3136
cardinality,
@@ -34,11 +39,18 @@ export async function analyzeQuery(
3439
out: outCodec,
3540
} = await client.describe(query);
3641

42+
const generators: CodecGeneratorMap = useResolvedCodecType
43+
? new Map([...defaultCodecGenerators, resolvedCodecTypeScalarTypeGenerator])
44+
: defaultCodecGenerators;
45+
3746
const args = generateTSTypeFromCodec(inCodec, Cardinality.One, {
3847
optionalNulls: true,
3948
readonly: true,
49+
generators,
50+
});
51+
const result = generateTSTypeFromCodec(outCodec, cardinality, {
52+
generators,
4053
});
41-
const result = generateTSTypeFromCodec(outCodec, cardinality);
4254

4355
const imports = args.imports.merge(result.imports);
4456
return {
@@ -160,6 +172,21 @@ const getSortPriority = (field: FieldDef) => {
160172
return 8;
161173
};
162174

175+
const resolvedCodecTypeScalarTypeGenerator = genDef(
176+
ScalarCodec,
177+
(codec, ctx) => {
178+
if (codec.tsModule) {
179+
ctx.imports.add(codec.tsModule, codec.tsType);
180+
}
181+
const isCustomScalar = !codec.typeName.startsWith("std::");
182+
if (isCustomScalar) {
183+
ctx.imports.add("gel", "ResolvedCodecType");
184+
return `ResolvedCodecType<"${codec.typeName}", ${codec.tsType}>`;
185+
}
186+
return codec.tsType;
187+
},
188+
);
189+
163190
export const defaultCodecGenerators: CodecGeneratorMap = new Map([
164191
genDef(NullCodec, () => "null"),
165192
genDef(EnumCodec, (codec) => {

packages/generate/src/queries.ts

Lines changed: 3 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,6 @@
11
import path from "node:path";
22
import { promises as fs } from "node:fs";
3-
import {
4-
$,
5-
_CodecsRegistry,
6-
_ScalarCodec,
7-
systemUtils,
8-
type Client,
9-
type Executor,
10-
} from "gel";
3+
import { $, systemUtils, type Client, type Executor } from "gel";
114
import { type CommandOptions } from "./commandutil";
125
import { headerComment } from "./genutil";
136
import type { Target } from "./genutil";
@@ -73,7 +66,7 @@ currently supported.`);
7366

7467
try {
7568
const query = await readFileUtf8(p);
76-
const types = await analyzeQuery(client, query, {
69+
const types = await $.analyzeQuery(client, query, {
7770
useResolvedCodecType: params.options.useResolvedCodecType,
7871
});
7972
console.log(` ${prettyPath}`);
@@ -129,7 +122,7 @@ currently supported.`);
129122
try {
130123
const query = await readFileUtf8(p);
131124
if (!query) return;
132-
const types = await analyzeQuery(client, query, {
125+
const types = await $.analyzeQuery(client, query, {
133126
useResolvedCodecType: params.options.useResolvedCodecType,
134127
});
135128
const files = generateFiles({
@@ -364,56 +357,3 @@ export class ImportMap extends Map<string, Set<string>> {
364357
return out;
365358
}
366359
}
367-
368-
const resolvedCodecTypeScalarTypeGenerator = $.defineCodecGeneratorTuple(
369-
_ScalarCodec,
370-
(codec, ctx) => {
371-
if (codec.tsModule) {
372-
ctx.imports.add(codec.tsModule, codec.tsType);
373-
}
374-
const isCustomScalar = !codec.typeName.startsWith("std::");
375-
if (isCustomScalar) {
376-
ctx.imports.add("gel", "ResolvedCodecType");
377-
return `ResolvedCodecType<"${codec.typeName}", ${codec.tsType}>`;
378-
}
379-
return codec.tsType;
380-
},
381-
);
382-
383-
async function analyzeQuery(
384-
client: Client,
385-
query: string,
386-
{ useResolvedCodecType }: { useResolvedCodecType?: boolean } = {},
387-
): ReturnType<typeof $.analyzeQuery> {
388-
const {
389-
cardinality,
390-
capabilities,
391-
in: inCodec,
392-
out: outCodec,
393-
} = await client.describe(query);
394-
395-
const generators = new Map([
396-
...$.defaultCodecGenerators.entries(),
397-
...(useResolvedCodecType ? [resolvedCodecTypeScalarTypeGenerator] : []),
398-
]);
399-
400-
const args = $.generateTSTypeFromCodec(inCodec, $.Cardinality.One, {
401-
optionalNulls: true,
402-
readonly: true,
403-
generators: generators,
404-
});
405-
const result = $.generateTSTypeFromCodec(outCodec, cardinality, {
406-
generators: generators,
407-
});
408-
409-
const imports = args.imports.merge(result.imports);
410-
return {
411-
result: result.type,
412-
args: args.type,
413-
cardinality,
414-
capabilities,
415-
query,
416-
importMap: imports,
417-
imports: imports.get("gel") ?? new Set(),
418-
};
419-
}

0 commit comments

Comments
 (0)