@effect-gql/core 0.1.0 → 1.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 (164) hide show
  1. package/README.md +100 -0
  2. package/builder/index.cjs +1431 -0
  3. package/builder/index.cjs.map +1 -0
  4. package/builder/index.d.cts +259 -0
  5. package/{dist/builder/pipe-api.d.ts → builder/index.d.ts} +49 -21
  6. package/builder/index.js +1390 -0
  7. package/builder/index.js.map +1 -0
  8. package/index.cjs +3419 -0
  9. package/index.cjs.map +1 -0
  10. package/index.d.cts +523 -0
  11. package/index.d.ts +523 -0
  12. package/index.js +3242 -0
  13. package/index.js.map +1 -0
  14. package/package.json +19 -28
  15. package/schema-builder-Cvdq7Kz_.d.cts +963 -0
  16. package/schema-builder-Cvdq7Kz_.d.ts +963 -0
  17. package/server/index.cjs +1555 -0
  18. package/server/index.cjs.map +1 -0
  19. package/server/index.d.cts +680 -0
  20. package/server/index.d.ts +680 -0
  21. package/server/index.js +1524 -0
  22. package/server/index.js.map +1 -0
  23. package/dist/analyzer-extension.d.ts +0 -105
  24. package/dist/analyzer-extension.d.ts.map +0 -1
  25. package/dist/analyzer-extension.js +0 -137
  26. package/dist/analyzer-extension.js.map +0 -1
  27. package/dist/builder/execute.d.ts +0 -26
  28. package/dist/builder/execute.d.ts.map +0 -1
  29. package/dist/builder/execute.js +0 -104
  30. package/dist/builder/execute.js.map +0 -1
  31. package/dist/builder/field-builders.d.ts +0 -30
  32. package/dist/builder/field-builders.d.ts.map +0 -1
  33. package/dist/builder/field-builders.js +0 -200
  34. package/dist/builder/field-builders.js.map +0 -1
  35. package/dist/builder/index.d.ts +0 -7
  36. package/dist/builder/index.d.ts.map +0 -1
  37. package/dist/builder/index.js +0 -31
  38. package/dist/builder/index.js.map +0 -1
  39. package/dist/builder/pipe-api.d.ts.map +0 -1
  40. package/dist/builder/pipe-api.js +0 -151
  41. package/dist/builder/pipe-api.js.map +0 -1
  42. package/dist/builder/schema-builder.d.ts +0 -301
  43. package/dist/builder/schema-builder.d.ts.map +0 -1
  44. package/dist/builder/schema-builder.js +0 -566
  45. package/dist/builder/schema-builder.js.map +0 -1
  46. package/dist/builder/type-registry.d.ts +0 -80
  47. package/dist/builder/type-registry.d.ts.map +0 -1
  48. package/dist/builder/type-registry.js +0 -505
  49. package/dist/builder/type-registry.js.map +0 -1
  50. package/dist/builder/types.d.ts +0 -283
  51. package/dist/builder/types.d.ts.map +0 -1
  52. package/dist/builder/types.js +0 -3
  53. package/dist/builder/types.js.map +0 -1
  54. package/dist/cli/generate-schema.d.ts +0 -29
  55. package/dist/cli/generate-schema.d.ts.map +0 -1
  56. package/dist/cli/generate-schema.js +0 -233
  57. package/dist/cli/generate-schema.js.map +0 -1
  58. package/dist/cli/index.d.ts +0 -19
  59. package/dist/cli/index.d.ts.map +0 -1
  60. package/dist/cli/index.js +0 -24
  61. package/dist/cli/index.js.map +0 -1
  62. package/dist/context.d.ts +0 -18
  63. package/dist/context.d.ts.map +0 -1
  64. package/dist/context.js +0 -11
  65. package/dist/context.js.map +0 -1
  66. package/dist/error.d.ts +0 -45
  67. package/dist/error.d.ts.map +0 -1
  68. package/dist/error.js +0 -29
  69. package/dist/error.js.map +0 -1
  70. package/dist/extensions.d.ts +0 -130
  71. package/dist/extensions.d.ts.map +0 -1
  72. package/dist/extensions.js +0 -78
  73. package/dist/extensions.js.map +0 -1
  74. package/dist/index.d.ts +0 -12
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -47
  77. package/dist/index.js.map +0 -1
  78. package/dist/loader.d.ts +0 -169
  79. package/dist/loader.d.ts.map +0 -1
  80. package/dist/loader.js +0 -237
  81. package/dist/loader.js.map +0 -1
  82. package/dist/resolver-context.d.ts +0 -154
  83. package/dist/resolver-context.d.ts.map +0 -1
  84. package/dist/resolver-context.js +0 -184
  85. package/dist/resolver-context.js.map +0 -1
  86. package/dist/schema-mapping.d.ts +0 -30
  87. package/dist/schema-mapping.d.ts.map +0 -1
  88. package/dist/schema-mapping.js +0 -280
  89. package/dist/schema-mapping.js.map +0 -1
  90. package/dist/server/cache-control.d.ts +0 -96
  91. package/dist/server/cache-control.d.ts.map +0 -1
  92. package/dist/server/cache-control.js +0 -308
  93. package/dist/server/cache-control.js.map +0 -1
  94. package/dist/server/complexity.d.ts +0 -165
  95. package/dist/server/complexity.d.ts.map +0 -1
  96. package/dist/server/complexity.js +0 -433
  97. package/dist/server/complexity.js.map +0 -1
  98. package/dist/server/config.d.ts +0 -66
  99. package/dist/server/config.d.ts.map +0 -1
  100. package/dist/server/config.js +0 -104
  101. package/dist/server/config.js.map +0 -1
  102. package/dist/server/graphiql.d.ts +0 -5
  103. package/dist/server/graphiql.d.ts.map +0 -1
  104. package/dist/server/graphiql.js +0 -43
  105. package/dist/server/graphiql.js.map +0 -1
  106. package/dist/server/index.d.ts +0 -18
  107. package/dist/server/index.d.ts.map +0 -1
  108. package/dist/server/index.js +0 -48
  109. package/dist/server/index.js.map +0 -1
  110. package/dist/server/router.d.ts +0 -79
  111. package/dist/server/router.d.ts.map +0 -1
  112. package/dist/server/router.js +0 -232
  113. package/dist/server/router.js.map +0 -1
  114. package/dist/server/schema-builder-extensions.d.ts +0 -42
  115. package/dist/server/schema-builder-extensions.d.ts.map +0 -1
  116. package/dist/server/schema-builder-extensions.js +0 -48
  117. package/dist/server/schema-builder-extensions.js.map +0 -1
  118. package/dist/server/sse-adapter.d.ts +0 -64
  119. package/dist/server/sse-adapter.d.ts.map +0 -1
  120. package/dist/server/sse-adapter.js +0 -227
  121. package/dist/server/sse-adapter.js.map +0 -1
  122. package/dist/server/sse-types.d.ts +0 -192
  123. package/dist/server/sse-types.d.ts.map +0 -1
  124. package/dist/server/sse-types.js +0 -63
  125. package/dist/server/sse-types.js.map +0 -1
  126. package/dist/server/ws-adapter.d.ts +0 -39
  127. package/dist/server/ws-adapter.d.ts.map +0 -1
  128. package/dist/server/ws-adapter.js +0 -247
  129. package/dist/server/ws-adapter.js.map +0 -1
  130. package/dist/server/ws-types.d.ts +0 -169
  131. package/dist/server/ws-types.d.ts.map +0 -1
  132. package/dist/server/ws-types.js +0 -11
  133. package/dist/server/ws-types.js.map +0 -1
  134. package/dist/server/ws-utils.d.ts +0 -42
  135. package/dist/server/ws-utils.d.ts.map +0 -1
  136. package/dist/server/ws-utils.js +0 -99
  137. package/dist/server/ws-utils.js.map +0 -1
  138. package/src/analyzer-extension.ts +0 -254
  139. package/src/builder/execute.ts +0 -153
  140. package/src/builder/field-builders.ts +0 -322
  141. package/src/builder/index.ts +0 -48
  142. package/src/builder/pipe-api.ts +0 -312
  143. package/src/builder/schema-builder.ts +0 -970
  144. package/src/builder/type-registry.ts +0 -670
  145. package/src/builder/types.ts +0 -305
  146. package/src/context.ts +0 -23
  147. package/src/error.ts +0 -32
  148. package/src/extensions.ts +0 -240
  149. package/src/index.ts +0 -32
  150. package/src/loader.ts +0 -363
  151. package/src/resolver-context.ts +0 -253
  152. package/src/schema-mapping.ts +0 -307
  153. package/src/server/cache-control.ts +0 -590
  154. package/src/server/complexity.ts +0 -774
  155. package/src/server/config.ts +0 -174
  156. package/src/server/graphiql.ts +0 -38
  157. package/src/server/index.ts +0 -96
  158. package/src/server/router.ts +0 -432
  159. package/src/server/schema-builder-extensions.ts +0 -51
  160. package/src/server/sse-adapter.ts +0 -327
  161. package/src/server/sse-types.ts +0 -234
  162. package/src/server/ws-adapter.ts +0 -355
  163. package/src/server/ws-types.ts +0 -192
  164. package/src/server/ws-utils.ts +0 -136
