@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,139 @@
|
|
|
1
|
+
import type { Schema } from "effect";
|
|
2
|
+
import type { GraphQLScalarType } from "graphql";
|
|
3
|
+
import { GraphQLEnumType } from "graphql";
|
|
4
|
+
import type { RuntimeRef, ConnectionRef, Field } from "./FieldTypes.ts";
|
|
5
|
+
import { type FieldMap, type ResolverFields, type EnumFields, type SubscriptionFields, type CheckedFields, type SourceIssue, type SourceSlot } from "./FieldTypes.ts";
|
|
6
|
+
import { type Description, type Contextual } from "./FieldTypes.ts";
|
|
7
|
+
import { type Tag, type NamesOfKind, type RegistrationCheck, type CheckedMembers } from "./Registry.ts";
|
|
8
|
+
import { type DefinitionKind } from "./Registry.ts";
|
|
9
|
+
import type { AnyResolve, AnyConfig } from "./Resolver.ts";
|
|
10
|
+
export interface ObjectDefinition<N extends string, A, F, O extends ObjectOptions = {}, C = {}> extends Contextual<C> {
|
|
11
|
+
readonly "~kind": "object";
|
|
12
|
+
readonly "~name": N;
|
|
13
|
+
readonly "~model": Schema.Schema<A>;
|
|
14
|
+
readonly "~description"?: string;
|
|
15
|
+
readonly "~implements"?: O["implements"];
|
|
16
|
+
readonly fields: F;
|
|
17
|
+
}
|
|
18
|
+
export interface NamedDefinition<K extends DefinitionKind, N extends string, A> {
|
|
19
|
+
readonly "~kind": K;
|
|
20
|
+
readonly "~name": N;
|
|
21
|
+
readonly "~model": Schema.Schema<A>;
|
|
22
|
+
}
|
|
23
|
+
export interface ScalarDefinition<K extends "scalar" | "enum", N extends string, S extends Schema.Top> extends NamedDefinition<K, N, S["Type"]> {
|
|
24
|
+
readonly "~scalar"?: GraphQLScalarType;
|
|
25
|
+
readonly schema: S["Rebuild"];
|
|
26
|
+
}
|
|
27
|
+
export interface InterfaceDefinition<N extends string, A, F, C = {}> extends NamedDefinition<"interface", N, A>, Contextual<C> {
|
|
28
|
+
readonly "~description"?: string;
|
|
29
|
+
readonly "~resolveType"?: (value: A) => string | null;
|
|
30
|
+
readonly fields: F;
|
|
31
|
+
}
|
|
32
|
+
export interface ObjectOptions extends Description {
|
|
33
|
+
readonly implements?: readonly string[];
|
|
34
|
+
}
|
|
35
|
+
export interface AbstractOptions<A, Members extends readonly string[]> extends Description {
|
|
36
|
+
readonly members: Members;
|
|
37
|
+
readonly resolveType?: (value: A) => NoInfer<Members[number]> | null;
|
|
38
|
+
}
|
|
39
|
+
export interface UnionDefinition<N extends string, A, Members extends readonly string[]> extends NamedDefinition<"union", N, A> {
|
|
40
|
+
readonly options: AbstractOptions<A, Members>;
|
|
41
|
+
}
|
|
42
|
+
export interface RootDefinition<K extends "query" | "mutation" | "subscription", F, C = {}> extends Contextual<C> {
|
|
43
|
+
readonly "~kind": K;
|
|
44
|
+
readonly fields: F;
|
|
45
|
+
}
|
|
46
|
+
/** Only the literal tag is read for implicit naming; output fields never inspect model ASTs. */
|
|
47
|
+
export declare function tagName(model: {
|
|
48
|
+
readonly fields?: {
|
|
49
|
+
readonly _tag?: Schema.Constraint;
|
|
50
|
+
};
|
|
51
|
+
}): string;
|
|
52
|
+
export interface InterfaceOptions<Types, A> extends Description {
|
|
53
|
+
readonly resolveType?: (value: A) => NamesOfKind<Types, "object"> | null;
|
|
54
|
+
}
|
|
55
|
+
export type EnumValue<A> = A | ({
|
|
56
|
+
readonly value: A;
|
|
57
|
+
} & Description);
|
|
58
|
+
export interface EnumOptions<A> extends Description {
|
|
59
|
+
readonly values: Readonly<Record<string, EnumValue<A>>>;
|
|
60
|
+
}
|
|
61
|
+
type MappedValues<V> = V[keyof V] extends infer A ? A extends {
|
|
62
|
+
readonly value: infer Value;
|
|
63
|
+
} ? Value : A : never;
|
|
64
|
+
type CheckedEnumValues<A, V> = {
|
|
65
|
+
readonly [K in keyof V]: [MappedValues<Pick<V, K>>] extends [A] ? unknown : "Use a literal from the registered enum model";
|
|
66
|
+
};
|
|
67
|
+
export type CompleteEnum<A, V> = [Exclude<A, MappedValues<V>>] extends [never] ? unknown : {
|
|
68
|
+
readonly error: `Missing enum values: ${Exclude<A, MappedValues<V>> & string}; map every model literal in values`;
|
|
69
|
+
};
|
|
70
|
+
export interface EnumDefinition<N extends string, S extends Schema.Top> extends ScalarDefinition<"enum", N, S> {
|
|
71
|
+
readonly "~enum"?: EnumOptions<S["Type"]>;
|
|
72
|
+
}
|
|
73
|
+
/** Explicit member names are checked against the corresponding model, in order. */
|
|
74
|
+
type NamedMembers<Types, M extends readonly Schema.Top[], Names extends readonly string[]> = Names["length"] extends M["length"] ? {
|
|
75
|
+
readonly [I in keyof Names]: I extends keyof M ? Names[I] & RegistrationCheck<Types, Names[I], M[I]["Type"], "object"> : never;
|
|
76
|
+
} : {
|
|
77
|
+
readonly error: "Provide one registered object name per union model, in the same order";
|
|
78
|
+
};
|
|
79
|
+
type Implemented<O> = O extends {
|
|
80
|
+
readonly implements: readonly (infer I extends string)[];
|
|
81
|
+
} ? I : never;
|
|
82
|
+
/** Interface fields are known when the barrel is assembled, not at model registration. */
|
|
83
|
+
export type CheckedInterfaces<Types, M> = {
|
|
84
|
+
readonly [K in keyof M]: M[K] extends ObjectDefinition<infer N, infer A, infer F, infer O, infer _C> ? {
|
|
85
|
+
readonly [I in Implemented<O>]: Extract<M[keyof M], {
|
|
86
|
+
readonly "~kind": "interface";
|
|
87
|
+
readonly "~name": I;
|
|
88
|
+
}> extends {
|
|
89
|
+
readonly fields: infer IF;
|
|
90
|
+
} ? {
|
|
91
|
+
readonly [P in Exclude<keyof IF, keyof F>]: [
|
|
92
|
+
SourceIssue<Types, A, P, IF[P]>
|
|
93
|
+
] extends [never] ? IF[P] extends SourceSlot<A> ? never : P : P;
|
|
94
|
+
}[Exclude<keyof IF, keyof F>] extends infer Bad ? [Bad] extends [never] ? never : `${N}.${Bad & string}: cannot inherit ${I} field; supply a compatible source property or override with a resolver` : never : never;
|
|
95
|
+
}[Implemented<O>] extends infer Issue ? [Issue] extends [never] ? unknown : {
|
|
96
|
+
readonly error: Issue;
|
|
97
|
+
} : never : unknown;
|
|
98
|
+
};
|
|
99
|
+
export declare function mappedEnumeration(name: string, schema: Schema.Schema<string>, options: EnumOptions<string>): GraphQLEnumType;
|
|
100
|
+
export interface DefinitionBuilder<Types, G, C> {
|
|
101
|
+
object<M extends Schema.Schema<{
|
|
102
|
+
readonly _tag: string;
|
|
103
|
+
}> & {
|
|
104
|
+
readonly fields: {
|
|
105
|
+
readonly _tag: Schema.Constraint;
|
|
106
|
+
};
|
|
107
|
+
}, const F extends FieldMap<M["Type"], C>>(model: M & RegistrationCheck<Types, Tag<M>, NoInfer<M["Type"]>, "object">, fields: F & CheckedFields<Types, Tag<M>, M["Type"], NoInfer<F>>): ObjectDefinition<Tag<M>, M["Type"], F, {}, C>;
|
|
108
|
+
object<M extends Schema.Schema<{
|
|
109
|
+
readonly _tag: string;
|
|
110
|
+
}> & {
|
|
111
|
+
readonly fields: {
|
|
112
|
+
readonly _tag: Schema.Constraint;
|
|
113
|
+
};
|
|
114
|
+
}, const F extends FieldMap<M["Type"], C>, const O extends ObjectOptions & {
|
|
115
|
+
readonly implements?: readonly NamesOfKind<Types, "interface">[];
|
|
116
|
+
}>(model: M & RegistrationCheck<Types, Tag<M>, NoInfer<M["Type"]>, "object">, options: O, fields: F & CheckedFields<Types, Tag<M>, M["Type"], NoInfer<F>>): ObjectDefinition<Tag<M>, M["Type"], F, O, C>;
|
|
117
|
+
object<const N extends string, A, const F extends FieldMap<A, C>, const O extends ObjectOptions & {
|
|
118
|
+
readonly implements?: readonly NamesOfKind<Types, "interface">[];
|
|
119
|
+
} = {}>(name: N & RegistrationCheck<Types, N, NoInfer<A>, "object">, model: Schema.Schema<A>, options: O, fields: F & CheckedFields<Types, N, A, NoInfer<F>>): ObjectDefinition<N, A, F, O, C>;
|
|
120
|
+
interface<const N extends string, A, const F extends FieldMap<A, C>>(name: N & RegistrationCheck<Types, N, NoInfer<A>, "interface">, model: Schema.Schema<A>, fields: F & CheckedFields<Types, N, A, NoInfer<F>>): InterfaceDefinition<N, A, F, C>;
|
|
121
|
+
interface<const N extends string, A, const F extends FieldMap<A, C>>(name: N & RegistrationCheck<Types, N, NoInfer<A>, "interface">, model: Schema.Schema<A>, options: InterfaceOptions<Types, NoInfer<A>>, fields: F & CheckedFields<Types, N, A, NoInfer<F>>): InterfaceDefinition<N, A, F, C>;
|
|
122
|
+
union<const N extends string, S extends Schema.Union<readonly Schema.Top[]>>(name: N & RegistrationCheck<Types, N, NoInfer<S["Type"]>, "union">, model: S & CheckedMembers<Types, NoInfer<S["members"]>>, options?: Description & {
|
|
123
|
+
readonly resolveType?: (value: S["Type"]) => NoInfer<Tag<S["members"][number]>> | null;
|
|
124
|
+
}): UnionDefinition<N, S["Type"], readonly Tag<S["members"][number]>[]>;
|
|
125
|
+
union<const N extends string, S extends Schema.Union<readonly Schema.Top[]>, const Members extends readonly string[]>(name: N & RegistrationCheck<Types, N, NoInfer<S["Type"]>, "union">, model: S, options: AbstractOptions<NoInfer<S["Type"]>, Members> & {
|
|
126
|
+
readonly members: Members & NamedMembers<Types, NoInfer<S["members"]>, Members>;
|
|
127
|
+
}): UnionDefinition<N, S["Type"], Members>;
|
|
128
|
+
scalar<const N extends string, S extends Schema.Top & Schema.Codec<unknown, unknown>>(name: N & RegistrationCheck<Types, N, NoInfer<S["Type"]>, "scalar">, codec: S, scalarType?: GraphQLScalarType): ScalarDefinition<"scalar", N, S>;
|
|
129
|
+
enum<const N extends string, S extends Schema.Literals<readonly string[]>>(name: N & RegistrationCheck<Types, N, NoInfer<S["Type"]>, "enum">, schema: S): EnumDefinition<N, S>;
|
|
130
|
+
enum<const N extends string, S extends Schema.Literals<readonly string[]>, const V extends Readonly<Record<string, EnumValue<string>>>>(name: N & RegistrationCheck<Types, N, NoInfer<S["Type"]>, "enum">, schema: S, options: Description & {
|
|
131
|
+
readonly values: V & CompleteEnum<NoInfer<S["Type"]>, V> & CheckedEnumValues<NoInfer<S["Type"]>, V>;
|
|
132
|
+
}): EnumDefinition<N, S>;
|
|
133
|
+
readonly queryField: EnumFields<Types, C, "query"> & ResolverFields<Types, G, C, "query">;
|
|
134
|
+
readonly mutationField: EnumFields<Types, C, "mutation"> & ResolverFields<Types, G, C, "mutation">;
|
|
135
|
+
readonly subscriptionField: SubscriptionFields<Types, G, C, "subscription">;
|
|
136
|
+
}
|
|
137
|
+
export declare function makeDefinitions<Types, G, C>(rootField: (ref: RuntimeRef | ConnectionRef<string>, input: AnyResolve | AnyConfig) => Field<unknown>): DefinitionBuilder<Types, G, C>;
|
|
138
|
+
export {};
|
|
139
|
+
//# sourceMappingURL=Definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Definitions.d.ts","sourceRoot":"","sources":["../src/Definitions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { GraphQLEnumType } from "graphql";
|
|
2
|
+
import {} from "./Assembly.js";
|
|
3
|
+
import {} from "./FieldTypes.js";
|
|
4
|
+
import {} from "./FieldTypes.js";
|
|
5
|
+
import {} from "./Registry.js";
|
|
6
|
+
import {} from "./Registry.js";
|
|
7
|
+
import { input } from "./SchemaTypes.js";
|
|
8
|
+
import { invalid, metadata } from "./SchemaTypes.js";
|
|
9
|
+
/** Only the literal tag is read for implicit naming; output fields never inspect model ASTs. */
|
|
10
|
+
export function tagName(model) {
|
|
11
|
+
const tag = model.fields?._tag?.ast;
|
|
12
|
+
return tag?._tag === "Literal" && typeof tag.literal === "string"
|
|
13
|
+
? tag.literal
|
|
14
|
+
: invalid("Object model needs a literal _tag; use an explicit name");
|
|
15
|
+
}
|
|
16
|
+
export function mappedEnumeration(name, schema, options) {
|
|
17
|
+
const ast = schema.ast;
|
|
18
|
+
const literals = (ast._tag === "Union" ? ast.types : [ast]).map((value) => value._tag === "Literal" && typeof value.literal === "string"
|
|
19
|
+
? value.literal
|
|
20
|
+
: invalid(`${name}: enums require string Schema.Literals`));
|
|
21
|
+
const values = Object.entries(options.values).map(([key, entry]) => {
|
|
22
|
+
const config = typeof entry === "string" ? { value: entry } : entry;
|
|
23
|
+
if (!literals.includes(config.value))
|
|
24
|
+
invalid(`${name}.${key}: value must be a model literal`);
|
|
25
|
+
return [key, config];
|
|
26
|
+
});
|
|
27
|
+
if (literals.some((literal) => !values.some(([, config]) => config.value === literal)))
|
|
28
|
+
invalid(`${name}: map every model literal in values`);
|
|
29
|
+
// Aliases are ambiguous on serialization: require one external name per internal value.
|
|
30
|
+
if (new Set(values.map(([, config]) => config.value)).size !== values.length)
|
|
31
|
+
invalid(`${name}: enum values must be unique; use one name per model literal`);
|
|
32
|
+
return new GraphQLEnumType({
|
|
33
|
+
name,
|
|
34
|
+
...metadata(ast),
|
|
35
|
+
...options,
|
|
36
|
+
values: Object.fromEntries(values),
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
export function makeDefinitions(rootField) {
|
|
40
|
+
const object = (...args) => {
|
|
41
|
+
const explicit = typeof args[0] === "string";
|
|
42
|
+
// Public overloads validate each positional argument before this boundary.
|
|
43
|
+
const model = (explicit ? args[1] : args[0]);
|
|
44
|
+
const name = explicit ? args[0] : tagName(model);
|
|
45
|
+
const rest = args.slice(explicit ? 2 : 1);
|
|
46
|
+
const options = (rest.length === 1 ? {} : rest[0]);
|
|
47
|
+
return {
|
|
48
|
+
"~kind": "object",
|
|
49
|
+
"~name": name,
|
|
50
|
+
"~model": model,
|
|
51
|
+
"~implements": options.implements ?? [],
|
|
52
|
+
...(options.description === undefined
|
|
53
|
+
? {}
|
|
54
|
+
: { "~description": options.description }),
|
|
55
|
+
fields: rest.at(-1),
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
// The overloads enforce registration and field contracts before this erased
|
|
59
|
+
// construction boundary; the runtime stores their validated metadata unchanged.
|
|
60
|
+
return {
|
|
61
|
+
object,
|
|
62
|
+
interface: (name, model, ...rest) => {
|
|
63
|
+
const [options, fieldMap] = rest.length === 1 ? [undefined, rest[0]] : rest;
|
|
64
|
+
return {
|
|
65
|
+
"~kind": "interface",
|
|
66
|
+
"~name": name,
|
|
67
|
+
"~model": model,
|
|
68
|
+
"~description": options?.description,
|
|
69
|
+
"~resolveType": options?.resolveType,
|
|
70
|
+
fields: fieldMap,
|
|
71
|
+
};
|
|
72
|
+
},
|
|
73
|
+
union: (name, model, options) => ({
|
|
74
|
+
"~kind": "union",
|
|
75
|
+
"~name": name,
|
|
76
|
+
"~model": model,
|
|
77
|
+
options: {
|
|
78
|
+
...options,
|
|
79
|
+
members: options?.members ??
|
|
80
|
+
model.members.map((member) =>
|
|
81
|
+
// The implicit-members overload requires tagged models; explicit members bypass this branch.
|
|
82
|
+
tagName(member)),
|
|
83
|
+
},
|
|
84
|
+
}),
|
|
85
|
+
scalar: (name, model, scalarType) => {
|
|
86
|
+
if (scalarType && scalarType.name !== name)
|
|
87
|
+
invalid(`Scalar name ${scalarType.name} does not match ${name}; register the scalar under its existing name`);
|
|
88
|
+
return {
|
|
89
|
+
"~kind": "scalar",
|
|
90
|
+
"~name": name,
|
|
91
|
+
"~model": model,
|
|
92
|
+
schema: input(name, model),
|
|
93
|
+
"~scalar": scalarType,
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
enum: (name, model, options) => ({
|
|
97
|
+
"~enum": options,
|
|
98
|
+
"~kind": "enum",
|
|
99
|
+
"~name": name,
|
|
100
|
+
"~model": model,
|
|
101
|
+
schema: input(name, model),
|
|
102
|
+
}),
|
|
103
|
+
queryField: (name, ref, input) => ({
|
|
104
|
+
"~kind": "query",
|
|
105
|
+
fields: { [name]: rootField(ref, input) },
|
|
106
|
+
}),
|
|
107
|
+
mutationField: (name, ref, input) => ({
|
|
108
|
+
"~kind": "mutation",
|
|
109
|
+
fields: { [name]: rootField(ref, input) },
|
|
110
|
+
}),
|
|
111
|
+
subscriptionField: (name, ref, input) => ({
|
|
112
|
+
"~kind": "subscription",
|
|
113
|
+
fields: { [name]: rootField(ref, input) },
|
|
114
|
+
}),
|
|
115
|
+
};
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=Definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Definitions.js","sourceRoot":"","sources":["../src/Definitions.ts"],"names":[],"mappings":"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"}
|
package/dist/Errors.d.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Cause, Context, Effect } from "effect";
|
|
2
|
+
import { GraphQLError } from "graphql";
|
|
3
|
+
import { type ErrorSchema, type ErrorsOf } from "./Results.ts";
|
|
4
|
+
export interface ErrorPolicyOptions<I extends readonly ErrorSchema[], P extends readonly ErrorSchema[]> {
|
|
5
|
+
/** Infrastructure failures are always masked. */
|
|
6
|
+
readonly internal?: I;
|
|
7
|
+
/** Only declared fields of these errors may reach clients. */
|
|
8
|
+
readonly public?: P;
|
|
9
|
+
/** Preserve an existing API's codes; unspecified tags use their own name. */
|
|
10
|
+
readonly publicCodes?: [P[number]] extends [never] ? never : Partial<Record<ErrorsOf<NoInfer<P>>["_tag"], string>>;
|
|
11
|
+
}
|
|
12
|
+
export interface ErrorPolicy {
|
|
13
|
+
readonly internal: readonly ErrorSchema[];
|
|
14
|
+
readonly public: readonly ErrorSchema[];
|
|
15
|
+
readonly publicCodes?: Readonly<Record<string, string>>;
|
|
16
|
+
}
|
|
17
|
+
export declare const defaultErrorPolicy: ErrorPolicy;
|
|
18
|
+
export interface ErrorReport {
|
|
19
|
+
/** Unmodified Effect cause, including defects and tracing annotations. */
|
|
20
|
+
readonly cause: Cause.Cause<unknown>;
|
|
21
|
+
readonly coordinate: string;
|
|
22
|
+
readonly phase: "resolve" | "authorize" | "subscribe" | "execute";
|
|
23
|
+
}
|
|
24
|
+
declare const ErrorReporter_base: Context.ServiceClass<ErrorReporter, "@model-ts/graphql/ErrorReporter", {
|
|
25
|
+
readonly report: (event: ErrorReport) => Effect.Effect<void>;
|
|
26
|
+
}>;
|
|
27
|
+
/** Optional per-runtime telemetry. Capture dependencies when constructing its layer. */
|
|
28
|
+
export declare class ErrorReporter extends ErrorReporter_base {
|
|
29
|
+
}
|
|
30
|
+
export declare const isBoundaryError: (error: unknown) => boolean;
|
|
31
|
+
export declare const fieldError: (message: string, extensions: Readonly<Record<string, unknown>>, cause?: Cause.Cause<unknown>) => GraphQLError;
|
|
32
|
+
export declare const forbidden: (field: string) => GraphQLError;
|
|
33
|
+
export declare const resultSource: (value: unknown) => unknown;
|
|
34
|
+
export declare const recoverCause: (cause: Cause.Cause<unknown>, members: readonly ErrorSchema[], policy: ErrorPolicy, location: Omit<ErrorReport, "cause">) => Effect.Effect<unknown>;
|
|
35
|
+
/** Handles both synchronous throws and Effect failures, before the Promise bridge. */
|
|
36
|
+
export declare const protect: (evaluate: () => unknown, members: readonly ErrorSchema[], policy: ErrorPolicy, location: Omit<ErrorReport, "cause">) => Effect.Effect<unknown, never, unknown>;
|
|
37
|
+
export declare function declaredFields(schema: ErrorSchema, error: object): Record<string, unknown>;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=Errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.d.ts","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAkB,MAAM,QAAQ,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,EACL,KAAK,WAAW,EAChB,KAAK,QAAQ,EAGd,MAAM,cAAc,CAAA;AAErB,MAAM,WAAW,kBAAkB,CACjC,CAAC,SAAS,SAAS,WAAW,EAAE,EAChC,CAAC,SAAS,SAAS,WAAW,EAAE;IAEhC,iDAAiD;IACjD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IACrB,8DAA8D;IAC9D,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACnB,6EAA6E;IAC7E,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,GAC9C,KAAK,GACL,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,WAAW,EAAE,CAAA;IACzC,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;IACvC,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CACxD;AAED,eAAO,MAAM,kBAAkB,EAAE,WAA0C,CAAA;AAE3E,MAAM,WAAW,WAAW;IAC1B,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpC,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAA;CAClE;;qBAMoB,CAAC,KAAK,EAAE,WAAW,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;;AAJhE,wFAAwF;AACxF,qBAAa,aAAc,SAAQ,kBAKG;CAAG;AAKzC,eAAO,MAAM,eAAe,UAAW,OAAO,KAAG,OACI,CAAA;AAErD,eAAO,MAAM,UAAU,YACZ,MAAM,cACH,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,UACrC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,KAC3B,YAOF,CAAA;AAED,eAAO,MAAM,SAAS,UAAW,MAAM,KAAG,YAGtC,CAAA;AAKJ,eAAO,MAAM,YAAY,UAAW,OAAO,KAAG,OAGnC,CAAA;AAiCX,eAAO,MAAM,YAAY,UAChB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,WAClB,SAAS,WAAW,EAAE,UACvB,WAAW,YACT,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,KACnC,MAAM,CAAC,MAAM,CAAC,OAAO,CAyBpB,CAAA;AAEJ,sFAAsF;AACtF,eAAO,MAAM,OAAO,aACR,MAAM,OAAO,WACd,SAAS,WAAW,EAAE,UACvB,WAAW,YACT,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,KACnC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CA8BrC,CAAA;AAEH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,WAAW,EACnB,KAAK,EAAE,MAAM,GACZ,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAKzB"}
|
package/dist/Errors.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { Cause, Context, Effect, Option, Schema } from "effect";
|
|
2
|
+
import { GraphQLError } from "graphql";
|
|
3
|
+
import { errorMember, errorName, } from "./Results.js";
|
|
4
|
+
export const defaultErrorPolicy = { internal: [], public: [] };
|
|
5
|
+
/** Optional per-runtime telemetry. Capture dependencies when constructing its layer. */
|
|
6
|
+
export class ErrorReporter extends Context.Service()("@model-ts/graphql/ErrorReporter") {
|
|
7
|
+
}
|
|
8
|
+
// A GraphQLError from user code is not permission to disclose its message.
|
|
9
|
+
// Only errors created by our boundaries, or declared in a policy, are trusted.
|
|
10
|
+
const trusted = new WeakSet();
|
|
11
|
+
export const isBoundaryError = (error) => error instanceof GraphQLError && trusted.has(error);
|
|
12
|
+
export const fieldError = (message, extensions, cause) => {
|
|
13
|
+
const error = new GraphQLError(message, {
|
|
14
|
+
...(cause ? { originalError: new Error(message, { cause }) } : {}),
|
|
15
|
+
extensions,
|
|
16
|
+
});
|
|
17
|
+
trusted.add(error);
|
|
18
|
+
return error;
|
|
19
|
+
};
|
|
20
|
+
export const forbidden = (field) => fieldError(`You don't have permission to access field "${field}"`, {
|
|
21
|
+
code: "FORBIDDEN",
|
|
22
|
+
});
|
|
23
|
+
// Wrappers are not Errors (graphql-js treats Error values as failures). Keep the
|
|
24
|
+
// class instance private while the enumerable projection exposes only declared fields.
|
|
25
|
+
const resultInstances = new WeakMap();
|
|
26
|
+
export const resultSource = (value) => typeof value === "object" && value !== null
|
|
27
|
+
? (resultInstances.get(value) ?? value)
|
|
28
|
+
: value;
|
|
29
|
+
/** Maps declared typed failures; undefined means the failure must be masked. */
|
|
30
|
+
function visibleFailure(error, members, policy) {
|
|
31
|
+
if (isBoundaryError(error))
|
|
32
|
+
return error;
|
|
33
|
+
if (typeof error !== "object" || error === null)
|
|
34
|
+
return undefined;
|
|
35
|
+
const matches = (schema) => Schema.is(schema)(error);
|
|
36
|
+
if (policy.internal.some(matches))
|
|
37
|
+
return undefined;
|
|
38
|
+
const member = members.find(matches);
|
|
39
|
+
if (member) {
|
|
40
|
+
const wrapper = {
|
|
41
|
+
...declaredFields(member, error),
|
|
42
|
+
[errorMember]: errorName(member),
|
|
43
|
+
};
|
|
44
|
+
resultInstances.set(wrapper, error);
|
|
45
|
+
return wrapper;
|
|
46
|
+
}
|
|
47
|
+
const visible = policy.public.find(matches);
|
|
48
|
+
if (visible) {
|
|
49
|
+
const { _tag, message, ...extensions } = declaredFields(visible, error);
|
|
50
|
+
const tag = errorName(visible);
|
|
51
|
+
return fieldError(String(message ?? tag), {
|
|
52
|
+
...extensions,
|
|
53
|
+
code: policy.publicCodes?.[tag] ?? tag,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
return undefined;
|
|
57
|
+
}
|
|
58
|
+
export const recoverCause = (cause, members, policy, location) => Effect.gen(function* () {
|
|
59
|
+
// Do not turn cancellation into an error response or a telemetry incident.
|
|
60
|
+
if (Cause.hasInterruptsOnly(cause))
|
|
61
|
+
return yield* Effect.interrupt;
|
|
62
|
+
const reason = cause.reasons.length === 1 ? cause.reasons[0] : undefined;
|
|
63
|
+
const original = reason?._tag === "Fail"
|
|
64
|
+
? reason.error
|
|
65
|
+
: reason?._tag === "Die"
|
|
66
|
+
? reason.defect
|
|
67
|
+
: undefined;
|
|
68
|
+
const visible = visibleFailure(original, members, policy);
|
|
69
|
+
if (visible !== undefined)
|
|
70
|
+
return visible;
|
|
71
|
+
const reporter = yield* Effect.serviceOption(ErrorReporter);
|
|
72
|
+
if (Option.isSome(reporter)) {
|
|
73
|
+
// Telemetry must never replace the original failure or disclose its own defect.
|
|
74
|
+
yield* Effect.suspend(() => reporter.value.report({ cause, ...location })).pipe(Effect.catchCause(() => Effect.void));
|
|
75
|
+
}
|
|
76
|
+
return fieldError("Internal server error", { code: "INTERNAL_SERVER_ERROR" }, cause);
|
|
77
|
+
});
|
|
78
|
+
/** Handles both synchronous throws and Effect failures, before the Promise bridge. */
|
|
79
|
+
export const protect = (evaluate, members, policy, location) => Effect.suspend(() => {
|
|
80
|
+
const output = evaluate();
|
|
81
|
+
if (output instanceof Error)
|
|
82
|
+
return Effect.fail(output);
|
|
83
|
+
return Effect.isEffect(output) ? output : Effect.succeed(output);
|
|
84
|
+
}).pipe(Effect.flatMap((value) => {
|
|
85
|
+
if (value instanceof Error)
|
|
86
|
+
return Effect.fail(value);
|
|
87
|
+
// JavaScript callers can bypass the type contract. A truthy Promise must
|
|
88
|
+
// never authorize a request or run outside the Effect cancellation boundary.
|
|
89
|
+
if (value !== null &&
|
|
90
|
+
(typeof value === "object" || typeof value === "function") &&
|
|
91
|
+
"then" in value &&
|
|
92
|
+
typeof value.then === "function") {
|
|
93
|
+
return Effect.die(new Error("Return a value or Effect; wrap Promise APIs with Effect.tryPromise"));
|
|
94
|
+
}
|
|
95
|
+
return Effect.succeed(value);
|
|
96
|
+
}), Effect.catchCause((cause) => recoverCause(cause, members, policy, location)), Effect.withSpan(`GraphQL.${location.phase}`, {
|
|
97
|
+
attributes: { "graphql.field": location.coordinate },
|
|
98
|
+
}));
|
|
99
|
+
export function declaredFields(schema, error) {
|
|
100
|
+
// Error.message can be non-enumerable; never copy stack/cause/incidental fields.
|
|
101
|
+
return Object.fromEntries(Object.keys(schema.fields).map((key) => [key, Reflect.get(error, key)]));
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=Errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Errors.js","sourceRoot":"","sources":["../src/Errors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { type FormattedExecutionResult } from "./Formatting.ts";
|
|
2
|
+
export type { FormattedExecutionResult } from "./Formatting.ts";
|
|
3
|
+
import { Effect, Stream } from "effect";
|
|
4
|
+
import { type GraphQLSchema, type DocumentNode, type ExecutionResult as GraphQLExecutionResult } from "graphql";
|
|
5
|
+
import { type ErrorPolicy } from "./Errors.ts";
|
|
6
|
+
import { type Contextual } from "./FieldTypes.ts";
|
|
7
|
+
export declare const schemaRequirements: unique symbol;
|
|
8
|
+
export declare const schemaErrorPolicy: unique symbol;
|
|
9
|
+
export interface BuiltSchema<out R, C = {}> extends Contextual<C> {
|
|
10
|
+
readonly schema: GraphQLSchema;
|
|
11
|
+
readonly [schemaRequirements]: R | undefined;
|
|
12
|
+
readonly [schemaErrorPolicy]?: ErrorPolicy;
|
|
13
|
+
}
|
|
14
|
+
export type ExecutionResult = GraphQLExecutionResult<{
|
|
15
|
+
readonly [key: string]: unknown;
|
|
16
|
+
}, {
|
|
17
|
+
readonly [key: string]: unknown;
|
|
18
|
+
}>;
|
|
19
|
+
export interface Request {
|
|
20
|
+
readonly source: string;
|
|
21
|
+
readonly variableValues?: {
|
|
22
|
+
readonly [name: string]: unknown;
|
|
23
|
+
};
|
|
24
|
+
readonly operationName?: string;
|
|
25
|
+
}
|
|
26
|
+
export type Json = null | boolean | number | string | readonly Json[] | {
|
|
27
|
+
readonly [key: string]: Json;
|
|
28
|
+
};
|
|
29
|
+
/** Structural transport contract: no dependency on a particular HTTP/WS adapter. */
|
|
30
|
+
export interface Execution<C> {
|
|
31
|
+
readonly document: DocumentNode;
|
|
32
|
+
readonly request: {
|
|
33
|
+
readonly query: string;
|
|
34
|
+
readonly variables?: Record<string, Json> | null;
|
|
35
|
+
readonly operationName?: string | null;
|
|
36
|
+
readonly extensions?: Record<string, Json> | null;
|
|
37
|
+
};
|
|
38
|
+
readonly context: C;
|
|
39
|
+
}
|
|
40
|
+
export interface Executor<C, E = never, R = never> {
|
|
41
|
+
/** Standard schema validation runs here so scalar failures use the executor error policy. */
|
|
42
|
+
readonly validation: "executor";
|
|
43
|
+
readonly schema: GraphQLSchema;
|
|
44
|
+
readonly execute: (input: Execution<C>) => Effect.Effect<FormattedExecutionResult, E, R>;
|
|
45
|
+
readonly subscribe: (input: Execution<C>) => Stream.Stream<FormattedExecutionResult, E, R>;
|
|
46
|
+
}
|
|
47
|
+
/** Required when the builder declares a context type; optional for builders without one. */
|
|
48
|
+
export type ContextArgument<C> = {} extends C ? [context?: C] : [context: C];
|
|
49
|
+
export declare const execute: <R, C>(built: BuiltSchema<R, C>, request: Request, ...context: ContextArgument<NoInfer<C>>) => Effect.Effect<ExecutionResult, never, R>;
|
|
50
|
+
export declare const subscribe: <R, C>(built: BuiltSchema<R, C>, request: Request, ...context: ContextArgument<NoInfer<C>>) => Stream.Stream<ExecutionResult, never, R>;
|
|
51
|
+
export declare const executor: <R, C>(built: BuiltSchema<R, C>) => Executor<C, never, R>;
|
|
52
|
+
//# sourceMappingURL=Execution.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Execution.d.ts","sourceRoot":"","sources":["../src/Execution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAE7E,YAAY,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAA;AAE/D,OAAO,EAAS,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC9C,OAAO,EAEL,KAAK,aAAa,EAClB,KAAK,YAAY,EAOjB,KAAK,eAAe,IAAI,sBAAsB,EAC/C,MAAM,SAAS,CAAA;AAChB,OAAO,EACL,KAAK,WAAW,EAIjB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAuB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAWtE,eAAO,MAAM,kBAAkB,EAAE,OAAO,MAEvC,CAAA;AACD,eAAO,MAAM,iBAAiB,EAAE,OAAO,MAEtC,CAAA;AAED,MAAM,WAAW,WAAW,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,EAAE,CAAE,SAAQ,UAAU,CAAC,CAAC,CAAC;IAC/D,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,CAAC,kBAAkB,CAAC,EAAE,CAAC,GAAG,SAAS,CAAA;IAC5C,QAAQ,CAAC,CAAC,iBAAiB,CAAC,CAAC,EAAE,WAAW,CAAA;CAC3C;AAED,MAAM,MAAM,eAAe,GAAG,sBAAsB,CAClD;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,EACnC;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CACpC,CAAA;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,cAAc,CAAC,EAAE;QAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,MAAM,MAAM,IAAI,GACZ,IAAI,GACJ,OAAO,GACP,MAAM,GACN,MAAM,GACN,SAAS,IAAI,EAAE,GACf;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAEpC,oFAAoF;AACpF,MAAM,WAAW,SAAS,CAAC,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAA;IAC/B,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA;QAChD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;QACtC,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,IAAI,CAAA;KAClD,CAAA;IACD,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;CACpB;AAED,MAAM,WAAW,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,GAAG,KAAK;IAC/C,6FAA6F;IAC7F,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAA;IAC/B,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAA;IAC9B,QAAQ,CAAC,OAAO,EAAE,CAChB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAChB,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAClD,QAAQ,CAAC,SAAS,EAAE,CAClB,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,KAChB,MAAM,CAAC,MAAM,CAAC,wBAAwB,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;CACnD;AAED,4FAA4F;AAC5F,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;AAsM5E,eAAO,MAAM,OAAO,GAAI,CAAC,EAAE,CAAC,SACnB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,WACf,OAAO,cACJ,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KACtC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAWtC,CAAA;AAEJ,eAAO,MAAM,SAAS,GAAI,CAAC,EAAE,CAAC,SACrB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,WACf,OAAO,cACJ,eAAe,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KACtC,MAAM,CAAC,MAAM,CAAC,eAAe,EAAE,KAAK,EAAE,CAAC,CAWtC,CAAA;AAEJ,eAAO,MAAM,QAAQ,GAAI,CAAC,EAAE,CAAC,SACpB,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,KACvB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CA4BtB,CAAA"}
|