@soda-gql/core 0.1.0 → 0.2.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.
- package/README.md +70 -135
- package/dist/adapter.cjs +35 -0
- package/dist/adapter.cjs.map +1 -0
- package/dist/adapter.d.cts +35 -0
- package/dist/adapter.d.cts.map +1 -0
- package/dist/adapter.d.ts +35 -0
- package/dist/adapter.d.ts.map +1 -0
- package/dist/adapter.js +34 -0
- package/dist/adapter.js.map +1 -0
- package/dist/index-B-erotAZ.d.cts +657 -0
- package/dist/index-B-erotAZ.d.cts.map +1 -0
- package/dist/index-Djr9A4KL.d.ts +657 -0
- package/dist/index-Djr9A4KL.d.ts.map +1 -0
- package/dist/index.cjs +430 -416
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +88 -3
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +88 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +399 -386
- package/dist/index.js.map +1 -1
- package/dist/runtime.cjs +85 -0
- package/dist/runtime.cjs.map +1 -0
- package/dist/runtime.d.cts +40 -0
- package/dist/runtime.d.cts.map +1 -0
- package/dist/runtime.d.ts +40 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +82 -0
- package/dist/runtime.js.map +1 -0
- package/dist/schema-Bip7o0g3.cjs +128 -0
- package/dist/schema-Bip7o0g3.cjs.map +1 -0
- package/dist/{index-zGZ61WLt.d.cts → schema-BygZwEX8.d.ts} +246 -117
- package/dist/schema-BygZwEX8.d.ts.map +1 -0
- package/dist/schema-D9wIW5Dl.js +86 -0
- package/dist/schema-D9wIW5Dl.js.map +1 -0
- package/dist/{index-Db9ogofS.d.ts → schema-DRkKucYe.d.cts} +246 -117
- package/dist/schema-DRkKucYe.d.cts.map +1 -0
- package/dist/schema-builder-8zadflz-.d.cts +40 -0
- package/dist/schema-builder-8zadflz-.d.cts.map +1 -0
- package/dist/schema-builder-vwQtCGYI.d.ts +40 -0
- package/dist/schema-builder-vwQtCGYI.d.ts.map +1 -0
- package/package.json +34 -14
- package/dist/index-DYwkqPzd.d.ts +0 -1015
- package/dist/index-DYwkqPzd.d.ts.map +0 -1
- package/dist/index-Db9ogofS.d.ts.map +0 -1
- package/dist/index-Dth0NSJt.d.cts +0 -1015
- package/dist/index-Dth0NSJt.d.cts.map +0 -1
- package/dist/index-zGZ61WLt.d.cts.map +0 -1
- package/dist/merge-CeMx09is.js +0 -74
- package/dist/merge-CeMx09is.js.map +0 -1
- package/dist/merge-ZxKV1syS.cjs +0 -85
- package/dist/metadata/index.cjs +0 -62
- package/dist/metadata/index.d.cts +0 -71
- package/dist/metadata/index.d.cts.map +0 -1
- package/dist/metadata/index.d.ts +0 -71
- package/dist/metadata/index.d.ts.map +0 -1
- package/dist/metadata/index.js +0 -59
- package/dist/metadata/index.js.map +0 -1
- package/dist/runtime/index.cjs +0 -107
- package/dist/runtime/index.d.cts +0 -72
- package/dist/runtime/index.d.cts.map +0 -1
- package/dist/runtime/index.d.ts +0 -72
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -104
- package/dist/runtime/index.js.map +0 -1
- package/dist/slice-BuSNc8vw.js +0 -278
- package/dist/slice-BuSNc8vw.js.map +0 -1
- 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
|
|
16
|
+
soda-gql uses two main building blocks for constructing GraphQL operations:
|
|
17
17
|
|
|
18
|
-
###
|
|
18
|
+
### Fragments
|
|
19
19
|
|
|
20
|
-
Reusable type-safe
|
|
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
|
|
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,83 +31,49 @@ 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
|
|
34
|
+
### Writing Fragments
|
|
41
35
|
|
|
42
|
-
|
|
36
|
+
Fragments define reusable field selections for a specific GraphQL type:
|
|
43
37
|
|
|
44
38
|
```typescript
|
|
45
|
-
export const
|
|
46
|
-
|
|
39
|
+
export const userFragment = gql.default(({ fragment }, { $var }) =>
|
|
40
|
+
fragment.User(
|
|
47
41
|
{ variables: [$var("includeEmail").scalar("Boolean:?")] },
|
|
48
42
|
({ f, $ }) => [
|
|
49
43
|
f.id(),
|
|
50
44
|
f.name(),
|
|
51
45
|
f.email({ if: $.includeEmail }),
|
|
52
46
|
],
|
|
53
|
-
(selection) => ({
|
|
54
|
-
id: selection.id,
|
|
55
|
-
name: selection.name,
|
|
56
|
-
email: selection.email,
|
|
57
|
-
}),
|
|
58
47
|
),
|
|
59
48
|
);
|
|
60
49
|
```
|
|
61
50
|
|
|
62
|
-
### Writing
|
|
51
|
+
### Writing Operations
|
|
63
52
|
|
|
64
|
-
|
|
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
|
-
),
|
|
80
|
-
);
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Writing Operations (Composed)
|
|
84
|
-
|
|
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.
|
|
57
|
+
query.operation(
|
|
90
58
|
{
|
|
91
|
-
|
|
59
|
+
name: "GetUser",
|
|
92
60
|
variables: [$var("id").scalar("ID:!")],
|
|
93
61
|
},
|
|
94
|
-
({ $ }) =>
|
|
95
|
-
user
|
|
96
|
-
|
|
62
|
+
({ f, $ }) => [
|
|
63
|
+
f.user({ id: $.id })(({ f }) => [f.id(), f.name()]),
|
|
64
|
+
],
|
|
97
65
|
),
|
|
98
66
|
);
|
|
99
|
-
```
|
|
100
|
-
|
|
101
|
-
### Writing Operations (Inline)
|
|
102
|
-
|
|
103
|
-
Inline operations define field selections directly:
|
|
104
67
|
|
|
105
|
-
|
|
106
|
-
export const
|
|
107
|
-
query.
|
|
68
|
+
// Operation with embedded fragment
|
|
69
|
+
export const getUserWithFragment = gql.default(({ query }, { $var }) =>
|
|
70
|
+
query.operation(
|
|
108
71
|
{
|
|
109
|
-
|
|
110
|
-
variables: [$var("id").scalar("ID:!")],
|
|
72
|
+
name: "GetUserWithFragment",
|
|
73
|
+
variables: [$var("id").scalar("ID:!"), $var("includeEmail").scalar("Boolean:?")],
|
|
111
74
|
},
|
|
112
75
|
({ f, $ }) => [
|
|
113
|
-
f.user({ id: $.id })(({ f }) => [
|
|
114
|
-
f.id(),
|
|
115
|
-
f.name(),
|
|
116
|
-
]),
|
|
76
|
+
f.user({ id: $.id })(({ f }) => [userFragment.embed({ includeEmail: $.includeEmail })]),
|
|
117
77
|
],
|
|
118
78
|
),
|
|
119
79
|
);
|
|
@@ -140,7 +100,7 @@ Variables are declared using a string-based type syntax:
|
|
|
140
100
|
| `f.posts()(({ f }) => [...])` | Nested selection (curried) |
|
|
141
101
|
| `f.id(null, { alias: "uuid" })` | Field with alias |
|
|
142
102
|
| `f.email({ if: $.includeEmail })` | Conditional field |
|
|
143
|
-
| `
|
|
103
|
+
| `userFragment.embed({})` | Use fragment fields |
|
|
144
104
|
|
|
145
105
|
## Defining Custom Scalars
|
|
146
106
|
|
|
@@ -180,111 +140,86 @@ export const scalar = {
|
|
|
180
140
|
Extract TypeScript types from soda-gql elements using `$infer`:
|
|
181
141
|
|
|
182
142
|
```typescript
|
|
183
|
-
//
|
|
184
|
-
type UserInput = typeof
|
|
185
|
-
type
|
|
186
|
-
type UserOutputNormalized = typeof userModel.$infer.output.normalized;
|
|
143
|
+
// Fragment types
|
|
144
|
+
type UserInput = typeof userFragment.$infer.input;
|
|
145
|
+
type UserOutput = typeof userFragment.$infer.output;
|
|
187
146
|
|
|
188
147
|
// Operation types
|
|
189
148
|
type QueryVariables = typeof getUserQuery.$infer.input;
|
|
190
149
|
type QueryResult = typeof getUserQuery.$infer.output.projected;
|
|
191
150
|
```
|
|
192
151
|
|
|
152
|
+
## Element Extensions
|
|
153
|
+
|
|
154
|
+
The `attach()` method allows extending gql elements with custom properties. This is useful for colocating related functionality with fragment or operation definitions.
|
|
155
|
+
|
|
156
|
+
### Basic Usage
|
|
157
|
+
|
|
158
|
+
```typescript
|
|
159
|
+
import type { GqlElementAttachment } from "@soda-gql/core";
|
|
160
|
+
|
|
161
|
+
// Define an attachment
|
|
162
|
+
const myAttachment: GqlElementAttachment<typeof userFragment, "custom", { value: number }> = {
|
|
163
|
+
name: "custom",
|
|
164
|
+
createValue: (element) => ({ value: 42 }),
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// Attach to a fragment
|
|
168
|
+
export const userFragment = gql
|
|
169
|
+
.default(({ fragment }) => fragment.User({}, ({ f }) => [f.id(), f.name()]))
|
|
170
|
+
.attach(myAttachment);
|
|
171
|
+
|
|
172
|
+
// Access the attached property
|
|
173
|
+
userFragment.custom.value; // 42
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
### Type Safety
|
|
177
|
+
|
|
178
|
+
Attachments are fully typed. The returned element includes the new property in its type:
|
|
179
|
+
|
|
180
|
+
```typescript
|
|
181
|
+
const fragment = gql.default(...).attach({ name: "foo", createValue: () => ({ bar: 1 }) });
|
|
182
|
+
// Type: Fragment<...> & { foo: { bar: number } }
|
|
183
|
+
```
|
|
184
|
+
|
|
193
185
|
## Metadata
|
|
194
186
|
|
|
195
|
-
Metadata allows you to attach runtime information to operations
|
|
187
|
+
Metadata allows you to attach runtime information to operations. This is useful for HTTP headers and application-specific values.
|
|
196
188
|
|
|
197
189
|
### Metadata Structure
|
|
198
190
|
|
|
199
|
-
All metadata types share
|
|
191
|
+
All metadata types share two base properties:
|
|
200
192
|
|
|
201
193
|
| Property | Type | Purpose |
|
|
202
194
|
|----------|------|---------|
|
|
203
195
|
| `headers` | `Record<string, string>` | HTTP headers to include with the GraphQL request |
|
|
204
|
-
| `extensions` | `Record<string, unknown>` | GraphQL extensions in the request payload |
|
|
205
196
|
| `custom` | `Record<string, unknown>` | Application-specific values (auth requirements, cache settings, etc.) |
|
|
206
197
|
|
|
207
198
|
### Defining Metadata
|
|
208
199
|
|
|
209
|
-
Metadata
|
|
200
|
+
Metadata is defined on operations:
|
|
210
201
|
|
|
211
202
|
```typescript
|
|
212
|
-
//
|
|
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)
|
|
203
|
+
// Operation with metadata
|
|
228
204
|
export const getUserQuery = gql.default(({ query }, { $var }) =>
|
|
229
|
-
query.
|
|
205
|
+
query.operation(
|
|
230
206
|
{
|
|
231
|
-
|
|
207
|
+
name: "GetUser",
|
|
232
208
|
variables: [$var("id").scalar("ID:!")],
|
|
233
209
|
metadata: ({ $, document }) => ({
|
|
234
|
-
|
|
210
|
+
headers: { "X-Request-ID": "user-query" },
|
|
211
|
+
custom: {
|
|
212
|
+
requiresAuth: true,
|
|
213
|
+
cacheTtl: 300,
|
|
235
214
|
trackedVariables: [$var.getInner($.id)],
|
|
236
215
|
},
|
|
237
216
|
}),
|
|
238
217
|
},
|
|
239
|
-
({ $ }) => ({
|
|
240
|
-
user: userSlice.embed({ userId: $.id }),
|
|
241
|
-
}),
|
|
218
|
+
({ f, $ }) => [f.user({ id: $.id })(({ f }) => [f.id(), f.name()])],
|
|
242
219
|
),
|
|
243
220
|
);
|
|
244
221
|
```
|
|
245
222
|
|
|
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"),
|
|
268
|
-
},
|
|
269
|
-
},
|
|
270
|
-
}),
|
|
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
|
-
});
|
|
278
|
-
```
|
|
279
|
-
|
|
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
223
|
## Runtime Exports
|
|
289
224
|
|
|
290
225
|
The `/runtime` subpath provides utilities for operation registration and retrieval:
|
|
@@ -293,7 +228,7 @@ The `/runtime` subpath provides utilities for operation registration and retriev
|
|
|
293
228
|
import { gqlRuntime } from "@soda-gql/core/runtime";
|
|
294
229
|
|
|
295
230
|
// Retrieve registered operations (typically handled by build plugins)
|
|
296
|
-
const operation = gqlRuntime.
|
|
231
|
+
const operation = gqlRuntime.getOperation("canonicalId");
|
|
297
232
|
```
|
|
298
233
|
|
|
299
234
|
## TypeScript Support
|
package/dist/adapter.cjs
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const require_schema = require('./schema-Bip7o0g3.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 { I as Adapter } from "./schema-DRkKucYe.cjs";
|
|
2
|
+
import { r as defineScalar } from "./schema-builder-8zadflz-.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 { I as Adapter } from "./schema-BygZwEX8.js";
|
|
2
|
+
import { r as defineScalar } from "./schema-builder-vwQtCGYI.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"}
|
package/dist/adapter.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { r as defineScalar } from "./schema-D9wIW5Dl.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"}
|