@soda-gql/core 0.1.0 → 0.3.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 (70) hide show
  1. package/README.md +108 -161
  2. package/dist/adapter.cjs +35 -0
  3. package/dist/adapter.cjs.map +1 -0
  4. package/dist/adapter.d.cts +35 -0
  5. package/dist/adapter.d.cts.map +1 -0
  6. package/dist/adapter.d.ts +35 -0
  7. package/dist/adapter.d.ts.map +1 -0
  8. package/dist/adapter.js +34 -0
  9. package/dist/adapter.js.map +1 -0
  10. package/dist/index-DH3lMepk.d.cts +569 -0
  11. package/dist/index-DH3lMepk.d.cts.map +1 -0
  12. package/dist/index-WU6aMZjg.d.ts +569 -0
  13. package/dist/index-WU6aMZjg.d.ts.map +1 -0
  14. package/dist/index.cjs +485 -470
  15. package/dist/index.cjs.map +1 -0
  16. package/dist/index.d.cts +97 -3
  17. package/dist/index.d.cts.map +1 -0
  18. package/dist/index.d.ts +97 -3
  19. package/dist/index.d.ts.map +1 -0
  20. package/dist/index.js +458 -443
  21. package/dist/index.js.map +1 -1
  22. package/dist/runtime.cjs +85 -0
  23. package/dist/runtime.cjs.map +1 -0
  24. package/dist/runtime.d.cts +40 -0
  25. package/dist/runtime.d.cts.map +1 -0
  26. package/dist/runtime.d.ts +40 -0
  27. package/dist/runtime.d.ts.map +1 -0
  28. package/dist/runtime.js +82 -0
  29. package/dist/runtime.js.map +1 -0
  30. package/dist/schema-BElqa12z.d.cts +520 -0
  31. package/dist/schema-BElqa12z.d.cts.map +1 -0
  32. package/dist/schema-BbCrsNkQ.js +86 -0
  33. package/dist/schema-BbCrsNkQ.js.map +1 -0
  34. package/dist/schema-C7q047S0.d.ts +520 -0
  35. package/dist/schema-C7q047S0.d.ts.map +1 -0
  36. package/dist/schema-DuWaRhdp.cjs +122 -0
  37. package/dist/schema-DuWaRhdp.cjs.map +1 -0
  38. package/dist/schema-builder-DDfulXP3.d.cts +40 -0
  39. package/dist/schema-builder-DDfulXP3.d.cts.map +1 -0
  40. package/dist/schema-builder-DfyTaFMt.d.ts +40 -0
  41. package/dist/schema-builder-DfyTaFMt.d.ts.map +1 -0
  42. package/package.json +34 -14
  43. package/dist/index-DYwkqPzd.d.ts +0 -1015
  44. package/dist/index-DYwkqPzd.d.ts.map +0 -1
  45. package/dist/index-Db9ogofS.d.ts +0 -365
  46. package/dist/index-Db9ogofS.d.ts.map +0 -1
  47. package/dist/index-Dth0NSJt.d.cts +0 -1015
  48. package/dist/index-Dth0NSJt.d.cts.map +0 -1
  49. package/dist/index-zGZ61WLt.d.cts +0 -365
  50. package/dist/index-zGZ61WLt.d.cts.map +0 -1
  51. package/dist/merge-CeMx09is.js +0 -74
  52. package/dist/merge-CeMx09is.js.map +0 -1
  53. package/dist/merge-ZxKV1syS.cjs +0 -85
  54. package/dist/metadata/index.cjs +0 -62
  55. package/dist/metadata/index.d.cts +0 -71
  56. package/dist/metadata/index.d.cts.map +0 -1
  57. package/dist/metadata/index.d.ts +0 -71
  58. package/dist/metadata/index.d.ts.map +0 -1
  59. package/dist/metadata/index.js +0 -59
  60. package/dist/metadata/index.js.map +0 -1
  61. package/dist/runtime/index.cjs +0 -107
  62. package/dist/runtime/index.d.cts +0 -72
  63. package/dist/runtime/index.d.cts.map +0 -1
  64. package/dist/runtime/index.d.ts +0 -72
  65. package/dist/runtime/index.d.ts.map +0 -1
  66. package/dist/runtime/index.js +0 -104
  67. package/dist/runtime/index.js.map +0 -1
  68. package/dist/slice-BuSNc8vw.js +0 -278
  69. package/dist/slice-BuSNc8vw.js.map +0 -1
  70. package/dist/slice-C-FIQK-f.cjs +0 -373