package/dist/loader.js DELETED
@@ -1,237 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Loader = void 0;
7
- const effect_1 = require("effect");
8
- const dataloader_1 = __importDefault(require("dataloader"));
9
- // ============================================================================
10
- // Loader Builders
11
- // ============================================================================
12
- /**
13
- * Create a single-value loader definition.
14
- * One key maps to one value.
15
- *
16
- * @example
17
- * ```typescript
18
- * Loader.single<string, User>({
19
- * batch: (ids) => db.getUsersByIds(ids),
20
- * key: (user) => user.id,
21
- * })
22
- * ```
23
- */
24
- function single(config) {
25
- return {
26
- _tag: "single",
27
- batch: config.batch,
28
- key: config.key,
29
- };
30
- }
31
- /**
32
- * Create a grouped loader definition.
33
- * One key maps to many values.
34
- *
35
- * @example
36
- * ```typescript
37
- * Loader.grouped<string, Post>({
38
- * batch: (authorIds) => db.getPostsForAuthors(authorIds),
39
- * groupBy: (post) => post.authorId,
40
- * })
41
- * ```
42
- */
43
- function grouped(config) {
44
- return {
45
- _tag: "grouped",
46
- batch: config.batch,
47
- groupBy: config.groupBy,
48
- };
49
- }
50
- // ============================================================================
51
- // Loader Registry
52
- // ============================================================================
53
- /**
54
- * A registry of loader definitions with methods to create instances and layers
55
- */
56
- class LoaderRegistry {
57
- definitions;
58
- _tag = "LoaderRegistry";
59
- /**
60
- * The Effect service tag for this loader registry
61
- */
62
- Service;
63
- constructor(definitions) {
64
- this.definitions = definitions;
65
- this.Service = effect_1.Context.GenericTag(`DataLoaders(${Object.keys(definitions).join(", ")})`);
66
- }
67
- /**
68
- * Create a Layer that provides fresh DataLoader instances.
69
- * Call this once per request to get request-scoped loaders.
70
- */
71
- toLayer() {
72
- const self = this;
73
- return effect_1.Layer.effect(this.Service, effect_1.Effect.gen(function* () {
74
- const instances = {};
75
- for (const [name, def] of Object.entries(self.definitions)) {
76
- instances[name] = yield* createDataLoader(def);
77
- }
78
- return instances;
79
- }));
80
- }
81
- /**
82
- * Helper to use loaders in a resolver with a callback.
83
- */
84
- use(fn) {
85
- const self = this;
86
- return effect_1.Effect.gen(function* () {
87
- const loaders = yield* self.Service;
88
- return yield* effect_1.Effect.promise(() => fn(loaders));
89
- });
90
- }
91
- /**
92
- * Load a single value by key.
93
- * This is the most common operation in resolvers.
94
- */
95
- load(name, key) {
96
- const self = this;
97
- return effect_1.Effect.gen(function* () {
98
- const loaders = yield* self.Service;
99
- const loader = loaders[name];
100
- return yield* effect_1.Effect.promise(() => loader.load(key));
101
- });
102
- }
103
- /**
104
- * Load multiple values by keys.
105
- * All keys are batched into a single request.
106
- */
107
- loadMany(name, keys) {
108
- const self = this;
109
- return effect_1.Effect.gen(function* () {
110
- const loaders = yield* self.Service;
111
- const loader = loaders[name];
112
- const results = yield* effect_1.Effect.promise(() => loader.loadMany(keys));
113
- // Convert any errors to a failure
114
- for (const result of results) {
115
- if (result instanceof Error) {
116
- return yield* effect_1.Effect.fail(result);
117
- }
118
- }
119
- return results;
120
- });
121
- }
122
- }
123
- /**
124
- * Create a DataLoader from a loader definition
125
- */
126
- function createDataLoader(def) {
127
- return effect_1.Effect.gen(function* () {
128
- // Capture context for use in batch function
129
- const context = yield* effect_1.Effect.context();
130
- if (def._tag === "single") {
131
- const loader = new dataloader_1.default(async (keys) => {
132
- const items = await effect_1.Effect.runPromise(def.batch(keys).pipe(effect_1.Effect.provide(context)));
133
- // Map items back to keys in order
134
- return keys.map((key) => {
135
- const item = items.find((i) => def.key(i) === key);
136
- if (!item)
137
- return new Error(`Not found: ${key}`);
138
- return item;
139
- });
140
- });
141
- return loader;
142
- }
143
- else {
144
- // Grouped loader
145
- const loader = new dataloader_1.default(async (keys) => {
146
- const items = await effect_1.Effect.runPromise(def.batch(keys).pipe(effect_1.Effect.provide(context)));
147
- // Group items by key with lazy array initialization
148
- // Only create arrays for keys that have matching items
149
- const map = new Map();
150
- for (const item of items) {
151
- const key = def.groupBy(item);
152
- let arr = map.get(key);
153
- if (!arr) {
154
- arr = [];
155
- map.set(key, arr);
156
- }
157
- arr.push(item);
158
- }
159
- // Return results in key order, defaulting to empty array for missing keys
160
- return keys.map((key) => map.get(key) ?? []);
161
- });
162
- return loader;
163
- }
164
- });
165
- }
166
- // ============================================================================
167
- // Public API
168
- // ============================================================================
169
- /**
170
- * Define a set of loaders.
171
- *
172
- * @example
173
- * ```typescript
174
- * const loaders = Loader.define({
175
- * UserById: Loader.single<string, User>({
176
- * batch: (ids) => db.getUsersByIds(ids),
177
- * key: (user) => user.id,
178
- * }),
179
- * PostsByAuthorId: Loader.grouped<string, Post>({
180
- * batch: (ids) => db.getPostsForAuthors(ids),
181
- * groupBy: (post) => post.authorId,
182
- * }),
183
- * })
184
- *
185
- * // In resolvers:
186
- * loaders.load("UserById", "123")
187
- * loaders.loadMany("UserById", ["1", "2", "3"])
188
- * ```
189
- */
190
- function define(definitions) {
191
- return new LoaderRegistry(definitions);
192
- }
193
- // ============================================================================
194
- // Utility Functions
195
- // ============================================================================
196
- /**
197
- * Map an array of items to match requested keys.
198
- * Returns items in the same order as keys, with errors for missing items.
199
- */
200
- function mapByKey(keys, items, keyFn) {
201
- const map = new Map();
202
- for (const item of items) {
203
- map.set(keyFn(item), item);
204
- }
205
- return keys.map((key) => map.get(key) ?? new Error(`Not found: ${key}`));
206
- }
207
- /**
208
- * Group an array of items by a key function.
209
- * Returns a Map from key to array of matching items.
210
- * Guarantees an entry (possibly empty) for each requested key.
211
- */
212
- function groupByKey(keys, items, keyFn) {
213
- const map = new Map();
214
- // Initialize empty arrays for all requested keys
215
- for (const key of keys) {
216
- map.set(key, []);
217
- }
218
- // Fill in items
219
- for (const item of items) {
220
- const key = keyFn(item);
221
- const arr = map.get(key);
222
- if (arr)
223
- arr.push(item);
224
- }
225
- return map;
226
- }
227
- // ============================================================================
228
- // Export
229
- // ============================================================================
230
- exports.Loader = {
231
- define,
232
- single,
233
- grouped,
234
- mapByKey,
235
- groupByKey,
236
- };
237
- //# sourceMappingURL=loader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../src/loader.ts"],"names":[],"mappings":"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"}
@@ -1,154 +0,0 @@
1
- import { Effect, Context, Layer, Ref, Option, HashMap } from "effect";
2
- /**
3
- * A type-safe context system for passing values through the resolver hierarchy.
4
- *
5
- * Unlike simple property bags, this provides:
6
- * - Type-safe slots that know their value type
7
- * - Clear errors when required context is missing
8
- * - Request-scoped storage that works across nested resolvers
9
- *
10
- * @example
11
- * ```typescript
12
- * // Define a context slot
13
- * const AuthPrincipal = ResolverContext.make<User>("AuthPrincipal")
14
- *
15
- * // Provide in a directive
16
- * .directive({
17
- * name: "auth",
18
- * apply: () => (effect) => Effect.gen(function*() {
19
- * const user = yield* validateJwt()
20
- * yield* ResolverContext.set(AuthPrincipal, user)
21
- * return yield* effect
22
- * }),
23
- * })
24
- *
25
- * // Access in any nested resolver
26
- * .field("User", "posts", {
27
- * resolve: (parent) => Effect.gen(function*() {
28
- * const user = yield* ResolverContext.get(AuthPrincipal)
29
- * // ...
30
- * }),
31
- * })
32
- * ```
33
- */
34
- /**
35
- * Error thrown when trying to access a context value that hasn't been set
36
- */
37
- export declare class MissingResolverContextError extends Error {
38
- readonly contextName: string;
39
- readonly _tag = "MissingResolverContextError";
40
- constructor(contextName: string);
41
- }
42
- /**
43
- * A typed context slot that can hold a value of type A
44
- */
45
- export interface ResolverContextSlot<A> {
46
- readonly _tag: "ResolverContextSlot";
47
- readonly name: string;
48
- readonly _A: A;
49
- }
50
- /**
51
- * Internal storage for resolver context values.
52
- * This is a request-scoped service that holds all context values.
53
- */
54
- export interface ResolverContextStore {
55
- readonly ref: Ref.Ref<HashMap.HashMap<string, unknown>>;
56
- }
57
- export declare const ResolverContextStore: Context.Tag<ResolverContextStore, ResolverContextStore>;
58
- /**
59
- * Create a Layer that provides the ResolverContextStore.
60
- * This should be included in the request layer.
61
- */
62
- export declare const makeStoreLayer: () => Effect.Effect<Layer.Layer<ResolverContextStore>>;
63
- /**
64
- * Create a Layer that provides an empty ResolverContextStore.
65
- * Convenience function for creating a fresh store layer.
66
- */
67
- export declare const storeLayer: Layer.Layer<ResolverContextStore>;
68
- /**
69
- * Create a new resolver context slot.
70
- *
71
- * The name is used for error messages when the context is accessed but not set.
72
- *
73
- * @example
74
- * ```typescript
75
- * const AuthPrincipal = ResolverContext.make<User>("AuthPrincipal")
76
- * const TenantId = ResolverContext.make<string>("TenantId")
77
- * ```
78
- */
79
- export declare const make: <A>(name: string) => ResolverContextSlot<A>;
80
- /**
81
- * Get a value from the resolver context.
82
- *
83
- * Fails with MissingResolverContextError if the context was not set
84
- * by a parent resolver or directive.
85
- *
86
- * @example
87
- * ```typescript
88
- * const effect = Effect.gen(function*() {
89
- * const user = yield* ResolverContext.get(AuthPrincipal)
90
- * // user is typed as User
91
- * })
92
- * ```
93
- */
94
- export declare const get: <A>(slot: ResolverContextSlot<A>) => Effect.Effect<A, MissingResolverContextError, ResolverContextStore>;
95
- /**
96
- * Get a value from the resolver context as an Option.
97
- *
98
- * Returns None if the context was not set, instead of failing.
99
- * Useful when context is optional.
100
- */
101
- export declare const getOption: <A>(slot: ResolverContextSlot<A>) => Effect.Effect<Option.Option<A>, never, ResolverContextStore>;
102
- /**
103
- * Set a value in the resolver context.
104
- *
105
- * The value will be available to all subsequent resolver calls in this request.
106
- * This mutates the request-scoped store, so nested resolvers will see the value.
107
- *
108
- * @example
109
- * ```typescript
110
- * // In a directive
111
- * const withAuth = (effect) => Effect.gen(function*() {
112
- * const user = yield* validateJwt()
113
- * yield* ResolverContext.set(AuthPrincipal, user)
114
- * return yield* effect
115
- * })
116
- * ```
117
- */
118
- export declare const set: <A>(slot: ResolverContextSlot<A>, value: A) => Effect.Effect<void, never, ResolverContextStore>;
119
- /**
120
- * Set multiple context values at once.
121
- */
122
- export declare const setMany: (values: ReadonlyArray<readonly [ResolverContextSlot<any>, any]>) => Effect.Effect<void, never, ResolverContextStore>;
123
- /**
124
- * Check if a context slot has a value set.
125
- */
126
- export declare const has: <A>(slot: ResolverContextSlot<A>) => Effect.Effect<boolean, never, ResolverContextStore>;
127
- /**
128
- * Get a value or return a default if not set.
129
- */
130
- export declare const getOrElse: <A>(slot: ResolverContextSlot<A>, orElse: () => A) => Effect.Effect<A, never, ResolverContextStore>;
131
- /**
132
- * Run an effect with a temporary context value.
133
- * The value is set before the effect runs and removed after.
134
- * Useful for scoped context that shouldn't persist.
135
- */
136
- export declare const scoped: <A>(slot: ResolverContextSlot<A>, value: A) => <B, E, R>(effect: Effect.Effect<B, E, R>) => Effect.Effect<B, E, R | ResolverContextStore>;
137
- /**
138
- * Namespace for ResolverContext functions
139
- */
140
- export declare const ResolverContext: {
141
- readonly make: <A>(name: string) => ResolverContextSlot<A>;
142
- readonly get: <A>(slot: ResolverContextSlot<A>) => Effect.Effect<A, MissingResolverContextError, ResolverContextStore>;
143
- readonly getOption: <A>(slot: ResolverContextSlot<A>) => Effect.Effect<Option.Option<A>, never, ResolverContextStore>;
144
- readonly set: <A>(slot: ResolverContextSlot<A>, value: A) => Effect.Effect<void, never, ResolverContextStore>;
145
- readonly setMany: (values: ReadonlyArray<readonly [ResolverContextSlot<any>, any]>) => Effect.Effect<void, never, ResolverContextStore>;
146
- readonly has: <A>(slot: ResolverContextSlot<A>) => Effect.Effect<boolean, never, ResolverContextStore>;
147
- readonly getOrElse: <A>(slot: ResolverContextSlot<A>, orElse: () => A) => Effect.Effect<A, never, ResolverContextStore>;
148
- readonly scoped: <A>(slot: ResolverContextSlot<A>, value: A) => <B, E, R>(effect: Effect.Effect<B, E, R>) => Effect.Effect<B, E, R | ResolverContextStore>;
149
- readonly storeLayer: Layer.Layer<ResolverContextStore, never, never>;
150
- readonly makeStoreLayer: () => Effect.Effect<Layer.Layer<ResolverContextStore>>;
151
- readonly Store: Context.Tag<ResolverContextStore, ResolverContextStore>;
152
- readonly MissingResolverContextError: typeof MissingResolverContextError;
153
- };
154
- //# sourceMappingURL=resolver-context.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver-context.d.ts","sourceRoot":"","sources":["../src/resolver-context.ts"],"names":[],"mappings":"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"}
@@ -1,184 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ResolverContext = exports.scoped = exports.getOrElse = exports.has = exports.setMany = exports.set = exports.getOption = exports.get = exports.make = exports.storeLayer = exports.makeStoreLayer = exports.ResolverContextStore = exports.MissingResolverContextError = void 0;
4
- const effect_1 = require("effect");
5
- /**
6
- * A type-safe context system for passing values through the resolver hierarchy.
7
- *
8
- * Unlike simple property bags, this provides:
9
- * - Type-safe slots that know their value type
10
- * - Clear errors when required context is missing
11
- * - Request-scoped storage that works across nested resolvers
12
- *
13
- * @example
14
- * ```typescript
15
- * // Define a context slot
16
- * const AuthPrincipal = ResolverContext.make<User>("AuthPrincipal")
17
- *
18
- * // Provide in a directive
19
- * .directive({
20
- * name: "auth",
21
- * apply: () => (effect) => Effect.gen(function*() {
22
- * const user = yield* validateJwt()
23
- * yield* ResolverContext.set(AuthPrincipal, user)
24
- * return yield* effect
25
- * }),
26
- * })
27
- *
28
- * // Access in any nested resolver
29
- * .field("User", "posts", {
30
- * resolve: (parent) => Effect.gen(function*() {
31
- * const user = yield* ResolverContext.get(AuthPrincipal)
32
- * // ...
33
- * }),
34
- * })
35
- * ```
36
- */
37
- /**
38
- * Error thrown when trying to access a context value that hasn't been set
39
- */
40
- class MissingResolverContextError extends Error {
41
- contextName;
42
- _tag = "MissingResolverContextError";
43
- constructor(contextName) {
44
- super(`Resolver context "${contextName}" was not provided. Ensure a parent resolver or directive provides this context.`);
45
- this.contextName = contextName;
46
- this.name = "MissingResolverContextError";
47
- }
48
- }
49
- exports.MissingResolverContextError = MissingResolverContextError;
50
- exports.ResolverContextStore = effect_1.Context.GenericTag("effect-gql/ResolverContextStore");
51
- /**
52
- * Create a Layer that provides the ResolverContextStore.
53
- * This should be included in the request layer.
54
- */
55
- const makeStoreLayer = () => effect_1.Effect.map(effect_1.Ref.make(effect_1.HashMap.empty()), (ref) => effect_1.Layer.succeed(exports.ResolverContextStore, { ref }));
56
- exports.makeStoreLayer = makeStoreLayer;
57
- /**
58
- * Create a Layer that provides an empty ResolverContextStore.
59
- * Convenience function for creating a fresh store layer.
60
- */
61
- exports.storeLayer = effect_1.Layer.effect(exports.ResolverContextStore, effect_1.Effect.map(effect_1.Ref.make(effect_1.HashMap.empty()), (ref) => ({ ref })));
62
- /**
63
- * Create a new resolver context slot.
64
- *
65
- * The name is used for error messages when the context is accessed but not set.
66
- *
67
- * @example
68
- * ```typescript
69
- * const AuthPrincipal = ResolverContext.make<User>("AuthPrincipal")
70
- * const TenantId = ResolverContext.make<string>("TenantId")
71
- * ```
72
- */
73
- const make = (name) => ({
74
- _tag: "ResolverContextSlot",
75
- name,
76
- _A: undefined,
77
- });
78
- exports.make = make;
79
- /**
80
- * Get a value from the resolver context.
81
- *
82
- * Fails with MissingResolverContextError if the context was not set
83
- * by a parent resolver or directive.
84
- *
85
- * @example
86
- * ```typescript
87
- * const effect = Effect.gen(function*() {
88
- * const user = yield* ResolverContext.get(AuthPrincipal)
89
- * // user is typed as User
90
- * })
91
- * ```
92
- */
93
- const get = (slot) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Effect.flatMap(effect_1.Ref.get(store.ref), (map) => {
94
- const value = effect_1.HashMap.get(map, slot.name);
95
- return effect_1.Option.match(value, {
96
- onNone: () => effect_1.Effect.fail(new MissingResolverContextError(slot.name)),
97
- onSome: (v) => effect_1.Effect.succeed(v),
98
- });
99
- }));
100
- exports.get = get;
101
- /**
102
- * Get a value from the resolver context as an Option.
103
- *
104
- * Returns None if the context was not set, instead of failing.
105
- * Useful when context is optional.
106
- */
107
- const getOption = (slot) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Effect.map(effect_1.Ref.get(store.ref), (map) => effect_1.HashMap.get(map, slot.name)));
108
- exports.getOption = getOption;
109
- /**
110
- * Set a value in the resolver context.
111
- *
112
- * The value will be available to all subsequent resolver calls in this request.
113
- * This mutates the request-scoped store, so nested resolvers will see the value.
114
- *
115
- * @example
116
- * ```typescript
117
- * // In a directive
118
- * const withAuth = (effect) => Effect.gen(function*() {
119
- * const user = yield* validateJwt()
120
- * yield* ResolverContext.set(AuthPrincipal, user)
121
- * return yield* effect
122
- * })
123
- * ```
124
- */
125
- const set = (slot, value) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Ref.update(store.ref, (map) => effect_1.HashMap.set(map, slot.name, value)));
126
- exports.set = set;
127
- /**
128
- * Set multiple context values at once.
129
- */
130
- const setMany = (values) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Ref.update(store.ref, (map) => {
131
- let result = map;
132
- for (const [slot, value] of values) {
133
- result = effect_1.HashMap.set(result, slot.name, value);
134
- }
135
- return result;
136
- }));
137
- exports.setMany = setMany;
138
- /**
139
- * Check if a context slot has a value set.
140
- */
141
- const has = (slot) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Effect.map(effect_1.Ref.get(store.ref), (map) => effect_1.HashMap.has(map, slot.name)));
142
- exports.has = has;
143
- /**
144
- * Get a value or return a default if not set.
145
- */
146
- const getOrElse = (slot, orElse) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Effect.map(effect_1.Ref.get(store.ref), (map) => effect_1.Option.getOrElse(effect_1.HashMap.get(map, slot.name), orElse)));
147
- exports.getOrElse = getOrElse;
148
- /**
149
- * Run an effect with a temporary context value.
150
- * The value is set before the effect runs and removed after.
151
- * Useful for scoped context that shouldn't persist.
152
- */
153
- const scoped = (slot, value) => (effect) => effect_1.Effect.flatMap(exports.ResolverContextStore, (store) => effect_1.Effect.acquireUseRelease(
154
- // Acquire: save current value and set new one
155
- effect_1.Effect.flatMap(effect_1.Ref.get(store.ref), (map) => {
156
- const previous = effect_1.HashMap.get(map, slot.name);
157
- return effect_1.Effect.as(effect_1.Ref.set(store.ref, effect_1.HashMap.set(map, slot.name, value)), previous);
158
- }),
159
- // Use: run the effect
160
- () => effect,
161
- // Release: restore previous value
162
- (previous) => effect_1.Ref.update(store.ref, (map) => effect_1.Option.match(previous, {
163
- onNone: () => effect_1.HashMap.remove(map, slot.name),
164
- onSome: (v) => effect_1.HashMap.set(map, slot.name, v),
165
- }))));
166
- exports.scoped = scoped;
167
- /**
168
- * Namespace for ResolverContext functions
169
- */
170
- exports.ResolverContext = {
171
- make: exports.make,
172
- get: exports.get,
173
- getOption: exports.getOption,
174
- set: exports.set,
175
- setMany: exports.setMany,
176
- has: exports.has,
177
- getOrElse: exports.getOrElse,
178
- scoped: exports.scoped,
179
- storeLayer: exports.storeLayer,
180
- makeStoreLayer: exports.makeStoreLayer,
181
- Store: exports.ResolverContextStore,
182
- MissingResolverContextError,
183
- };
184
- //# sourceMappingURL=resolver-context.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolver-context.js","sourceRoot":"","sources":["../src/resolver-context.ts"],"names":[],"mappings":"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"}
@@ -1,30 +0,0 @@
1
- import { Effect } from "effect";
2
- import * as S from "effect/Schema";
3
- import { GraphQLObjectType, GraphQLOutputType, GraphQLInputType, GraphQLFieldConfigArgumentMap } from "graphql";
4
- /**
5
- * Convert an Effect Schema to a GraphQL output type
6
- */
7
- export declare const toGraphQLType: (schema: S.Schema<any, any, any>) => GraphQLOutputType;
8
- /**
9
- * Convert an Effect Schema to a GraphQL input type
10
- */
11
- export declare const toGraphQLInputType: (schema: S.Schema<any, any, any>) => GraphQLInputType;
12
- /**
13
- * Additional field configuration for computed/relational fields
14
- */
15
- export interface AdditionalField<Parent, Args, R, E, A> {
16
- type: GraphQLOutputType;
17
- args?: GraphQLFieldConfigArgumentMap;
18
- description?: string;
19
- resolve: (parent: Parent, args: Args) => Effect.Effect<A, E, R>;
20
- }
21
- /**
22
- * Create a GraphQL Object Type from an Effect Schema with a name
23
- * Optionally add computed/relational fields with resolvers
24
- */
25
- export declare const toGraphQLObjectType: <T>(name: string, schema: S.Schema<any, any, any>, additionalFields?: Record<string, AdditionalField<T, any, any, any, any>>) => GraphQLObjectType;
26
- /**
27
- * Convert an Effect Schema to GraphQL arguments
28
- */
29
- export declare const toGraphQLArgs: (schema: S.Schema<any, any, any>) => GraphQLFieldConfigArgumentMap;
30
- //# sourceMappingURL=schema-mapping.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema-mapping.d.ts","sourceRoot":"","sources":["../src/schema-mapping.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,KAAK,CAAC,MAAM,eAAe,CAAA;AAElC,OAAO,EACL,iBAAiB,EAOjB,iBAAiB,EAEjB,gBAAgB,EAEhB,6BAA6B,EAC9B,MAAM,SAAS,CAAA;AA2BhB;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,iBAoF/D,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,gBAmFpE,CAAA;AAED;;GAEG;AACH,MAAM,WAAW,eAAe,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACpD,IAAI,EAAE,iBAAiB,CAAA;IACvB,IAAI,CAAC,EAAE,6BAA6B,CAAA;IACpC,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CAChE;AAED;;;GAGG;AACH,eAAO,MAAM,mBAAmB,GAAI,CAAC,EACnC,MAAM,MAAM,EACZ,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAC/B,mBAAmB,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,KACxE,iBAwCF,CAAA;AAED;;GAEG;AACH,eAAO,MAAM,aAAa,GAAI,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,KAAG,6BAuB/D,CAAA"}