@model-ts/graphql 0.0.0-stage → 7.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (114) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/README.md +1280 -2
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/Assembly.d.ts +24 -0
  5. package/dist/Assembly.d.ts.map +1 -0
  6. package/dist/Assembly.js +236 -0
  7. package/dist/Assembly.js.map +1 -0
  8. package/dist/Builder.d.ts +27 -0
  9. package/dist/Builder.d.ts.map +1 -0
  10. package/dist/Builder.js +40 -0
  11. package/dist/Builder.js.map +1 -0
  12. package/dist/Connections.d.ts +41 -0
  13. package/dist/Connections.d.ts.map +1 -0
  14. package/dist/Connections.js +243 -0
  15. package/dist/Connections.js.map +1 -0
  16. package/dist/Definitions.d.ts +139 -0
  17. package/dist/Definitions.d.ts.map +1 -0
  18. package/dist/Definitions.js +117 -0
  19. package/dist/Definitions.js.map +1 -0
  20. package/dist/Errors.d.ts +39 -0
  21. package/dist/Errors.d.ts.map +1 -0
  22. package/dist/Errors.js +103 -0
  23. package/dist/Errors.js.map +1 -0
  24. package/dist/Execution.d.ts +52 -0
  25. package/dist/Execution.d.ts.map +1 -0
  26. package/dist/Execution.js +174 -0
  27. package/dist/Execution.js.map +1 -0
  28. package/dist/FieldRuntime.d.ts +5 -0
  29. package/dist/FieldRuntime.d.ts.map +1 -0
  30. package/dist/FieldRuntime.js +27 -0
  31. package/dist/FieldRuntime.js.map +1 -0
  32. package/dist/FieldTypes.d.ts +232 -0
  33. package/dist/FieldTypes.d.ts.map +1 -0
  34. package/dist/FieldTypes.js +6 -0
  35. package/dist/FieldTypes.js.map +1 -0
  36. package/dist/Fields.d.ts +8 -0
  37. package/dist/Fields.d.ts.map +1 -0
  38. package/dist/Fields.js +72 -0
  39. package/dist/Fields.js.map +1 -0
  40. package/dist/Formatting.d.ts +25 -0
  41. package/dist/Formatting.d.ts.map +1 -0
  42. package/dist/Formatting.js +29 -0
  43. package/dist/Formatting.js.map +1 -0
  44. package/dist/GraphQL.d.ts +10 -0
  45. package/dist/GraphQL.d.ts.map +1 -0
  46. package/dist/GraphQL.js +5 -0
  47. package/dist/GraphQL.js.map +1 -0
  48. package/dist/InputTypes.d.ts +27 -0
  49. package/dist/InputTypes.d.ts.map +1 -0
  50. package/dist/InputTypes.js +203 -0
  51. package/dist/InputTypes.js.map +1 -0
  52. package/dist/Registry.d.ts +70 -0
  53. package/dist/Registry.d.ts.map +1 -0
  54. package/dist/Registry.js +3 -0
  55. package/dist/Registry.js.map +1 -0
  56. package/dist/Resolver.d.ts +30 -0
  57. package/dist/Resolver.d.ts.map +1 -0
  58. package/dist/Resolver.js +76 -0
  59. package/dist/Resolver.js.map +1 -0
  60. package/dist/Results.d.ts +20 -0
  61. package/dist/Results.d.ts.map +1 -0
  62. package/dist/Results.js +79 -0
  63. package/dist/Results.js.map +1 -0
  64. package/dist/ScalarBoundary.d.ts +9 -0
  65. package/dist/ScalarBoundary.d.ts.map +1 -0
  66. package/dist/ScalarBoundary.js +31 -0
  67. package/dist/ScalarBoundary.js.map +1 -0
  68. package/dist/Scalars.d.ts +9 -0
  69. package/dist/Scalars.d.ts.map +1 -0
  70. package/dist/Scalars.js +104 -0
  71. package/dist/Scalars.js.map +1 -0
  72. package/dist/SchemaTypes.d.ts +55 -0
  73. package/dist/SchemaTypes.d.ts.map +1 -0
  74. package/dist/SchemaTypes.js +47 -0
  75. package/dist/SchemaTypes.js.map +1 -0
  76. package/dist/Subscription.d.ts +6 -0
  77. package/dist/Subscription.d.ts.map +1 -0
  78. package/dist/Subscription.js +60 -0
  79. package/dist/Subscription.js.map +1 -0
  80. package/dist/Testing.d.ts +52 -0
  81. package/dist/Testing.d.ts.map +1 -0
  82. package/dist/Testing.js +74 -0
  83. package/dist/Testing.js.map +1 -0
  84. package/dist/index.d.ts +2 -0
  85. package/dist/index.d.ts.map +1 -0
  86. package/dist/index.js +2 -0
  87. package/dist/index.js.map +1 -0
  88. package/dist/internal/SubscriptionRule.d.ts +8 -0
  89. package/dist/internal/SubscriptionRule.d.ts.map +1 -0
  90. package/dist/internal/SubscriptionRule.js +73 -0
  91. package/dist/internal/SubscriptionRule.js.map +1 -0
  92. package/package.json +55 -4
  93. package/src/Assembly.ts +352 -0
  94. package/src/Builder.ts +110 -0
  95. package/src/Connections.ts +374 -0
  96. package/src/Definitions.ts +465 -0
  97. package/src/Errors.ts +188 -0
  98. package/src/Execution.ts +354 -0
  99. package/src/FieldRuntime.ts +32 -0
  100. package/src/FieldTypes.ts +667 -0
  101. package/src/Fields.ts +117 -0
  102. package/src/Formatting.ts +54 -0
  103. package/src/GraphQL.ts +50 -0
  104. package/src/InputTypes.ts +266 -0
  105. package/src/Registry.ts +157 -0
  106. package/src/Resolver.ts +176 -0
  107. package/src/Results.ts +128 -0
  108. package/src/ScalarBoundary.ts +30 -0
  109. package/src/Scalars.ts +143 -0
  110. package/src/SchemaTypes.ts +90 -0
  111. package/src/Subscription.ts +93 -0
  112. package/src/Testing.ts +144 -0
  113. package/src/index.ts +1 -0
  114. package/src/internal/SubscriptionRule.ts +90 -0
