@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.
- package/README.md +108 -161
- 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-DH3lMepk.d.cts +569 -0
- package/dist/index-DH3lMepk.d.cts.map +1 -0
- package/dist/index-WU6aMZjg.d.ts +569 -0
- package/dist/index-WU6aMZjg.d.ts.map +1 -0
- package/dist/index.cjs +485 -470
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +97 -3
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +97 -3
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +458 -443
- 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-BElqa12z.d.cts +520 -0
- package/dist/schema-BElqa12z.d.cts.map +1 -0
- package/dist/schema-BbCrsNkQ.js +86 -0
- package/dist/schema-BbCrsNkQ.js.map +1 -0
- package/dist/schema-C7q047S0.d.ts +520 -0
- package/dist/schema-C7q047S0.d.ts.map +1 -0
- package/dist/schema-DuWaRhdp.cjs +122 -0
- package/dist/schema-DuWaRhdp.cjs.map +1 -0
- package/dist/schema-builder-DDfulXP3.d.cts +40 -0
- package/dist/schema-builder-DDfulXP3.d.cts.map +1 -0
- package/dist/schema-builder-DfyTaFMt.d.ts +40 -0
- package/dist/schema-builder-DfyTaFMt.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 +0 -365
- 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 +0 -365
- 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,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
|
|
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
|
-
|
|
47
|
-
|
|
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
|
|
51
|
+
### Writing Operations
|
|
84
52
|
|
|
85
|
-
|
|
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.
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
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
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
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
|
-
|
|
|
139
|
-
|
|
|
140
|
-
|
|
|
141
|
-
|
|
|
142
|
-
|
|
|
143
|
-
|
|
|
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
|
-
//
|
|
184
|
-
type UserInput = typeof
|
|
185
|
-
type
|
|
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
|
|
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
|
|
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
|
|
214
|
+
Metadata is defined on operations:
|
|
210
215
|
|
|
211
216
|
```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)
|
|
217
|
+
// Operation with metadata
|
|
228
218
|
export const getUserQuery = gql.default(({ query }, { $var }) =>
|
|
229
|
-
query.
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
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.
|
|
243
|
+
const operation = gqlRuntime.getOperation("canonicalId");
|
|
297
244
|
```
|
|
298
245
|
|
|
299
246
|
## TypeScript Support
|
package/dist/adapter.cjs
ADDED
|
@@ -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"}
|
package/dist/adapter.js
ADDED
|
@@ -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"}
|