package/README.md CHANGED
@@ -13,21 +13,15 @@ bun add @soda-gql/core
13
13
 
14
14
  ## Core Concepts
15
15
 
16
- soda-gql uses three main building blocks for constructing GraphQL operations:
16
+ soda-gql uses two main building blocks for constructing GraphQL operations:
17
17
 
18
- ### Models
18
+ ### Fragments
19
19
 
20
- Reusable type-safe fragments with data normalization. Models define how to select fields from a GraphQL type and optionally transform the result.
21
-
22
- ### Slices
23
-
24
- Domain-specific query/mutation/subscription pieces. Slices are reusable operation fragments that can be composed into complete operations.
20
+ Reusable type-safe field selections. Fragments define how to select fields from a GraphQL type and can be embedded in operations.
25
21
 
26
22
  ### Operations
27
23
 
28
- Complete GraphQL operations that can be executed. There are two types:
29
- - **Composed Operations**: Built by combining multiple slices
30
- - **Inline Operations**: Self-contained operations with field selections defined directly
24
+ Complete GraphQL operations (query/mutation/subscription) with field selections. Operations define variables, select fields, and can embed fragments for reusable field selections.
31
25
 
32
26
  ## Usage
33
27
 
@@ -37,85 +31,47 @@ All soda-gql definitions use the `gql.default()` pattern, which is provided by t
37
31
  import { gql } from "@/graphql-system";
38
32
  ```
39
33
 
40
- ### Writing Models
34
+ ### Writing Fragments
41
35
 
42
- Models define reusable fragments for a specific GraphQL type:
36
+ Fragments define reusable field selections for a specific GraphQL type:
43
37
 
44
38
  ```typescript
