@model-ts/graphql 0.0.0-stage → 7.0.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/CHANGELOG.md +21 -0
- package/README.md +1280 -2
- package/dist/.tsbuildinfo +1 -0
- package/dist/Assembly.d.ts +24 -0
- package/dist/Assembly.d.ts.map +1 -0
- package/dist/Assembly.js +236 -0
- package/dist/Assembly.js.map +1 -0
- package/dist/Builder.d.ts +27 -0
- package/dist/Builder.d.ts.map +1 -0
- package/dist/Builder.js +40 -0
- package/dist/Builder.js.map +1 -0
- package/dist/Connections.d.ts +41 -0
- package/dist/Connections.d.ts.map +1 -0
- package/dist/Connections.js +243 -0
- package/dist/Connections.js.map +1 -0
- package/dist/Definitions.d.ts +139 -0
- package/dist/Definitions.d.ts.map +1 -0
- package/dist/Definitions.js +117 -0
- package/dist/Definitions.js.map +1 -0
- package/dist/Errors.d.ts +39 -0
- package/dist/Errors.d.ts.map +1 -0
- package/dist/Errors.js +103 -0
- package/dist/Errors.js.map +1 -0
- package/dist/Execution.d.ts +52 -0
- package/dist/Execution.d.ts.map +1 -0
- package/dist/Execution.js +174 -0
- package/dist/Execution.js.map +1 -0
- package/dist/FieldRuntime.d.ts +5 -0
- package/dist/FieldRuntime.d.ts.map +1 -0
- package/dist/FieldRuntime.js +27 -0
- package/dist/FieldRuntime.js.map +1 -0
- package/dist/FieldTypes.d.ts +232 -0
- package/dist/FieldTypes.d.ts.map +1 -0
- package/dist/FieldTypes.js +6 -0
- package/dist/FieldTypes.js.map +1 -0
- package/dist/Fields.d.ts +8 -0
- package/dist/Fields.d.ts.map +1 -0
- package/dist/Fields.js +72 -0
- package/dist/Fields.js.map +1 -0
- package/dist/Formatting.d.ts +25 -0
- package/dist/Formatting.d.ts.map +1 -0
- package/dist/Formatting.js +29 -0
- package/dist/Formatting.js.map +1 -0
- package/dist/GraphQL.d.ts +10 -0
- package/dist/GraphQL.d.ts.map +1 -0
- package/dist/GraphQL.js +5 -0
- package/dist/GraphQL.js.map +1 -0
- package/dist/InputTypes.d.ts +27 -0
- package/dist/InputTypes.d.ts.map +1 -0
- package/dist/InputTypes.js +203 -0
- package/dist/InputTypes.js.map +1 -0
- package/dist/Registry.d.ts +70 -0
- package/dist/Registry.d.ts.map +1 -0
- package/dist/Registry.js +3 -0
- package/dist/Registry.js.map +1 -0
- package/dist/Resolver.d.ts +30 -0
- package/dist/Resolver.d.ts.map +1 -0
- package/dist/Resolver.js +76 -0
- package/dist/Resolver.js.map +1 -0
- package/dist/Results.d.ts +20 -0
- package/dist/Results.d.ts.map +1 -0
- package/dist/Results.js +79 -0
- package/dist/Results.js.map +1 -0
- package/dist/ScalarBoundary.d.ts +9 -0
- package/dist/ScalarBoundary.d.ts.map +1 -0
- package/dist/ScalarBoundary.js +31 -0
- package/dist/ScalarBoundary.js.map +1 -0
- package/dist/Scalars.d.ts +9 -0
- package/dist/Scalars.d.ts.map +1 -0
- package/dist/Scalars.js +104 -0
- package/dist/Scalars.js.map +1 -0
- package/dist/SchemaTypes.d.ts +55 -0
- package/dist/SchemaTypes.d.ts.map +1 -0
- package/dist/SchemaTypes.js +47 -0
- package/dist/SchemaTypes.js.map +1 -0
- package/dist/Subscription.d.ts +6 -0
- package/dist/Subscription.d.ts.map +1 -0
- package/dist/Subscription.js +60 -0
- package/dist/Subscription.js.map +1 -0
- package/dist/Testing.d.ts +52 -0
- package/dist/Testing.d.ts.map +1 -0
- package/dist/Testing.js +74 -0
- package/dist/Testing.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -0
- package/dist/internal/SubscriptionRule.d.ts +8 -0
- package/dist/internal/SubscriptionRule.d.ts.map +1 -0
- package/dist/internal/SubscriptionRule.js +73 -0
- package/dist/internal/SubscriptionRule.js.map +1 -0
- package/package.json +55 -4
- package/src/Assembly.ts +352 -0
- package/src/Builder.ts +110 -0
- package/src/Connections.ts +374 -0
- package/src/Definitions.ts +465 -0
- package/src/Errors.ts +188 -0
- package/src/Execution.ts +354 -0
- package/src/FieldRuntime.ts +32 -0
- package/src/FieldTypes.ts +667 -0
- package/src/Fields.ts +117 -0
- package/src/Formatting.ts +54 -0
- package/src/GraphQL.ts +50 -0
- package/src/InputTypes.ts +266 -0
- package/src/Registry.ts +157 -0
- package/src/Resolver.ts +176 -0
- package/src/Results.ts +128 -0
- package/src/ScalarBoundary.ts +30 -0
- package/src/Scalars.ts +143 -0
- package/src/SchemaTypes.ts +90 -0
- package/src/Subscription.ts +93 -0
- package/src/Testing.ts +144 -0
- package/src/index.ts +1 -0
- package/src/internal/SubscriptionRule.ts +90 -0
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import type { ExecutionResult } from "./Execution.ts";
|
|
3
|
+
declare const Result: Schema.Struct<{
|
|
4
|
+
readonly data: Schema.optionalKey<Schema.NullOr<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>>;
|
|
5
|
+
readonly errors: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
6
|
+
readonly message: Schema.String;
|
|
7
|
+
readonly locations: Schema.optionalKey<Schema.$Array<Schema.Struct<{
|
|
8
|
+
readonly line: Schema.Number;
|
|
9
|
+
readonly column: Schema.Number;
|
|
10
|
+
}>>>;
|
|
11
|
+
readonly path: Schema.optionalKey<Schema.$Array<Schema.Union<readonly [Schema.String, Schema.Number]>>>;
|
|
12
|
+
readonly extensions: Schema.optionalKey<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>;
|
|
13
|
+
}>>>;
|
|
14
|
+
readonly extensions: Schema.optionalKey<Schema.$Record<Schema.String, Schema.Codec<Schema.Json, Schema.Json, never, never>>>;
|
|
15
|
+
}>;
|
|
16
|
+
export type FormattedExecutionResult = typeof Result.Type;
|
|
17
|
+
/** Match the JSON wire response: plain records, no Error stacks or graphql-js prototypes. */
|
|
18
|
+
export declare const snapshot: (result: ExecutionResult) => FormattedExecutionResult;
|
|
19
|
+
/** Formatting belongs to the executor; transports receive only JSON values.
|
|
20
|
+
* Serialization defects always become a fixed internal error, including failures
|
|
21
|
+
* in a custom toJSON method, so even the fallback is guaranteed to serialize.
|
|
22
|
+
*/
|
|
23
|
+
export declare const formatResult: (result: ExecutionResult) => Effect.Effect<FormattedExecutionResult>;
|
|
24
|
+
export {};
|
|
25
|
+
//# sourceMappingURL=Formatting.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Formatting.d.ts","sourceRoot":"","sources":["../src/Formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAGvC,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAErD,QAAA,MAAM,MAAM;;;;;;;;;;;;EAmBV,CAAA;AACF,MAAM,MAAM,wBAAwB,GAAG,OAAO,MAAM,CAAC,IAAI,CAAA;AAGzD,6FAA6F;AAC7F,eAAO,MAAM,QAAQ,WAAY,eAAe,KAAG,wBACnB,CAAA;AAEhC;;;GAGG;AACH,eAAO,MAAM,YAAY,WACf,eAAe,KACtB,MAAM,CAAC,MAAM,CAAC,wBAAwB,CAetC,CAAA"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { Effect, Schema } from "effect";
|
|
2
|
+
import { GraphQLError } from "graphql";
|
|
3
|
+
import { recoverCause, defaultErrorPolicy } from "./Errors.js";
|
|
4
|
+
const Result = Schema.Struct({
|
|
5
|
+
data: Schema.optionalKey(Schema.NullOr(Schema.JsonObject)),
|
|
6
|
+
errors: Schema.optionalKey(Schema.Array(Schema.Struct({
|
|
7
|
+
message: Schema.String,
|
|
8
|
+
locations: Schema.optionalKey(Schema.Array(Schema.Struct({ line: Schema.Number, column: Schema.Number }))),
|
|
9
|
+
path: Schema.optionalKey(Schema.Array(Schema.Union([Schema.String, Schema.Number]))),
|
|
10
|
+
extensions: Schema.optionalKey(Schema.JsonObject),
|
|
11
|
+
}))),
|
|
12
|
+
extensions: Schema.optionalKey(Schema.JsonObject),
|
|
13
|
+
});
|
|
14
|
+
const decode = Schema.decodeUnknownSync(Schema.fromJsonString(Result));
|
|
15
|
+
/** Match the JSON wire response: plain records, no Error stacks or graphql-js prototypes. */
|
|
16
|
+
export const snapshot = (result) => decode(JSON.stringify(result));
|
|
17
|
+
/** Formatting belongs to the executor; transports receive only JSON values.
|
|
18
|
+
* Serialization defects always become a fixed internal error, including failures
|
|
19
|
+
* in a custom toJSON method, so even the fallback is guaranteed to serialize.
|
|
20
|
+
*/
|
|
21
|
+
export const formatResult = (result) => Effect.sync(() => snapshot(result)).pipe(Effect.catchCause((cause) => Effect.map(recoverCause(cause, [], defaultErrorPolicy, {
|
|
22
|
+
coordinate: "operation",
|
|
23
|
+
phase: "execute",
|
|
24
|
+
}), (error) => {
|
|
25
|
+
if (!(error instanceof GraphQLError))
|
|
26
|
+
throw new Error("Error policy must return a GraphQL error");
|
|
27
|
+
return snapshot({ errors: [error] });
|
|
28
|
+
})));
|
|
29
|
+
//# sourceMappingURL=Formatting.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Formatting.js","sourceRoot":"","sources":["../src/Formatting.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAG9D,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAC1D,MAAM,EAAE,MAAM,CAAC,WAAW,CACxB,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,MAAM,CAAC;QACZ,OAAO,EAAE,MAAM,CAAC,MAAM;QACtB,SAAS,EAAE,MAAM,CAAC,WAAW,CAC3B,MAAM,CAAC,KAAK,CACV,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAC9D,CACF;QACD,IAAI,EAAE,MAAM,CAAC,WAAW,CACtB,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAC3D;QACD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;KAClD,CAAC,CACH,CACF;IACD,UAAU,EAAE,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC;CAClD,CAAC,CAAA;AAEF,MAAM,MAAM,GAAG,MAAM,CAAC,iBAAiB,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAA;AAEtE,6FAA6F;AAC7F,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,MAAuB,EAA4B,EAAE,CAC5E,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAA;AAEhC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,MAAuB,EACkB,EAAE,CAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CACtC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,MAAM,CAAC,GAAG,CACR,YAAY,CAAC,KAAK,EAAE,EAAE,EAAE,kBAAkB,EAAE;IAC1C,UAAU,EAAE,WAAW;IACvB,KAAK,EAAE,SAAS;CACjB,CAAC,EACF,CAAC,KAAK,EAAE,EAAE;IACR,IAAI,CAAC,CAAC,KAAK,YAAY,YAAY,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAA;IAC7D,OAAO,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;AACtC,CAAC,CACF,CACF,CACF,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export { createBuilder, type Builder, type BuilderOptions } from "./Builder.ts";
|
|
2
|
+
export type { Register, Registration, Scalars, Values } from "./Registry.ts";
|
|
3
|
+
export type { Field, Fields, OutputRef, Ref, Value, Resolved, Requirements, SourceField, DefaultField, } from "./FieldTypes.ts";
|
|
4
|
+
export type { ObjectDefinition, InterfaceDefinition, UnionDefinition, ScalarDefinition, NamedDefinition, RootDefinition, EnumDefinition, EnumOptions, InterfaceOptions, AbstractOptions, } from "./Definitions.ts";
|
|
5
|
+
export type { Connection, ConnectionArgs, Edge, PageInfo, } from "./Connections.ts";
|
|
6
|
+
export type { ErrorSchema, ResultOptions } from "./Results.ts";
|
|
7
|
+
export { ErrorReporter, type ErrorReport, type ErrorPolicyOptions, } from "./Errors.ts";
|
|
8
|
+
export { ID, JSONValue, DateTime, id, input, defaulted } from "./SchemaTypes.ts";
|
|
9
|
+
export { executor, type Executor, type Execution, type Json, execute, subscribe, type BuiltSchema, type Request, type ExecutionResult, type FormattedExecutionResult, } from "./Execution.ts";
|
|
10
|
+
//# sourceMappingURL=GraphQL.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphQL.d.ts","sourceRoot":"","sources":["../src/GraphQL.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC/E,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,eAAe,CAAA;AAC5E,YAAY,EACV,KAAK,EACL,MAAM,EACN,SAAS,EACT,GAAG,EACH,KAAK,EACL,QAAQ,EACR,YAAY,EACZ,WAAW,EACX,YAAY,GACb,MAAM,iBAAiB,CAAA;AACxB,YAAY,EACV,gBAAgB,EAChB,mBAAmB,EACnB,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,kBAAkB,CAAA;AACzB,YAAY,EACV,UAAU,EACV,cAAc,EACd,IAAI,EACJ,QAAQ,GACT,MAAM,kBAAkB,CAAA;AACzB,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EACL,aAAa,EACb,KAAK,WAAW,EAChB,KAAK,kBAAkB,GACxB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,EACL,QAAQ,EACR,KAAK,QAAQ,EACb,KAAK,SAAS,EACd,KAAK,IAAI,EACT,OAAO,EACP,SAAS,EACT,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,eAAe,EACpB,KAAK,wBAAwB,GAC9B,MAAM,gBAAgB,CAAA"}
|
package/dist/GraphQL.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { createBuilder } from "./Builder.js";
|
|
2
|
+
export { ErrorReporter, } from "./Errors.js";
|
|
3
|
+
export { ID, JSONValue, DateTime, id, input, defaulted } from "./SchemaTypes.js";
|
|
4
|
+
export { executor, execute, subscribe, } from "./Execution.js";
|
|
5
|
+
//# sourceMappingURL=GraphQL.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"GraphQL.js","sourceRoot":"","sources":["../src/GraphQL.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAqC,MAAM,cAAc,CAAA;AAgC/E,OAAO,EACL,aAAa,GAGd,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAChF,OAAO,EACL,QAAQ,EAIR,OAAO,EACP,SAAS,GAKV,MAAM,gBAAgB,CAAA"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { Schema, SchemaAST } from "effect";
|
|
2
|
+
import { type GraphQLNamedType, type GraphQLInputType } from "graphql";
|
|
3
|
+
export declare function structure(ast: SchemaAST.AST): SchemaAST.Objects | undefined;
|
|
4
|
+
/** One mapper per assembled schema: names and AST identity never leak between schemas. */
|
|
5
|
+
export declare class InputTypes {
|
|
6
|
+
private readonly named;
|
|
7
|
+
private readonly add;
|
|
8
|
+
private readonly registered;
|
|
9
|
+
private readonly enums;
|
|
10
|
+
private readonly owners;
|
|
11
|
+
constructor(named: Map<string, GraphQLNamedType>, add: <T extends GraphQLNamedType>(type: T) => T);
|
|
12
|
+
register(ast: SchemaAST.AST, type: GraphQLInputType): void;
|
|
13
|
+
argument(schema: Schema.ConstraintDecoder<unknown, never>, coordinate: string): {
|
|
14
|
+
description?: string | undefined;
|
|
15
|
+
deprecationReason?: string | undefined;
|
|
16
|
+
type: GraphQLInputType;
|
|
17
|
+
defaultValue?: unknown;
|
|
18
|
+
};
|
|
19
|
+
type(ast: SchemaAST.AST, coordinate: string): GraphQLInputType;
|
|
20
|
+
}
|
|
21
|
+
/** Report the schema change needed to accept an explicit clear, without echoing input data. */
|
|
22
|
+
export declare function optionalNullMessage(args: Readonly<Record<string, Schema.ConstraintDecoder<unknown, never>>>, raw: Readonly<Record<string, unknown>>): string | undefined;
|
|
23
|
+
/** DateTime parses to ISO strings; native Schema.Date inputs still decode to Dates. */
|
|
24
|
+
export declare function argumentDecoder(args: Readonly<Record<string, Schema.ConstraintDecoder<unknown, never>>>): (raw: Readonly<Record<string, unknown>>) => {
|
|
25
|
+
readonly [x: string]: unknown;
|
|
26
|
+
};
|
|
27
|
+
//# sourceMappingURL=InputTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputTypes.d.ts","sourceRoot":"","sources":["../src/InputTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAA;AAC1C,OAAO,EAQL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EAItB,MAAM,SAAS,CAAA;AAUhB,wBAAgB,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,GAAG,SAAS,CAK3E;AAED,0FAA0F;AAC1F,qBAAa,UAAU;IAOnB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,GAAG;IAPtB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA6C;IAGxE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAuD;IAC7E,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAuC;IAC9D,YACmB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,EACpC,GAAG,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAC9D;IACJ,QAAQ,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,gBAAgB,QAUlD;IACD,QAAQ,CACN,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,EAChD,UAAU,EAAE,MAAM;;;;;MAenB;IACD,IAAI,CAAC,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAuG7D;CACF;AAED,+FAA+F;AAC/F,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,EACxE,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GACrC,MAAM,GAAG,SAAS,CA0CpB;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,CAAC,SAoC3D,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;;EAE/C"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
import { Schema, SchemaAST } from "effect";
|
|
2
|
+
import { GraphQLBoolean, GraphQLFloat, GraphQLInt, GraphQLList, GraphQLNonNull, GraphQLScalarType, GraphQLString, GraphQLInputObjectType, GraphQLEnumType, isInputType, } from "graphql";
|
|
3
|
+
import { dateTime, jsonScalar } from "./Scalars.js";
|
|
4
|
+
import { invalid, annotations, metadata, representation, unwrap, } from "./SchemaTypes.js";
|
|
5
|
+
export function structure(ast) {
|
|
6
|
+
if (ast._tag === "Objects")
|
|
7
|
+
return ast;
|
|
8
|
+
if (ast._tag === "Declaration" && ast.typeParameters[0]?._tag === "Objects")
|
|
9
|
+
return ast.typeParameters[0];
|
|
10
|
+
return undefined;
|
|
11
|
+
}
|
|
12
|
+
/** One mapper per assembled schema: names and AST identity never leak between schemas. */
|
|
13
|
+
export class InputTypes {
|
|
14
|
+
named;
|
|
15
|
+
add;
|
|
16
|
+
registered = new Map();
|
|
17
|
+
// optionalKey() and annotate() copy Union ASTs but retain their member array.
|
|
18
|
+
// Its identity links model enum schemas without matching unrelated literals by value.
|
|
19
|
+
enums = new Map();
|
|
20
|
+
owners = new Map();
|
|
21
|
+
constructor(named, add) {
|
|
22
|
+
this.named = named;
|
|
23
|
+
this.add = add;
|
|
24
|
+
}
|
|
25
|
+
register(ast, type) {
|
|
26
|
+
if (ast._tag === "Union" && type instanceof GraphQLEnumType) {
|
|
27
|
+
const existing = this.enums.get(ast.types);
|
|
28
|
+
if (existing && existing !== type)
|
|
29
|
+
invalid(`Enum schema is registered as both ${existing.name} and ${type.name}; use a separate Schema.Literals instance for each enum`);
|
|
30
|
+
this.enums.set(ast.types, type);
|
|
31
|
+
}
|
|
32
|
+
this.registered.set(ast, type);
|
|
33
|
+
}
|
|
34
|
+
argument(schema, coordinate) {
|
|
35
|
+
const defaultValue = annotations(schema.ast).graphqlDefault;
|
|
36
|
+
return {
|
|
37
|
+
type: this.type(schema.ast, coordinate),
|
|
38
|
+
...metadata(schema.ast),
|
|
39
|
+
...(defaultValue === undefined
|
|
40
|
+
? {}
|
|
41
|
+
: {
|
|
42
|
+
// defaulted() accepts a codec; the argument map retains its decoder view.
|
|
43
|
+
defaultValue: Schema.encodeUnknownSync(schema)(defaultValue),
|
|
44
|
+
}),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
type(ast, coordinate) {
|
|
48
|
+
const nonnull = !SchemaAST.isOptional(ast);
|
|
49
|
+
const wrap = (type) => nonnull ? new GraphQLNonNull(unwrap(type)) : unwrap(type);
|
|
50
|
+
const registered = this.registered.get(ast);
|
|
51
|
+
if (registered)
|
|
52
|
+
return wrap(registered);
|
|
53
|
+
const ref = annotations(ast).graphqlType ??
|
|
54
|
+
(structure(ast) ? annotations(ast).identifier : undefined);
|
|
55
|
+
if (ref) {
|
|
56
|
+
const existing = this.named.get(ref);
|
|
57
|
+
if (existing) {
|
|
58
|
+
if (!isInputType(existing))
|
|
59
|
+
return invalid(`${coordinate}: ${ref} is not an input type`);
|
|
60
|
+
const owner = this.owners.get(ref);
|
|
61
|
+
if (owner &&
|
|
62
|
+
owner.propertySignatures !== structure(ast)?.propertySignatures)
|
|
63
|
+
return invalid(`Duplicate input name: ${ref}`);
|
|
64
|
+
if (structure(ast) && !(existing instanceof GraphQLInputObjectType))
|
|
65
|
+
return invalid(`Duplicate input name: ${ref}`);
|
|
66
|
+
return wrap(existing);
|
|
67
|
+
}
|
|
68
|
+
if (ref === "DateTime")
|
|
69
|
+
return wrap(this.add(dateTime()));
|
|
70
|
+
if (ref === "JSON")
|
|
71
|
+
return wrap(this.add(jsonScalar()));
|
|
72
|
+
const encoded = structure(ast) ?? SchemaAST.toEncoded(ast);
|
|
73
|
+
if (encoded._tag !== "Objects")
|
|
74
|
+
return invalid(`${coordinate}: unregistered scalar or enum ${ref}`);
|
|
75
|
+
if (encoded.indexSignatures.length)
|
|
76
|
+
return invalid(`${coordinate}: input dictionaries require a JSON scalar`);
|
|
77
|
+
this.owners.set(ref, encoded);
|
|
78
|
+
const type = this.add(new GraphQLInputObjectType({
|
|
79
|
+
name: ref,
|
|
80
|
+
...metadata(ast),
|
|
81
|
+
fields: () => Object.fromEntries(encoded.propertySignatures.map((p) => {
|
|
82
|
+
if (typeof p.name !== "string")
|
|
83
|
+
return invalid(`${coordinate}: input keys must be strings`);
|
|
84
|
+
return [
|
|
85
|
+
p.name,
|
|
86
|
+
this.argument(Schema.make(p.type), `${ref}.${p.name}`),
|
|
87
|
+
];
|
|
88
|
+
})),
|
|
89
|
+
}));
|
|
90
|
+
return wrap(type);
|
|
91
|
+
}
|
|
92
|
+
if (ast._tag === "Union") {
|
|
93
|
+
const enumeration = this.enums.get(ast.types);
|
|
94
|
+
if (enumeration)
|
|
95
|
+
return wrap(enumeration);
|
|
96
|
+
const members = ast.types.filter((t) => t._tag !== "Null" && t._tag !== "Undefined");
|
|
97
|
+
if (members.length !== 1 || members.length === ast.types.length)
|
|
98
|
+
return invalid(`Unregistered literal or union schema at ${coordinate}; register this exact model schema with GraphQL.enum(name, schema) and export the definition in the schema barrel`);
|
|
99
|
+
return unwrap(this.type(members[0], coordinate));
|
|
100
|
+
}
|
|
101
|
+
if (ast._tag === "Declaration" &&
|
|
102
|
+
representation(ast) === "effect/schema/Date") {
|
|
103
|
+
const existing = this.named.get("DateTime");
|
|
104
|
+
return wrap(existing instanceof GraphQLScalarType ? existing : this.add(dateTime()));
|
|
105
|
+
}
|
|
106
|
+
if (ast.encoding)
|
|
107
|
+
return this.type(SchemaAST.toEncoded(ast), coordinate);
|
|
108
|
+
switch (ast._tag) {
|
|
109
|
+
case "String":
|
|
110
|
+
return wrap(GraphQLString);
|
|
111
|
+
case "Number":
|
|
112
|
+
return wrap(ast.checks?.some((c) => representation(c) === "effect/schema/isInt")
|
|
113
|
+
? GraphQLInt
|
|
114
|
+
: GraphQLFloat);
|
|
115
|
+
case "Boolean":
|
|
116
|
+
return wrap(GraphQLBoolean);
|
|
117
|
+
case "Literal":
|
|
118
|
+
return wrap(typeof ast.literal === "string"
|
|
119
|
+
? GraphQLString
|
|
120
|
+
: typeof ast.literal === "boolean"
|
|
121
|
+
? GraphQLBoolean
|
|
122
|
+
: GraphQLFloat);
|
|
123
|
+
case "Arrays":
|
|
124
|
+
if (ast.elements.length || ast.rest.length !== 1)
|
|
125
|
+
return invalid(`Unsupported tuple at ${coordinate}`);
|
|
126
|
+
return wrap(new GraphQLList(this.type(ast.rest[0], coordinate)));
|
|
127
|
+
default:
|
|
128
|
+
return invalid(`Unsupported Schema ${ast._tag} at ${coordinate}; use Schema.Class or name input objects with GraphQL.input`);
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/** Report the schema change needed to accept an explicit clear, without echoing input data. */
|
|
133
|
+
export function optionalNullMessage(args, raw) {
|
|
134
|
+
const visit = (ast, value, path) => {
|
|
135
|
+
if (value === null) {
|
|
136
|
+
const nullable = Schema.is(Schema.toEncoded(Schema.make(ast)))(null);
|
|
137
|
+
return SchemaAST.isOptional(ast) && !nullable
|
|
138
|
+
? `${path}: null is not accepted by Schema.optionalKey(S); omit the field or use Schema.optionalKey(Schema.NullOr(S)) to allow clearing it`
|
|
139
|
+
: undefined;
|
|
140
|
+
}
|
|
141
|
+
if (ast._tag === "Union") {
|
|
142
|
+
for (const member of ast.types) {
|
|
143
|
+
const message = visit(member, value, path);
|
|
144
|
+
if (message)
|
|
145
|
+
return message;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
const object = structure(ast);
|
|
149
|
+
if (object && typeof value === "object" && value !== null) {
|
|
150
|
+
for (const field of object.propertySignatures) {
|
|
151
|
+
const message = visit(field.type, Reflect.get(value, field.name), `${path}.${String(field.name)}`);
|
|
152
|
+
if (message)
|
|
153
|
+
return message;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
if (ast._tag === "Arrays" && ast.rest[0] && Array.isArray(value)) {
|
|
157
|
+
for (const [index, item] of value.entries()) {
|
|
158
|
+
const message = visit(ast.rest[0], item, `${path}[${index}]`);
|
|
159
|
+
if (message)
|
|
160
|
+
return message;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
return undefined;
|
|
164
|
+
};
|
|
165
|
+
for (const [key, schema] of Object.entries(args)) {
|
|
166
|
+
const message = visit(schema.ast, raw[key], key);
|
|
167
|
+
if (message)
|
|
168
|
+
return message;
|
|
169
|
+
}
|
|
170
|
+
return undefined;
|
|
171
|
+
}
|
|
172
|
+
/** DateTime parses to ISO strings; native Schema.Date inputs still decode to Dates. */
|
|
173
|
+
export function argumentDecoder(args) {
|
|
174
|
+
const schema = Schema.Struct(args);
|
|
175
|
+
const decode = Schema.decodeUnknownSync(schema);
|
|
176
|
+
// Walk the wire shape: a Schema.Class itself has an encoding to its object fields.
|
|
177
|
+
const encoded = SchemaAST.toEncoded(schema.ast);
|
|
178
|
+
const prepare = (ast, value) => {
|
|
179
|
+
if (value == null)
|
|
180
|
+
return value;
|
|
181
|
+
if (ast._tag === "Declaration" &&
|
|
182
|
+
representation(ast) === "effect/schema/Date" &&
|
|
183
|
+
typeof value === "string")
|
|
184
|
+
return new Date(value);
|
|
185
|
+
if (ast._tag === "Union") {
|
|
186
|
+
const member = ast.types.find((type) => type._tag !== "Null" && type._tag !== "Undefined");
|
|
187
|
+
return member ? prepare(member, value) : value;
|
|
188
|
+
}
|
|
189
|
+
const object = structure(ast);
|
|
190
|
+
if (object && typeof value === "object") {
|
|
191
|
+
const fields = new Map(object.propertySignatures.map((field) => [field.name, field.type]));
|
|
192
|
+
return Object.fromEntries(Object.entries(value).map(([key, item]) => {
|
|
193
|
+
const field = fields.get(key);
|
|
194
|
+
return [key, field ? prepare(field, item) : item];
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
if (ast._tag === "Arrays" && ast.rest[0] && Array.isArray(value))
|
|
198
|
+
return value.map((item) => prepare(ast.rest[0], item));
|
|
199
|
+
return value;
|
|
200
|
+
};
|
|
201
|
+
return (raw) => decode(prepare(encoded, raw));
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=InputTypes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"InputTypes.js","sourceRoot":"","sources":["../src/InputTypes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import { type PageInfo, type Edge, type Connection } from "./Connections.ts";
|
|
3
|
+
import { type FieldMap, type Contextual } from "./FieldTypes.ts";
|
|
4
|
+
export interface Scalars {
|
|
5
|
+
ID: string;
|
|
6
|
+
String: string;
|
|
7
|
+
Boolean: boolean;
|
|
8
|
+
Int: number;
|
|
9
|
+
Float: number;
|
|
10
|
+
DateTime: Date | string;
|
|
11
|
+
JSON: unknown;
|
|
12
|
+
}
|
|
13
|
+
export type DefinitionKind = "object" | "interface" | "union" | "scalar" | "enum";
|
|
14
|
+
export interface Registration<K extends DefinitionKind, A> {
|
|
15
|
+
readonly kind: K;
|
|
16
|
+
readonly model: A;
|
|
17
|
+
}
|
|
18
|
+
export type Model = {
|
|
19
|
+
readonly Type: unknown;
|
|
20
|
+
};
|
|
21
|
+
export type Tag<M extends Model> = M["Type"] extends {
|
|
22
|
+
readonly _tag: infer N extends string;
|
|
23
|
+
} ? N : never;
|
|
24
|
+
export type InferKind<M extends Model> = M extends Schema.Literals<readonly string[]> ? "enum" : M extends Schema.Union<readonly Schema.Top[]> ? "union" : M["Type"] extends string | number | boolean | Date ? "scalar" : "object";
|
|
25
|
+
/** Tagged models need no name; non-object abstract types specify their kind. */
|
|
26
|
+
export type Register<M extends Model, N extends string = Tag<M>, K extends DefinitionKind = InferKind<M>> = {
|
|
27
|
+
readonly [Name in N]: Registration<K, M["Type"]>;
|
|
28
|
+
};
|
|
29
|
+
export type NamesOfKind<Types, Kind extends DefinitionKind> = Extract<{
|
|
30
|
+
[N in keyof Types]: Types[N] extends Registration<Kind, unknown> ? N : never;
|
|
31
|
+
}[keyof Types], string>;
|
|
32
|
+
export type ModelAt<Types, N> = N extends keyof Types ? Types[N] extends Registration<DefinitionKind, infer A> ? A : never : never;
|
|
33
|
+
export type Values<Types> = {
|
|
34
|
+
readonly [N in keyof Types]: ModelAt<Types, N>;
|
|
35
|
+
} & {
|
|
36
|
+
readonly [N in NamesOfKind<Types, "object" | "interface" | "union"> as `${N}Edge` extends keyof Types ? never : `${N}Edge`]: Edge<ModelAt<Types, N>>;
|
|
37
|
+
} & {
|
|
38
|
+
readonly [N in NamesOfKind<Types, "object" | "interface" | "union"> as `${N}Connection` extends keyof Types ? never : `${N}Connection`]: Connection<ModelAt<Types, N>>;
|
|
39
|
+
} & ("PageInfo" extends keyof Types ? {} : {
|
|
40
|
+
readonly PageInfo: PageInfo;
|
|
41
|
+
});
|
|
42
|
+
export type NameOf<T> = T extends {
|
|
43
|
+
readonly "~kind": DefinitionKind;
|
|
44
|
+
readonly "~name": infer N extends string;
|
|
45
|
+
} ? N : never;
|
|
46
|
+
export type RegistrationIssue<Types, N extends string, A, K extends DefinitionKind> = N extends keyof Types ? Types[N] extends Registration<K, infer Expected> ? [A] extends [Expected] ? [Expected] extends [A] ? unknown : `Registration model mismatch for "${N}"; register the definition's model` : `Registration model mismatch for "${N}"; register the definition's model` : `Registration kind mismatch for "${N}"; expected ${K}` : `Register "${N}": add declare module "../graphql" { interface Types extends Register<typeof ${N}${K extends "object" ? "" : `, "${N}"${K extends "enum" | "scalar" ? "" : `, "${K}"`}`}> {} }`;
|
|
47
|
+
export type RegistrationCheck<Types, N extends string, A, K extends DefinitionKind> = RegistrationIssue<Types, N, A, K> extends infer Issue ? Issue extends string ? {
|
|
48
|
+
readonly error: Issue;
|
|
49
|
+
} : unknown : never;
|
|
50
|
+
export type TaggedModel = Schema.Top & {
|
|
51
|
+
readonly Type: {
|
|
52
|
+
readonly _tag: string;
|
|
53
|
+
};
|
|
54
|
+
readonly fields: {
|
|
55
|
+
readonly _tag: Schema.Constraint;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
export type MemberIssue<Types, M extends Schema.Top> = M extends TaggedModel ? RegistrationIssue<Types, Tag<M>, M["Type"], "object"> extends infer Issue ? Issue extends string ? Issue : never : never : "Union members must be tagged object models; use registered objects and pass { members: [...] } for untagged models";
|
|
59
|
+
export type CheckedMembers<Types, Members extends readonly Schema.Top[]> = MemberIssue<Types, Members[number]> extends infer Issue ? [Issue] extends [never] ? unknown : {
|
|
60
|
+
readonly error: Issue;
|
|
61
|
+
} : never;
|
|
62
|
+
export type Complete<Types, M> = Exclude<keyof Types, NameOf<M[keyof M]>> extends infer Missing ? [Missing] extends [never] ? unknown : `Missing definition: ${Missing & string}; export it through the schema barrel` : never;
|
|
63
|
+
/** Check each definition separately so conflicting contexts cannot widen into a union. */
|
|
64
|
+
export type CompatibleContexts<M, C> = {
|
|
65
|
+
readonly [K in keyof M]: M[K] extends {
|
|
66
|
+
readonly "~kind": string;
|
|
67
|
+
readonly fields: infer F;
|
|
68
|
+
} ? M[K] extends Contextual<C> ? F extends FieldMap<never, C, boolean> ? unknown : "Fields require a different request context; build them with the createBuilder<Types, AppContext>() builder that builds the schema" : "Definition requires a different request context; use definitions from createBuilder<Types, AppContext>() with the schema context" : unknown;
|
|
69
|
+
};
|
|
70
|
+
//# sourceMappingURL=Registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Registry.d.ts","sourceRoot":"","sources":["../src/Registry.ts"],"names":[],"mappings":"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"}
|
package/dist/Registry.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Registry.js","sourceRoot":"","sources":["../src/Registry.ts"],"names":[],"mappings":"AACA,OAAO,EAA6C,MAAM,kBAAkB,CAAA;AAC5E,OAAO,EAAkC,MAAM,iBAAiB,CAAA"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { Stream } from "effect";
|
|
2
|
+
import { type GraphQLFieldConfigArgumentMap, type GraphQLOutputType } from "graphql";
|
|
3
|
+
import { type ErrorPolicy } from "./Errors.ts";
|
|
4
|
+
import { type ArgFields, type Description, type BuildContext, type Field } from "./FieldTypes.ts";
|
|
5
|
+
import { type ErrorSchema, type ResultOptions } from "./Results.ts";
|
|
6
|
+
export interface Resolver {
|
|
7
|
+
readonly type: (context: BuildContext, name: string) => GraphQLOutputType;
|
|
8
|
+
readonly args: ArgFields;
|
|
9
|
+
readonly extraArgs?: GraphQLFieldConfigArgumentMap;
|
|
10
|
+
readonly members: readonly ErrorSchema[];
|
|
11
|
+
readonly call: (source: unknown, args: Readonly<Record<string, unknown>>, decoded: unknown, coordinate: string, context: unknown) => unknown;
|
|
12
|
+
readonly finish: (value: unknown, args: Readonly<Record<string, unknown>>) => unknown;
|
|
13
|
+
}
|
|
14
|
+
export type AnyResolve = (source: unknown, args: unknown, context: unknown) => unknown;
|
|
15
|
+
/** The runtime view of every field input, before type parameters are fixed. */
|
|
16
|
+
export interface AnyConfig extends Description {
|
|
17
|
+
readonly edgeName?: string;
|
|
18
|
+
readonly name?: string;
|
|
19
|
+
readonly args?: ArgFields;
|
|
20
|
+
readonly result?: ResultOptions;
|
|
21
|
+
readonly errors?: readonly ErrorSchema[];
|
|
22
|
+
readonly resolve?: AnyResolve;
|
|
23
|
+
readonly nodes?: AnyResolve;
|
|
24
|
+
readonly authorize?: AnyResolve;
|
|
25
|
+
readonly totalCount?: AnyResolve;
|
|
26
|
+
readonly subscribe?: (source: unknown, args: unknown, context: unknown) => Stream.Stream<unknown, unknown, unknown>;
|
|
27
|
+
}
|
|
28
|
+
export declare const config: (input: AnyResolve | AnyConfig) => AnyConfig;
|
|
29
|
+
export declare const resolverField: <R>(policy: ErrorPolicy, options: AnyConfig, resolver: Resolver) => Field<R>;
|
|
30
|
+
//# sourceMappingURL=Resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Resolver.d.ts","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAEpC,OAAO,EACL,KAAK,6BAA6B,EAClC,KAAK,iBAAiB,EACvB,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,KAAK,WAAW,EAKjB,MAAM,aAAa,CAAA;AAEpB,OAAO,EACL,KAAK,SAAS,EACd,KAAK,WAAW,EAChB,KAAK,YAAY,EAEjB,KAAK,KAAK,EACX,MAAM,iBAAiB,CAAA;AAExB,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,aAAa,EAAa,MAAM,cAAc,CAAA;AAE9E,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,IAAI,EAAE,CAAC,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,KAAK,iBAAiB,CAAA;IACzE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,QAAQ,CAAC,SAAS,CAAC,EAAE,6BAA6B,CAAA;IAClD,QAAQ,CAAC,OAAO,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,QAAQ,CAAC,IAAI,EAAE,CACb,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EACvC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,OAAO,KACb,OAAO,CAAA;IACZ,QAAQ,CAAC,MAAM,EAAE,CACf,KAAK,EAAE,OAAO,EACd,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,KACpC,OAAO,CAAA;CACb;AAED,MAAM,MAAM,UAAU,GAAG,CACvB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,KACb,OAAO,CAAA;AACZ,+EAA+E;AAE/E,MAAM,WAAW,SAAU,SAAQ,WAAW;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAA;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,aAAa,CAAA;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,WAAW,EAAE,CAAA;IACxC,QAAQ,CAAC,OAAO,CAAC,EAAE,UAAU,CAAA;IAC7B,QAAQ,CAAC,KAAK,CAAC,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,UAAU,CAAC,EAAE,UAAU,CAAA;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,CACnB,MAAM,EAAE,OAAO,EACf,IAAI,EAAE,OAAO,EACb,OAAO,EAAE,OAAO,KACb,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAA;CAC9C;AAED,eAAO,MAAM,MAAM,UAAW,UAAU,GAAG,SAAS,KAAG,SACG,CAAA;AAE1D,eAAO,MAAM,aAAa,GAAI,CAAC,UACrB,WAAW,WACV,SAAS,YACR,QAAQ,KACjB,KAAK,CAAC,CAAC,CAsGR,CAAA"}
|
package/dist/Resolver.js
ADDED
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { Effect, Schema, SchemaIssue } from "effect";
|
|
2
|
+
import {} from "graphql";
|
|
3
|
+
import { fieldError, protect, forbidden, resultSource, } from "./Errors.js";
|
|
4
|
+
import { describe } from "./FieldRuntime.js";
|
|
5
|
+
import { fieldRequirements, } from "./FieldTypes.js";
|
|
6
|
+
import { argumentDecoder, optionalNullMessage } from "./InputTypes.js";
|
|
7
|
+
import { errorName } from "./Results.js";
|
|
8
|
+
export const config = (input) => typeof input === "function" ? { resolve: input } : input;
|
|
9
|
+
export const resolverField = (policy, options, resolver) => ({
|
|
10
|
+
kind: "field",
|
|
11
|
+
[fieldRequirements]: undefined,
|
|
12
|
+
build(context, name, coordinate = name) {
|
|
13
|
+
const decode = argumentDecoder(resolver.args);
|
|
14
|
+
return {
|
|
15
|
+
type: resolver.type(context, coordinate),
|
|
16
|
+
...describe(options),
|
|
17
|
+
args: {
|
|
18
|
+
...resolver.extraArgs,
|
|
19
|
+
...Object.fromEntries(Object.entries(resolver.args).map(([key, schema]) => [
|
|
20
|
+
key,
|
|
21
|
+
context.input.argument(schema, `${name}(${key})`),
|
|
22
|
+
])),
|
|
23
|
+
},
|
|
24
|
+
resolve(source, raw, request, info) {
|
|
25
|
+
const coordinate = `${info.parentType.name}.${info.fieldName}`;
|
|
26
|
+
return request.run(protect(() => {
|
|
27
|
+
source = resultSource(source);
|
|
28
|
+
let decoded;
|
|
29
|
+
try {
|
|
30
|
+
decoded = decode(raw);
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (Schema.isSchemaError(error)) {
|
|
34
|
+
const member = resolver.members.find((member) => errorName(member) === "UserInputError");
|
|
35
|
+
if (member) {
|
|
36
|
+
const issue = SchemaIssue.makeFormatterStandardSchemaV1()(error.issue).issues[0];
|
|
37
|
+
const path = issue?.path?.map((key) => typeof key === "object" ? String(key.key) : String(key)) ?? [];
|
|
38
|
+
const field = (path[0] === "input" ? path.slice(1) : path).join(".") ||
|
|
39
|
+
name;
|
|
40
|
+
return Effect.fail(Schema.decodeUnknownSync(member)({
|
|
41
|
+
_tag: "UserInputError",
|
|
42
|
+
message: optionalNullMessage(resolver.args, raw) ??
|
|
43
|
+
issue?.message ??
|
|
44
|
+
"Invalid arguments",
|
|
45
|
+
field,
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
throw fieldError(optionalNullMessage(resolver.args, raw) ??
|
|
50
|
+
"Invalid arguments", {
|
|
51
|
+
code: "BAD_USER_INPUT",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
return Effect.gen(function* () {
|
|
55
|
+
const allowed = yield* protect(() => options.authorize
|
|
56
|
+
? options.authorize(source, decoded, request.context)
|
|
57
|
+
: true, [], policy, { coordinate, phase: "authorize" });
|
|
58
|
+
if (allowed instanceof Error)
|
|
59
|
+
return allowed;
|
|
60
|
+
if (allowed !== true)
|
|
61
|
+
return forbidden(info.fieldName);
|
|
62
|
+
return yield* Effect.suspend(() => {
|
|
63
|
+
const output = resolver.call(source, raw, decoded, coordinate, request.context);
|
|
64
|
+
return Effect.isEffect(output)
|
|
65
|
+
? output
|
|
66
|
+
: Effect.succeed(output);
|
|
67
|
+
}).pipe(Effect.map((value) => value instanceof Error
|
|
68
|
+
? value
|
|
69
|
+
: resolver.finish(value, raw)));
|
|
70
|
+
});
|
|
71
|
+
}, resolver.members, policy, { coordinate, phase: "resolve" }));
|
|
72
|
+
},
|
|
73
|
+
};
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
//# sourceMappingURL=Resolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Resolver.js","sourceRoot":"","sources":["../src/Resolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import { GraphQLObjectType, type GraphQLNamedType } from "graphql";
|
|
3
|
+
import type { BuildContext } from "./FieldTypes.ts";
|
|
4
|
+
import type { InputTypes } from "./InputTypes.ts";
|
|
5
|
+
export interface ErrorSchema extends Schema.ConstraintDecoder<unknown, never> {
|
|
6
|
+
readonly Type: Error & {
|
|
7
|
+
readonly _tag: string;
|
|
8
|
+
};
|
|
9
|
+
readonly fields: Schema.Struct.Fields;
|
|
10
|
+
}
|
|
11
|
+
export type ErrorsOf<E extends readonly ErrorSchema[]> = E[number]["Type"];
|
|
12
|
+
export interface ResultOptions {
|
|
13
|
+
/** Override the generated result name to preserve an existing schema contract. */
|
|
14
|
+
readonly name?: string;
|
|
15
|
+
readonly description?: string;
|
|
16
|
+
}
|
|
17
|
+
export declare const errorMember: unique symbol;
|
|
18
|
+
export declare function errorName(error: ErrorSchema): string;
|
|
19
|
+
export declare function makeResultTypes(inputs: InputTypes, add: <T extends GraphQLNamedType>(type: T) => T, objectType: (name: string, coordinate: string) => GraphQLObjectType, named: ReadonlyMap<string, GraphQLNamedType>): BuildContext["result"];
|
|
20
|
+
//# sourceMappingURL=Results.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Results.d.ts","sourceRoot":"","sources":["../src/Results.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AACpC,OAAO,EACL,iBAAiB,EAIjB,KAAK,gBAAgB,EAEtB,MAAM,SAAS,CAAA;AAChB,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAGjD,MAAM,WAAW,WAAY,SAAQ,MAAM,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,CAAC;IAC3E,QAAQ,CAAC,IAAI,EAAE,KAAK,GAAG;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAA;IAChD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAA;CACtC;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS,SAAS,WAAW,EAAE,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAA;AAE1E,MAAM,WAAW,aAAa;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,eAAO,MAAM,WAAW,eAAiC,CAAA;AAEzD,wBAAgB,SAAS,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAKpD;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,UAAU,EAClB,GAAG,EAAE,CAAC,CAAC,SAAS,gBAAgB,EAAE,IAAI,EAAE,CAAC,KAAK,CAAC,EAC/C,UAAU,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,iBAAiB,EACnE,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,gBAAgB,CAAC,GAC3C,YAAY,CAAC,QAAQ,CAAC,CAuFxB"}
|