@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,79 @@
1
+ import { GraphQLObjectType, GraphQLNonNull, GraphQLUnionType, isOutputType, } from "graphql";
2
+ import { metadata, invalid } from "./SchemaTypes.js";
3
+ export const errorMember = Symbol("GraphQL error member");
4
+ export function errorName(error) {
5
+ const tag = error.fields._tag?.ast;
6
+ if (tag?._tag !== "Literal" || typeof tag.literal !== "string")
7
+ return invalid("Expected a Schema.TaggedError with a literal string _tag");
8
+ return tag.literal;
9
+ }
10
+ export function makeResultTypes(inputs, add, objectType, named) {
11
+ const errorTypes = new Map();
12
+ const errorType = (error) => {
13
+ const existing = errorTypes.get(error);
14
+ if (existing)
15
+ return existing;
16
+ const name = errorName(error);
17
+ const registered = named.get(name);
18
+ if (registered) {
19
+ if (!(registered instanceof GraphQLObjectType))
20
+ return invalid(`Result error ${name} must be an object; register its error boundary as an object`);
21
+ errorTypes.set(error, registered);
22
+ return registered;
23
+ }
24
+ const type = add(new GraphQLObjectType({
25
+ name,
26
+ fields: Object.fromEntries(Object.entries(error.fields)
27
+ .filter(([key]) => key !== "_tag")
28
+ .map(([key, field]) => [
29
+ key,
30
+ (() => {
31
+ const type = inputs.type(field.ast, `${name}.${key}`);
32
+ if (!isOutputType(type))
33
+ return invalid(`Error fields need an output scalar at ${name}.${key}`);
34
+ return { type, ...metadata(field.ast) };
35
+ })(),
36
+ ])),
37
+ }));
38
+ errorTypes.set(error, type);
39
+ return type;
40
+ };
41
+ return (ref, errors, coordinate, options = {}, nullable = false) => {
42
+ const success = named.get(ref);
43
+ const successMembers = success instanceof GraphQLUnionType
44
+ ? success.getTypes()
45
+ : [objectType(ref, coordinate)];
46
+ const [parent, field = parent] = coordinate.split(".");
47
+ // Mutation results keep the conventional <field>Result name; other parents
48
+ // are prefixed to avoid collisions across roots.
49
+ const prefix = parent === "Mutation" ? "" : parent;
50
+ const name = options.name ??
51
+ `${prefix}${field[0].toUpperCase()}${field.slice(1)}Result`;
52
+ const members = [...successMembers, ...errors.map(errorType)];
53
+ if (new Set(members).size !== members.length)
54
+ invalid(`Duplicate union member: ${name}`);
55
+ const type = add(new GraphQLUnionType({
56
+ name,
57
+ ...(options.description === undefined
58
+ ? {}
59
+ : { description: options.description }),
60
+ types: members,
61
+ resolveType: (value, context, info, abstractType) => {
62
+ if (typeof value === "object" &&
63
+ value !== null &&
64
+ errorMember in value)
65
+ return Reflect.get(value, errorMember);
66
+ if (success instanceof GraphQLUnionType) {
67
+ if (success.resolveType)
68
+ return success.resolveType(value, context, info, abstractType);
69
+ const tag = Reflect.get(Object(value), "__typename") ??
70
+ Reflect.get(Object(value), "_tag");
71
+ return typeof tag === "string" ? tag : undefined;
72
+ }
73
+ return ref;
74
+ },
75
+ }));
76
+ return nullable ? type : new GraphQLNonNull(type);
77
+ };
78
+ }
79
+ //# sourceMappingURL=Results.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Results.js","sourceRoot":"","sources":["../src/Results.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,YAAY,GAGb,MAAM,SAAS,CAAA;AAGhB,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAepD,MAAM,CAAC,MAAM,WAAW,GAAG,MAAM,CAAC,sBAAsB,CAAC,CAAA;AAEzD,MAAM,UAAU,SAAS,CAAC,KAAkB;IAC1C,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAA;IAClC,IAAI,GAAG,EAAE,IAAI,KAAK,SAAS,IAAI,OAAO,GAAG,CAAC,OAAO,KAAK,QAAQ;QAC5D,OAAO,OAAO,CAAC,0DAA0D,CAAC,CAAA;IAC5E,OAAO,GAAG,CAAC,OAAO,CAAA;AACpB,CAAC;AAED,MAAM,UAAU,eAAe,CAC7B,MAAkB,EAClB,GAA+C,EAC/C,UAAmE,EACnE,KAA4C;IAE5C,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkC,CAAA;IAC5D,MAAM,SAAS,GAAG,CAAC,KAAkB,EAAE,EAAE;QACvC,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;QACtC,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAA;QAC7B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,CAAA;QAC7B,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;QAClC,IAAI,UAAU,EAAE,CAAC;YACf,IAAI,CAAC,CAAC,UAAU,YAAY,iBAAiB,CAAC;gBAC5C,OAAO,OAAO,CACZ,gBAAgB,IAAI,8DAA8D,CACnF,CAAA;YACH,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;YACjC,OAAO,UAAU,CAAA;QACnB,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CACd,IAAI,iBAAiB,CAAC;YACpB,IAAI;YACJ,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;iBACzB,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,MAAM,CAAC;iBACjC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC;gBACrB,GAAG;gBACH,CAAC,GAAG,EAAE;oBACJ,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,GAAG,EAAE,CAAC,CAAA;oBACrD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC;wBACrB,OAAO,OAAO,CACZ,yCAAyC,IAAI,IAAI,GAAG,EAAE,CACvD,CAAA;oBACH,OAAO,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAA;gBACzC,CAAC,CAAC,EAAE;aACL,CAAC,CACL;SACF,CAAC,CACH,CAAA;QACD,UAAU,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;QAC3B,OAAO,IAAI,CAAA;IACb,CAAC,CAAA;IACD,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,EAAE,QAAQ,GAAG,KAAK,EAAE,EAAE;QACjE,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QAC9B,MAAM,cAAc,GAClB,OAAO,YAAY,gBAAgB;YACjC,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE;YACpB,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,CAAA;QACnC,MAAM,CAAC,MAAM,EAAE,KAAK,GAAG,MAAO,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAA;QACvD,2EAA2E;QAC3E,iDAAiD;QACjD,MAAM,MAAM,GAAG,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAA;QAClD,MAAM,IAAI,GACR,OAAO,CAAC,IAAI;YACZ,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAA;QAC9D,MAAM,OAAO,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAA;QAC7D,IAAI,IAAI,GAAG,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,MAAM;YAC1C,OAAO,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAA;QAC5C,MAAM,IAAI,GAAG,GAAG,CACd,IAAI,gBAAgB,CAAC;YACnB,IAAI;YACJ,GAAG,CAAC,OAAO,CAAC,WAAW,KAAK,SAAS;gBACnC,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC;YACzC,KAAK,EAAE,OAAO;YACd,WAAW,EAAE,CACX,KAAK,EACL,OAAO,EACP,IAAI,EACJ,YAAiC,EACjC,EAAE;gBACF,IACE,OAAO,KAAK,KAAK,QAAQ;oBACzB,KAAK,KAAK,IAAI;oBACd,WAAW,IAAI,KAAK;oBAEpB,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;gBACxC,IAAI,OAAO,YAAY,gBAAgB,EAAE,CAAC;oBACxC,IAAI,OAAO,CAAC,WAAW;wBACrB,OAAO,OAAO,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAA;oBAChE,MAAM,GAAG,GACP,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,YAAY,CAAC;wBACxC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAA;oBACpC,OAAO,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,CAAA;gBAClD,CAAC;gBACD,OAAO,GAAG,CAAA;YACZ,CAAC;SACF,CAAC,CACH,CAAA;QACD,OAAO,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;IACnD,CAAC,CAAA;AACH,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { GraphQLScalarType } from "graphql";
2
+ /** Retain callback provenance even when graphql-js forwards a thrown GraphQLError unchanged. */
3
+ export declare class ScalarInputFailure extends Error {
4
+ readonly original: unknown;
5
+ constructor(original: unknown);
6
+ }
7
+ /** Clone adopted scalars so validation cannot mistake application exceptions for document diagnostics. */
8
+ export declare function guardScalar(type: GraphQLScalarType): GraphQLScalarType;
9
+ //# sourceMappingURL=ScalarBoundary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScalarBoundary.d.ts","sourceRoot":"","sources":["../src/ScalarBoundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAwB,MAAM,SAAS,CAAA;AAEjE,gGAAgG;AAChG,qBAAa,kBAAmB,SAAQ,KAAK;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO;IAAtC,YAAqB,QAAQ,EAAE,OAAO,EAErC;CACF;AAID,0GAA0G;AAC1G,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,iBAAiB,CAiBtE"}
@@ -0,0 +1,31 @@
1
+ import { GraphQLScalarType, specifiedScalarTypes } from "graphql";
2
+ /** Retain callback provenance even when graphql-js forwards a thrown GraphQLError unchanged. */
3
+ export class ScalarInputFailure extends Error {
4
+ original;
5
+ constructor(original) {
6
+ super("Scalar input failed");
7
+ this.original = original;
8
+ }
9
+ }
10
+ const guarded = new WeakSet();
11
+ /** Clone adopted scalars so validation cannot mistake application exceptions for document diagnostics. */
12
+ export function guardScalar(type) {
13
+ if (specifiedScalarTypes.includes(type) || guarded.has(type))
14
+ return type;
15
+ const input = (evaluate) => {
16
+ try {
17
+ return evaluate();
18
+ }
19
+ catch (error) {
20
+ throw new ScalarInputFailure(error);
21
+ }
22
+ };
23
+ const result = new GraphQLScalarType({
24
+ ...type.toConfig(),
25
+ parseValue: (value) => input(() => type.parseValue(value)),
26
+ parseLiteral: (node, variables) => input(() => type.parseLiteral(node, variables)),
27
+ });
28
+ guarded.add(result);
29
+ return result;
30
+ }
31
+ //# sourceMappingURL=ScalarBoundary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ScalarBoundary.js","sourceRoot":"","sources":["../src/ScalarBoundary.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEjE,gGAAgG;AAChG,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IACtB,QAAQ;IAA7B,YAAqB,QAAiB;QACpC,KAAK,CAAC,qBAAqB,CAAC,CAAA;wBADT,QAAQ;IAE7B,CAAC;CACF;AAED,MAAM,OAAO,GAAG,IAAI,OAAO,EAAqB,CAAA;AAEhD,0GAA0G;AAC1G,MAAM,UAAU,WAAW,CAAC,IAAuB;IACjD,IAAI,oBAAoB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACzE,MAAM,KAAK,GAAG,CAAI,QAAiB,EAAK,EAAE;QACxC,IAAI,CAAC;YACH,OAAO,QAAQ,EAAE,CAAA;QACnB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,kBAAkB,CAAC,KAAK,CAAC,CAAA;QACrC,CAAC;IACH,CAAC,CAAA;IACD,MAAM,MAAM,GAAG,IAAI,iBAAiB,CAAC;QACnC,GAAG,IAAI,CAAC,QAAQ,EAAE;QAClB,UAAU,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;QAC1D,YAAY,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,EAAE,CAChC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;KAClD,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACnB,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { Schema } from "effect";
2
+ import { GraphQLScalarType, GraphQLEnumType } from "graphql";
3
+ export declare const date: (value: unknown) => Date;
4
+ export declare const dateTime: () => GraphQLScalarType<unknown, unknown>;
5
+ export declare function scalar<A, I>(name: string, codec: Schema.Codec<A, I>): GraphQLScalarType;
6
+ /** Like graphql-type-json, variables and outputs are deliberately unrestricted JS values. */
7
+ export declare const jsonScalar: () => GraphQLScalarType<unknown, unknown>;
8
+ export declare function enumeration(name: string, schema: Schema.Schema<string>): GraphQLEnumType;
9
+ //# sourceMappingURL=Scalars.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scalars.d.ts","sourceRoot":"","sources":["../src/Scalars.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,iBAAiB,EACjB,eAAe,EAIhB,MAAM,SAAS,CAAA;AAKhB,eAAO,MAAM,IAAI,UAAW,OAAO,SAOlC,CAAA;AAcD,eAAO,MAAM,QAAQ,2CAelB,CAAA;AAEH,wBAAgB,MAAM,CAAC,CAAC,EAAE,CAAC,EACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,GACxB,iBAAiB,CAkCnB;AAyBD,6FAA6F;AAC7F,eAAO,MAAM,UAAU,2CAUpB,CAAA;AAEH,wBAAgB,WAAW,CACzB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAC5B,eAAe,CAcjB"}
@@ -0,0 +1,104 @@
1
+ import { Schema } from "effect";
2
+ import { GraphQLScalarType, GraphQLEnumType, valueFromASTUntyped, Kind, } from "graphql";
3
+ import { fieldError } from "./Errors.js";
4
+ import { guardScalar } from "./ScalarBoundary.js";
5
+ import { invalid, metadata, annotations } from "./SchemaTypes.js";
6
+ export const date = (value) => {
7
+ if (typeof value !== "string")
8
+ return invalid("DateTime expects an ISO string");
9
+ const result = new Date(value);
10
+ return Number.isFinite(result.getTime())
11
+ ? result
12
+ : invalid("Invalid DateTime");
13
+ };
14
+ const invalidInput = (message) => {
15
+ throw fieldError(message, { code: "BAD_USER_INPUT" });
16
+ };
17
+ const dateInput = (value) => {
18
+ try {
19
+ return date(value).toISOString();
20
+ }
21
+ catch {
22
+ return invalidInput("DateTime expects a valid ISO string");
23
+ }
24
+ };
25
+ export const dateTime = () => guardScalar(new GraphQLScalarType({
26
+ name: "DateTime",
27
+ description: "A valid DateTime value",
28
+ serialize: (value) => value instanceof Date && Number.isFinite(value.getTime())
29
+ ? value.toISOString()
30
+ : date(value).toISOString(),
31
+ parseValue: dateInput,
32
+ parseLiteral: (node) => node.kind === Kind.STRING
33
+ ? dateInput(node.value)
34
+ : invalidInput("DateTime expects a string literal"),
35
+ }));
36
+ export function scalar(name, codec) {
37
+ const decode = Schema.decodeUnknownSync(codec);
38
+ const encode = Schema.encodeUnknownSync(codec);
39
+ const decodeInput = (value) => {
40
+ try {
41
+ return decode(value);
42
+ }
43
+ catch (error) {
44
+ if (Schema.isSchemaError(error))
45
+ return invalidInput(`Invalid value for ${name}`);
46
+ throw error;
47
+ }
48
+ };
49
+ return guardScalar(new GraphQLScalarType({
50
+ name,
51
+ ...metadata(codec.ast),
52
+ specifiedByURL: annotations(codec.ast).specifiedByURL,
53
+ serialize: encode,
54
+ // Keep the encoded representation until the argument Struct converts it for the resolver.
55
+ parseValue: (value) => {
56
+ decodeInput(value);
57
+ return value;
58
+ },
59
+ parseLiteral: (node, variables) => {
60
+ if (node.kind === Kind.ENUM)
61
+ return invalidInput(`${name} cannot represent an enum literal; quote the value as a string`);
62
+ const value = valueFromASTUntyped(node, variables);
63
+ decodeInput(value);
64
+ return value;
65
+ },
66
+ }));
67
+ }
68
+ function jsonLiteral(node, variables) {
69
+ switch (node.kind) {
70
+ case Kind.ENUM:
71
+ return invalidInput("JSON cannot represent an enum literal; quote the value as a string");
72
+ case Kind.OBJECT:
73
+ return Object.fromEntries(node.fields.map((field) => [
74
+ field.name.value,
75
+ jsonLiteral(field.value, variables),
76
+ ]));
77
+ case Kind.LIST:
78
+ return node.values.map((value) => jsonLiteral(value, variables));
79
+ default:
80
+ return valueFromASTUntyped(node, variables);
81
+ }
82
+ }
83
+ /** Like graphql-type-json, variables and outputs are deliberately unrestricted JS values. */
84
+ export const jsonScalar = () => guardScalar(new GraphQLScalarType({
85
+ name: "JSON",
86
+ description: "The `JSON` scalar type represents JSON values as specified by [ECMA-404](http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf).",
87
+ serialize: (value) => value,
88
+ parseValue: (value) => value,
89
+ parseLiteral: jsonLiteral,
90
+ }));
91
+ export function enumeration(name, schema) {
92
+ const ast = schema.ast;
93
+ const values = ast._tag === "Union" ? ast.types : [ast];
94
+ return new GraphQLEnumType({
95
+ name,
96
+ ...metadata(ast),
97
+ values: Object.fromEntries(values.map((value) => {
98
+ if (value._tag !== "Literal" || typeof value.literal !== "string")
99
+ return invalid(`${name}: enums require string Schema.Literals`);
100
+ return [value.literal, { value: value.literal, ...metadata(value) }];
101
+ })),
102
+ });
103
+ }
104
+ //# sourceMappingURL=Scalars.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Scalars.js","sourceRoot":"","sources":["../src/Scalars.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import type { SchemaAST } from "effect";
2
+ import { Schema } from "effect";
3
+ import { type GraphQLOutputType, type GraphQLNullableType, type GraphQLInputType } from "graphql";
4
+ declare module "effect/Schema" {
5
+ namespace Annotations {
6
+ interface Annotations {
7
+ readonly specifiedByURL?: string;
8
+ readonly graphqlType?: string;
9
+ readonly graphqlDefault?: unknown;
10
+ readonly deprecationReason?: string;
11
+ }
12
+ }
13
+ }
14
+ export declare const ID: Schema.String;
15
+ export declare function id<S extends Schema.Top & Schema.Schema<string>>(schema: S): S["Rebuild"];
16
+ export declare const JSONValue: Schema.Unknown;
17
+ /** DateTime inputs decode to normalized ISO strings. */
18
+ export declare const DateTime: Schema.String;
19
+ export declare function input<S extends Schema.Top>(name: string, schema: S): S["Rebuild"];
20
+ export declare function defaulted<S extends Schema.Top & Schema.Codec<unknown, unknown>>(schema: S, value: NoInfer<S["Type"]>): S["Rebuild"];
21
+ export declare const invalid: (message: string) => never;
22
+ export declare const annotations: (ast: SchemaAST.AST) => {
23
+ [x: string]: unknown;
24
+ expected?: string | undefined;
25
+ title?: string | undefined;
26
+ description?: string | undefined;
27
+ documentation?: string | undefined;
28
+ readOnly?: boolean | undefined;
29
+ writeOnly?: boolean | undefined;
30
+ format?: string | undefined;
31
+ contentEncoding?: string | undefined;
32
+ contentMediaType?: string | undefined;
33
+ contentSchema?: Schema.Json | undefined;
34
+ default?: unknown;
35
+ examples?: readonly unknown[] | undefined;
36
+ messageMissingKey?: string | undefined;
37
+ message?: string | undefined;
38
+ messageUnexpectedKey?: string | undefined;
39
+ identifier?: string | undefined;
40
+ specifiedByURL?: string;
41
+ graphqlType?: string;
42
+ graphqlDefault?: unknown;
43
+ deprecationReason?: string;
44
+ };
45
+ export declare function descriptionOf(ast: SchemaAST.AST): string | undefined;
46
+ export declare function metadata(ast: SchemaAST.AST): {
47
+ description?: string | undefined;
48
+ deprecationReason?: string | undefined;
49
+ };
50
+ export declare function representation(node: {
51
+ readonly annotations?: Schema.Annotations.Annotations | undefined;
52
+ }): unknown;
53
+ export declare function unwrap(type: GraphQLOutputType): GraphQLOutputType & GraphQLNullableType;
54
+ export declare function unwrap(type: GraphQLInputType): GraphQLInputType & GraphQLNullableType;
55
+ //# sourceMappingURL=SchemaTypes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaTypes.d.ts","sourceRoot":"","sources":["../src/SchemaTypes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EACL,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAEtB,MAAM,SAAS,CAAA;AAEhB,OAAO,QAAQ,eAAe,CAAC;IAC7B,UAAU,WAAW,CAAC;QACpB,UAAU,WAAW;YACnB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAA;YAChC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;YAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;YACjC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;SACpC;KACF;CACF;AAED,eAAO,MAAM,EAAE,eAAgD,CAAA;AAE/D,wBAAgB,EAAE,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAC7D,MAAM,EAAE,CAAC,GACR,CAAC,CAAC,SAAS,CAAC,CAEd;AAED,eAAO,MAAM,SAAS,gBAAmD,CAAA;AAEzE,wDAAwD;AACxD,eAAO,MAAM,QAAQ,eAAsD,CAAA;AAE3E,wBAAgB,KAAK,CAAC,CAAC,SAAS,MAAM,CAAC,GAAG,EACxC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,CAAC,GACR,CAAC,CAAC,SAAS,CAAC,CAGd;AAED,wBAAgB,SAAS,CACvB,CAAC,SAAS,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,EACrD,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,SAAS,CAAC,CAGpD;AAED,eAAO,MAAM,OAAO,YAAa,MAAM,KAAG,KAEzC,CAAA;AAED,eAAO,MAAM,WAAW,QAAS,SAAS,CAAC,GAAG;;;;;;;;;;;;;;;;;;qBAxCd,MAAM;kBACT,MAAM;qBACH,OAAO;wBACJ,MAAM;CAwCvC,CAAA;AAEF,wBAAgB,aAAa,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,GAAG,MAAM,GAAG,SAAS,CAOpE;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG;;;EAO1C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC,WAAW,CAAC,WAAW,GAAG,SAAS,CAAA;CAClE,GAAG,OAAO,CAEV;AAED,wBAAgB,MAAM,CACpB,IAAI,EAAE,iBAAiB,GACtB,iBAAiB,GAAG,mBAAmB,CAAA;AAC1C,wBAAgB,MAAM,CACpB,IAAI,EAAE,gBAAgB,GACrB,gBAAgB,GAAG,mBAAmB,CAAA"}
@@ -0,0 +1,47 @@
1
+ import { Schema } from "effect";
2
+ import { isNonNullType, } from "graphql";
3
+ export const ID = Schema.String.annotate({ graphqlType: "ID" });
4
+ export function id(schema) {
5
+ return schema.annotate({ graphqlType: "ID" });
6
+ }
7
+ export const JSONValue = Schema.Unknown.annotate({ graphqlType: "JSON" });
8
+ /** DateTime inputs decode to normalized ISO strings. */
9
+ export const DateTime = Schema.String.annotate({ graphqlType: "DateTime" });
10
+ export function input(name, schema) {
11
+ // Schema annotations preserve the codec and its fields (including Schema classes).
12
+ return schema.annotate({ graphqlType: name });
13
+ }
14
+ export function defaulted(schema, value) {
15
+ Schema.decodeUnknownSync(Schema.toType(schema))(value);
16
+ return schema.annotate({ graphqlDefault: value });
17
+ }
18
+ export const invalid = (message) => {
19
+ throw new Error(message);
20
+ };
21
+ export const annotations = (ast) => ({
22
+ ...Schema.resolveAnnotations(Schema.make(ast)),
23
+ ...ast.context?.annotations,
24
+ });
25
+ export function descriptionOf(ast) {
26
+ const own = annotations(ast).description;
27
+ return typeof own === "string"
28
+ ? own
29
+ : ast._tag === "Union"
30
+ ? ast.types.map(descriptionOf).find((v) => v !== undefined)
31
+ : undefined;
32
+ }
33
+ export function metadata(ast) {
34
+ const description = descriptionOf(ast);
35
+ const deprecationReason = annotations(ast).deprecationReason;
36
+ return {
37
+ ...(description === undefined ? {} : { description }),
38
+ ...(deprecationReason === undefined ? {} : { deprecationReason }),
39
+ };
40
+ }
41
+ export function representation(node) {
42
+ return Reflect.get(Object(node.annotations?.representation), "id");
43
+ }
44
+ export function unwrap(type) {
45
+ return isNonNullType(type) ? type.ofType : type;
46
+ }
47
+ //# sourceMappingURL=SchemaTypes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SchemaTypes.js","sourceRoot":"","sources":["../src/SchemaTypes.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import { type ErrorPolicy } from "./Errors.ts";
2
+ import { type RuntimeRef, type Field } from "./FieldTypes.ts";
3
+ import { type AnyConfig } from "./Resolver.ts";
4
+ /** Setup and delivery share the resolver policy; authorization runs on every event. */
5
+ export declare const eventField: (policy: ErrorPolicy, ref: RuntimeRef, options: AnyConfig) => Field<unknown>;
6
+ //# sourceMappingURL=Subscription.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Subscription.d.ts","sourceRoot":"","sources":["../src/Subscription.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,KAAK,EAAqB,MAAM,iBAAiB,CAAA;AAEhF,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,uFAAuF;AACvF,eAAO,MAAM,UAAU,WACb,WAAW,OACd,UAAU,WACN,SAAS,KACjB,KAAK,CAAC,OAAO,CA0Ed,CAAA"}
@@ -0,0 +1,60 @@
1
+ import { Effect, Stream } from "effect";
2
+ import { fieldError, forbidden, protect, recoverCause, } from "./Errors.js";
3
+ import { describe, normalize } from "./FieldRuntime.js";
4
+ import { fieldRequirements } from "./FieldTypes.js";
5
+ import { argumentDecoder, optionalNullMessage } from "./InputTypes.js";
6
+ import {} from "./Resolver.js";
7
+ /** Setup and delivery share the resolver policy; authorization runs on every event. */
8
+ export const eventField = (policy, ref, options) => ({
9
+ kind: "field",
10
+ [fieldRequirements]: undefined,
11
+ build(context, name) {
12
+ const decode = argumentDecoder(options.args ?? {});
13
+ return {
14
+ type: context.output(ref, name),
15
+ ...describe(options),
16
+ args: Object.fromEntries(Object.entries(options.args ?? {}).map(([key, schema]) => [
17
+ key,
18
+ context.input.argument(schema, `${name}(${key})`),
19
+ ])),
20
+ subscribe(source, raw, request, info) {
21
+ const coordinate = `${info.parentType.name}.${info.fieldName}`;
22
+ return request.stream(Stream.suspend(() => {
23
+ let decoded;
24
+ try {
25
+ decoded = decode(raw);
26
+ }
27
+ catch {
28
+ throw fieldError(optionalNullMessage(options.args ?? {}, raw) ??
29
+ "Invalid arguments", { code: "BAD_USER_INPUT" });
30
+ }
31
+ if (!options.subscribe)
32
+ throw new Error("Subscription needs a stream");
33
+ return options.subscribe(source, decoded, request.context);
34
+ }).pipe(Stream.catchCause((cause) => Stream.fromEffect(recoverCause(cause, [], policy, {
35
+ coordinate,
36
+ phase: "subscribe",
37
+ })))));
38
+ },
39
+ resolve(value, raw, request, info) {
40
+ const coordinate = `${info.parentType.name}.${info.fieldName}`;
41
+ return request.run(protect(() => {
42
+ if (value instanceof Error)
43
+ return value;
44
+ const decoded = decode(raw);
45
+ return Effect.gen(function* () {
46
+ const allowed = yield* protect(() => options.authorize
47
+ ? options.authorize(value, decoded, request.context)
48
+ : true, [], policy, { coordinate, phase: "authorize" });
49
+ if (allowed instanceof Error)
50
+ return allowed;
51
+ return allowed === true
52
+ ? normalize(ref, value)
53
+ : forbidden(info.fieldName);
54
+ });
55
+ }, [], policy, { coordinate, phase: "resolve" }));
56
+ },
57
+ };
58
+ },
59
+ });
60
+ //# sourceMappingURL=Subscription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Subscription.js","sourceRoot":"","sources":["../src/Subscription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,52 @@
1
+ /** Test operations keep their Effect requirements so @effect/vitest can supply any layer. */
2
+ import { Effect, Stream } from "effect";
3
+ import { type BuiltSchema, type ContextArgument, type Request } from "./Execution.ts";
4
+ import { type FormattedExecutionResult as Result } from "./Formatting.ts";
5
+ export { snapshot } from "./Formatting.ts";
6
+ export type { FormattedExecutionResult as Result } from "./Formatting.ts";
7
+ export declare const execute: <R, C>(built: BuiltSchema<R, C>, request: Request, ...context: ContextArgument<NoInfer<C>>) => Effect.Effect<Result, never, R>;
8
+ export declare const subscribe: <R, C>(built: BuiltSchema<R, C>, request: Request, ...context: ContextArgument<NoInfer<C>>) => Stream.Stream<Result, never, R>;
9
+ /**
10
+ * Tags a GraphQL document for editor highlighting and removes ignored
11
+ * characters, so snapshots and error locations do not depend on indentation.
12
+ * String literals are kept verbatim. Like an editor, it reads backslash
13
+ * escapes as GraphQL escapes.
14
+ *
15
+ * @example
16
+ * const QUERY = graphql`
17
+ * query List($id: ID!) { list(id: $id) { id name } }
18
+ * `
19
+ */
20
+ export declare function graphql(strings: TemplateStringsArray, ...values: ReadonlyArray<string | number | boolean>): string;
21
+ export interface RequestOptions {
22
+ readonly variables?: {
23
+ readonly [name: string]: unknown;
24
+ };
25
+ readonly operationName?: string;
26
+ }
27
+ /** Request options are optional unless the context factory requires one. */
28
+ export type RequestArgument<O> = {} extends O ? [options?: O & RequestOptions] : [options: O & RequestOptions];
29
+ export interface ClientOptions<C, O, R> {
30
+ /** Builds each request's context from its options, as a value or an Effect. */
31
+ readonly context: (options: O) => C | Effect.Effect<C, never, R>;
32
+ }
33
+ /** A context factory is required whenever the schema has a request context. */
34
+ export type ClientArgument<C, O, R> = {} extends C ? [options?: ClientOptions<C, O, R>] : [options: ClientOptions<C, O, R>];
35
+ export interface Client<O, R> {
36
+ readonly request: (source: string, ...options: RequestArgument<O>) => Effect.Effect<Result, never, R>;
37
+ readonly subscribe: (source: string, ...options: RequestArgument<O>) => Stream.Stream<Result, never, R>;
38
+ }
39
+ /**
40
+ * Binds a schema to a default request context so each test only states what
41
+ * differs, such as the identity.
42
+ *
43
+ * @example
44
+ * export const { request, subscribe } = Testing.client(schema, {
45
+ * context: (options: { identity?: Identity }) => ({
46
+ * requestId: "test",
47
+ * identity: options.identity ?? anonymous,
48
+ * }),
49
+ * })
50
+ */
51
+ export declare const client: <R, C, O = {}, R2 = never>(built: BuiltSchema<R, C>, ...[options]: ClientArgument<NoInfer<C>, O, R2>) => Client<O, R | R2>;
52
+ //# sourceMappingURL=Testing.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Testing.d.ts","sourceRoot":"","sources":["../src/Testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,74 @@
1
+ /** Test operations keep their Effect requirements so @effect/vitest can supply any layer. */
2
+ import { Effect, Stream } from "effect";
3
+ import { GraphQLError, stripIgnoredCharacters } from "graphql";
4
+ import { execute as run, subscribe as events, } from "./Execution.js";
5
+ import { snapshot, } from "./Formatting.js";
6
+ export { snapshot } from "./Formatting.js";
7
+ export const execute = (built, request, ...context) => run(built, request, ...context).pipe(Effect.map(snapshot));
8
+ export const subscribe = (built, request, ...context) => events(built, request, ...context).pipe(Stream.map(snapshot));
9
+ /**
10
+ * Tags a GraphQL document for editor highlighting and removes ignored
11
+ * characters, so snapshots and error locations do not depend on indentation.
12
+ * String literals are kept verbatim. Like an editor, it reads backslash
13
+ * escapes as GraphQL escapes.
14
+ *
15
+ * @example
16
+ * const QUERY = graphql`
17
+ * query List($id: ID!) { list(id: $id) { id name } }
18
+ * `
19
+ */
20
+ export function graphql(strings, ...values) {
21
+ const source = String.raw({ raw: strings.raw }, ...values);
22
+ try {
23
+ return stripIgnoredCharacters(source);
24
+ }
25
+ catch (error) {
26
+ // Leave invalid documents to execution, which reports a located syntax error.
27
+ if (error instanceof GraphQLError)
28
+ return source;
29
+ throw error;
30
+ }
31
+ }
32
+ // A context is never itself an Effect, so Effect.isEffect separates the two
33
+ // cases exactly; TypeScript cannot exclude an Effect from a generic A.
34
+ const lift = (value) => Effect.isEffect(value)
35
+ ? value
36
+ : Effect.succeed(value);
37
+ /**
38
+ * Binds a schema to a default request context so each test only states what
39
+ * differs, such as the identity.
40
+ *
41
+ * @example
42
+ * export const { request, subscribe } = Testing.client(schema, {
43
+ * context: (options: { identity?: Identity }) => ({
44
+ * requestId: "test",
45
+ * identity: options.identity ?? anonymous,
46
+ * }),
47
+ * })
48
+ */
49
+ export const client = (built, ...[options]) => {
50
+ // RequestArgument and ClientArgument make an argument optional only when
51
+ // `{}` satisfies its type, and both ContextArgument branches accept [C].
52
+ // TypeScript cannot narrow these conditionals for generic O and C.
53
+ const prepare = (source, input) => {
54
+ const request = input ?? {};
55
+ const context = options
56
+ ? lift(options.context(request))
57
+ : Effect.succeed({});
58
+ return Effect.map(context, (context) => ({
59
+ request: {
60
+ source,
61
+ ...(request.variables ? { variableValues: request.variables } : {}),
62
+ ...(request.operationName === undefined
63
+ ? {}
64
+ : { operationName: request.operationName }),
65
+ },
66
+ context: [context],
67
+ }));
68
+ };
69
+ return {
70
+ request: (source, ...[input]) => Effect.flatMap(prepare(source, input), ({ request, context }) => execute(built, request, ...context)),
71
+ subscribe: (source, ...[input]) => Stream.unwrap(Effect.map(prepare(source, input), ({ request, context }) => subscribe(built, request, ...context))),
72
+ };
73
+ };
74
+ //# sourceMappingURL=Testing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Testing.js","sourceRoot":"","sources":["../src/Testing.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from "./GraphQL.ts";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ export * from "./GraphQL.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAA"}
@@ -0,0 +1,8 @@
1
+ import { type ValidationRule } from "graphql";
2
+ /**
3
+ * Replaces graphql-js's SingleFieldSubscriptionsRule, which evaluates root
4
+ * skip/include without variables and throws for a variable condition. Collect
5
+ * root response keys through fragments and reject root conditionals instead.
6
+ */
7
+ export declare const singleRootFieldSubscriptionsRule: ValidationRule;
8
+ //# sourceMappingURL=SubscriptionRule.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SubscriptionRule.d.ts","sourceRoot":"","sources":["../../src/internal/SubscriptionRule.ts"],"names":[],"mappings":"AAAA,OAAO,EAUL,KAAK,cAAc,EACpB,MAAM,SAAS,CAAA;AAEhB;;;;GAIG;AACH,eAAO,MAAM,gCAAgC,EAAE,cAuE7C,CAAA"}