45
- export const userModel = gql.default(({ model }, { $var }) =>
46
- model.User(
47
- { variables: [$var("includeEmail").scalar("Boolean:?")] },
48
- ({ f, $ }) => [
49
- f.id(),
50
- f.name(),
51
- f.email({ if: $.includeEmail }),
52
- ],
53
- (selection) => ({
54
- id: selection.id,
55
- name: selection.name,
56
- email: selection.email,
39
+ export const userFragment = gql.default(({ fragment }, { $var }) =>
40
+ fragment.User({
41
+ variables: { ...$var("includeEmail").Boolean("?") },
42
+ fields: ({ f, $ }) => ({
43
+ ...f.id(),
44
+ ...f.name(),
45
+ ...f.email({ if: $.includeEmail }),
57
46
  }),
58
- ),
59
- );
60
- ```
61
-
62
- ### Writing Slices
63
-
64
- Slices define reusable operation fragments:
65
-
66
- ```typescript
67
- export const userSlice = gql.default(({ query }, { $var }) =>
68
- query.slice(
69
- { variables: [$var("userId").scalar("ID:!")] },
70
- ({ f, $ }) => [
71
- f.user({ id: $.userId })(() => [
72
- userModel.fragment({}),
73
- ]),
74
- ],
75
- ({ select }) =>
76
- select(["$.user"], (result) =>
77
- result.safeUnwrap(([user]) => userModel.normalize(user)),
78
- ),
79
- ),
47
+ }),
80
48
  );
81
49
  ```
82
50
 
83
- ### Writing Operations (Composed)
51
+ ### Writing Operations
84
52
 
85
- Composed operations combine multiple slices:
53
+ Operations define complete GraphQL queries, mutations, or subscriptions:
86
54
 
87
55
  ```typescript
88
56
  export const getUserQuery = gql.default(({ query }, { $var }) =>
89
- query.composed(
90
- {
91
- operationName: "GetUser",
92
- variables: [$var("id").scalar("ID:!")],
93
- },
94
- ({ $ }) => ({
95
- user: userSlice.embed({ userId: $.id }),
57
+ query.operation({
58
+ name: "GetUser",
59
+ variables: { ...$var("id").ID("!") },
60
+ fields: ({ f, $ }) => ({
61
+ ...f.user({ id: $.id })(({ f }) => ({ ...f.id(), ...f.name() })),
96
62
  }),
97
- ),
63
+ }),
98
64
  );
99
- ```
100
65
 
101
- ### Writing Operations (Inline)
102
-
103
- Inline operations define field selections directly:
104
-
105
- ```typescript
106
- export const getUserInline = gql.default(({ query }, { $var }) =>
107
- query.inline(
108
- {
109
- operationName: "GetUserInline",
110
- variables: [$var("id").scalar("ID:!")],
111
- },
112
- ({ f, $ }) => [
113
- f.user({ id: $.id })(({ f }) => [
114
- f.id(),
115
- f.name(),
116
- ]),
117
- ],
118
- ),
66
+ // Operation with embedded fragment
67
+ export const getUserWithFragment = gql.default(({ query }, { $var }) =>
68
+ query.operation({
69
+ name: "GetUserWithFragment",
70
+ variables: { ...$var("id").ID("!"), ...$var("includeEmail").Boolean("?") },
71
+ fields: ({ f, $ }) => ({
72
+ ...f.user({ id: $.id })(({ f }) => ({ ...userFragment.embed({ includeEmail: $.includeEmail }) })),
73
+ }),
74
+ }),
119
75
  );
120
76
  ```
121
77
 
@@ -135,12 +91,30 @@ Variables are declared using a string-based type syntax:
135
91
 
136
92
  | Pattern | Description |
137
93
  |---------|-------------|
138
- | `f.id()` | Basic field selection |
139
- | `f.posts({ limit: 10 })` | Field with arguments |
140
- | `f.posts()(({ f }) => [...])` | Nested selection (curried) |
141
- | `f.id(null, { alias: "uuid" })` | Field with alias |
142
- | `f.email({ if: $.includeEmail })` | Conditional field |
143
- | `userModel.fragment({})` | Use model fragment |
94
+ | `...f.id()` | Basic field selection |
95
+ | `...f.posts({ limit: 10 })` | Field with arguments |
96
+ | `...f.posts()(({ f }) => ({ ... }))` | Nested selection (curried) |
97
+ | `...f.id(null, { alias: "uuid" })` | Field with alias |
98
+ | `...f.email({ if: $.includeEmail })` | Conditional field |
99
+ | `...userFragment.embed({})` | Use fragment fields |
100
+
101
+ ## Understanding the Inject Module
102
+
103
+ The inject module (`{schema}.inject.ts`) bridges your GraphQL schema with TypeScript types.
104
+
105
+ **Why hand-written?**
106
+ - Custom scalar types (DateTime, JSON, etc.) need explicit TypeScript type mappings
107
+ - Version-controlled to keep type behavior explicit and reviewable
108
+
109
+ **What it contains:**
110
+ - `scalar`: TypeScript type definitions for each GraphQL scalar
111
+
112
+ **Scaffolding:**
113
+ ```bash
114
+ bun run soda-gql codegen --emit-inject-template ./src/graphql-system/default.inject.ts
115
+ ```
116
+
117
+ This creates a template with standard scalars (ID, String, Int, Float, Boolean) that you can customize.
144
118
 
145
119
  ## Defining Custom Scalars
146
120
 
@@ -180,111 +154,84 @@ export const scalar = {
180
154
  Extract TypeScript types from soda-gql elements using `$infer`:
181
155
 
182
156
  ```typescript
183
- // Model types
184
- type UserInput = typeof userModel.$infer.input;
185
- type UserOutputRaw = typeof userModel.$infer.output.raw;
186
- type UserOutputNormalized = typeof userModel.$infer.output.normalized;
157
+ // Fragment types
158
+ type UserInput = typeof userFragment.$infer.input;
159
+ type UserOutput = typeof userFragment.$infer.output;
187
160
 
188
161
  // Operation types
189
162
  type QueryVariables = typeof getUserQuery.$infer.input;
190
163
  type QueryResult = typeof getUserQuery.$infer.output.projected;
191
164
  ```
192
165
 
166
+ ## Element Extensions
167
+
168
+ The `attach()` method allows extending gql elements with custom properties. This is useful for colocating related functionality with fragment or operation definitions.
169
+
170
+ ### Basic Usage
171
+
172
+ ```typescript
173
+ import type { GqlElementAttachment } from "@soda-gql/core";
174
+
175
+ // Define an attachment
176
+ const myAttachment: GqlElementAttachment<typeof userFragment, "custom", { value: number }> = {
177
+ name: "custom",
178
+ createValue: (element) => ({ value: 42 }),
179
+ };
180
+
181
+ // Attach to a fragment
182
+ export const userFragment = gql
183
+ .default(({ fragment }) => fragment.User({ fields: ({ f }) => ({ ...f.id(), ...f.name() }) }))
184
+ .attach(myAttachment);
185
+
186
+ // Access the attached property
187
+ userFragment.custom.value; // 42
188
+ ```
189
+
190
+ ### Type Safety
191
+
192
+ Attachments are fully typed. The returned element includes the new property in its type:
193
+
194
+ ```typescript
195
+ const fragment = gql.default(...).attach({ name: "foo", createValue: () => ({ bar: 1 }) });
196
+ // Type: Fragment<...> & { foo: { bar: number } }
197
+ ```
198
+
193
199
  ## Metadata
194
200
 
195
- Metadata allows you to attach runtime information to operations and slices. This is useful for HTTP headers, GraphQL extensions, and application-specific values.
201
+ Metadata allows you to attach runtime information to operations. This is useful for HTTP headers and application-specific values.
196
202
 
197
203
  ### Metadata Structure
198
204
 
199
- All metadata types share three base properties:
205
+ All metadata types share two base properties:
200
206
 
201
207
  | Property | Type | Purpose |
202
208
  |----------|------|---------|
203
209
  | `headers` | `Record<string, string>` | HTTP headers to include with the GraphQL request |
204
- | `extensions` | `Record<string, unknown>` | GraphQL extensions in the request payload |
205
210
  | `custom` | `Record<string, unknown>` | Application-specific values (auth requirements, cache settings, etc.) |
206
211
 
207
212
  ### Defining Metadata
208
213
 
209
- Metadata can be defined on both slices and operations:
214
+ Metadata is defined on operations:
210
215
 
211
216
  ```typescript
212
- // Slice with metadata
213
- export const userSlice = gql.default(({ query }, { $var }) =>
214
- query.slice(
215
- {
216
- variables: [$var("userId").scalar("ID:!")],
217
- metadata: ({ $ }) => ({
218
- headers: { "X-Request-ID": "user-query" },
219
- custom: { requiresAuth: true, cacheTtl: 300 },
220
- }),
221
- },
222
- ({ f, $ }) => [f.user({ id: $.userId })(({ f }) => [f.id()])],
223
- ({ select }) => select(["$.user"], (user) => user),
224
- ),
225
- );
226
-
227
- // Operation with metadata (can reference variables and document)
217
+ // Operation with metadata
228
218
  export const getUserQuery = gql.default(({ query }, { $var }) =>
229
- query.composed(
230
- {
231
- operationName: "GetUser",
232
- variables: [$var("id").scalar("ID:!")],
233
- metadata: ({ $, document }) => ({
234
- extensions: {
235
- trackedVariables: [$var.getInner($.id)],
236
- },
237
- }),
238
- },
239
- ({ $ }) => ({
240
- user: userSlice.embed({ userId: $.id }),
241
- }),
242
- ),
243
- );
244
- ```
245
-
246
- ### MetadataAdapter
247
-
248
- Use `createMetadataAdapter` to customize metadata behavior at the schema level:
249
-
250
- ```typescript
251
- import { createMetadataAdapter } from "@soda-gql/core/metadata";
252
- import { createHash } from "crypto";
253
-
254
- export const metadataAdapter = createMetadataAdapter({
255
- // Default metadata applied to all operations
256
- defaults: {
257
- headers: { "X-GraphQL-Client": "soda-gql" },
258
- },
259
-
260
- // Transform metadata at build time (e.g., add persisted query hash)
261
- transform: ({ document, metadata }) => ({
262
- ...metadata,
263
- extensions: {
264
- ...metadata.extensions,
265
- persistedQuery: {
266
- version: 1,
267
- sha256Hash: createHash("sha256").update(document).digest("hex"),
219
+ query.operation({
220
+ name: "GetUser",
221
+ variables: { ...$var("id").ID("!") },
222
+ metadata: ({ $, document }) => ({
223
+ headers: { "X-Request-ID": "user-query" },
224
+ custom: {
225
+ requiresAuth: true,
226
+ cacheTtl: 300,
227
+ trackedVariables: [$var.getInner($.id)],
268
228
  },
269
- },
229
+ }),
230
+ fields: ({ f, $ }) => ({ ...f.user({ id: $.id })(({ f }) => ({ ...f.id(), ...f.name() })) }),
270
231
  }),
271
-
272
- // Custom merge strategy for slice metadata (optional)
273
- mergeSliceMetadata: (operationMetadata, sliceMetadataList) => {
274
- // Default: shallow merge where operation takes precedence
275
- return { ...sliceMetadataList.reduce((acc, s) => ({ ...acc, ...s }), {}), ...operationMetadata };
276
- },
277
- });
232
+ );
278
233
  ```
279
234
 
280
- ### Metadata Merging
281
-
282
- When an operation includes multiple slices, metadata is merged in this order:
283
-
284
- 1. **Slice metadata** - Merged together (later slices override earlier ones)
285
- 2. **Operation metadata** - Takes precedence over slice metadata
286
- 3. **Schema defaults** - Applied first, overridden by operation/slice values
287
-
288
235
  ## Runtime Exports
289
236
 
290
237
  The `/runtime` subpath provides utilities for operation registration and retrieval:
@@ -293,7 +240,7 @@ The `/runtime` subpath provides utilities for operation registration and retriev
293
240
  import { gqlRuntime } from "@soda-gql/core/runtime";
294
241
 
295
242
  // Retrieve registered operations (typically handled by build plugins)
296
- const operation = gqlRuntime.getComposedOperation("canonicalId");
243
+ const operation = gqlRuntime.getOperation("canonicalId");
297
244
  ```
298
245
 
299
246
  ## TypeScript Support
@@ -0,0 +1,35 @@
1
+ const require_schema = require('./schema-DuWaRhdp.cjs');
2
+
3
+ //#region packages/core/src/adapter/define-adapter.ts
4
+ /**
5
+ * Helper function for defining a unified adapter with helpers and metadata.
6
+ * Provides type inference for helpers, aggregateFragmentMetadata and schemaLevel.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { defineAdapter } from "@soda-gql/core/adapter";
11
+ * import type { FragmentMetaInfo, OperationMetadata } from "@soda-gql/core";
12
+ *
13
+ * export const adapter = defineAdapter({
14
+ * helpers: {
15
+ * auth: {
16
+ * requiresLogin: () => ({ requiresAuth: true }),
17
+ * adminOnly: () => ({ requiresAuth: true, role: "admin" }),
18
+ * },
19
+ * },
20
+ * metadata: {
21
+ * aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<OperationMetadata>[]) =>
22
+ * fragments.map((m) => m.metadata),
23
+ * schemaLevel: {
24
+ * apiVersion: "v2",
25
+ * },
26
+ * },
27
+ * });
28
+ * ```
29
+ */
30
+ const defineAdapter = (adapter) => adapter;
31
+
32
+ //#endregion
33
+ exports.defineAdapter = defineAdapter;
34
+ exports.defineScalar = require_schema.defineScalar;
35
+ //# sourceMappingURL=adapter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.cjs","names":[],"sources":["../src/adapter/define-adapter.ts"],"sourcesContent":["import type { Adapter } from \"../types/metadata\";\n\n/**\n * Helper function for defining a unified adapter with helpers and metadata.\n * Provides type inference for helpers, aggregateFragmentMetadata and schemaLevel.\n *\n * @example\n * ```typescript\n * import { defineAdapter } from \"@soda-gql/core/adapter\";\n * import type { FragmentMetaInfo, OperationMetadata } from \"@soda-gql/core\";\n *\n * export const adapter = defineAdapter({\n * helpers: {\n * auth: {\n * requiresLogin: () => ({ requiresAuth: true }),\n * adminOnly: () => ({ requiresAuth: true, role: \"admin\" }),\n * },\n * },\n * metadata: {\n * aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<OperationMetadata>[]) =>\n * fragments.map((m) => m.metadata),\n * schemaLevel: {\n * apiVersion: \"v2\",\n * },\n * },\n * });\n * ```\n */\nexport const defineAdapter = <\n THelpers extends object = object,\n TFragmentMetadata = unknown,\n TAggregatedFragmentMetadata = unknown,\n TSchemaLevel = unknown,\n>(\n adapter: Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>,\n): Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel> => adapter;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,iBAMX,YACoF"}
@@ -0,0 +1,35 @@
1
+ import { R as Adapter } from "./schema-BElqa12z.cjs";
2
+ import { r as defineScalar } from "./schema-builder-DDfulXP3.cjs";
3
+
4
+ //#region packages/core/src/adapter/define-adapter.d.ts
5
+
6
+ /**
7
+ * Helper function for defining a unified adapter with helpers and metadata.
8
+ * Provides type inference for helpers, aggregateFragmentMetadata and schemaLevel.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { defineAdapter } from "@soda-gql/core/adapter";
13
+ * import type { FragmentMetaInfo, OperationMetadata } from "@soda-gql/core";
14
+ *
15
+ * export const adapter = defineAdapter({
16
+ * helpers: {
17
+ * auth: {
18
+ * requiresLogin: () => ({ requiresAuth: true }),
19
+ * adminOnly: () => ({ requiresAuth: true, role: "admin" }),
20
+ * },
21
+ * },
22
+ * metadata: {
23
+ * aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<OperationMetadata>[]) =>
24
+ * fragments.map((m) => m.metadata),
25
+ * schemaLevel: {
26
+ * apiVersion: "v2",
27
+ * },
28
+ * },
29
+ * });
30
+ * ```
31
+ */
32
+ declare const defineAdapter: <THelpers extends object = object, TFragmentMetadata = unknown, TAggregatedFragmentMetadata = unknown, TSchemaLevel = unknown>(adapter: Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>) => Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>;
33
+ //#endregion
34
+ export { defineAdapter, defineScalar };
35
+ //# sourceMappingURL=adapter.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.cts","names":[],"sources":["../src/adapter/define-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA4BA;;;;;;;;;;;;;;;;;;;;;;;cAAa,uJAMF,QAAQ,UAAU,mBAAmB,6BAA6B,kBAC1E,QAAQ,UAAU,mBAAmB,6BAA6B"}
@@ -0,0 +1,35 @@
1
+ import { R as Adapter } from "./schema-C7q047S0.js";
2
+ import { r as defineScalar } from "./schema-builder-DfyTaFMt.js";
3
+
4
+ //#region packages/core/src/adapter/define-adapter.d.ts
5
+
6
+ /**
7
+ * Helper function for defining a unified adapter with helpers and metadata.
8
+ * Provides type inference for helpers, aggregateFragmentMetadata and schemaLevel.
9
+ *
10
+ * @example
11
+ * ```typescript
12
+ * import { defineAdapter } from "@soda-gql/core/adapter";
13
+ * import type { FragmentMetaInfo, OperationMetadata } from "@soda-gql/core";
14
+ *
15
+ * export const adapter = defineAdapter({
16
+ * helpers: {
17
+ * auth: {
18
+ * requiresLogin: () => ({ requiresAuth: true }),
19
+ * adminOnly: () => ({ requiresAuth: true, role: "admin" }),
20
+ * },
21
+ * },
22
+ * metadata: {
23
+ * aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<OperationMetadata>[]) =>
24
+ * fragments.map((m) => m.metadata),
25
+ * schemaLevel: {
26
+ * apiVersion: "v2",
27
+ * },
28
+ * },
29
+ * });
30
+ * ```
31
+ */
32
+ declare const defineAdapter: <THelpers extends object = object, TFragmentMetadata = unknown, TAggregatedFragmentMetadata = unknown, TSchemaLevel = unknown>(adapter: Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>) => Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>;
33
+ //#endregion
34
+ export { defineAdapter, defineScalar };
35
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","names":[],"sources":["../src/adapter/define-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;;;AA4BA;;;;;;;;;;;;;;;;;;;;;;;cAAa,uJAMF,QAAQ,UAAU,mBAAmB,6BAA6B,kBAC1E,QAAQ,UAAU,mBAAmB,6BAA6B"}
@@ -0,0 +1,34 @@
1
+ import { r as defineScalar } from "./schema-BbCrsNkQ.js";
2
+
3
+ //#region packages/core/src/adapter/define-adapter.ts
4
+ /**
5
+ * Helper function for defining a unified adapter with helpers and metadata.
6
+ * Provides type inference for helpers, aggregateFragmentMetadata and schemaLevel.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { defineAdapter } from "@soda-gql/core/adapter";
11
+ * import type { FragmentMetaInfo, OperationMetadata } from "@soda-gql/core";
12
+ *
13
+ * export const adapter = defineAdapter({
14
+ * helpers: {
15
+ * auth: {
16
+ * requiresLogin: () => ({ requiresAuth: true }),
17
+ * adminOnly: () => ({ requiresAuth: true, role: "admin" }),
18
+ * },
19
+ * },
20
+ * metadata: {
21
+ * aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<OperationMetadata>[]) =>
22
+ * fragments.map((m) => m.metadata),
23
+ * schemaLevel: {
24
+ * apiVersion: "v2",
25
+ * },
26
+ * },
27
+ * });
28
+ * ```
29
+ */
30
+ const defineAdapter = (adapter) => adapter;
31
+
32
+ //#endregion
33
+ export { defineAdapter, defineScalar };
34
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","names":[],"sources":["../src/adapter/define-adapter.ts"],"sourcesContent":["import type { Adapter } from \"../types/metadata\";\n\n/**\n * Helper function for defining a unified adapter with helpers and metadata.\n * Provides type inference for helpers, aggregateFragmentMetadata and schemaLevel.\n *\n * @example\n * ```typescript\n * import { defineAdapter } from \"@soda-gql/core/adapter\";\n * import type { FragmentMetaInfo, OperationMetadata } from \"@soda-gql/core\";\n *\n * export const adapter = defineAdapter({\n * helpers: {\n * auth: {\n * requiresLogin: () => ({ requiresAuth: true }),\n * adminOnly: () => ({ requiresAuth: true, role: \"admin\" }),\n * },\n * },\n * metadata: {\n * aggregateFragmentMetadata: (fragments: readonly FragmentMetaInfo<OperationMetadata>[]) =>\n * fragments.map((m) => m.metadata),\n * schemaLevel: {\n * apiVersion: \"v2\",\n * },\n * },\n * });\n * ```\n */\nexport const defineAdapter = <\n THelpers extends object = object,\n TFragmentMetadata = unknown,\n TAggregatedFragmentMetadata = unknown,\n TSchemaLevel = unknown,\n>(\n adapter: Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel>,\n): Adapter<THelpers, TFragmentMetadata, TAggregatedFragmentMetadata, TSchemaLevel> => adapter;\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4BA,MAAa,iBAMX,YACoF"}