@@ -0,0 +1,236 @@
1
+ import { GraphQLBoolean, GraphQLFloat, GraphQLID, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLObjectType, GraphQLScalarType, GraphQLEnumType, GraphQLInterfaceType, GraphQLSchema, GraphQLString, GraphQLUnionType, validateSchema, } from "graphql";
2
+ import { makeConnectionTypes } from "./Connections.js";
3
+ import { mappedEnumeration, } from "./Definitions.js";
4
+ import { describe } from "./FieldRuntime.js";
5
+ import {} from "./FieldTypes.js";
6
+ import { InputTypes } from "./InputTypes.js";
7
+ import { makeResultTypes } from "./Results.js";
8
+ import { guardScalar } from "./ScalarBoundary.js";
9
+ import { dateTime, scalar, jsonScalar, enumeration } from "./Scalars.js";
10
+ import { invalid, unwrap } from "./SchemaTypes.js";
11
+ export function isDefinition(value) {
12
+ return (typeof value === "object" &&
13
+ value !== null &&
14
+ "~kind" in value &&
15
+ "fields" in value &&
16
+ typeof value.fields === "object");
17
+ }
18
+ export function isFieldMap(value) {
19
+ return (typeof value === "object" &&
20
+ value !== null &&
21
+ Object.values(value).every((field) => typeof field === "object" &&
22
+ field !== null &&
23
+ "build" in field &&
24
+ typeof field.build === "function"));
25
+ }
26
+ export function assemble(module) {
27
+ const objects = new Map();
28
+ const roots = new Map([
29
+ ["Query", { name: "Query", fields: {} }],
30
+ ["Mutation", { name: "Mutation", fields: {} }],
31
+ ["Subscription", { name: "Subscription", fields: {} }],
32
+ ]);
33
+ for (const [key, value] of Object.entries(module)) {
34
+ if (!isDefinition(value))
35
+ continue;
36
+ const fields = value.fields;
37
+ if (!isFieldMap(fields))
38
+ return invalid(`${key}: fields must be an object of builder field helpers such as GraphQL.string()`);
39
+ if (value["~kind"] === "object" || value["~kind"] === "interface") {
40
+ const name = value["~name"] ?? invalid(`${key} has no GraphQL name`);
41
+ if (objects.has(name))
42
+ invalid(`Duplicate GraphQL object: ${name}`);
43
+ const description = value["~description"];
44
+ objects.set(name, {
45
+ name,
46
+ ...(value["~resolveType"]
47
+ ? { resolveType: value["~resolveType"] }
48
+ : {}),
49
+ kind: value["~kind"],
50
+ interfaces: value["~implements"] ?? [],
51
+ fields: { ...fields },
52
+ ...(description === undefined ? {} : { description }),
53
+ });
54
+ continue;
55
+ }
56
+ const root = roots.get(value["~kind"] === "query"
57
+ ? "Query"
58
+ : value["~kind"] === "mutation"
59
+ ? "Mutation"
60
+ : "Subscription");
61
+ for (const [field, config] of Object.entries(fields)) {
62
+ if (Object.hasOwn(root.fields, field))
63
+ invalid(`Duplicate field: ${root.name}.${field}`);
64
+ root.fields[field] = config;
65
+ }
66
+ }
67
+ const named = new Map([
68
+ ["ID", GraphQLID],
69
+ ["String", GraphQLString],
70
+ ["Boolean", GraphQLBoolean],
71
+ ["Int", GraphQLInt],
72
+ ["Float", GraphQLFloat],
73
+ ]);
74
+ const add = (type) => {
75
+ if (named.has(type.name))
76
+ invalid(`Duplicate GraphQL name: ${type.name}`);
77
+ named.set(type.name, type);
78
+ return type;
79
+ };
80
+ const inputs = new InputTypes(named, add);
81
+ for (const value of Object.values(module)) {
82
+ if (typeof value !== "object" || value === null || !("~kind" in value))
83
+ continue;
84
+ if (value["~kind"] === "scalar" || value["~kind"] === "enum") {
85
+ // Named constructors store the schema and name together; assembly erases
86
+ // their heterogeneous value types only after checking the definition kind.
87
+ const def = value;
88
+ const type = add(def["~kind"] === "scalar"
89
+ ? guardScalar(def["~scalar"] ??
90
+ scalar(def["~name"], def["~model"]))
91
+ : def["~enum"]
92
+ ? mappedEnumeration(def["~name"], def["~model"], def["~enum"])
93
+ : enumeration(def["~name"], def["~model"]));
94
+ inputs.register(def["~model"].ast, type);
95
+ }
96
+ }
97
+ const objectType = (name, coordinate) => {
98
+ const type = named.get(name) ?? derived(name);
99
+ return type instanceof GraphQLObjectType
100
+ ? type
101
+ : invalid(`Missing object ${name} at ${coordinate}`);
102
+ };
103
+ const nodeType = (name, coordinate) => {
104
+ const type = named.get(name);
105
+ return type instanceof GraphQLObjectType ||
106
+ type instanceof GraphQLInterfaceType ||
107
+ type instanceof GraphQLUnionType
108
+ ? type
109
+ : invalid(`Missing connection node ${name} at ${coordinate}; register an object, interface or union`);
110
+ };
111
+ const { derived, connectionType } = makeConnectionTypes(named, add, nodeType, (name) => {
112
+ const type = named.get(name);
113
+ return (type instanceof GraphQLObjectType ||
114
+ type instanceof GraphQLInterfaceType ||
115
+ type instanceof GraphQLUnionType);
116
+ });
117
+ const context = {
118
+ input: inputs,
119
+ output(ref, coordinate) {
120
+ if (typeof ref !== "string") {
121
+ const inner = context.output(ref.of, coordinate);
122
+ return ref.kind === "list"
123
+ ? new GraphQLNonNull(new GraphQLList(inner))
124
+ : unwrap(inner);
125
+ }
126
+ const scalar = named.get(ref) ??
127
+ (ref === "DateTime"
128
+ ? add(dateTime())
129
+ : ref === "JSON"
130
+ ? add(jsonScalar())
131
+ : undefined);
132
+ return new GraphQLNonNull(scalar instanceof GraphQLScalarType ||
133
+ scalar instanceof GraphQLEnumType ||
134
+ scalar instanceof GraphQLUnionType ||
135
+ scalar instanceof GraphQLInterfaceType
136
+ ? scalar
137
+ : objectType(ref, coordinate));
138
+ },
139
+ result: makeResultTypes(inputs, add, objectType, named),
140
+ connection(node, name, coordinate, counted, edgeName) {
141
+ nodeType(node, coordinate);
142
+ return new GraphQLNonNull(connectionType(node, name ?? `${node}${counted ? "Counted" : ""}Connection`, counted, edgeName));
143
+ },
144
+ };
145
+ const fieldConfigs = ({ fields, name, interfaces = [] }) => {
146
+ const inherited = {};
147
+ for (const name of interfaces) {
148
+ const definition = named.get(name);
149
+ if (!(definition instanceof GraphQLInterfaceType))
150
+ return invalid(`Missing interface ${name}`);
151
+ // Reuse built configs so inherited result unions retain their interface's type identity.
152
+ Object.assign(inherited, definition.toConfig().fields);
153
+ }
154
+ return {
155
+ ...inherited,
156
+ ...Object.fromEntries(Object.entries(fields).map(([field, config]) => [
157
+ field,
158
+ config.build(context, field, `${name}.${field}`),
159
+ ])),
160
+ };
161
+ };
162
+ const build = (object) => add(new GraphQLObjectType({
163
+ name: object.name,
164
+ ...describe(object),
165
+ fields: () => fieldConfigs(object),
166
+ interfaces: () => (object.interfaces ?? []).map((name) => {
167
+ const type = named.get(name);
168
+ return type instanceof GraphQLInterfaceType
169
+ ? type
170
+ : invalid(`Missing interface ${name}`);
171
+ }),
172
+ }));
173
+ for (const object of objects.values()) {
174
+ if (object.kind === "interface")
175
+ add(new GraphQLInterfaceType({
176
+ name: object.name,
177
+ ...describe(object),
178
+ fields: () => fieldConfigs(object),
179
+ resolveType: (value) => {
180
+ if (object.resolveType)
181
+ return object.resolveType(value) ?? undefined;
182
+ if (typeof value !== "object" || value === null)
183
+ return undefined;
184
+ const name = Reflect.get(value, "__typename") ?? Reflect.get(value, "_tag");
185
+ return typeof name === "string" ? name : undefined;
186
+ },
187
+ }));
188
+ else
189
+ build(object);
190
+ }
191
+ for (const value of Object.values(module)) {
192
+ if (typeof value !== "object" ||
193
+ value === null ||
194
+ !("~kind" in value) ||
195
+ value["~kind"] !== "union")
196
+ continue;
197
+ // union() validates member registrations before storing this metadata.
198
+ const def = value;
199
+ add(new GraphQLUnionType({
200
+ name: def["~name"],
201
+ ...describe(def.options),
202
+ types: () => def.options.members.map((name) => objectType(name, def["~name"])),
203
+ resolveType: (value) => {
204
+ const name = def.options.resolveType
205
+ ? def.options.resolveType(value)
206
+ : (Reflect.get(Object(value), "__typename") ??
207
+ Reflect.get(Object(value), "_tag"));
208
+ return typeof name === "string" && def.options.members.includes(name)
209
+ ? name
210
+ : undefined;
211
+ },
212
+ }));
213
+ }
214
+ const query = build(roots.get("Query"));
215
+ const mutationRoot = roots.get("Mutation");
216
+ const mutation = Object.keys(mutationRoot.fields).length > 0
217
+ ? build(mutationRoot)
218
+ : undefined;
219
+ if (Object.keys(roots.get("Query").fields).length === 0)
220
+ invalid("Missing Query fields");
221
+ const subscriptionRoot = roots.get("Subscription");
222
+ const subscription = Object.keys(subscriptionRoot.fields).length
223
+ ? build(subscriptionRoot)
224
+ : undefined;
225
+ const schema = new GraphQLSchema({
226
+ query,
227
+ ...(subscription ? { subscription } : {}),
228
+ ...(mutation ? { mutation } : {}),
229
+ types: [...named.values()],
230
+ });
231
+ const problems = validateSchema(schema);
232
+ if (problems.length)
233
+ invalid(problems.map((error) => error.message).join("\n"));
234
+ return schema;
235
+ }
236
+ //# sourceMappingURL=Assembly.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Assembly.js","sourceRoot":"","sources":["../src/Assembly.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { Effect, Stream } from "effect";
2
+ import { type DefinitionBuilder, type CheckedInterfaces } from "./Definitions.ts";
3
+ import { type ErrorPolicyOptions } from "./Errors.ts";
4
+ import { type BuiltSchema, type ExecutionResult, type Request, type ContextArgument } from "./Execution.ts";
5
+ import { type Fields, type Requirements } from "./FieldTypes.ts";
6
+ import { type Complete, type CompatibleContexts } from "./Registry.ts";
7
+ import { type ErrorSchema, type ErrorsOf } from "./Results.ts";
8
+ import { input, defaulted } from "./SchemaTypes.ts";
9
+ export interface BuilderOptions {
10
+ /** Largest "first"/"last" a connection accepts. Defaults to 100. */
11
+ readonly maxPageSize?: number;
12
+ /** Size for nodes-based slicing when neither first nor last is supplied. Defaults to 20 (capped at maxPageSize). */
13
+ readonly defaultPageSize?: number;
14
+ }
15
+ /** Definitions, field helpers and execution for one registry and request context. */
16
+ export interface Builder<Types, G, C = {}> extends DefinitionBuilder<Types, G, C>, Fields<Types, G, C> {
17
+ input: typeof input;
18
+ default: typeof defaulted;
19
+ /** Errors any resolver may fail with, and how each reaches the response. */
20
+ withErrorPolicy<const I extends readonly ErrorSchema[] = readonly [], const P extends readonly ErrorSchema[] = readonly []>(policy: ErrorPolicyOptions<I, P>): Builder<Types, G | ErrorsOf<I> | ErrorsOf<P>, C>;
21
+ schema<const M extends Readonly<Record<string, unknown>>>(module: M & Complete<Types, M> & CompatibleContexts<M, C> & CheckedInterfaces<Types, M>): BuiltSchema<Requirements<M>, C>;
22
+ /** The request context is per request: it reaches every resolver of this execution and nothing else. */
23
+ subscribe<R>(schema: BuiltSchema<R, C>, request: Request, ...context: ContextArgument<C>): Stream.Stream<ExecutionResult, never, R>;
24
+ execute<R>(schema: BuiltSchema<R, C>, request: Request, ...context: ContextArgument<C>): Effect.Effect<ExecutionResult, never, R>;
25
+ }
26
+ export declare function createBuilder<Types, C = {}>(options?: BuilderOptions): Builder<Types, never, C>;
27
+ //# sourceMappingURL=Builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Builder.d.ts","sourceRoot":"","sources":["../src/Builder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE5C,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACvB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,KAAK,kBAAkB,EAAoB,MAAM,aAAa,CAAA;AACvE,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,eAAe,EACpB,KAAK,OAAO,EACZ,KAAK,eAAe,EAGrB,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAAE,KAAK,QAAQ,EAAE,KAAK,kBAAkB,EAAE,MAAM,eAAe,CAAA;AACtE,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAW,MAAM,kBAAkB,CAAA;AAE5D,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,oHAAoH;IACpH,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAA;CAClC;AAED,qFAAqF;AACrF,MAAM,WAAW,OAAO,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,CACvC,SAAQ,iBAAiB,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3D,KAAK,EAAE,OAAO,KAAK,CAAA;IACnB,OAAO,EAAE,OAAO,SAAS,CAAA;IACzB,4EAA4E;IAC5E,eAAe,CACb,KAAK,CAAC,CAAC,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE,EACpD,KAAK,CAAC,CAAC,SAAS,SAAS,WAAW,EAAE,GAAG,SAAS,EAAE,EAEpD,MAAM,EAAE,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GAC/B,OAAO,CAAC,KAAK,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACnD,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACtD,MAAM,EAAE,CAAC,GACP,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,GAClB,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,iBAAiB,CAAC,KAAK,EAAE,CAAC,CAAC,GAC5B,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IAClC,wGAAwG;IACxG,SAAS,CAAC,CAAC,EACT,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,OAAO,EAAE,OAAO,EAChB,GAAG,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;IAC3C,OAAO,CAAC,CAAC,EACP,MAAM,EAAE,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EACzB,OAAO,EAAE,OAAO,EAChB,GAAG,OAAO,EAAE,eAAe,CAAC,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAAC,CAAA;CAC5C;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,EACzC,OAAO,GAAE,cAAmB,GAC3B,OAAO,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC,CAU1B"}
@@ -0,0 +1,40 @@
1
+ import { assemble } from "./Assembly.js";
2
+ import { makeDefinitions, } from "./Definitions.js";
3
+ import {} from "./Errors.js";
4
+ import { schemaRequirements, schemaErrorPolicy, subscribe, execute, } from "./Execution.js";
5
+ import { makeFields } from "./Fields.js";
6
+ import {} from "./FieldTypes.js";
7
+ import {} from "./Registry.js";
8
+ import {} from "./Results.js";
9
+ import { input, defaulted, invalid } from "./SchemaTypes.js";
10
+ export function createBuilder(options = {}) {
11
+ const max = options.maxPageSize ?? 100;
12
+ if (!Number.isSafeInteger(max) || max < 0)
13
+ invalid("maxPageSize must be a non-negative safe integer");
14
+ const size = options.defaultPageSize ?? Math.min(20, max);
15
+ if (!Number.isSafeInteger(size) || size < 0 || size > max)
16
+ invalid("defaultPageSize must be a non-negative safe integer no larger than maxPageSize");
17
+ return make({ internal: [], public: [] }, max, size);
18
+ }
19
+ function make(policy, maxPageSize, defaultPageSize) {
20
+ const { fields, rootField } = makeFields(policy, maxPageSize, defaultPageSize);
21
+ return {
22
+ ...fields,
23
+ ...makeDefinitions(rootField),
24
+ input,
25
+ default: defaulted,
26
+ withErrorPolicy: (options) => make({
27
+ internal: [...policy.internal, ...(options.internal ?? [])],
28
+ public: [...policy.public, ...(options.public ?? [])],
29
+ publicCodes: { ...policy.publicCodes, ...options.publicCodes },
30
+ }, maxPageSize, defaultPageSize),
31
+ schema: (module) => ({
32
+ schema: assemble(module),
33
+ [schemaErrorPolicy]: policy,
34
+ [schemaRequirements]: undefined,
35
+ }),
36
+ subscribe,
37
+ execute,
38
+ };
39
+ }
40
+ //# sourceMappingURL=Builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Builder.js","sourceRoot":"","sources":["../src/Builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,OAAO,EACL,eAAe,GAGhB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAA6C,MAAM,aAAa,CAAA;AACvE,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EAKjB,SAAS,EACT,OAAO,GACR,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAkC,MAAM,iBAAiB,CAAA;AAChE,OAAO,EAA0C,MAAM,eAAe,CAAA;AACtE,OAAO,EAAmC,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAwC5D,MAAM,UAAU,aAAa,CAC3B,OAAO,GAAmB,EAAE;IAE5B,MAAM,GAAG,GAAG,OAAO,CAAC,WAAW,IAAI,GAAG,CAAA;IACtC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC;QACvC,OAAO,CAAC,iDAAiD,CAAC,CAAA;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,CAAC,CAAA;IACzD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG;QACvD,OAAO,CACL,gFAAgF,CACjF,CAAA;IACH,OAAO,IAAI,CAAkB,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,IAAI,CACX,MAAmB,EACnB,WAAmB,EACnB,eAAuB;IAEvB,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,CACtC,MAAM,EACN,WAAW,EACX,eAAe,CAChB,CAAA;IACD,OAAO;QACL,GAAG,MAAM;QACT,GAAG,eAAe,CAAc,SAAS,CAAC;QAC1C,KAAK;QACL,OAAO,EAAE,SAAS;QAClB,eAAe,EAAE,CAAC,OAAO,EAAE,EAAE,CAC3B,IAAI,CACF;YACE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC;YAC3D,MAAM,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;YACrD,WAAW,EAAE,EAAE,GAAG,MAAM,CAAC,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,EAAE;SAC/D,EACD,WAAW,EACX,eAAe,CAChB;QACH,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;YACnB,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;YACxB,CAAC,iBAAiB,CAAC,EAAE,MAAM;YAC3B,CAAC,kBAAkB,CAAC,EAAE,SAAS;SAChC,CAAC;QACF,SAAS;QACT,OAAO;KACR,CAAA;AACH,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { type GraphQLFieldConfigArgumentMap, GraphQLObjectType, type GraphQLNamedType, type GraphQLInterfaceType, type GraphQLUnionType } from "graphql";
2
+ import { type ErrorPolicy } from "./Errors.ts";
3
+ import { type Field } from "./FieldTypes.ts";
4
+ import { type AnyResolve, type AnyConfig } from "./Resolver.ts";
5
+ export interface PageInfo {
6
+ readonly hasNextPage: boolean;
7
+ readonly hasPreviousPage: boolean;
8
+ readonly startCursor: string | null;
9
+ readonly endCursor: string | null;
10
+ }
11
+ export interface Edge<A> {
12
+ readonly cursor: string;
13
+ readonly node: A;
14
+ }
15
+ /** Structurally identical to model-ts' PaginationResult, so paginate() results pass through. */
16
+ export interface Connection<A> {
17
+ readonly edges: ReadonlyArray<Edge<A>>;
18
+ readonly pageInfo: PageInfo;
19
+ }
20
+ export interface ConnectionArgs {
21
+ readonly first?: number | null;
22
+ readonly after?: string | null;
23
+ readonly last?: number | null;
24
+ readonly before?: string | null;
25
+ }
26
+ export declare const encodeCursor: (offset: number) => string;
27
+ export declare function decodeCursor(cursor: string): number;
28
+ /** graphql-js has already validated the four built-in pagination arguments. */
29
+ export declare function paginationArgs(raw: Readonly<Record<string, unknown>>): ConnectionArgs;
30
+ export declare function validatePagination(args: ConnectionArgs, coordinate: string, max: number): void;
31
+ /** Validation sees only caller arguments; a before-only request defaults backward. */
32
+ export declare function pageDefaults(args: ConnectionArgs, size: number): ConnectionArgs;
33
+ export declare function slice<A>(nodes: ReadonlyArray<A>, args: ConnectionArgs): Connection<A>;
34
+ export declare const connectionArgs: GraphQLFieldConfigArgumentMap;
35
+ export declare const connectionField: (policy: ErrorPolicy, maxPageSize: number, defaultPageSize: number, node: string, input?: AnyResolve | AnyConfig) => Field<unknown>;
36
+ /** Derived names are reserved only when a field actually requests them. */
37
+ export declare function makeConnectionTypes(named: Map<string, GraphQLNamedType>, add: <T extends GraphQLNamedType>(type: T) => T, nodeType: (name: string, coordinate: string) => GraphQLObjectType | GraphQLInterfaceType | GraphQLUnionType, isNode: (name: string) => boolean): {
38
+ derived: (name: string) => GraphQLNamedType | undefined;
39
+ connectionType: (node: string, name: string, counted?: boolean, edgeName?: string) => GraphQLObjectType;
40
+ };
41
+ //# sourceMappingURL=Connections.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connections.d.ts","sourceRoot":"","sources":["../src/Connections.ts"],"names":[],"mappings":"AACA,OAAO,EAIL,KAAK,6BAA6B,EAGlC,iBAAiB,EAEjB,KAAK,gBAAgB,EACrB,KAAK,oBAAoB,EACzB,KAAK,gBAAgB,EAEtB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAE,KAAK,WAAW,EAAuB,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,KAAK,KAAK,EAAuB,MAAM,iBAAiB,CAAA;AACjE,OAAO,EACL,KAAK,UAAU,EACf,KAAK,SAAS,EAGf,MAAM,eAAe,CAAA;AAGtB,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,eAAe,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;CAClC;AAED,MAAM,WAAW,IAAI,CAAC,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;CACjB;AACD,gGAAgG;AAEhG,MAAM,WAAW,UAAU,CAAC,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAA;IACtC,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAA;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC9B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAChC;AAED,eAAO,MAAM,YAAY,WAAY,MAAM,WAA6B,CAAA;AAExE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACrC,cAAc,CAShB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,cAAc,EACpB,UAAU,EAAE,MAAM,EAClB,GAAG,EAAE,MAAM,GACV,IAAI,CAiBN;AAED,sFAAsF;AACtF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,cAAc,EACpB,IAAI,EAAE,MAAM,GACX,cAAc,CAKhB;AAED,wBAAgB,KAAK,CAAC,CAAC,EACrB,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,EACvB,IAAI,EAAE,cAAc,GACnB,UAAU,CAAC,CAAC,CAAC,CAuBf;AAED,eAAO,MAAM,cAAc,EAAE,6BAmB5B,CAAA;AAED,eAAO,MAAM,eAAe,WAClB,WAAW,eACN,MAAM,mBACF,MAAM,QACjB,MAAM,UACL,UAAU,GAAG,SAAS,KAC5B,KAAK,CAAC,OAAO,CAiEf,CAAA;AAED,2EAA2E;AAC3E,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACpC,GAAG,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAC/C,QAAQ,EAAE,CACR,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,KACf,iBAAiB,GAAG,oBAAoB,GAAG,gBAAgB,EAChE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO;oBA0HV,MAAM,KAAG,gBAAgB,GAAG,SAAS;2BA7CpD,MAAM,QACN,MAAM,2CAGX,iBAAiB;EAoDrB"}
@@ -0,0 +1,243 @@
1
+ import { Effect } from "effect";
2
+ import { GraphQLBoolean, GraphQLInt, GraphQLString, GraphQLList, GraphQLNonNull, GraphQLObjectType, } from "graphql";
3
+ import { fieldError, protect } from "./Errors.js";
4
+ import {} from "./FieldTypes.js";
5
+ import { config, resolverField, } from "./Resolver.js";
6
+ import { invalid } from "./SchemaTypes.js";
7
+ export const encodeCursor = (offset) => btoa(`cursor:${offset}`);
8
+ export function decodeCursor(cursor) {
9
+ try {
10
+ const match = /^cursor:(\d+)$/.exec(atob(cursor));
11
+ if (match && Number.isSafeInteger(Number(match[1])))
12
+ return Number(match[1]);
13
+ }
14
+ catch {
15
+ /* Reject invalid base64 using the same public error. */
16
+ }
17
+ throw fieldError("Invalid cursor", { code: "BAD_USER_INPUT" });
18
+ }
19
+ /** graphql-js has already validated the four built-in pagination arguments. */
20
+ export function paginationArgs(raw) {
21
+ const pick = (key) => raw[key] == null ? {} : { [key]: raw[key] };
22
+ return {
23
+ ...pick("first"),
24
+ ...pick("after"),
25
+ ...pick("last"),
26
+ ...pick("before"),
27
+ };
28
+ }
29
+ export function validatePagination(args, coordinate, max) {
30
+ const reject = (message) => {
31
+ throw fieldError(`${coordinate}: ${message}`, { code: "BAD_USER_INPUT" });
32
+ };
33
+ if (args.after != null && args.before != null)
34
+ reject('use "after" or "before", not both');
35
+ if (args.first != null && args.last != null)
36
+ reject('use "first" or "last", not both');
37
+ if (args.first != null && args.before != null)
38
+ reject('"before" cannot be combined with "first"');
39
+ if (args.last != null && args.after != null)
40
+ reject('"after" cannot be combined with "last"');
41
+ for (const key of ["first", "last"]) {
42
+ const size = args[key];
43
+ if (size != null && (size < 0 || size > max))
44
+ reject(`"${key}" must be between 0 and ${max}`);
45
+ }
46
+ }
47
+ /** Validation sees only caller arguments; a before-only request defaults backward. */
48
+ export function pageDefaults(args, size) {
49
+ if (args.first != null || args.last != null)
50
+ return args;
51
+ return args.before != null
52
+ ? { ...args, last: size }
53
+ : { ...args, first: size };
54
+ }
55
+ export function slice(nodes, args) {
56
+ let start = args.after == null
57
+ ? 0
58
+ : Math.min(nodes.length, decodeCursor(args.after) + 1);
59
+ let end = args.before == null
60
+ ? nodes.length
61
+ : Math.min(nodes.length, decodeCursor(args.before));
62
+ if (args.first != null)
63
+ end = Math.min(end, start + args.first);
64
+ if (args.last != null)
65
+ start = Math.max(start, end - args.last);
66
+ const edges = nodes
67
+ .slice(start, Math.max(start, end))
68
+ .map((node, index) => ({ cursor: encodeCursor(start + index), node }));
69
+ return {
70
+ edges,
71
+ pageInfo: {
72
+ hasPreviousPage: start > 0,
73
+ hasNextPage: end < nodes.length,
74
+ startCursor: edges[0]?.cursor ?? null,
75
+ endCursor: edges.at(-1)?.cursor ?? null,
76
+ },
77
+ };
78
+ }
79
+ export const connectionArgs = {
80
+ first: {
81
+ type: GraphQLInt,
82
+ description: "Returns the first n elements from the list.",
83
+ },
84
+ after: {
85
+ type: GraphQLString,
86
+ description: "Returns the elements in the list that come after the specified cursor",
87
+ },
88
+ last: {
89
+ type: GraphQLInt,
90
+ description: "Returns the last n elements from the list.",
91
+ },
92
+ before: {
93
+ type: GraphQLString,
94
+ description: "Returns the elements in the list that come before the specified cursor",
95
+ },
96
+ };
97
+ export const connectionField = (policy, maxPageSize, defaultPageSize, node, input = {}) => {
98
+ const options = config(input);
99
+ const { resolve, nodes, totalCount } = options;
100
+ for (const key of Object.keys(options.args ?? {}))
101
+ if (Object.hasOwn(connectionArgs, key))
102
+ invalid(`Reserved connection argument: ${key}`);
103
+ return resolverField(policy, options, {
104
+ type: (context, name) => context.connection(node, options.name, name, options.totalCount !== undefined, options.edgeName),
105
+ args: options.args ?? {},
106
+ extraArgs: connectionArgs,
107
+ members: [],
108
+ call: (source, raw, decoded, coordinate, context) => {
109
+ const supplied = paginationArgs(raw);
110
+ validatePagination(supplied, coordinate, maxPageSize);
111
+ const page = nodes ? pageDefaults(supplied, defaultPageSize) : supplied;
112
+ if (nodes) {
113
+ if (page.after != null)
114
+ decodeCursor(page.after);
115
+ if (page.before != null)
116
+ decodeCursor(page.before);
117
+ }
118
+ // Resolver and nodes overloads prove these shapes; this runtime path
119
+ // handles heterogeneous field values after their type parameters are erased.
120
+ const value = resolve
121
+ ? resolve(source, { ...decoded, ...page }, context)
122
+ : nodes
123
+ ? nodes(source, decoded, context)
124
+ : Reflect.get(Object(source), coordinate.slice(coordinate.lastIndexOf(".") + 1));
125
+ if (!totalCount)
126
+ return value;
127
+ const finish = (result) => ({
128
+ ...(resolve
129
+ ? result
130
+ : slice(result, page)),
131
+ // graphql-js invokes function-valued fields only when selected, including
132
+ // fragments and directives. Keep the Effect bridge and policy at that boundary.
133
+ totalCount: (_args, request, info) => request.run(protect(() => totalCount(source, decoded, context), [], policy, {
134
+ coordinate: `${info.parentType.name}.${info.fieldName}`,
135
+ phase: "resolve",
136
+ })),
137
+ });
138
+ return Effect.isEffect(value) ? Effect.map(value, finish) : finish(value);
139
+ },
140
+ finish: (value, raw) => !nodes || options.totalCount
141
+ ? value
142
+ : slice(value, pageDefaults(paginationArgs(raw), defaultPageSize)),
143
+ });
144
+ };
145
+ /** Derived names are reserved only when a field actually requests them. */
146
+ export function makeConnectionTypes(named, add, nodeType, isNode) {
147
+ const generated = new Map();
148
+ const derivedObject = (name, shape, fields, description) => {
149
+ const existing = generated.get(name);
150
+ if (existing) {
151
+ if (existing.shape !== shape)
152
+ invalid(`Incompatible derived type ${name}; use a different edgeName`);
153
+ return existing.type;
154
+ }
155
+ // add owns the global namespace: a real object may use a synthetic-looking
156
+ // name, but deriving that same name must report a collision.
157
+ const type = add(new GraphQLObjectType({ name, fields, description }));
158
+ generated.set(name, { type, shape });
159
+ return type;
160
+ };
161
+ const pageInfo = () => derivedObject("PageInfo", "pageInfo", () => ({
162
+ hasNextPage: {
163
+ type: new GraphQLNonNull(GraphQLBoolean),
164
+ description: "Used to indicate whether more edges exist following the set defined by the clients arguments.",
165
+ },
166
+ hasPreviousPage: {
167
+ type: new GraphQLNonNull(GraphQLBoolean),
168
+ description: "Used to indicate whether more edges exist prior to the set defined by the clients arguments.",
169
+ },
170
+ startCursor: {
171
+ type: GraphQLString,
172
+ description: "The cursor corresponding to the first nodes in edges. Null if the connection is empty.",
173
+ },
174
+ endCursor: {
175
+ type: GraphQLString,
176
+ description: "The cursor corresponding to the last nodes in edges. Null if the connection is empty.",
177
+ },
178
+ }), "PageInfo cursor, as defined in https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo");
179
+ const edgeNodes = new Map();
180
+ const edgeType = (node, name = `${node}Edge`) => {
181
+ const owner = edgeNodes.get(name);
182
+ if (owner !== undefined && owner !== node)
183
+ invalid(`Incompatible edge ${name}: nodes ${owner} and ${node}; use a different edgeName`);
184
+ edgeNodes.set(name, node);
185
+ return derivedObject(name, `edge:${node}`, () => ({
186
+ cursor: {
187
+ type: new GraphQLNonNull(GraphQLString),
188
+ description: "https://facebook.github.io/relay/graphql/connections.htm#sec-Cursor",
189
+ },
190
+ node: {
191
+ type: new GraphQLNonNull(nodeType(node, `${name}.node`)),
192
+ description: "https://facebook.github.io/relay/graphql/connections.htm#sec-Node",
193
+ },
194
+ }));
195
+ };
196
+ const connectionEdges = new Map();
197
+ const connectionNodes = new Map();
198
+ const countedConnections = new Map();
199
+ const connectionType = (node, name, counted = false, edgeName = `${node}Edge`) => {
200
+ const existing = named.get(name);
201
+ if (existing) {
202
+ if (connectionNodes.get(name) !== node ||
203
+ countedConnections.get(name) !== counted ||
204
+ connectionEdges.get(name) !== edgeName)
205
+ invalid(`Duplicate GraphQL name: ${name}; already used for ${connectionNodes.get(name) ?? "another type"}`);
206
+ if (!(existing instanceof GraphQLObjectType))
207
+ return invalid(`Expected connection object: ${name}`);
208
+ return existing;
209
+ }
210
+ connectionEdges.set(name, edgeName);
211
+ connectionNodes.set(name, node);
212
+ countedConnections.set(name, counted);
213
+ return add(new GraphQLObjectType({
214
+ name,
215
+ fields: () => ({
216
+ edges: {
217
+ description: "https://facebook.github.io/relay/graphql/connections.htm#sec-Edge-Types",
218
+ type: new GraphQLNonNull(new GraphQLList(new GraphQLNonNull(edgeType(node, edgeName)))),
219
+ },
220
+ pageInfo: {
221
+ type: new GraphQLNonNull(pageInfo()),
222
+ description: "https://facebook.github.io/relay/graphql/connections.htm#sec-undefined.PageInfo",
223
+ },
224
+ ...(counted
225
+ ? { totalCount: { type: new GraphQLNonNull(GraphQLInt) } }
226
+ : {}),
227
+ }),
228
+ }));
229
+ };
230
+ function derived(name) {
231
+ if (name === "PageInfo")
232
+ return pageInfo();
233
+ for (const suffix of ["Edge", "Connection"]) {
234
+ const node = name.slice(0, -suffix.length);
235
+ if (!name.endsWith(suffix) || !isNode(node))
236
+ continue;
237
+ return suffix === "Edge" ? edgeType(node) : connectionType(node, name);
238
+ }
239
+ return undefined;
240
+ }
241
+ return { derived, connectionType };
242
+ }
243
+ //# sourceMappingURL=Connections.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Connections.js","sourceRoot":"","sources":["../src/Connections.ts"],"names":[],"mappings":"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"}