@soda-gql/core 0.2.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 +60 -48
- package/dist/adapter.cjs +1 -1
- package/dist/adapter.d.cts +2 -2
- package/dist/adapter.d.ts +2 -2
- package/dist/adapter.js +1 -1
- package/dist/{index-Djr9A4KL.d.ts → index-DH3lMepk.d.cts} +133 -221
- package/dist/index-DH3lMepk.d.cts.map +1 -0
- package/dist/{index-B-erotAZ.d.cts → index-WU6aMZjg.d.ts} +133 -221
- package/dist/index-WU6aMZjg.d.ts.map +1 -0
- package/dist/index.cjs +127 -126
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +13 -4
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +13 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +127 -125
- package/dist/index.js.map +1 -1
- package/dist/runtime.d.cts +2 -2
- package/dist/runtime.d.ts +2 -2
- package/dist/{schema-BygZwEX8.d.ts → schema-BElqa12z.d.cts} +86 -60
- package/dist/schema-BElqa12z.d.cts.map +1 -0
- package/dist/{schema-D9wIW5Dl.js → schema-BbCrsNkQ.js} +2 -2
- package/dist/{schema-D9wIW5Dl.js.map → schema-BbCrsNkQ.js.map} +1 -1
- package/dist/{schema-DRkKucYe.d.cts → schema-C7q047S0.d.ts} +86 -60
- package/dist/schema-C7q047S0.d.ts.map +1 -0
- package/dist/{schema-Bip7o0g3.cjs → schema-DuWaRhdp.cjs} +1 -7
- package/dist/{schema-Bip7o0g3.cjs.map → schema-DuWaRhdp.cjs.map} +1 -1
- package/dist/{schema-builder-8zadflz-.d.cts → schema-builder-DDfulXP3.d.cts} +2 -2
- package/dist/{schema-builder-8zadflz-.d.cts.map → schema-builder-DDfulXP3.d.cts.map} +1 -1
- package/dist/{schema-builder-vwQtCGYI.d.ts → schema-builder-DfyTaFMt.d.ts} +2 -2
- package/dist/{schema-builder-vwQtCGYI.d.ts.map → schema-builder-DfyTaFMt.d.ts.map} +1 -1
- package/package.json +1 -1
- package/dist/index-B-erotAZ.d.cts.map +0 -1
- package/dist/index-Djr9A4KL.d.ts.map +0 -1
- package/dist/schema-BygZwEX8.d.ts.map +0 -1
- package/dist/schema-DRkKucYe.d.cts.map +0 -1
package/README.md
CHANGED
|
@@ -37,14 +37,14 @@ Fragments define reusable field selections for a specific GraphQL type:
|
|
|
37
37
|
|
|
38
38
|
```typescript
|
|
39
39
|
export const userFragment = gql.default(({ fragment }, { $var }) =>
|
|
40
|
-
fragment.User(
|
|
41
|
-
|
|
42
|
-
({ f, $ }) =>
|
|
43
|
-
f.id(),
|
|
44
|
-
f.name(),
|
|
45
|
-
f.email({ if: $.includeEmail }),
|
|
46
|
-
|
|
47
|
-
),
|
|
40
|
+
fragment.User({
|
|
41
|
+
variables: { ...$var("includeEmail").Boolean("?") },
|
|
42
|
+
fields: ({ f, $ }) => ({
|
|
43
|
+
...f.id(),
|
|
44
|
+
...f.name(),
|
|
45
|
+
...f.email({ if: $.includeEmail }),
|
|
46
|
+
}),
|
|
47
|
+
}),
|
|
48
48
|
);
|
|
49
49
|
```
|
|
50
50
|
|
|
@@ -54,28 +54,24 @@ Operations define complete GraphQL queries, mutations, or subscriptions:
|
|
|
54
54
|
|
|
55
55
|
```typescript
|
|
56
56
|
export const getUserQuery = gql.default(({ query }, { $var }) =>
|
|
57
|
-
query.operation(
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
],
|
|
65
|
-
),
|
|
57
|
+
query.operation({
|
|
58
|
+
name: "GetUser",
|
|
59
|
+
variables: { ...$var("id").ID("!") },
|
|
60
|
+
fields: ({ f, $ }) => ({
|
|
61
|
+
...f.user({ id: $.id })(({ f }) => ({ ...f.id(), ...f.name() })),
|
|
62
|
+
}),
|
|
63
|
+
}),
|
|
66
64
|
);
|
|
67
65
|
|
|
68
66
|
// Operation with embedded fragment
|
|
69
67
|
export const getUserWithFragment = gql.default(({ query }, { $var }) =>
|
|
70
|
-
query.operation(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
],
|
|
78
|
-
),
|
|
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
|
+
}),
|
|
79
75
|
);
|
|
80
76
|
```
|
|
81
77
|
|
|
@@ -95,12 +91,30 @@ Variables are declared using a string-based type syntax:
|
|
|
95
91
|
|
|
96
92
|
| Pattern | Description |
|
|
97
93
|
|---------|-------------|
|
|
98
|
-
|
|
|
99
|
-
|
|
|
100
|
-
|
|
|
101
|
-
|
|
|
102
|
-
|
|
|
103
|
-
|
|
|
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.
|
|
104
118
|
|
|
105
119
|
## Defining Custom Scalars
|
|
106
120
|
|
|
@@ -166,7 +180,7 @@ const myAttachment: GqlElementAttachment<typeof userFragment, "custom", { value:
|
|
|
166
180
|
|
|
167
181
|
// Attach to a fragment
|
|
168
182
|
export const userFragment = gql
|
|
169
|
-
.default(({ fragment }) => fragment.User({
|
|
183
|
+
.default(({ fragment }) => fragment.User({ fields: ({ f }) => ({ ...f.id(), ...f.name() }) }))
|
|
170
184
|
.attach(myAttachment);
|
|
171
185
|
|
|
172
186
|
// Access the attached property
|
|
@@ -202,21 +216,19 @@ Metadata is defined on operations:
|
|
|
202
216
|
```typescript
|
|
203
217
|
// Operation with metadata
|
|
204
218
|
export const getUserQuery = gql.default(({ query }, { $var }) =>
|
|
205
|
-
query.operation(
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
({ f, $ }) => [f.user({ id: $.id })(({ f }) => [f.id(), f.name()])],
|
|
219
|
-
),
|
|
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)],
|
|
228
|
+
},
|
|
229
|
+
}),
|
|
230
|
+
fields: ({ f, $ }) => ({ ...f.user({ id: $.id })(({ f }) => ({ ...f.id(), ...f.name() })) }),
|
|
231
|
+
}),
|
|
220
232
|
);
|
|
221
233
|
```
|
|
222
234
|
|
package/dist/adapter.cjs
CHANGED
package/dist/adapter.d.cts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as defineScalar } from "./schema-builder-
|
|
1
|
+
import { R as Adapter } from "./schema-BElqa12z.cjs";
|
|
2
|
+
import { r as defineScalar } from "./schema-builder-DDfulXP3.cjs";
|
|
3
3
|
|
|
4
4
|
//#region packages/core/src/adapter/define-adapter.d.ts
|
|
5
5
|
|
package/dist/adapter.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { r as defineScalar } from "./schema-builder-
|
|
1
|
+
import { R as Adapter } from "./schema-C7q047S0.js";
|
|
2
|
+
import { r as defineScalar } from "./schema-builder-DfyTaFMt.js";
|
|
3
3
|
|
|
4
4
|
//#region packages/core/src/adapter/define-adapter.d.ts
|
|
5
5
|
|
package/dist/adapter.js
CHANGED