@soda-gql/core 0.0.9 → 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 +247 -0
- 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 +450 -348
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +88 -2
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +88 -2
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +420 -323
- 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/schema-BygZwEX8.d.ts +494 -0
- 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/schema-DRkKucYe.d.cts +494 -0
- 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 -7
- package/dist/index-CFNJ_Aa6.d.ts +0 -1185
- package/dist/index-CFNJ_Aa6.d.ts.map +0 -1
- package/dist/index-DHh8XRal.d.cts +0 -1185
- package/dist/index-DHh8XRal.d.cts.map +0 -1
- package/dist/runtime/index.cjs +0 -105
- package/dist/runtime/index.d.cts +0 -71
- package/dist/runtime/index.d.cts.map +0 -1
- package/dist/runtime/index.d.ts +0 -71
- package/dist/runtime/index.d.ts.map +0 -1
- package/dist/runtime/index.js +0 -102
- package/dist/runtime/index.js.map +0 -1
- package/dist/slice-DlVY4UJG.cjs +0 -333
- package/dist/slice-ua5mSfhV.js +0 -256
- package/dist/slice-ua5mSfhV.js.map +0 -1
package/README.md
ADDED
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
# @soda-gql/core
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@soda-gql/core)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
|
|
6
|
+
Core GraphQL types and utilities for the soda-gql ecosystem. This package provides the foundational building blocks for writing type-safe GraphQL operations.
|
|
7
|
+
|
|
8
|
+
## Installation
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
bun add @soda-gql/core
|
|
12
|
+
```
|
|
13
|
+
|
|
14
|
+
## Core Concepts
|
|
15
|
+
|
|
16
|
+
soda-gql uses two main building blocks for constructing GraphQL operations:
|
|
17
|
+
|
|
18
|
+
### Fragments
|
|
19
|
+
|
|
20
|
+
Reusable type-safe field selections. Fragments define how to select fields from a GraphQL type and can be embedded in operations.
|
|
21
|
+
|
|
22
|
+
### Operations
|
|
23
|
+
|
|
24
|
+
Complete GraphQL operations (query/mutation/subscription) with field selections. Operations define variables, select fields, and can embed fragments for reusable field selections.
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
All soda-gql definitions use the `gql.default()` pattern, which is provided by the generated GraphQL system:
|
|
29
|
+
|
|
30
|
+
```typescript
|
|
31
|
+
import { gql } from "@/graphql-system";
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Writing Fragments
|
|
35
|
+
|
|
36
|
+
Fragments define reusable field selections for a specific GraphQL type:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
export const userFragment = gql.default(({ fragment }, { $var }) =>
|
|
40
|
+
fragment.User(
|
|
41
|
+
{ variables: [$var("includeEmail").scalar("Boolean:?")] },
|
|
42
|
+
({ f, $ }) => [
|
|
43
|
+
f.id(),
|
|
44
|
+
f.name(),
|
|
45
|
+
f.email({ if: $.includeEmail }),
|
|
46
|
+
],
|
|
47
|
+
),
|
|
48
|
+
);
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
### Writing Operations
|
|
52
|
+
|
|
53
|
+
Operations define complete GraphQL queries, mutations, or subscriptions:
|
|
54
|
+
|
|
55
|
+
```typescript
|
|
56
|
+
export const getUserQuery = gql.default(({ query }, { $var }) =>
|
|
57
|
+
query.operation(
|
|
58
|
+
{
|
|
59
|
+
name: "GetUser",
|
|
60
|
+
variables: [$var("id").scalar("ID:!")],
|
|
61
|
+
},
|
|
62
|
+
({ f, $ }) => [
|
|
63
|
+
f.user({ id: $.id })(({ f }) => [f.id(), f.name()]),
|
|
64
|
+
],
|
|
65
|
+
),
|
|
66
|
+
);
|
|
67
|
+
|
|
68
|
+
// Operation with embedded fragment
|
|
69
|
+
export const getUserWithFragment = gql.default(({ query }, { $var }) =>
|
|
70
|
+
query.operation(
|
|
71
|
+
{
|
|
72
|
+
name: "GetUserWithFragment",
|
|
73
|
+
variables: [$var("id").scalar("ID:!"), $var("includeEmail").scalar("Boolean:?")],
|
|
74
|
+
},
|
|
75
|
+
({ f, $ }) => [
|
|
76
|
+
f.user({ id: $.id })(({ f }) => [userFragment.embed({ includeEmail: $.includeEmail })]),
|
|
77
|
+
],
|
|
78
|
+
),
|
|
79
|
+
);
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Variable Type Syntax
|
|
83
|
+
|
|
84
|
+
Variables are declared using a string-based type syntax:
|
|
85
|
+
|
|
86
|
+
| Syntax | Meaning | GraphQL Equivalent |
|
|
87
|
+
|--------|---------|-------------------|
|
|
88
|
+
| `"ID:!"` | Required ID | `ID!` |
|
|
89
|
+
| `"String:?"` | Optional String | `String` |
|
|
90
|
+
| `"Int:![]!"` | Required list of required Int | `[Int!]!` |
|
|
91
|
+
| `"String:![]?"` | Optional list of required Strings | `[String!]` |
|
|
92
|
+
| `"MyInput:!"` | Required custom input type | `MyInput!` |
|
|
93
|
+
|
|
94
|
+
## Field Selection Patterns
|
|
95
|
+
|
|
96
|
+
| Pattern | Description |
|
|
97
|
+
|---------|-------------|
|
|
98
|
+
| `f.id()` | Basic field selection |
|
|
99
|
+
| `f.posts({ limit: 10 })` | Field with arguments |
|
|
100
|
+
| `f.posts()(({ f }) => [...])` | Nested selection (curried) |
|
|
101
|
+
| `f.id(null, { alias: "uuid" })` | Field with alias |
|
|
102
|
+
| `f.email({ if: $.includeEmail })` | Conditional field |
|
|
103
|
+
| `userFragment.embed({})` | Use fragment fields |
|
|
104
|
+
|
|
105
|
+
## Defining Custom Scalars
|
|
106
|
+
|
|
107
|
+
Scalars define the TypeScript types for GraphQL scalar values:
|
|
108
|
+
|
|
109
|
+
```typescript
|
|
110
|
+
import { defineScalar } from "@soda-gql/core";
|
|
111
|
+
|
|
112
|
+
export const scalar = {
|
|
113
|
+
// Built-in scalars
|
|
114
|
+
...defineScalar<"ID", string, string>("ID"),
|
|
115
|
+
...defineScalar<"String", string, string>("String"),
|
|
116
|
+
...defineScalar<"Int", number, number>("Int"),
|
|
117
|
+
...defineScalar<"Float", number, number>("Float"),
|
|
118
|
+
...defineScalar<"Boolean", boolean, boolean>("Boolean"),
|
|
119
|
+
|
|
120
|
+
// Custom scalars - defineScalar<Name, InputType, OutputType>(name)
|
|
121
|
+
...defineScalar<"DateTime", string, Date>("DateTime"),
|
|
122
|
+
...defineScalar<"JSON", Record<string, unknown>, Record<string, unknown>>("JSON"),
|
|
123
|
+
} as const;
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Alternative callback syntax:
|
|
127
|
+
|
|
128
|
+
```typescript
|
|
129
|
+
export const scalar = {
|
|
130
|
+
...defineScalar("DateTime", ({ type }) => ({
|
|
131
|
+
input: type<string>(),
|
|
132
|
+
output: type<Date>(),
|
|
133
|
+
directives: {},
|
|
134
|
+
})),
|
|
135
|
+
} as const;
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
## Type Inference
|
|
139
|
+
|
|
140
|
+
Extract TypeScript types from soda-gql elements using `$infer`:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
// Fragment types
|
|
144
|
+
type UserInput = typeof userFragment.$infer.input;
|
|
145
|
+
type UserOutput = typeof userFragment.$infer.output;
|
|
146
|
+
|
|
147
|
+
// Operation types
|
|
148
|
+
type QueryVariables = typeof getUserQuery.$infer.input;
|
|
149
|
+
type QueryResult = typeof getUserQuery.$infer.output.projected;
|
|
150
|
+
```
|
|
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
|
+
|
|
185
|
+
## Metadata
|
|
186
|
+
|
|
187
|
+
Metadata allows you to attach runtime information to operations. This is useful for HTTP headers and application-specific values.
|
|
188
|
+
|
|
189
|
+
### Metadata Structure
|
|
190
|
+
|
|
191
|
+
All metadata types share two base properties:
|
|
192
|
+
|
|
193
|
+
| Property | Type | Purpose |
|
|
194
|
+
|----------|------|---------|
|
|
195
|
+
| `headers` | `Record<string, string>` | HTTP headers to include with the GraphQL request |
|
|
196
|
+
| `custom` | `Record<string, unknown>` | Application-specific values (auth requirements, cache settings, etc.) |
|
|
197
|
+
|
|
198
|
+
### Defining Metadata
|
|
199
|
+
|
|
200
|
+
Metadata is defined on operations:
|
|
201
|
+
|
|
202
|
+
```typescript
|
|
203
|
+
// Operation with metadata
|
|
204
|
+
export const getUserQuery = gql.default(({ query }, { $var }) =>
|
|
205
|
+
query.operation(
|
|
206
|
+
{
|
|
207
|
+
name: "GetUser",
|
|
208
|
+
variables: [$var("id").scalar("ID:!")],
|
|
209
|
+
metadata: ({ $, document }) => ({
|
|
210
|
+
headers: { "X-Request-ID": "user-query" },
|
|
211
|
+
custom: {
|
|
212
|
+
requiresAuth: true,
|
|
213
|
+
cacheTtl: 300,
|
|
214
|
+
trackedVariables: [$var.getInner($.id)],
|
|
215
|
+
},
|
|
216
|
+
}),
|
|
217
|
+
},
|
|
218
|
+
({ f, $ }) => [f.user({ id: $.id })(({ f }) => [f.id(), f.name()])],
|
|
219
|
+
),
|
|
220
|
+
);
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
## Runtime Exports
|
|
224
|
+
|
|
225
|
+
The `/runtime` subpath provides utilities for operation registration and retrieval:
|
|
226
|
+
|
|
227
|
+
```typescript
|
|
228
|
+
import { gqlRuntime } from "@soda-gql/core/runtime";
|
|
229
|
+
|
|
230
|
+
// Retrieve registered operations (typically handled by build plugins)
|
|
231
|
+
const operation = gqlRuntime.getOperation("canonicalId");
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
## TypeScript Support
|
|
235
|
+
|
|
236
|
+
This package requires TypeScript 5.x or later for full type inference support.
|
|
237
|
+
|
|
238
|
+
## Related Packages
|
|
239
|
+
|
|
240
|
+
- [@soda-gql/cli](../cli) - Command-line interface for code generation
|
|
241
|
+
- [@soda-gql/config](../config) - Configuration management
|
|
242
|
+
- [@soda-gql/runtime](../runtime) - Runtime utilities for operation execution
|
|
243
|
+
- [@soda-gql/tsc-plugin](../tsc-plugin) - TypeScript compiler plugin
|
|
244
|
+
|
|
245
|
+
## License
|
|
246
|
+
|
|
247
|
+
MIT
|
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"}
|