@btravstack/graphql-server 0.30.0 → 0.31.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 +27 -2
- package/dist/index.cjs +27 -1
- package/dist/index.d.cts +29 -3
- package/dist/index.d.mts +29 -3
- package/dist/index.mjs +29 -4
- package/package.json +13 -13
package/README.md
CHANGED
|
@@ -6,9 +6,34 @@ A GraphQL Yoga answerer for the protocol-neutral
|
|
|
6
6
|
server dependency. `graphql(defineAuth(), { schema })` contributes a
|
|
7
7
|
`HttpHandler` member. A request-scoped unit and the Node incoming request are
|
|
8
8
|
available to resolvers.
|
|
9
|
+
Use `GraphqlModule` for a deployment root:
|
|
10
|
+
|
|
11
|
+
```ts
|
|
12
|
+
import { GraphqlModule, graphql } from "@btravstack/graphql-server";
|
|
13
|
+
import { defineAuth } from "@btravstack/http-server";
|
|
14
|
+
import { createSchema } from "graphql-yoga";
|
|
15
|
+
|
|
16
|
+
const schema = createSchema({
|
|
17
|
+
typeDefs: "type Query { hello: String! }",
|
|
18
|
+
resolvers: { Query: { hello: () => "world" } },
|
|
19
|
+
});
|
|
20
|
+
|
|
21
|
+
export const GatewayApi = GraphqlModule("GatewayApi")({
|
|
22
|
+
answerer: graphql(defineAuth(), { schema }),
|
|
23
|
+
});
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
The module composes the listener, authenticators and declared request modules.
|
|
27
|
+
It exports the runtime ports and available `Logger` / `HealthChecks` without
|
|
28
|
+
exposing business ports automatically. Its socket options are the HTTP
|
|
29
|
+
runtime's, excluding `cors` and `compression`. Set CORS on `graphql()`; the
|
|
30
|
+
answerer does not apply HTTP compression. Schema, authentication and Yoga
|
|
31
|
+
options stay on `graphql()`.
|
|
32
|
+
|
|
9
33
|
Pass `units` with `unit` to check each injected port against the module the
|
|
10
|
-
selected request kind actually forks.
|
|
11
|
-
|
|
34
|
+
selected request kind actually forks. `GraphqlModule` binds that record to
|
|
35
|
+
the runtime automatically; a manually composed root passes the same `units`
|
|
36
|
+
record to `httpServer({ unit: units })`.
|
|
12
37
|
Yoga plugins and CORS policy are explicit
|
|
13
38
|
options; the wildcard CORS default and Yoga console logging are disabled, and
|
|
14
39
|
a masked defect is reported to `Observers` instead. GraphiQL,
|
package/dist/index.cjs
CHANGED
|
@@ -5,6 +5,7 @@ let _btravstack_core = require("@btravstack/core");
|
|
|
5
5
|
let _btravstack_di = require("@btravstack/di");
|
|
6
6
|
let _btravstack_http_server_internal = require("@btravstack/http-server/internal");
|
|
7
7
|
let unthrown = require("unthrown");
|
|
8
|
+
let _btravstack_http_server = require("@btravstack/http-server");
|
|
8
9
|
//#region src/field.ts
|
|
9
10
|
/**
|
|
10
11
|
* A resolver's answer from a `Result`, so a modeled failure is never thrown by
|
|
@@ -158,8 +159,33 @@ const graphql = (api, options) => {
|
|
|
158
159
|
}),
|
|
159
160
|
onStop: (answerer) => answerer[dispose]()
|
|
160
161
|
});
|
|
161
|
-
return Object.assign(typed, {
|
|
162
|
+
return Object.assign(typed, {
|
|
163
|
+
authenticators: api.providers,
|
|
164
|
+
units: options.units
|
|
165
|
+
});
|
|
166
|
+
};
|
|
167
|
+
//#endregion
|
|
168
|
+
//#region src/graphql-module.ts
|
|
169
|
+
/** Declare a GraphQL HTTP application without repeating runtime or authenticator wiring. */
|
|
170
|
+
const GraphqlModule = (name) => (options) => {
|
|
171
|
+
const starter = (0, _btravstack_http_server.httpServer)({
|
|
172
|
+
...options,
|
|
173
|
+
unit: options.answerer.units
|
|
174
|
+
});
|
|
175
|
+
const imports = [...options.imports ?? [], starter];
|
|
176
|
+
const provides = [
|
|
177
|
+
options.answerer,
|
|
178
|
+
...options.answerer.authenticators,
|
|
179
|
+
...options.provides ?? []
|
|
180
|
+
];
|
|
181
|
+
return (0, _btravstack_di.Module)(name)({
|
|
182
|
+
imports,
|
|
183
|
+
provides,
|
|
184
|
+
exports: [...(0, _btravstack_http_server_internal.applicationExports)(imports, provides), ...options.exports ?? []],
|
|
185
|
+
needs: [...options.needs ?? [], _btravstack_config.Env]
|
|
186
|
+
});
|
|
162
187
|
};
|
|
163
188
|
//#endregion
|
|
189
|
+
exports.GraphqlModule = GraphqlModule;
|
|
164
190
|
exports.fieldResult = fieldResult;
|
|
165
191
|
exports.graphql = graphql;
|
package/dist/index.d.cts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { GraphQLError, GraphQLSchema } from "graphql";
|
|
2
2
|
import { AsyncResult, Result } from "unthrown";
|
|
3
3
|
import { IncomingMessage } from "node:http";
|
|
4
|
-
import { ConfigInvalid, EnvReading } from "@btravstack/config";
|
|
4
|
+
import { ConfigInvalid, Env, EnvReading } from "@btravstack/config";
|
|
5
5
|
import { OneScheme, Requirements } from "@btravstack/contract";
|
|
6
6
|
import { Observers } from "@btravstack/core";
|
|
7
|
-
import { AnyPort, Provider, Scope } from "@btravstack/di";
|
|
8
|
-
import { Authenticators, HttpAuth, HttpConfig, HttpHandler, HttpUnit, KindOf, Kinds, Principal, RequiresGate, SchemePortsOf, SchemesFrom, SchemesOf, UnitFor, UnitsNeedsOf, UnitsOf } from "@btravstack/http-server/internal";
|
|
7
|
+
import { AnyModule, AnyPort, AnyProvider, Exportable, Module, NeedsGate, Provider, Scope } from "@btravstack/di";
|
|
8
|
+
import { AnyUnitModule, Authenticators, CookieSchemes, HttpAuth, HttpConfig, HttpHandler, HttpServerEnv, HttpUnit, KindOf, Kinds, Principal, RequiresGate, SchemePortsOf, SchemesFrom, SchemesOf, UnitFor, UnitsNeedsOf, UnitsOf } from "@btravstack/http-server/internal";
|
|
9
9
|
import { Plugin, YogaInitialContext, YogaServerOptions } from "graphql-yoga";
|
|
10
|
+
import { HttpConfig as HttpConfig$1, HttpHandler as HttpHandler$1, HttpOptions, HttpRuntime } from "@btravstack/http-server";
|
|
10
11
|
//#region src/field.d.ts
|
|
11
12
|
/**
|
|
12
13
|
* A resolver's answer from a `Result`, so a modeled failure is never thrown by
|
|
@@ -90,6 +91,31 @@ type GraphqlOptions<A extends Authenticators, Units extends UnitsOf<A>, R extend
|
|
|
90
91
|
};
|
|
91
92
|
export declare const graphql: <A extends Authenticators, Units extends UnitsOf<A> = Record<never, never>, const R extends Requirements & { readonly [I in keyof R]: OneScheme<R[I]>; } = never, U extends Readonly<Record<string, AnyPort>> = Record<never, never>, const PS extends readonly unknown[] = []>(api: HttpAuth<A>, options: GraphqlOptions<A, Units, R, U, PS>) => Provider<HttpHandler, ConfigInvalid, HttpConfig | HttpUnit | Observers | Scope | SchemePortsOf<R> | UnitsNeedsOf<Units> | EnvReading<never, "GRAPHQL_DEVELOPER_TOOLS" | "GRAPHQL_MAX_TOKENS">> & {
|
|
92
93
|
authenticators: readonly import("@btravstack/http-server/internal").SchemeProviders<A>[];
|
|
94
|
+
units: (Units & { readonly [K in Exclude<keyof Units, Kinds<A>>]: never; }) | undefined;
|
|
93
95
|
};
|
|
94
96
|
//#endregion
|
|
97
|
+
//#region src/graphql-module.d.ts
|
|
98
|
+
type AnyAnswerer = Provider<InstanceType<typeof HttpHandler$1>, unknown, unknown> & {
|
|
99
|
+
readonly authenticators: readonly AnyProvider[];
|
|
100
|
+
readonly units: Readonly<Record<string, AnyUnitModule>> | undefined;
|
|
101
|
+
};
|
|
102
|
+
type UnitsOf$1<A> = A extends {
|
|
103
|
+
readonly units: infer U;
|
|
104
|
+
} ? U : never;
|
|
105
|
+
type AuthOf<A> = A extends {
|
|
106
|
+
readonly authenticators: readonly (infer P)[];
|
|
107
|
+
} ? P : never;
|
|
108
|
+
type HttpStarter<Units> = Module<HttpRuntime | HttpConfig$1 | InstanceType<typeof HttpHandler$1> | HttpUnit | CookieSchemes | Observers, ConfigInvalid, HttpServerEnv | UnitsNeedsOf<Units>>;
|
|
109
|
+
type Imports<I extends readonly AnyModule[], A> = readonly [...I, HttpStarter<UnitsOf$1<A>>];
|
|
110
|
+
type Provides<P extends readonly AnyProvider[], A> = readonly (A | AuthOf<A> | P[number])[];
|
|
111
|
+
type EnvAnd<N extends readonly AnyPort[]> = readonly [...N, typeof Env];
|
|
112
|
+
/** Declare a GraphQL HTTP application without repeating runtime or authenticator wiring. */
|
|
113
|
+
export declare const GraphqlModule: <const Name extends string>(name: Name) => <A extends AnyAnswerer, const I extends readonly AnyModule[] = [], const P extends readonly AnyProvider[] = [], const X extends readonly Exportable<Imports<I, A>, Provides<P, A>>[] = [], const N extends readonly AnyPort[] = []>(options: Omit<HttpOptions, "unit" | "cors" | "compression"> & {
|
|
114
|
+
readonly answerer: A;
|
|
115
|
+
readonly imports?: I;
|
|
116
|
+
readonly provides?: P;
|
|
117
|
+
readonly exports?: X;
|
|
118
|
+
readonly needs?: N;
|
|
119
|
+
} & NeedsGate<Imports<I, A>, Provides<P, A>, EnvAnd<N>>) => Module<(Extract<(readonly [...(typeof HttpHandler$1 | typeof HttpRuntime | (import("@btravstack/core").HealthChecks extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> extends (infer T_3) ? T_3 extends Extract<(readonly [...(typeof HttpHandler$1 | typeof HttpRuntime | (import("@btravstack/core").HealthChecks extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> ? T_3 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [...(typeof HttpHandler$1 | typeof HttpRuntime | (import("@btravstack/core").HealthChecks extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number] extends (infer E_1) ? E_1 extends AnyPort ? InstanceType<E_1> : E_1 extends AnyProvider ? InstanceType<E_1["port"]> : never : never), ((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_4) ? T_4 extends P[number] ? T_4 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_5) ? T_5 extends AuthOf<A> ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[1] | ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[1], Exclude<((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_7) ? T_7 extends P[number] ? T_7 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_8) ? T_8 extends AuthOf<A> ? T_8 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[2], ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_9) ? T_9 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_9 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_7) ? T_7 extends P[number] ? T_7 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_8) ? T_8 extends AuthOf<A> ? T_8 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[0]> | Exclude<((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_9) ? T_9 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_9 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[2], ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_9) ? T_9 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_9 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_7) ? T_7 extends P[number] ? T_7 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_8) ? T_8 extends AuthOf<A> ? T_8 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[0]>>;
|
|
120
|
+
//#endregion
|
|
95
121
|
export type { GraphqlContext, GraphqlOptions };
|
package/dist/index.d.mts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Plugin, YogaInitialContext, YogaServerOptions } from "graphql-yoga";
|
|
2
|
-
import { ConfigInvalid, EnvReading } from "@btravstack/config";
|
|
2
|
+
import { ConfigInvalid, Env, EnvReading } from "@btravstack/config";
|
|
3
3
|
import { Observers } from "@btravstack/core";
|
|
4
|
-
import { AnyPort, Provider, Scope } from "@btravstack/di";
|
|
5
|
-
import { Authenticators, HttpAuth, HttpConfig, HttpHandler, HttpUnit, KindOf, Kinds, Principal, RequiresGate, SchemePortsOf, SchemesFrom, SchemesOf, UnitFor, UnitsNeedsOf, UnitsOf } from "@btravstack/http-server/internal";
|
|
4
|
+
import { AnyModule, AnyPort, AnyProvider, Exportable, Module, NeedsGate, Provider, Scope } from "@btravstack/di";
|
|
5
|
+
import { AnyUnitModule, Authenticators, CookieSchemes, HttpAuth, HttpConfig, HttpHandler, HttpServerEnv, HttpUnit, KindOf, Kinds, Principal, RequiresGate, SchemePortsOf, SchemesFrom, SchemesOf, UnitFor, UnitsNeedsOf, UnitsOf } from "@btravstack/http-server/internal";
|
|
6
6
|
import { AsyncResult, Result } from "unthrown";
|
|
7
|
+
import { HttpConfig as HttpConfig$1, HttpHandler as HttpHandler$1, HttpOptions, HttpRuntime } from "@btravstack/http-server";
|
|
7
8
|
import { GraphQLError, GraphQLSchema } from "graphql";
|
|
8
9
|
import { IncomingMessage } from "node:http";
|
|
9
10
|
import { OneScheme, Requirements } from "@btravstack/contract";
|
|
@@ -90,6 +91,31 @@ type GraphqlOptions<A extends Authenticators, Units extends UnitsOf<A>, R extend
|
|
|
90
91
|
};
|
|
91
92
|
export declare const graphql: <A extends Authenticators, Units extends UnitsOf<A> = Record<never, never>, const R extends Requirements & { readonly [I in keyof R]: OneScheme<R[I]>; } = never, U extends Readonly<Record<string, AnyPort>> = Record<never, never>, const PS extends readonly unknown[] = []>(api: HttpAuth<A>, options: GraphqlOptions<A, Units, R, U, PS>) => Provider<HttpHandler, ConfigInvalid, HttpConfig | HttpUnit | Observers | Scope | SchemePortsOf<R> | UnitsNeedsOf<Units> | EnvReading<never, "GRAPHQL_DEVELOPER_TOOLS" | "GRAPHQL_MAX_TOKENS">> & {
|
|
92
93
|
authenticators: readonly import("@btravstack/http-server/internal").SchemeProviders<A>[];
|
|
94
|
+
units: (Units & { readonly [K in Exclude<keyof Units, Kinds<A>>]: never; }) | undefined;
|
|
93
95
|
};
|
|
94
96
|
//#endregion
|
|
97
|
+
//#region src/graphql-module.d.ts
|
|
98
|
+
type AnyAnswerer = Provider<InstanceType<typeof HttpHandler$1>, unknown, unknown> & {
|
|
99
|
+
readonly authenticators: readonly AnyProvider[];
|
|
100
|
+
readonly units: Readonly<Record<string, AnyUnitModule>> | undefined;
|
|
101
|
+
};
|
|
102
|
+
type UnitsOf$1<A> = A extends {
|
|
103
|
+
readonly units: infer U;
|
|
104
|
+
} ? U : never;
|
|
105
|
+
type AuthOf<A> = A extends {
|
|
106
|
+
readonly authenticators: readonly (infer P)[];
|
|
107
|
+
} ? P : never;
|
|
108
|
+
type HttpStarter<Units> = Module<HttpRuntime | HttpConfig$1 | InstanceType<typeof HttpHandler$1> | HttpUnit | CookieSchemes | Observers, ConfigInvalid, HttpServerEnv | UnitsNeedsOf<Units>>;
|
|
109
|
+
type Imports<I extends readonly AnyModule[], A> = readonly [...I, HttpStarter<UnitsOf$1<A>>];
|
|
110
|
+
type Provides<P extends readonly AnyProvider[], A> = readonly (A | AuthOf<A> | P[number])[];
|
|
111
|
+
type EnvAnd<N extends readonly AnyPort[]> = readonly [...N, typeof Env];
|
|
112
|
+
/** Declare a GraphQL HTTP application without repeating runtime or authenticator wiring. */
|
|
113
|
+
export declare const GraphqlModule: <const Name extends string>(name: Name) => <A extends AnyAnswerer, const I extends readonly AnyModule[] = [], const P extends readonly AnyProvider[] = [], const X extends readonly Exportable<Imports<I, A>, Provides<P, A>>[] = [], const N extends readonly AnyPort[] = []>(options: Omit<HttpOptions, "unit" | "cors" | "compression"> & {
|
|
114
|
+
readonly answerer: A;
|
|
115
|
+
readonly imports?: I;
|
|
116
|
+
readonly provides?: P;
|
|
117
|
+
readonly exports?: X;
|
|
118
|
+
readonly needs?: N;
|
|
119
|
+
} & NeedsGate<Imports<I, A>, Provides<P, A>, EnvAnd<N>>) => Module<(Extract<(readonly [...(typeof HttpHandler$1 | typeof HttpRuntime | (import("@btravstack/core").HealthChecks extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> extends (infer T_3) ? T_3 extends Extract<(readonly [...(typeof HttpHandler$1 | typeof HttpRuntime | (import("@btravstack/core").HealthChecks extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number], AnyModule> ? T_3 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((readonly [...(typeof HttpHandler$1 | typeof HttpRuntime | (import("@btravstack/core").HealthChecks extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").HealthChecks : never) | (import("@btravstack/core").Logger extends ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T) ? T extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T extends Module<infer X_1, infer _E, infer _N> ? X_1 : never : never : never) | (A extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never) | (P[number] extends (infer T_1) ? T_1 extends P[number] ? T_1 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) | (AuthOf<A> extends (infer T_2) ? T_2 extends AuthOf<A> ? T_2 extends Provider<infer X_2, infer _E_1, infer _N_1> ? X_2 : never : never : never) ? typeof import("@btravstack/core").Logger : never))[], ...X])[number] extends (infer E_1) ? E_1 extends AnyPort ? InstanceType<E_1> : E_1 extends AnyProvider ? InstanceType<E_1["port"]> : never : never), ((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_4) ? T_4 extends P[number] ? T_4 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_5) ? T_5 extends AuthOf<A> ? T_5 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[1] | ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_6) ? T_6 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_6 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[1], Exclude<((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_7) ? T_7 extends P[number] ? T_7 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_8) ? T_8 extends AuthOf<A> ? T_8 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[2], ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_9) ? T_9 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_9 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_7) ? T_7 extends P[number] ? T_7 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_8) ? T_8 extends AuthOf<A> ? T_8 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[0]> | Exclude<((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_9) ? T_9 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_9 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[2], ((readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] extends (infer T_9) ? T_9 extends (readonly [...I, HttpStarter<UnitsOf$1<A>>])[number] ? T_9 extends Module<infer X_3, infer E, infer N_1> ? readonly [X_3, E, N_1] : never : never : never)[0] | ((A extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never) | (P[number] extends (infer T_7) ? T_7 extends P[number] ? T_7 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never) | (AuthOf<A> extends (infer T_8) ? T_8 extends AuthOf<A> ? T_8 extends Provider<infer P_1, infer E_2, infer N_2> ? readonly [P_1, E_2, N_2] : never : never : never))[0]>>;
|
|
120
|
+
//#endregion
|
|
95
121
|
export type { GraphqlContext, GraphqlOptions };
|
package/dist/index.mjs
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { createGraphQLError, createYoga, handleStreamOrSingleExecutionResult, maskError } from "graphql-yoga";
|
|
2
2
|
import { Config, Env } from "@btravstack/config";
|
|
3
3
|
import { Observers, observe } from "@btravstack/core";
|
|
4
|
-
import { Provider } from "@btravstack/di";
|
|
5
|
-
import { HttpConfig, HttpHandler, HttpUnit, forkUnit, principalOf, resolveScheme, schemeDeps, schemeServices } from "@btravstack/http-server/internal";
|
|
4
|
+
import { Module, Provider } from "@btravstack/di";
|
|
5
|
+
import { HttpConfig, HttpHandler, HttpUnit, applicationExports, forkUnit, principalOf, resolveScheme, schemeDeps, schemeServices } from "@btravstack/http-server/internal";
|
|
6
6
|
import { P } from "unthrown";
|
|
7
|
+
import { httpServer } from "@btravstack/http-server";
|
|
7
8
|
//#region src/field.ts
|
|
8
9
|
/**
|
|
9
10
|
* A resolver's answer from a `Result`, so a modeled failure is never thrown by
|
|
@@ -157,7 +158,31 @@ const graphql = (api, options) => {
|
|
|
157
158
|
}),
|
|
158
159
|
onStop: (answerer) => answerer[dispose]()
|
|
159
160
|
});
|
|
160
|
-
return Object.assign(typed, {
|
|
161
|
+
return Object.assign(typed, {
|
|
162
|
+
authenticators: api.providers,
|
|
163
|
+
units: options.units
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
//#endregion
|
|
167
|
+
//#region src/graphql-module.ts
|
|
168
|
+
/** Declare a GraphQL HTTP application without repeating runtime or authenticator wiring. */
|
|
169
|
+
const GraphqlModule = (name) => (options) => {
|
|
170
|
+
const starter = httpServer({
|
|
171
|
+
...options,
|
|
172
|
+
unit: options.answerer.units
|
|
173
|
+
});
|
|
174
|
+
const imports = [...options.imports ?? [], starter];
|
|
175
|
+
const provides = [
|
|
176
|
+
options.answerer,
|
|
177
|
+
...options.answerer.authenticators,
|
|
178
|
+
...options.provides ?? []
|
|
179
|
+
];
|
|
180
|
+
return Module(name)({
|
|
181
|
+
imports,
|
|
182
|
+
provides,
|
|
183
|
+
exports: [...applicationExports(imports, provides), ...options.exports ?? []],
|
|
184
|
+
needs: [...options.needs ?? [], Env]
|
|
185
|
+
});
|
|
161
186
|
};
|
|
162
187
|
//#endregion
|
|
163
|
-
export { fieldResult, graphql };
|
|
188
|
+
export { GraphqlModule, fieldResult, graphql };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@btravstack/graphql-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.31.0",
|
|
4
4
|
"description": "The GraphQL Yoga answerer for @btravstack/http-server",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"graphql",
|
|
@@ -41,29 +41,29 @@
|
|
|
41
41
|
"./package.json": "./package.json"
|
|
42
42
|
},
|
|
43
43
|
"devDependencies": {
|
|
44
|
-
"@btravstack/config": "0.
|
|
45
|
-
"@btravstack/contract": "0.
|
|
46
|
-
"@btravstack/core": "0.
|
|
47
|
-
"@btravstack/di": "0.
|
|
48
|
-
"@btravstack/http-server": "0.
|
|
44
|
+
"@btravstack/config": "0.31.0",
|
|
45
|
+
"@btravstack/contract": "0.31.0",
|
|
46
|
+
"@btravstack/core": "0.31.0",
|
|
47
|
+
"@btravstack/di": "0.31.0",
|
|
48
|
+
"@btravstack/http-server": "0.31.0",
|
|
49
49
|
"@btravstack/tsconfig": "0.4.0",
|
|
50
50
|
"@types/node": "26.6.4",
|
|
51
|
-
"@unthrown/vitest": "5.12.
|
|
51
|
+
"@unthrown/vitest": "5.12.1",
|
|
52
52
|
"@vitest/coverage-v8": "5.0.3",
|
|
53
53
|
"graphql": "17.0.2",
|
|
54
54
|
"graphql-yoga": "5.24.1",
|
|
55
55
|
"tsdown": "0.23.0",
|
|
56
56
|
"typescript": "7.0.2",
|
|
57
57
|
"typescript-consumer": "npm:typescript@5.9.3",
|
|
58
|
-
"unthrown": "5.12.
|
|
58
|
+
"unthrown": "5.12.1",
|
|
59
59
|
"vitest": "5.0.3"
|
|
60
60
|
},
|
|
61
61
|
"peerDependencies": {
|
|
62
|
-
"@btravstack/config": "^0.
|
|
63
|
-
"@btravstack/contract": "^0.
|
|
64
|
-
"@btravstack/core": "^0.
|
|
65
|
-
"@btravstack/di": "^0.
|
|
66
|
-
"@btravstack/http-server": "^0.
|
|
62
|
+
"@btravstack/config": "^0.31.0",
|
|
63
|
+
"@btravstack/contract": "^0.31.0",
|
|
64
|
+
"@btravstack/core": "^0.31.0",
|
|
65
|
+
"@btravstack/di": "^0.31.0",
|
|
66
|
+
"@btravstack/http-server": "^0.31.0",
|
|
67
67
|
"graphql": "^16.6.0 || ^17.0.0",
|
|
68
68
|
"graphql-yoga": "^5.24.1",
|
|
69
69
|
"unthrown": "^5.7.0"
|