Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

grats

Package Overview
Dependencies
Maintainers
0
Versions
238
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

grats - npm Package Compare versions

Comparing version 0.0.0-main-98bd6a07 to 0.0.0-main-992bf789

dist/src/transforms/resolveResolverParams.d.ts

8

dist/package.json
{
"name": "grats",
"version": "0.0.26",
"version": "0.0.28",
"main": "dist/src/index.js",

@@ -21,4 +21,4 @@ "bin": "dist/src/cli.js",

"commander": "^10.0.0",
"graphql": "^16.6.0",
"typescript": "^5.0.2"
"graphql": "^16.9.0",
"typescript": "5.5.4"
},

@@ -46,3 +46,3 @@ "devDependencies": {

"node": ">=16 <=21",
"pnpm": "^8"
"pnpm": ">=8 <=9"
},

@@ -49,0 +49,0 @@ "bugs": {

@@ -40,3 +40,3 @@ #!/usr/bin/env node

Object.defineProperty(exports, "__esModule", { value: true });
exports.formatLoc = void 0;
exports.formatLoc = formatLoc;
var _1 = require("./");

@@ -59,16 +59,14 @@ var lib_1 = require("./lib");

.option("--watch", "Watch for changes and rebuild schema files as needed")
.action(function (_a) {
var tsconfig = _a.tsconfig, watch = _a.watch;
return __awaiter(void 0, void 0, void 0, function () {
return __generator(this, function (_b) {
if (watch) {
startWatchMode(tsconfig);
}
else {
runBuild(tsconfig);
}
return [2 /*return*/];
});
.action(function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
var tsconfig = _b.tsconfig, watch = _b.watch;
return __generator(this, function (_c) {
if (watch) {
startWatchMode(tsconfig);
}
else {
runBuild(tsconfig);
}
return [2 /*return*/];
});
});
}); });
program

@@ -164,2 +162,1 @@ .command("locate")

}
exports.formatLoc = formatLoc;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.convertBlockCommentToDocblock = exports.convertLineCommentToDocblock = exports.replaceNode = exports.removeNode = exports.suffixNode = exports.prefixNode = void 0;
exports.prefixNode = prefixNode;
exports.suffixNode = suffixNode;
exports.removeNode = removeNode;
exports.replaceNode = replaceNode;
exports.convertLineCommentToDocblock = convertLineCommentToDocblock;
exports.convertBlockCommentToDocblock = convertBlockCommentToDocblock;
function prefixNode(node, prefix) {

@@ -11,3 +16,2 @@ var start = node.getStart();

}
exports.prefixNode = prefixNode;
function suffixNode(node, suffix) {

@@ -20,3 +24,2 @@ var end = node.getEnd();

}
exports.suffixNode = suffixNode;
function removeNode(node) {

@@ -30,3 +33,2 @@ var start = node.getStart();

}
exports.removeNode = removeNode;
function replaceNode(node, newText) {

@@ -40,3 +42,2 @@ var start = node.getStart();

}
exports.replaceNode = replaceNode;
function convertLineCommentToDocblock(sourceFile, comment) {

@@ -51,3 +52,2 @@ return {

}
exports.convertLineCommentToDocblock = convertLineCommentToDocblock;
function convertBlockCommentToDocblock(sourceFile, comment) {

@@ -59,2 +59,1 @@ return {

}
exports.convertBlockCommentToDocblock = convertBlockCommentToDocblock;

@@ -38,4 +38,15 @@ "use strict";

};
var __values = (this && this.__values) || function(o) {
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
if (m) return m.call(o);
if (o && typeof o.length === "number") return {
next: function () {
if (o && i >= o.length) o = void 0;
return { value: o && o[i++], done: !o };
}
};
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.codegen = void 0;
exports.codegen = codegen;
var graphql_1 = require("graphql");

@@ -49,2 +60,3 @@ var ts = require("typescript");

var helpers_1 = require("./utils/helpers");
var naturalCompare_1 = require("./utils/naturalCompare");
var RESOLVER_ARGS = ["source", "args", "context", "info"];

@@ -59,3 +71,2 @@ var F = ts.factory;

}
exports.codegen = codegen;
var Codegen = /** @class */ (function () {

@@ -67,2 +78,3 @@ function Codegen(_schema, _config, _destination) {

this._imports = [];
this._typeNameMappings = new Map();
this._helpers = new Map();

@@ -168,23 +180,37 @@ this._typeDefinitions = new Set();

};
Codegen.prototype.importUserConstruct = function (tsModulePath, exportName, localName) {
var abs = (0, gratsRoot_1.resolveRelativePath)(tsModulePath);
var relative = replaceExt(path.relative(path.dirname(this._destination), abs), this._config.importModuleSpecifierEnding);
var modulePath = "./".concat(normalizeRelativePathToPosix(relative));
if (exportName == null) {
this.importDefault(modulePath, localName);
}
else {
this.import(modulePath, [{ name: exportName, as: localName }]);
}
};
Codegen.prototype.resolveMethod = function (field, methodName, parentTypeName) {
var _this = this;
var _a, _b;
var metadataDirective = (0, helpers_1.nullThrows)(fieldDirective(field, metadataDirectives_1.FIELD_METADATA_DIRECTIVE));
var metadata = (0, metadataDirectives_1.parseFieldMetadataDirective)(metadataDirective);
var fieldAst = (0, helpers_1.nullThrows)(field.astNode);
var resolverParams = (_a = fieldAst.resolverParams) === null || _a === void 0 ? void 0 : _a.map(function (param) {
switch (param.kind) {
case "named":
case "positionalArg":
return param;
case "unresolved":
throw new Error("Expected resolver param to have been resolved.");
default: {
var _exhaustive = param;
throw new Error("Unexpected param kind");
}
}
});
if (metadata.tsModulePath != null) {
var module_1 = metadata.tsModulePath;
var exportName = metadata.exportName;
var argCount = (0, helpers_1.nullThrows)(metadata.argCount);
var abs = (0, gratsRoot_1.resolveRelativePath)(module_1);
var relative = replaceExt(path.relative(path.dirname(this._destination), abs), this._config.importModuleSpecifierEnding);
// Note: This name is guaranteed to be unique, but for static methods, it
// means we import the same class multiple times with multiple names.
var resolverName = formatResolverFunctionVarName(parentTypeName, field.name);
var modulePath = "./".concat(normalizeRelativePathToPosix(relative));
if (exportName == null) {
this.importDefault(modulePath, resolverName);
}
else {
this.import(modulePath, [{ name: exportName, as: resolverName }]);
}
var usedArgs = RESOLVER_ARGS.slice(0, argCount);
this.importUserConstruct(metadata.tsModulePath, metadata.exportName, resolverName);
var resolverAccess = F.createIdentifier(resolverName);

@@ -194,19 +220,32 @@ if (metadata.name != null) {

}
return this.method(methodName, usedArgs.map(function (name) {
// Params expected by the user-defined resolver function.
var usedResolverParams = resolverParams !== null && resolverParams !== void 0 ? resolverParams : [];
// Params passed to the default resolver function.
var wrapperParams = extractUsedParams(usedResolverParams);
return this.method(methodName, wrapperParams.map(function (name) {
return _this.param(name);
}), [
F.createReturnStatement(F.createCallExpression(resolverAccess, undefined, usedArgs.map(function (name) {
return F.createIdentifier(name);
F.createReturnStatement(F.createCallExpression(resolverAccess, undefined, usedResolverParams.map(function (name) {
return _this.resolverParam(name);
}))),
]);
}
if (metadata.name != null) {
var prop = F.createPropertyAccessExpression(F.createIdentifier("source"), F.createIdentifier(metadata.name));
var defaultParams = resolverParams == null || paramsAreInDefaultOrder(resolverParams);
if (metadata.name != null || !defaultParams) {
var prop = F.createPropertyAccessExpression(F.createIdentifier("source"), F.createIdentifier((_b = metadata.name) !== null && _b !== void 0 ? _b : field.name));
var valueExpression = prop;
if (metadata.argCount != null) {
valueExpression = F.createCallExpression(prop, undefined, RESOLVER_ARGS.slice(1).map(function (name) {
return F.createIdentifier(name);
if (resolverParams != null) {
valueExpression = F.createCallExpression(prop, undefined, resolverParams.map(function (name) {
return _this.resolverParam(name);
}));
}
return this.method(methodName, RESOLVER_ARGS.map(function (name) { return _this.param(name); }), [F.createReturnStatement(valueExpression)]);
var usedWrapperParams = [
{ kind: "named", name: "source" },
];
if (resolverParams != null) {
// Push with ... is safe because resolverParams is known to be
// a small array.
usedWrapperParams.push.apply(usedWrapperParams, __spreadArray([], __read(resolverParams), false));
}
return this.method(methodName, extractUsedParams(usedWrapperParams).map(function (name) { return _this.param(name); }), [F.createReturnStatement(valueExpression)]);
}

@@ -217,2 +256,16 @@ // If the resolver name matches the field name, and the field is not backed by a function,

};
// Either `args`, `context`, `info`, or a positional argument like
// `args.someArg`.
Codegen.prototype.resolverParam = function (param) {
switch (param.kind) {
case "named":
return F.createIdentifier(param.name);
case "positionalArg":
return F.createPropertyAccessExpression(F.createIdentifier("args"), F.createIdentifier(param.inputDefinition.name.value));
default: {
var _exhaustive = param;
throw new Error("Unexpected param kind");
}
}
};
// If a field is smantically non-null, we need to wrap the resolver in a

@@ -283,2 +336,3 @@ // runtime check to ensure that the resolver does not return null.

Codegen.prototype.interfaceTypeConfig = function (obj) {
this._schema.getPossibleTypes(obj);
return this.objectLiteral([

@@ -289,2 +343,3 @@ this.description(obj.description),

this.interfaces(obj),
this.resolveType(obj),
]);

@@ -303,2 +358,36 @@ };

};
Codegen.prototype.resolveType = function (obj) {
var e_1, _a;
var needsResolveType = false;
try {
for (var _b = __values(this._schema.getPossibleTypes(obj)), _c = _b.next(); !_c.done; _c = _b.next()) {
var t = _c.value;
var ast = (0, helpers_1.nullThrows)(t.astNode);
if (ast.hasTypeNameField) {
continue;
}
var exportedMetadata = ast.exported;
if (exportedMetadata != null) {
if (!this._typeNameMappings.has(t.name)) {
var localName = "".concat(t.name, "Class");
this.importUserConstruct(exportedMetadata.tsModulePath, exportedMetadata.exportName, localName);
this._typeNameMappings.set(t.name, localName);
}
needsResolveType = true;
}
}
}
catch (e_1_1) { e_1 = { error: e_1_1 }; }
finally {
try {
if (_c && !_c.done && (_a = _b.return)) _a.call(_b);
}
finally { if (e_1) throw e_1.error; }
}
if (needsResolveType) {
return F.createShorthandPropertyAssignment("resolveType");
}
// Just use the default resolveType
return null;
};
Codegen.prototype.unionTypeConfig = function (obj) {

@@ -312,2 +401,3 @@ var _this = this;

]),
this.resolveType(obj),
]);

@@ -344,7 +434,11 @@ };

Codegen.prototype.inputTypeConfig = function (obj) {
return this.objectLiteral([
var properties = [
this.description(obj.description),
F.createPropertyAssignment("name", F.createStringLiteral(obj.name)),
this.inputFields(obj),
]);
];
if (obj.isOneOf) {
properties.push(F.createPropertyAssignment("isOneOf", F.createTrue()));
}
return this.objectLiteral(properties);
};

@@ -554,6 +648,56 @@ Codegen.prototype.inputFields = function (obj) {

};
Codegen.prototype.resolveTypeFunctionDeclaration = function () {
return F.createFunctionDeclaration(undefined, undefined, "resolveType", undefined, [
F.createParameterDeclaration(undefined, undefined, "obj", undefined, F.createTypeReferenceNode("any")),
], F.createKeywordTypeNode(ts.SyntaxKind.StringKeyword), F.createBlock([
F.createIfStatement(F.createBinaryExpression(F.createTypeOfExpression(F.createPropertyAccessExpression(F.createIdentifier("obj"), F.createIdentifier("__typename"))), ts.SyntaxKind.EqualsEqualsEqualsToken, F.createStringLiteral("string")), F.createBlock([
F.createReturnStatement(F.createPropertyAccessExpression(F.createIdentifier("obj"), F.createIdentifier("__typename"))),
], true)),
F.createVariableStatement(undefined, F.createVariableDeclarationList([
F.createVariableDeclaration(F.createIdentifier("prototype"), undefined, undefined, F.createCallExpression(F.createPropertyAccessExpression(F.createIdentifier("Object"), F.createIdentifier("getPrototypeOf")), undefined, [F.createIdentifier("obj")])),
], ts.NodeFlags.Let)),
F.createWhileStatement(F.createIdentifier("prototype"), F.createBlock([
F.createVariableStatement(undefined, F.createVariableDeclarationList([
F.createVariableDeclaration(F.createIdentifier("name"), undefined, undefined, F.createCallExpression(F.createPropertyAccessExpression(F.createIdentifier("typeNameMap"), F.createIdentifier("get")), undefined, [
F.createPropertyAccessExpression(F.createIdentifier("prototype"), F.createIdentifier("constructor")),
])),
], ts.NodeFlags.Const)),
F.createIfStatement(F.createBinaryExpression(F.createIdentifier("name"), ts.SyntaxKind.ExclamationEqualsToken, F.createNull()), F.createBlock([F.createReturnStatement(F.createIdentifier("name"))], true)),
F.createExpressionStatement(F.createAssignment(F.createIdentifier("prototype"), F.createCallExpression(F.createPropertyAccessExpression(F.createIdentifier("Object"), F.createIdentifier("getPrototypeOf")), undefined, [F.createIdentifier("prototype")]))),
], true)),
F.createThrowStatement(F.createNewExpression(F.createIdentifier("Error"), undefined, [
F.createStringLiteral("Cannot find type name."),
])),
], true));
};
Codegen.prototype.print = function () {
var e_2, _a;
var printer = ts.createPrinter({ newLine: ts.NewLineKind.LineFeed });
var sourceFile = ts.createSourceFile("tempFile.ts", "", ts.ScriptTarget.Latest, false, ts.ScriptKind.TS);
this.import("graphql", __spreadArray([], __read(this._graphQLImports), false).map(function (name) { return ({ name: name }); }));
if (this._typeNameMappings.size > 0) {
this._statements.push(F.createVariableStatement(undefined, F.createVariableDeclarationList([
F.createVariableDeclaration(F.createIdentifier("typeNameMap"), undefined, undefined, F.createNewExpression(F.createIdentifier("Map"), undefined, [])),
], ts.NodeFlags.Const)));
var typeNameEntries = Array.from(this._typeNameMappings.entries());
typeNameEntries.sort(function (_a, _b) {
var _c = __read(_a, 1), aTypeName = _c[0];
var _d = __read(_b, 1), bTypeName = _d[0];
return (0, naturalCompare_1.naturalCompare)(aTypeName, bTypeName);
});
try {
for (var typeNameEntries_1 = __values(typeNameEntries), typeNameEntries_1_1 = typeNameEntries_1.next(); !typeNameEntries_1_1.done; typeNameEntries_1_1 = typeNameEntries_1.next()) {
var _b = __read(typeNameEntries_1_1.value, 2), typeName = _b[0], className = _b[1];
this._statements.push(F.createExpressionStatement(F.createCallExpression(F.createPropertyAccessExpression(F.createIdentifier("typeNameMap"), F.createIdentifier("set")), undefined, [F.createIdentifier(className), F.createStringLiteral(typeName)])));
}
}
catch (e_2_1) { e_2 = { error: e_2_1 }; }
finally {
try {
if (typeNameEntries_1_1 && !typeNameEntries_1_1.done && (_a = typeNameEntries_1.return)) _a.call(typeNameEntries_1);
}
finally { if (e_2) throw e_2.error; }
}
this._statements.push(this.resolveTypeFunctionDeclaration());
}
return printer.printList(ts.ListFormat.MultiLine, F.createNodeArray(__spreadArray(__spreadArray(__spreadArray([], __read(this._imports), false), __read(this._helpers.values()), false), __read(this._statements), false)), sourceFile);

@@ -563,2 +707,33 @@ };

}());
// Here we try to avoid including unused args.
//
// Unused trailing args are trimmed, unused intermediate args are prefixed with
// an underscore.
function extractUsedParams(resolverParams) {
var wrapperArgs = [];
var adding = false;
var _loop_1 = function (i) {
var name = RESOLVER_ARGS[i];
var used = resolverParams.some(function (param) {
return ((param.kind === "named" && param.name === name) ||
(param.kind === "positionalArg" && name) === "args");
});
if (used) {
adding = true;
}
if (!adding) {
return "continue";
}
wrapperArgs.unshift(used ? name : "_".concat(name));
};
for (var i = RESOLVER_ARGS.length - 1; i >= 0; i--) {
_loop_1(i);
}
return wrapperArgs;
}
function paramsAreInDefaultOrder(params) {
return params.every(function (param, i) {
return param.kind === "named" && param.name === RESOLVER_ARGS[i + 1];
});
}
function fieldDirective(field, name) {

@@ -565,0 +740,0 @@ var _a, _b, _c;

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.createAssertNonNullHelper = exports.ASSERT_NON_NULL_HELPER = void 0;
exports.ASSERT_NON_NULL_HELPER = void 0;
exports.createAssertNonNullHelper = createAssertNonNullHelper;
var ts = require("typescript");

@@ -34,2 +35,1 @@ exports.ASSERT_NON_NULL_HELPER = "assertNonNull";

}
exports.createAssertNonNullHelper = createAssertNonNullHelper;

@@ -30,3 +30,4 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.forEachComment = exports.detectInvalidComments = void 0;
exports.detectInvalidComments = detectInvalidComments;
exports.forEachComment = forEachComment;
var ts = require("typescript");

@@ -93,3 +94,2 @@ var DiagnosticError_1 = require("./utils/DiagnosticError");

}
exports.detectInvalidComments = detectInvalidComments;
// Extract @gql or @killsParentOnException tags from a JSDoc block comment.

@@ -157,3 +157,2 @@ // along with their positions.

}
exports.forEachComment = forEachComment;
function forEachToken(sourceFile, callback) {

@@ -160,0 +159,0 @@ var queue = [];

@@ -50,4 +50,4 @@ export declare const ISSUE_URL = "https://github.com/captbaritone/grats/issues";

export declare function typeNameDoesNotMatchExpected(expected: string): string;
export declare function argumentParamIsMissingType(): string;
export declare function argumentParamIsNotObject(): string;
export declare function resolverParamIsMissingType(): string;
export declare function multipleResolverTypeLiterals(): string;
export declare function argIsNotProperty(): string;

@@ -93,3 +93,6 @@ export declare function argNameNotLiteral(): string;

export declare function expectedTypeAnnotationOnContextToHaveDeclaration(): string;
export declare function unexpectedParamSpreadForContextParam(): string;
export declare function unexpectedParamSpreadForResolverParam(): string;
export declare function resolverParamIsUnknown(): string;
export declare function resolverParamIsNever(): string;
export declare function unexpectedResolverParamType(): string;
export declare function multipleContextTypes(): string;

@@ -112,3 +115,4 @@ export declare function graphQLNameHasLeadingNewlines(name: string, tagName: string): string;

export declare function genericTypeImplementsInterface(): string;
export declare function concreteTypeMissingTypename(implementor: string): string;
export declare function concreteTypenameImplementingInterfaceCannotBeResolved(implementor: string, interfaceName: string): string;
export declare function concreteTypenameInUnionCannotBeResolved(implementor: string, unionName: string): string;
export declare function invalidFieldNonPublicAccessModifier(): string;

@@ -118,1 +122,16 @@ export declare function invalidStaticModifier(): string;

export declare function staticMethodClassWithNamedExportNotNamed(): string;
export declare function oneOfNotSupportedGraphql(requiredVersion: string, foundVersion: string): string;
export declare function oneOfNotOnUnion(): string;
export declare function oneOfFieldNotTypeLiteralWithOneProperty(): string;
export declare function oneOfPropertyMissingTypeAnnotation(): string;
export declare function contextTagOnNonDeclaration(): string;
export declare function duplicateContextTag(): string;
export declare function userDefinedInfoTag(): string;
export declare function invalidResolverParamType(): string;
export declare function exportedArrowFunctionNotConst(): string;
export declare function exportedFieldVariableMultipleDeclarations(n: number): string;
export declare function fieldVariableNotTopLevelExported(): string;
export declare function fieldVariableIsNotArrowFunction(): string;
export declare function positionalResolverArgDoesNotHaveName(): string;
export declare function positionalArgAndArgsObject(): string;
export declare function contextOrInfoUsedInGraphQLPosition(kind: "CONTEXT" | "INFO"): string;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrapperMissingTypeArg = exports.methodMissingType = exports.gqlEntityMissingName = exports.enumVariantMissingInitializer = exports.enumVariantNotStringLiteral = exports.enumTagOnInvalidNode = exports.argNotTyped = exports.argNameNotLiteral = exports.argIsNotProperty = exports.argumentParamIsNotObject = exports.argumentParamIsMissingType = exports.typeNameDoesNotMatchExpected = exports.typeNameTypeNotStringLiteral = exports.typeNameMissingTypeAnnotation = exports.typeNameInitializerWrong = exports.typeNameTypeNameNotConst = exports.typeNameTypeNameNotIdentifier = exports.typeNameTypeNotReferenceNode = exports.typeNameInitializeNotExpression = exports.typeNameInitializeNotString = exports.typeNameMissingInitializer = exports.typeNameNotDeclaration = exports.typeTagOnAliasOfNonObjectOrUnknown = exports.typeTagOnUnnamedClass = exports.inputFieldUntyped = exports.inputInterfaceFieldNotProperty = exports.inputTypeFieldNotProperty = exports.inputTypeNotLiteral = exports.functionFieldNotNamedExport = exports.functionFieldNotNamed = exports.functionFieldParentTypeNotValid = exports.functionFieldParentTypeMissing = exports.staticMethodFieldClassNotExported = exports.staticMethodClassNotTopLevel = exports.functionFieldNotTopLevel = exports.invalidReturnTypeForFunctionField = exports.invalidParentArgForFunctionField = exports.expectedUnionTypeReference = exports.expectedUnionTypeNode = exports.invalidUnionTagUsage = exports.invalidInputTagUsage = exports.invalidEnumTagUsage = exports.invalidInterfaceTagUsage = exports.invalidScalarTagUsage = exports.invalidTypeTagUsage = exports.invalidGratsTag = exports.wrongCasingForGratsTag = exports.killsParentOnExceptionOnWrongNode = exports.fieldTagOnWrongNode = exports.ISSUE_URL = void 0;
exports.concreteTypeMissingTypename = exports.genericTypeImplementsInterface = exports.genericTypeUsedAsUnionMember = exports.nonGraphQLGenericType = exports.missingGenericType = exports.specifiedByOnWrongNode = exports.missingSpecifiedByUrl = exports.gqlFieldParentMissingTag = exports.gqlFieldTagOnInputType = exports.gqlTagInDetachedJSDocBlockComment = exports.gqlTagInNonJSDocBlockComment = exports.gqlTagInLineComment = exports.expectedNullableArgumentToBeOptional = exports.operationTypeNotUnknown = exports.subscriptionFieldNotAsyncIterable = exports.graphQLTagNameHasWhitespace = exports.graphQLNameHasLeadingNewlines = exports.multipleContextTypes = exports.unexpectedParamSpreadForContextParam = exports.expectedTypeAnnotationOnContextToHaveDeclaration = exports.expectedTypeAnnotationOnContextToBeResolvable = exports.expectedTypeAnnotationOfReferenceOnContext = exports.expectedTypeAnnotationOnContext = exports.unresolvedTypeReference = exports.invalidTypePassedToFieldFunction = exports.parameterPropertyMissingType = exports.parameterPropertyNotPublic = exports.parameterWithoutModifiers = exports.duplicateInterfaceTag = exports.duplicateTag = exports.implementsTagOnTypeAlias = exports.implementsTagOnInterface = exports.implementsTagOnClass = exports.mergedInterfaces = exports.nonNullTypeCannotBeOptional = exports.killsParentOnExceptionOnNullable = exports.killsParentOnExceptionWithWrongConfig = exports.expectedNameIdentifier = exports.pluralTypeMissingParameter = exports.unknownGraphQLType = exports.unsupportedTypeLiteral = exports.defaultArgPropertyMissingInitializer = exports.defaultArgPropertyMissingName = exports.defaultArgElementIsNotAssignment = exports.defaultValueIsNotLiteral = exports.ambiguousNumberType = exports.expectedOneNonNullishType = exports.propertyFieldMissingType = exports.cannotResolveSymbolForDescription = exports.invalidWrapperOnInputType = void 0;
exports.staticMethodClassWithNamedExportNotNamed = exports.staticMethodOnNonClass = exports.invalidStaticModifier = exports.invalidFieldNonPublicAccessModifier = void 0;
exports.ISSUE_URL = void 0;
exports.fieldTagOnWrongNode = fieldTagOnWrongNode;
exports.killsParentOnExceptionOnWrongNode = killsParentOnExceptionOnWrongNode;
exports.wrongCasingForGratsTag = wrongCasingForGratsTag;
exports.invalidGratsTag = invalidGratsTag;
exports.invalidTypeTagUsage = invalidTypeTagUsage;
exports.invalidScalarTagUsage = invalidScalarTagUsage;
exports.invalidInterfaceTagUsage = invalidInterfaceTagUsage;
exports.invalidEnumTagUsage = invalidEnumTagUsage;
exports.invalidInputTagUsage = invalidInputTagUsage;
exports.invalidUnionTagUsage = invalidUnionTagUsage;
exports.expectedUnionTypeNode = expectedUnionTypeNode;
exports.expectedUnionTypeReference = expectedUnionTypeReference;
exports.invalidParentArgForFunctionField = invalidParentArgForFunctionField;
exports.invalidReturnTypeForFunctionField = invalidReturnTypeForFunctionField;
exports.functionFieldNotTopLevel = functionFieldNotTopLevel;
exports.staticMethodClassNotTopLevel = staticMethodClassNotTopLevel;
exports.staticMethodFieldClassNotExported = staticMethodFieldClassNotExported;
exports.functionFieldParentTypeMissing = functionFieldParentTypeMissing;
exports.functionFieldParentTypeNotValid = functionFieldParentTypeNotValid;
exports.functionFieldNotNamed = functionFieldNotNamed;
exports.functionFieldNotNamedExport = functionFieldNotNamedExport;
exports.inputTypeNotLiteral = inputTypeNotLiteral;
exports.inputTypeFieldNotProperty = inputTypeFieldNotProperty;
exports.inputInterfaceFieldNotProperty = inputInterfaceFieldNotProperty;
exports.inputFieldUntyped = inputFieldUntyped;
exports.typeTagOnUnnamedClass = typeTagOnUnnamedClass;
exports.typeTagOnAliasOfNonObjectOrUnknown = typeTagOnAliasOfNonObjectOrUnknown;
exports.typeNameNotDeclaration = typeNameNotDeclaration;
exports.typeNameMissingInitializer = typeNameMissingInitializer;
exports.typeNameInitializeNotString = typeNameInitializeNotString;
exports.typeNameInitializeNotExpression = typeNameInitializeNotExpression;
exports.typeNameTypeNotReferenceNode = typeNameTypeNotReferenceNode;
exports.typeNameTypeNameNotIdentifier = typeNameTypeNameNotIdentifier;
exports.typeNameTypeNameNotConst = typeNameTypeNameNotConst;
exports.typeNameInitializerWrong = typeNameInitializerWrong;
exports.typeNameMissingTypeAnnotation = typeNameMissingTypeAnnotation;
exports.typeNameTypeNotStringLiteral = typeNameTypeNotStringLiteral;
exports.typeNameDoesNotMatchExpected = typeNameDoesNotMatchExpected;
exports.resolverParamIsMissingType = resolverParamIsMissingType;
exports.multipleResolverTypeLiterals = multipleResolverTypeLiterals;
exports.argIsNotProperty = argIsNotProperty;
exports.argNameNotLiteral = argNameNotLiteral;
exports.argNotTyped = argNotTyped;
exports.enumTagOnInvalidNode = enumTagOnInvalidNode;
exports.enumVariantNotStringLiteral = enumVariantNotStringLiteral;
exports.enumVariantMissingInitializer = enumVariantMissingInitializer;
exports.gqlEntityMissingName = gqlEntityMissingName;
exports.methodMissingType = methodMissingType;
exports.wrapperMissingTypeArg = wrapperMissingTypeArg;
exports.invalidWrapperOnInputType = invalidWrapperOnInputType;
exports.cannotResolveSymbolForDescription = cannotResolveSymbolForDescription;
exports.propertyFieldMissingType = propertyFieldMissingType;
exports.expectedOneNonNullishType = expectedOneNonNullishType;
exports.ambiguousNumberType = ambiguousNumberType;
exports.defaultValueIsNotLiteral = defaultValueIsNotLiteral;
exports.defaultArgElementIsNotAssignment = defaultArgElementIsNotAssignment;
exports.defaultArgPropertyMissingName = defaultArgPropertyMissingName;
exports.defaultArgPropertyMissingInitializer = defaultArgPropertyMissingInitializer;
exports.unsupportedTypeLiteral = unsupportedTypeLiteral;
exports.unknownGraphQLType = unknownGraphQLType;
exports.pluralTypeMissingParameter = pluralTypeMissingParameter;
exports.expectedNameIdentifier = expectedNameIdentifier;
exports.killsParentOnExceptionWithWrongConfig = killsParentOnExceptionWithWrongConfig;
exports.killsParentOnExceptionOnNullable = killsParentOnExceptionOnNullable;
exports.nonNullTypeCannotBeOptional = nonNullTypeCannotBeOptional;
exports.mergedInterfaces = mergedInterfaces;
exports.implementsTagOnClass = implementsTagOnClass;
exports.implementsTagOnInterface = implementsTagOnInterface;
exports.implementsTagOnTypeAlias = implementsTagOnTypeAlias;
exports.duplicateTag = duplicateTag;
exports.duplicateInterfaceTag = duplicateInterfaceTag;
exports.parameterWithoutModifiers = parameterWithoutModifiers;
exports.parameterPropertyNotPublic = parameterPropertyNotPublic;
exports.parameterPropertyMissingType = parameterPropertyMissingType;
exports.invalidTypePassedToFieldFunction = invalidTypePassedToFieldFunction;
exports.unresolvedTypeReference = unresolvedTypeReference;
exports.expectedTypeAnnotationOnContext = expectedTypeAnnotationOnContext;
exports.expectedTypeAnnotationOfReferenceOnContext = expectedTypeAnnotationOfReferenceOnContext;
exports.expectedTypeAnnotationOnContextToBeResolvable = expectedTypeAnnotationOnContextToBeResolvable;
exports.expectedTypeAnnotationOnContextToHaveDeclaration = expectedTypeAnnotationOnContextToHaveDeclaration;
exports.unexpectedParamSpreadForResolverParam = unexpectedParamSpreadForResolverParam;
exports.resolverParamIsUnknown = resolverParamIsUnknown;
exports.resolverParamIsNever = resolverParamIsNever;
exports.unexpectedResolverParamType = unexpectedResolverParamType;
exports.multipleContextTypes = multipleContextTypes;
exports.graphQLNameHasLeadingNewlines = graphQLNameHasLeadingNewlines;
exports.graphQLTagNameHasWhitespace = graphQLTagNameHasWhitespace;
exports.subscriptionFieldNotAsyncIterable = subscriptionFieldNotAsyncIterable;
exports.operationTypeNotUnknown = operationTypeNotUnknown;
exports.expectedNullableArgumentToBeOptional = expectedNullableArgumentToBeOptional;
exports.gqlTagInLineComment = gqlTagInLineComment;
exports.gqlTagInNonJSDocBlockComment = gqlTagInNonJSDocBlockComment;
exports.gqlTagInDetachedJSDocBlockComment = gqlTagInDetachedJSDocBlockComment;
exports.gqlFieldTagOnInputType = gqlFieldTagOnInputType;
exports.gqlFieldParentMissingTag = gqlFieldParentMissingTag;
exports.missingSpecifiedByUrl = missingSpecifiedByUrl;
exports.specifiedByOnWrongNode = specifiedByOnWrongNode;
exports.missingGenericType = missingGenericType;
exports.nonGraphQLGenericType = nonGraphQLGenericType;
exports.genericTypeUsedAsUnionMember = genericTypeUsedAsUnionMember;
exports.genericTypeImplementsInterface = genericTypeImplementsInterface;
exports.concreteTypenameImplementingInterfaceCannotBeResolved = concreteTypenameImplementingInterfaceCannotBeResolved;
exports.concreteTypenameInUnionCannotBeResolved = concreteTypenameInUnionCannotBeResolved;
exports.invalidFieldNonPublicAccessModifier = invalidFieldNonPublicAccessModifier;
exports.invalidStaticModifier = invalidStaticModifier;
exports.staticMethodOnNonClass = staticMethodOnNonClass;
exports.staticMethodClassWithNamedExportNotNamed = staticMethodClassWithNamedExportNotNamed;
exports.oneOfNotSupportedGraphql = oneOfNotSupportedGraphql;
exports.oneOfNotOnUnion = oneOfNotOnUnion;
exports.oneOfFieldNotTypeLiteralWithOneProperty = oneOfFieldNotTypeLiteralWithOneProperty;
exports.oneOfPropertyMissingTypeAnnotation = oneOfPropertyMissingTypeAnnotation;
exports.contextTagOnNonDeclaration = contextTagOnNonDeclaration;
exports.duplicateContextTag = duplicateContextTag;
exports.userDefinedInfoTag = userDefinedInfoTag;
exports.invalidResolverParamType = invalidResolverParamType;
exports.exportedArrowFunctionNotConst = exportedArrowFunctionNotConst;
exports.exportedFieldVariableMultipleDeclarations = exportedFieldVariableMultipleDeclarations;
exports.fieldVariableNotTopLevelExported = fieldVariableNotTopLevelExported;
exports.fieldVariableIsNotArrowFunction = fieldVariableIsNotArrowFunction;
exports.positionalResolverArgDoesNotHaveName = positionalResolverArgDoesNotHaveName;
exports.positionalArgAndArgsObject = positionalArgAndArgsObject;
exports.contextOrInfoUsedInGraphQLPosition = contextOrInfoUsedInGraphQLPosition;
var Extractor_1 = require("./Extractor");

@@ -27,11 +147,8 @@ exports.ISSUE_URL = "https://github.com/captbaritone/grats/issues";

}
exports.fieldTagOnWrongNode = fieldTagOnWrongNode;
function killsParentOnExceptionOnWrongNode() {
return "Unexpected `@".concat(Extractor_1.KILLS_PARENT_ON_EXCEPTION_TAG, "`. `@").concat(Extractor_1.KILLS_PARENT_ON_EXCEPTION_TAG, "` can only be used in field annotation docblocks. Perhaps you are missing a `@").concat(Extractor_1.FIELD_TAG, "` tag?");
}
exports.killsParentOnExceptionOnWrongNode = killsParentOnExceptionOnWrongNode;
function wrongCasingForGratsTag(actual, expected) {
return "Incorrect casing for Grats tag `@".concat(actual, "`. Use `@").concat(expected, "` instead.");
}
exports.wrongCasingForGratsTag = wrongCasingForGratsTag;
// TODO: Add code action

@@ -42,55 +159,41 @@ function invalidGratsTag(actual) {

}
exports.invalidGratsTag = invalidGratsTag;
function invalidTypeTagUsage() {
return "`@".concat(Extractor_1.TYPE_TAG, "` can only be used on class, interface or type declarations. e.g. `class MyType {}`");
}
exports.invalidTypeTagUsage = invalidTypeTagUsage;
function invalidScalarTagUsage() {
return "`@".concat(Extractor_1.SCALAR_TAG, "` can only be used on type alias declarations. e.g. `type MyScalar = string`");
}
exports.invalidScalarTagUsage = invalidScalarTagUsage;
function invalidInterfaceTagUsage() {
return "`@".concat(Extractor_1.INTERFACE_TAG, "` can only be used on interface declarations. e.g. `interface MyInterface {}`");
}
exports.invalidInterfaceTagUsage = invalidInterfaceTagUsage;
function invalidEnumTagUsage() {
return "`@".concat(Extractor_1.ENUM_TAG, "` can only be used on enum declarations or TypeScript unions. e.g. `enum MyEnum {}` or `type MyEnum = \"foo\" | \"bar\"`");
}
exports.invalidEnumTagUsage = invalidEnumTagUsage;
function invalidInputTagUsage() {
return "`@".concat(Extractor_1.INPUT_TAG, "` can only be used on type alias or interface declarations. e.g. `type MyInput = { foo: string }` or `interface MyInput { foo: string }`");
}
exports.invalidInputTagUsage = invalidInputTagUsage;
function invalidUnionTagUsage() {
return "`@".concat(Extractor_1.UNION_TAG, "` can only be used on type alias declarations. e.g. `type MyUnion = TypeA | TypeB`");
}
exports.invalidUnionTagUsage = invalidUnionTagUsage;
function expectedUnionTypeNode() {
return "Expected a TypeScript union. `@".concat(Extractor_1.UNION_TAG, "` can only be used on TypeScript unions. e.g. `type MyUnion = TypeA | TypeB`");
}
exports.expectedUnionTypeNode = expectedUnionTypeNode;
function expectedUnionTypeReference() {
return "Expected `@".concat(Extractor_1.UNION_TAG, "` union members to be type references. Grats expects union members to be references to something annotated with `@gqlType`.");
}
exports.expectedUnionTypeReference = expectedUnionTypeReference;
function invalidParentArgForFunctionField() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` function to have a first argument representing the type to extend. If you don't need access to the parent object in the function, you can name the variable `_` to indicate that it is unused. e.g. `function myField(_: ParentType) {}`");
}
exports.invalidParentArgForFunctionField = invalidParentArgForFunctionField;
function invalidReturnTypeForFunctionField() {
return 'Expected GraphQL field to have an explicit return type. This is needed to allow Grats to "see" the type of the field.';
}
exports.invalidReturnTypeForFunctionField = invalidReturnTypeForFunctionField;
function functionFieldNotTopLevel() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` function to be a top-level declaration. Grats needs to import resolver functions into it's generated schema module, so the resolver function must be an exported.");
}
exports.functionFieldNotTopLevel = functionFieldNotTopLevel;
function staticMethodClassNotTopLevel() {
return "Expected class with a static `@".concat(Extractor_1.FIELD_TAG, "` method to be a top-level declaration. Grats needs to import resolver methods into it's generated schema module, so the resolver's class must be an exported.");
}
exports.staticMethodClassNotTopLevel = staticMethodClassNotTopLevel;
function staticMethodFieldClassNotExported() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` static method's class to be exported. Grats needs to import resolvers into it's generated schema module, so the resolver class must be an exported.");
}
exports.staticMethodFieldClassNotExported = staticMethodFieldClassNotExported;
var FUNCTION_PARENT_TYPE_CONTEXT = "Grats treats the first argument as the parent object of the field. Therefore Grats needs to see the _type_ of the first argument in order to know to which type/interface this field should be added.";

@@ -100,39 +203,29 @@ function functionFieldParentTypeMissing() {

}
exports.functionFieldParentTypeMissing = functionFieldParentTypeMissing;
function functionFieldParentTypeNotValid() {
return "Expected first argument of a `@".concat(Extractor_1.FIELD_TAG, "` function to be typed as a type reference. ").concat(FUNCTION_PARENT_TYPE_CONTEXT);
}
exports.functionFieldParentTypeNotValid = functionFieldParentTypeNotValid;
function functionFieldNotNamed() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` function to be named. Grats uses the name of the function to derive the name of the GraphQL field. Additionally, Grats needs to import resolver functions into it's generated schema module, so the resolver function must be a named export.");
}
exports.functionFieldNotNamed = functionFieldNotNamed;
function functionFieldNotNamedExport() {
return "Expected a `@".concat(Extractor_1.FIELD_TAG, "` function to be a named export. Grats needs to import resolver functions into it's generated schema module, so the resolver function must be a named export.");
}
exports.functionFieldNotNamedExport = functionFieldNotNamedExport;
function inputTypeNotLiteral() {
return "`@".concat(Extractor_1.INPUT_TAG, "` can only be used on type literals. e.g. `type MyInput = { foo: string }`");
}
exports.inputTypeNotLiteral = inputTypeNotLiteral;
function inputTypeFieldNotProperty() {
return "`@".concat(Extractor_1.INPUT_TAG, "` types only support property signature members. e.g. `type MyInput = { foo: string }`");
}
exports.inputTypeFieldNotProperty = inputTypeFieldNotProperty;
function inputInterfaceFieldNotProperty() {
return "`@".concat(Extractor_1.INPUT_TAG, "` interfaces only support property signature members. e.g. `interface MyInput { foo: string }`");
}
exports.inputInterfaceFieldNotProperty = inputInterfaceFieldNotProperty;
function inputFieldUntyped() {
return 'Input field must have an explicit type annotation. Grats uses the type annotation to determine the type of the field, so it must be explicit in order for Grats to "see" the type.';
}
exports.inputFieldUntyped = inputFieldUntyped;
function typeTagOnUnnamedClass() {
return "Unexpected `@".concat(Extractor_1.TYPE_TAG, "` annotation on unnamed class declaration. Grats uses the name of the class to derive the name of the GraphQL type. Consider naming the class.");
}
exports.typeTagOnUnnamedClass = typeTagOnUnnamedClass;
function typeTagOnAliasOfNonObjectOrUnknown() {
return "Expected `@".concat(Extractor_1.TYPE_TAG, "` type to be an object type literal (`{ }`) or `unknown`. For example: `type Foo = { bar: string }` or `type Query = unknown`.");
}
exports.typeTagOnAliasOfNonObjectOrUnknown = typeTagOnAliasOfNonObjectOrUnknown;
// TODO: Add code action

@@ -142,3 +235,2 @@ function typeNameNotDeclaration() {

}
exports.typeNameNotDeclaration = typeNameNotDeclaration;
var TYPENAME_CONTEXT = "This is needed to ensure Grats can determine the type of this object during GraphQL execution.";

@@ -151,100 +243,74 @@ function _typeNamePropertyExample(expectedName) {

}
exports.typeNameMissingInitializer = typeNameMissingInitializer;
function typeNameInitializeNotString(expectedName) {
return "Expected `__typename` property initializer to be a string literal. ".concat(_typeNamePropertyExample(expectedName), " ").concat(TYPENAME_CONTEXT);
}
exports.typeNameInitializeNotString = typeNameInitializeNotString;
function typeNameInitializeNotExpression(expectedName) {
return "Expected `__typename` property initializer to be an expression with a const assertion. ".concat(_typeNamePropertyExample(expectedName), " ").concat(TYPENAME_CONTEXT);
}
exports.typeNameInitializeNotExpression = typeNameInitializeNotExpression;
function typeNameTypeNotReferenceNode(expectedName) {
return "Expected `__typename` property must be correctly defined. ".concat(_typeNamePropertyExample(expectedName), " ").concat(TYPENAME_CONTEXT);
}
exports.typeNameTypeNotReferenceNode = typeNameTypeNotReferenceNode;
function typeNameTypeNameNotIdentifier(expectedName) {
return "Expected `__typename` property name must be correctly specified. ".concat(_typeNamePropertyExample(expectedName), " ").concat(TYPENAME_CONTEXT);
}
exports.typeNameTypeNameNotIdentifier = typeNameTypeNameNotIdentifier;
function typeNameTypeNameNotConst(expectedName) {
return "Expected `__typename` property type name to be \"const\". ".concat(_typeNamePropertyExample(expectedName), " ").concat(TYPENAME_CONTEXT);
}
exports.typeNameTypeNameNotConst = typeNameTypeNameNotConst;
function typeNameInitializerWrong(expected, actual) {
return "Expected `__typename` property initializer to be `\"".concat(expected, "\"`, found `\"").concat(actual, "\"`. ").concat(TYPENAME_CONTEXT);
}
exports.typeNameInitializerWrong = typeNameInitializerWrong;
function typeNameMissingTypeAnnotation(expected) {
return "Expected `__typename` property signature to specify the typename as a string literal string type. For example `__typename: \"".concat(expected, "\";`. ").concat(TYPENAME_CONTEXT);
}
exports.typeNameMissingTypeAnnotation = typeNameMissingTypeAnnotation;
function typeNameTypeNotStringLiteral(expected) {
return "Expected `__typename` property signature to specify the typename as a string literal string type. For example `__typename: \"".concat(expected, "\";`. ").concat(TYPENAME_CONTEXT);
}
exports.typeNameTypeNotStringLiteral = typeNameTypeNotStringLiteral;
function typeNameDoesNotMatchExpected(expected) {
return "Expected `__typename` property to be `\"".concat(expected, "\"`. ").concat(TYPENAME_CONTEXT);
}
exports.typeNameDoesNotMatchExpected = typeNameDoesNotMatchExpected;
// TODO: Add code action
function argumentParamIsMissingType() {
return "Expected GraphQL field arguments to have an explicit type annotation. If there are no arguments, you can use `args: unknown`. Grats needs to be able to see the type of the arguments to generate a GraphQL schema.";
function resolverParamIsMissingType() {
return "Missing type annotation for resolver argument. Expected all resolver arguments to have an explicit type annotation. Grats needs to be able to see the type of the arguments to generate an executable GraphQL schema.";
}
exports.argumentParamIsMissingType = argumentParamIsMissingType;
function argumentParamIsNotObject() {
return "Expected GraphQL field arguments to be typed using an inline literal object: `{someField: string}`. If there are no arguments, you can use `args: unknown`. Grats needs to be able to see the type of the arguments to generate a GraphQL schema.";
function multipleResolverTypeLiterals() {
return "Unexpected multiple resolver parameters typed with an object literal. Grats assumes a resolver parameter typed with object literals describes the GraphQL arguments. Therefore only one such parameter is permitted.";
}
exports.argumentParamIsNotObject = argumentParamIsNotObject;
function argIsNotProperty() {
return "Expected GraphQL field argument type to be a property signature. For example: `{ someField: string }`. Grats needs to be able to see the type of the arguments to generate a GraphQL schema.";
}
exports.argIsNotProperty = argIsNotProperty;
function argNameNotLiteral() {
return "Expected GraphQL field argument names to be a literal. For example: `{ someField: string }`. Grats needs to be able to see the type of the arguments to generate a GraphQL schema.";
}
exports.argNameNotLiteral = argNameNotLiteral;
function argNotTyped() {
return "Expected GraphQL field argument to have an explicit type annotation. For example: `{ someField: string }`. Grats needs to be able to see the type of the arguments to generate a GraphQL schema.";
}
exports.argNotTyped = argNotTyped;
function enumTagOnInvalidNode() {
return "Expected `@".concat(Extractor_1.ENUM_TAG, "` to be a union type, or a string literal in the edge case of a single value enum. For example: `type MyEnum = \"foo\" | \"bar\"` or `type MyEnum = \"foo\"`.");
}
exports.enumTagOnInvalidNode = enumTagOnInvalidNode;
function enumVariantNotStringLiteral() {
return "Expected `@".concat(Extractor_1.ENUM_TAG, "` enum members to be string literal types. For example: `'foo'`. Grats needs to be able to see the concrete value of the enum member to generate the GraphQL schema.");
}
exports.enumVariantNotStringLiteral = enumVariantNotStringLiteral;
function enumVariantMissingInitializer() {
return "Expected `@".concat(Extractor_1.ENUM_TAG, "` enum members to have string literal initializers. For example: `FOO = 'foo'`. In GraphQL enum values are strings, and Grats needs to be able to see the concrete value of the enum member to generate the GraphQL schema.");
}
exports.enumVariantMissingInitializer = enumVariantMissingInitializer;
function gqlEntityMissingName() {
return "Expected GraphQL entity to have a name. Grats uses the name of the entity to derive the name of the GraphQL construct.";
}
exports.gqlEntityMissingName = gqlEntityMissingName;
function methodMissingType() {
return "Expected GraphQL field methods to have an explicitly defined return type. Grats needs to be able to see the type of the field to generate its type in the GraphQL schema.";
}
exports.methodMissingType = methodMissingType;
function wrapperMissingTypeArg() {
return "Expected wrapper type reference to have type arguments. Grats needs to be able to see the return type in order to generate a GraphQL schema.";
}
exports.wrapperMissingTypeArg = wrapperMissingTypeArg;
function invalidWrapperOnInputType(wrapperName) {
return "Invalid input type. `".concat(wrapperName, "` is not a valid type when used as a GraphQL input value.");
}
exports.invalidWrapperOnInputType = invalidWrapperOnInputType;
function cannotResolveSymbolForDescription() {
return "Expected TypeScript to be able to resolve this GraphQL entity to a symbol. Is it possible that this type is not defined in this file? Grats needs to follow type references to their declaration in order to determine which GraphQL name is being referenced.";
}
exports.cannotResolveSymbolForDescription = cannotResolveSymbolForDescription;
function propertyFieldMissingType() {
return "Expected GraphQL field to have an explicitly defined type annotation. Grats needs to be able to see the type of the field to generate a field's type in the GraphQL schema.";
}
exports.propertyFieldMissingType = propertyFieldMissingType;
function expectedOneNonNullishType() {
return "Expected exactly one non-nullish type. GraphQL does not support fields returning an arbitrary union of types. Consider defining an explicit `@".concat(Extractor_1.UNION_TAG, "` union type and returning that.");
}
exports.expectedOneNonNullishType = expectedOneNonNullishType;
// TODO: Add code action

@@ -254,35 +320,26 @@ function ambiguousNumberType() {

}
exports.ambiguousNumberType = ambiguousNumberType;
function defaultValueIsNotLiteral() {
return 'Expected GraphQL field argument default values to be a literal. Grats interprets argument defaults as GraphQL default values, which must be literals. For example: `10` or `"foo"`.';
}
exports.defaultValueIsNotLiteral = defaultValueIsNotLiteral;
function defaultArgElementIsNotAssignment() {
return "Expected property to be a default assignment. For example: `{ first = 10}`. Grats needs to extract a literal GraphQL value here, and that requires Grats being able to see the literal value in the source code.";
}
exports.defaultArgElementIsNotAssignment = defaultArgElementIsNotAssignment;
function defaultArgPropertyMissingName() {
return "Expected object literal property to have a name. Grats needs to extract a literal value here, and that requires Grats being able to see the literal value and its field name in the source code.";
}
exports.defaultArgPropertyMissingName = defaultArgPropertyMissingName;
function defaultArgPropertyMissingInitializer() {
return "Expected object literal property to have an initializer. For example: `{ offset = 10}`. Grats needs to extract a literal GraphQL value here, and that requires Grats being able to see the literal value in the source code.";
}
exports.defaultArgPropertyMissingInitializer = defaultArgPropertyMissingInitializer;
function unsupportedTypeLiteral() {
return "Unexpected type literal. Grats expects types in GraphQL positions to be scalar types, or reference a named GraphQL type directly. You may want to define a named GraphQL type elsewhere and reference it here.";
}
exports.unsupportedTypeLiteral = unsupportedTypeLiteral;
function unknownGraphQLType() {
return "Unknown GraphQL type. Grats doe not know how to map this type to a GraphQL type. You may want to define a named GraphQL type elsewhere and reference it here. If you think Grats should be able to infer a GraphQL type from this type, please file an issue.";
return "Unknown GraphQL type. Grats does not know how to map this type to a GraphQL type. You may want to define a named GraphQL type elsewhere and reference it here. If you think Grats should be able to infer a GraphQL type from this type, please file an issue.";
}
exports.unknownGraphQLType = unknownGraphQLType;
function pluralTypeMissingParameter() {
return "Expected wrapper type reference to have type arguments. Grats needs to be able to see the return type in order to generate a GraphQL schema.";
}
exports.pluralTypeMissingParameter = pluralTypeMissingParameter;
function expectedNameIdentifier() {
return "Expected an name identifier. Grats expected to find a name here which it could use to derive the GraphQL name.";
return "Expected a name identifier. Grats expected to find a name here which it could use to derive the GraphQL name.";
}
exports.expectedNameIdentifier = expectedNameIdentifier;
// TODO: Add code action

@@ -292,3 +349,2 @@ function killsParentOnExceptionWithWrongConfig() {

}
exports.killsParentOnExceptionWithWrongConfig = killsParentOnExceptionWithWrongConfig;
// TODO: Add code action

@@ -298,3 +354,2 @@ function killsParentOnExceptionOnNullable() {

}
exports.killsParentOnExceptionOnNullable = killsParentOnExceptionOnNullable;
// TODO: Add code action

@@ -304,3 +359,2 @@ function nonNullTypeCannotBeOptional() {

}
exports.nonNullTypeCannotBeOptional = nonNullTypeCannotBeOptional;
function mergedInterfaces() {

@@ -315,3 +369,2 @@ return [

}
exports.mergedInterfaces = mergedInterfaces;
// TODO: Add code action

@@ -321,3 +374,2 @@ function implementsTagOnClass() {

}
exports.implementsTagOnClass = implementsTagOnClass;
// TODO: Add code action

@@ -327,7 +379,5 @@ function implementsTagOnInterface() {

}
exports.implementsTagOnInterface = implementsTagOnInterface;
function implementsTagOnTypeAlias() {
return "`@".concat(Extractor_1.IMPLEMENTS_TAG_DEPRECATED, "` has been deprecated. Types which implement GraphQL interfaces should be defined using TypeScript class or interface declarations.");
}
exports.implementsTagOnTypeAlias = implementsTagOnTypeAlias;
// TODO: Add code action

@@ -337,7 +387,5 @@ function duplicateTag(tagName) {

}
exports.duplicateTag = duplicateTag;
function duplicateInterfaceTag() {
return "Unexpected duplicate `@".concat(Extractor_1.IMPLEMENTS_TAG_DEPRECATED, "` tag. To declare that a type or interface implements multiple interfaces list them as comma separated values: `@").concat(Extractor_1.IMPLEMENTS_TAG_DEPRECATED, " interfaceA, interfaceB`.");
}
exports.duplicateInterfaceTag = duplicateInterfaceTag;
// TODO: Add code action

@@ -350,3 +398,2 @@ function parameterWithoutModifiers() {

}
exports.parameterWithoutModifiers = parameterWithoutModifiers;
function parameterPropertyNotPublic() {

@@ -358,23 +405,17 @@ return [

}
exports.parameterPropertyNotPublic = parameterPropertyNotPublic;
function parameterPropertyMissingType() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` parameter property to have an explicit type annotation. Grats needs to be able to see the type of the parameter property to generate a GraphQL schema.");
}
exports.parameterPropertyMissingType = parameterPropertyMissingType;
function invalidTypePassedToFieldFunction() {
return "Unexpected type passed to `@".concat(Extractor_1.FIELD_TAG, "` function. `@").concat(Extractor_1.FIELD_TAG, "` functions can only be used to extend `@").concat(Extractor_1.TYPE_TAG, "` and `@").concat(Extractor_1.INTERFACE_TAG, "` types.");
}
exports.invalidTypePassedToFieldFunction = invalidTypePassedToFieldFunction;
function unresolvedTypeReference() {
return "Unable to resolve type reference. In order to generate a GraphQL schema, Grats needs to determine which GraphQL type is being referenced. This requires being able to resolve type references to their `@gql` annotated declaration. However this reference could not be resolved. Is it possible that this type is not defined in this file?";
}
exports.unresolvedTypeReference = unresolvedTypeReference;
function expectedTypeAnnotationOnContext() {
return "Expected context parameter to have an explicit type annotation. Grats validates that your context parameter is type-safe by checking that all context values reference the same type declaration.";
}
exports.expectedTypeAnnotationOnContext = expectedTypeAnnotationOnContext;
function expectedTypeAnnotationOfReferenceOnContext() {
return "Expected context parameter's type to be a type reference. Grats validates that your context parameter is type-safe by checking that all context values reference the same type declaration.";
}
exports.expectedTypeAnnotationOfReferenceOnContext = expectedTypeAnnotationOfReferenceOnContext;
function expectedTypeAnnotationOnContextToBeResolvable() {

@@ -385,51 +426,49 @@ // TODO: Provide guidance?

}
exports.expectedTypeAnnotationOnContextToBeResolvable = expectedTypeAnnotationOnContextToBeResolvable;
function expectedTypeAnnotationOnContextToHaveDeclaration() {
return "Unable to locate the declaration of the context parameter's type. Grats validates that your context parameter is type-safe by checking all context values reference the same type declaration. Did you forget to import or define this type?";
}
exports.expectedTypeAnnotationOnContextToHaveDeclaration = expectedTypeAnnotationOnContextToHaveDeclaration;
function unexpectedParamSpreadForContextParam() {
return "Unexpected spread parameter in context parameter position. Grats expects the context parameter to be a single, explicitly-typed argument.";
function unexpectedParamSpreadForResolverParam() {
return "Unexpected spread argument in resolver. Grats expects all resolver arguments to be a single, explicitly-typed argument.";
}
exports.unexpectedParamSpreadForContextParam = unexpectedParamSpreadForContextParam;
function resolverParamIsUnknown() {
// TODO: Give guidance that this is a change?
return "Unexpected `unknown` type for resolver argument. If a resolver argument is not needed by the resolver, it may be omitted.";
}
function resolverParamIsNever() {
// TODO: Give guidance that this is a change?
return "Unexpected `never` type for resolver argument. If a resolver argument is not needed by the resolver, it may be omitted.";
}
function unexpectedResolverParamType() {
return "Unexpected type for resolver argument. Resolver arguments must be typed with either an object literal (`{}`) or a reference to a named type.";
}
function multipleContextTypes() {
return "Context argument's type does not match. Grats expects all resolvers that read the context argument to use the same type for that argument. Did you use the incorrect type in one of your resolvers?";
}
exports.multipleContextTypes = multipleContextTypes;
function graphQLNameHasLeadingNewlines(name, tagName) {
return "Expected the GraphQL name `".concat(name, "` to be on the same line as it's `@").concat(tagName, "` tag.");
}
exports.graphQLNameHasLeadingNewlines = graphQLNameHasLeadingNewlines;
function graphQLTagNameHasWhitespace(tagName) {
return "Expected text following a `@".concat(tagName, "` tag to be a GraphQL name. If you intended this text to be a description, place it at the top of the docblock before any `@tags`.");
}
exports.graphQLTagNameHasWhitespace = graphQLTagNameHasWhitespace;
function subscriptionFieldNotAsyncIterable() {
return "Expected fields on `Subscription` to return an `AsyncIterable`. Fields on `Subscription` model a subscription, which is a stream of events. Grats expects fields on `Subscription` to return an `AsyncIterable` which can be used to model this stream.";
}
exports.subscriptionFieldNotAsyncIterable = subscriptionFieldNotAsyncIterable;
function operationTypeNotUnknown() {
return "Operation types `Query`, `Mutation`, and `Subscription` must be defined as type aliases of `unknown`. E.g. `type Query = unknown`. This is because GraphQL servers do not have an agreed upon way to produce root values, and Grats errs on the side of safety. If you are trying to implement dependency injection, consider using the `context` argument passed to each resolver instead. If you have a strong use case for a concrete root value, please file an issue.";
}
exports.operationTypeNotUnknown = operationTypeNotUnknown;
function expectedNullableArgumentToBeOptional() {
return "Expected nullable argument to _also_ be optional (`?`). graphql-js may omit properties on the argument object where an undefined GraphQL variable is passed, or if the argument is omitted in the operation text. To ensure your resolver is capable of handing this scenario, add a `?` to the end of the argument name to make it optional. e.g. `{greeting?: string | null}`";
}
exports.expectedNullableArgumentToBeOptional = expectedNullableArgumentToBeOptional;
function gqlTagInLineComment() {
return "Unexpected Grats tag in line (`//`) comment. Grats looks for tags in JSDoc-style block comments. e.g. `/** @gqlType */`. For more information see: ".concat(DOC_URLS.commentSyntax);
}
exports.gqlTagInLineComment = gqlTagInLineComment;
function gqlTagInNonJSDocBlockComment() {
return "Unexpected Grats tag in non-JSDoc-style block comment. Grats only looks for tags in JSDoc-style block comments which start with `/**`. For more information see: ".concat(DOC_URLS.commentSyntax);
}
exports.gqlTagInNonJSDocBlockComment = gqlTagInNonJSDocBlockComment;
function gqlTagInDetachedJSDocBlockComment() {
return "Unexpected Grats tag in detached docblock. Grats was unable to determine which TypeScript declaration this docblock is associated with. Moving the docblock to a position with is unambiguously \"above\" the relevant declaration may help. For more information see: ".concat(DOC_URLS.commentSyntax);
}
exports.gqlTagInDetachedJSDocBlockComment = gqlTagInDetachedJSDocBlockComment;
function gqlFieldTagOnInputType() {
return "The tag `@".concat(Extractor_1.FIELD_TAG, "` is not needed on fields of input types. All fields are automatically included as part of the input type. This tag can be safely removed.");
}
exports.gqlFieldTagOnInputType = gqlFieldTagOnInputType;
// TODO: Add code action

@@ -439,7 +478,5 @@ function gqlFieldParentMissingTag() {

}
exports.gqlFieldParentMissingTag = gqlFieldParentMissingTag;
function missingSpecifiedByUrl() {
return "Expected `@".concat(Extractor_1.SPECIFIED_BY_TAG, "` tag to be followed by a URL. This URL will be used as the `url` argument to the `@specifiedBy` directive in the generated GraphQL schema. See https://spec.graphql.org/draft/#sec--specifiedBy for more information.");
}
exports.missingSpecifiedByUrl = missingSpecifiedByUrl;
// TODO: Add code action

@@ -449,23 +486,20 @@ function specifiedByOnWrongNode() {

}
exports.specifiedByOnWrongNode = specifiedByOnWrongNode;
function missingGenericType(templateName, paramName) {
return "Missing type argument for generic GraphQL type. Expected `".concat(templateName, "` to be passed a GraphQL type argument for type parameter `").concat(paramName, "`.");
}
exports.missingGenericType = missingGenericType;
function nonGraphQLGenericType(templateName, paramName) {
return "Expected `".concat(templateName, "` to be passed a GraphQL type argument for type parameter `").concat(paramName, "`.");
}
exports.nonGraphQLGenericType = nonGraphQLGenericType;
function genericTypeUsedAsUnionMember() {
return "Unexpected generic type used as union member. Generic type may not currently be used as members of a union. Grats requires that all union members define a `__typename` field typed as a string literal matching the type's name. Since generic types are synthesized into multiple types with different names, Grats cannot ensure they have a correct `__typename` property and thus cannot be used as members of a union.";
}
exports.genericTypeUsedAsUnionMember = genericTypeUsedAsUnionMember;
function genericTypeImplementsInterface() {
return "Unexpected `implements` on generic `".concat(Extractor_1.TYPE_TAG, "`. Generic types may not currently declare themselves as implementing interfaces. Grats requires that all types which implement an interface define a `__typename` field typed as a string literal matching the type's name. Since generic types are synthesized into multiple types with different names, Grats cannot ensure they have a correct `__typename` property and thus declare themselves as interface implementors.");
}
exports.genericTypeImplementsInterface = genericTypeImplementsInterface;
function concreteTypeMissingTypename(implementor) {
return "Missing `__typename` on `".concat(implementor, "`. The type `").concat(implementor, "` is used in a union or interface, so it must have a `__typename` field.");
function concreteTypenameImplementingInterfaceCannotBeResolved(implementor, interfaceName) {
return "Cannot resolve typename. The type `".concat(implementor, "` implements `").concat(interfaceName, "`, so it must either have a `__typename` property or be an exported class.");
}
exports.concreteTypeMissingTypename = concreteTypeMissingTypename;
function concreteTypenameInUnionCannotBeResolved(implementor, unionName) {
return "Cannot resolve typename. The type `".concat(implementor, "` is a member of `").concat(unionName, "`, so it must either have a `__typename` property or be an exported class.");
}
// TODO: Add code action

@@ -475,14 +509,56 @@ function invalidFieldNonPublicAccessModifier() {

}
exports.invalidFieldNonPublicAccessModifier = invalidFieldNonPublicAccessModifier;
function invalidStaticModifier() {
return "Unexpected `static` modifier on non-method `@".concat(Extractor_1.FIELD_TAG, "`. `static` is only valid on method signatures.");
}
exports.invalidStaticModifier = invalidStaticModifier;
function staticMethodOnNonClass() {
return "Unexpected `@".concat(Extractor_1.FIELD_TAG, "` `static` method on non-class declaration. Static method fields may only be declared on exported class declarations.");
}
exports.staticMethodOnNonClass = staticMethodOnNonClass;
function staticMethodClassWithNamedExportNotNamed() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` static method's class to be named if exported without the `default` keyword.");
}
exports.staticMethodClassWithNamedExportNotNamed = staticMethodClassWithNamedExportNotNamed;
function oneOfNotSupportedGraphql(requiredVersion, foundVersion) {
return "OneOf input types are only supported in `graphql@".concat(requiredVersion, "` and later but Grats found `graphql@").concat(foundVersion, "`. Please upgrade your version of graphql-js in order to use this feature.");
}
function oneOfNotOnUnion() {
return "Expected the type of a @gqlInput with @oneOf to be attached to a TypeScript union.";
}
function oneOfFieldNotTypeLiteralWithOneProperty() {
return "Expected each member of a @oneOf @gqlInput to be a TypeScript object literal with exactly one property.";
}
function oneOfPropertyMissingTypeAnnotation() {
return "Expected each property of a @oneOf @gqlInput to have a type annotation.";
}
function contextTagOnNonDeclaration() {
return "Invalid `@".concat(Extractor_1.CONTEXT_TAG, "` tag annotation. Expected the `@").concat(Extractor_1.CONTEXT_TAG, "` tag to be attached to a type, interface or class declaration.");
}
function duplicateContextTag() {
return "Unexpected duplicate `@".concat(Extractor_1.CONTEXT_TAG, "` tag. Only one type in a project may be annotated with the `@").concat(Extractor_1.CONTEXT_TAG, "`.");
}
function userDefinedInfoTag() {
return "Unexpected user-defined `@".concat(Extractor_1.INFO_TAG, "` tag. Use the type `GqlInfo` exported from `grats`: `import { GqlInfo } from \"grats\";`.");
}
function invalidResolverParamType() {
return "Unexpected GraphQL type used as resolver parameter. Resolver input arguments must be specified as a single `args` object literal: `args: {argName: ArgType}`.";
}
function exportedArrowFunctionNotConst() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` arrow function to be declared as `const`.");
}
function exportedFieldVariableMultipleDeclarations(n) {
return "Expected only one declaration when defining a `@".concat(Extractor_1.FIELD_TAG, "`, found ").concat(n, ".");
}
function fieldVariableNotTopLevelExported() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` to be an exported top-level declaration. Grats needs to import resolver functions into it's generated schema module, so the resolver function must be exported from the module.");
}
function fieldVariableIsNotArrowFunction() {
return "Expected `@".concat(Extractor_1.FIELD_TAG, "` on variable declaration to be attached to an arrow function.");
}
function positionalResolverArgDoesNotHaveName() {
return "Expected resolver argument to have a name. Grats needs to be able to see the name of the argument in order to derive a GraphQL argument name.";
}
function positionalArgAndArgsObject() {
return "Unexpected arguments object in resolver that is also using positional GraphQL arguments. Grats expects that either all GraphQL arguments will be defined in a single object, or that all GraphQL arguments will be defined using positional arguments. The two strategies may not be combined.";
}
function contextOrInfoUsedInGraphQLPosition(kind) {
var tag = kind === "CONTEXT" ? Extractor_1.CONTEXT_TAG : Extractor_1.INFO_TAG;
return "Cannot use `".concat(tag, "` as a type in GraphQL type position.");
}

@@ -14,2 +14,4 @@ import { NameNode, DefinitionNode } from "graphql";

export declare const INPUT_TAG = "gqlInput";
export declare const CONTEXT_TAG = "gqlContext";
export declare const INFO_TAG = "gqlInfo";
export declare const IMPLEMENTS_TAG_DEPRECATED = "gqlImplements";

@@ -19,2 +21,3 @@ export declare const KILLS_PARENT_ON_EXCEPTION_TAG = "killsParentOnException";

export declare const SPECIFIED_BY_TAG = "specifiedBy";
export declare const ONE_OF_TAG = "oneOf";
export type ExtractionSnapshot = {

@@ -24,3 +27,2 @@ readonly definitions: DefinitionNode[];

readonly nameDefinitions: Map<ts.DeclarationStatement, NameDefinition>;
readonly contextReferences: Array<ts.Node>;
readonly typesWithTypename: Set<string>;

@@ -27,0 +29,0 @@ readonly interfaceDeclarations: Array<ts.InterfaceDeclaration>;

import { ListTypeNode, NamedTypeNode, Location as GraphQLLocation, NameNode, TypeNode, NonNullTypeNode, StringValueNode, ConstValueNode, ConstDirectiveNode, ConstArgumentNode, UnionTypeDefinitionNode, FieldDefinitionNode, InputValueDefinitionNode, FloatValueNode, IntValueNode, NullValueNode, BooleanValueNode, ConstListValueNode, ConstObjectValueNode, ConstObjectFieldNode, ObjectTypeDefinitionNode, EnumValueDefinitionNode, ScalarTypeDefinitionNode, InputObjectTypeDefinitionNode, EnumTypeDefinitionNode, InterfaceTypeDefinitionNode, ASTNode, ObjectTypeExtensionNode } from "graphql";
import * as ts from "typescript";
import { TsLocatableNode } from "./utils/DiagnosticError";
import { UnresolvedResolverParam, InputValueDefinitionNodeOrResolverArg } from "./metadataDirectives";
import { DiagnosticResult, TsLocatableNode } from "./utils/DiagnosticError";
export declare class GraphQLConstructor {

@@ -9,13 +10,16 @@ fieldMetadataDirective(node: ts.Node, metadata: {

exportName: string | null;
argCount: number | null;
}): ConstDirectiveNode;
killsParentOnExceptionDirective(node: ts.Node): ConstDirectiveNode;
unionTypeDefinition(node: ts.Node, name: NameNode, types: NamedTypeNode[], description: StringValueNode | null): UnionTypeDefinitionNode;
objectTypeDefinition(node: ts.Node, name: NameNode, fields: FieldDefinitionNode[], interfaces: NamedTypeNode[] | null, description: StringValueNode | null): ObjectTypeDefinitionNode;
objectTypeDefinition(node: ts.Node, name: NameNode, fields: FieldDefinitionNode[], interfaces: NamedTypeNode[] | null, description: StringValueNode | null, hasTypeNameField: boolean, exported: {
tsModulePath: string;
exportName: string | null;
} | null): ObjectTypeDefinitionNode;
interfaceTypeDefinition(node: ts.Node, name: NameNode, fields: FieldDefinitionNode[], interfaces: NamedTypeNode[] | null, description: StringValueNode | null): InterfaceTypeDefinitionNode;
enumTypeDefinition(node: ts.Node, name: NameNode, values: readonly EnumValueDefinitionNode[], description: StringValueNode | null): EnumTypeDefinitionNode;
abstractFieldDefinition(node: ts.Node, onType: NameNode, field: FieldDefinitionNode): ObjectTypeExtensionNode;
fieldDefinition(node: ts.Node, name: NameNode, type: TypeNode, args: readonly InputValueDefinitionNode[] | null, directives: readonly ConstDirectiveNode[], description: StringValueNode | null): FieldDefinitionNode;
fieldDefinition(node: ts.Node, name: NameNode, type: TypeNode, args: readonly InputValueDefinitionNode[] | null, directives: readonly ConstDirectiveNode[], description: StringValueNode | null, resolverParams: UnresolvedResolverParam[] | null): FieldDefinitionNode;
constObjectField(node: ts.Node, name: NameNode, value: ConstValueNode): ConstObjectFieldNode;
inputValueDefinition(node: ts.Node, name: NameNode, type: TypeNode, directives: readonly ConstDirectiveNode[] | null, defaultValue: ConstValueNode | null, description: StringValueNode | null): InputValueDefinitionNode;
inputValueDefinitionOrResolverArg(node: ts.Node, name: DiagnosticResult<NameNode>, type: TypeNode, directives: readonly ConstDirectiveNode[] | null, defaultValue: ConstValueNode | null, description: StringValueNode | null): InputValueDefinitionNodeOrResolverArg;
enumValueDefinition(node: ts.Node, name: NameNode, directives: readonly ConstDirectiveNode[] | undefined, description: StringValueNode | null): EnumValueDefinitionNode;

@@ -22,0 +26,0 @@ scalarTypeDefinition(node: ts.Node, name: NameNode, directives: readonly ConstDirectiveNode[] | null, description: StringValueNode | null): ScalarTypeDefinitionNode;

@@ -14,3 +14,4 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.loc = exports.GraphQLConstructor = void 0;
exports.GraphQLConstructor = void 0;
exports.loc = loc;
var graphql_1 = require("graphql");

@@ -33,5 +34,2 @@ var metadataDirectives_1 = require("./metadataDirectives");

}
if (metadata.argCount != null) {
args.push(this.constArgument(node, this.name(node, metadataDirectives_1.ARG_COUNT), this.int(node, metadata.argCount.toString())));
}
return this.constDirective(node, this.name(node, metadataDirectives_1.FIELD_METADATA_DIRECTIVE), args);

@@ -52,3 +50,3 @@ };

};
GraphQLConstructor.prototype.objectTypeDefinition = function (node, name, fields, interfaces, description) {
GraphQLConstructor.prototype.objectTypeDefinition = function (node, name, fields, interfaces, description, hasTypeNameField, exported) {
return {

@@ -58,6 +56,7 @@ kind: graphql_1.Kind.OBJECT_TYPE_DEFINITION,

description: description !== null && description !== void 0 ? description : undefined,
directives: undefined,
name: name,
fields: fields,
interfaces: interfaces !== null && interfaces !== void 0 ? interfaces : undefined,
hasTypeNameField: hasTypeNameField,
exported: exported !== null && exported !== void 0 ? exported : undefined,
};

@@ -96,3 +95,3 @@ };

/* Field Definitions */
GraphQLConstructor.prototype.fieldDefinition = function (node, name, type, args, directives, description) {
GraphQLConstructor.prototype.fieldDefinition = function (node, name, type, args, directives, description, resolverParams) {
return {

@@ -106,2 +105,3 @@ kind: graphql_1.Kind.FIELD_DEFINITION,

directives: this._optionalList(directives),
resolverParams: resolverParams !== null && resolverParams !== void 0 ? resolverParams : undefined,
};

@@ -123,2 +123,13 @@ };

};
GraphQLConstructor.prototype.inputValueDefinitionOrResolverArg = function (node, name, type, directives, defaultValue, description) {
return {
kind: graphql_1.Kind.INPUT_VALUE_DEFINITION,
loc: loc(node),
description: description !== null && description !== void 0 ? description : undefined,
name: name,
type: type,
defaultValue: defaultValue !== null && defaultValue !== void 0 ? defaultValue : undefined,
directives: this._optionalList(directives),
};
};
GraphQLConstructor.prototype.enumValueDefinition = function (node, name, directives, description) {

@@ -239,3 +250,2 @@ return {

}
exports.loc = loc;
function _dummyToken(sourceFile, pos) {

@@ -242,0 +252,0 @@ var _a = sourceFile.getLineAndCharacterOfPosition(pos), line = _a.line, character = _a.character;

@@ -25,3 +25,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.validateGratsOptions = void 0;
exports.validateGratsOptions = validateGratsOptions;
var DEFAULT_SDL_HEADER = "# Schema generated by Grats (https://grats.capt.dev)\n# Do not manually edit. Regenerate by running `npx grats`.";

@@ -130,2 +130,1 @@ var DEFAULT_TYPESCRIPT_HEADER = "/**\n * Executable schema generated by Grats (https://grats.capt.dev)\n * Do not manually edit. Regenerate by running `npx grats`.\n */";

}
exports.validateGratsOptions = validateGratsOptions;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveRelativePath = exports.relativePath = void 0;
exports.relativePath = relativePath;
exports.resolveRelativePath = resolveRelativePath;
var path_1 = require("path");

@@ -16,6 +17,4 @@ // Grats parses TypeScript files and finds resolvers. If the field resolver is a

}
exports.relativePath = relativePath;
function resolveRelativePath(relativePath) {
return (0, path_1.resolve)(gratsRoot, relativePath);
}
exports.resolveRelativePath = resolveRelativePath;

@@ -17,3 +17,4 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.getParsedTsConfig = exports.codegen = exports.extract = exports.printSDLWithoutMetadata = void 0;
exports.codegen = exports.extract = exports.printSDLWithoutMetadata = void 0;
exports.getParsedTsConfig = getParsedTsConfig;
var ts = require("typescript");

@@ -48,2 +49,1 @@ var gratsConfig_1 = require("./gratsConfig");

}
exports.getParsedTsConfig = getParsedTsConfig;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.computeInterfaceMap = void 0;
exports.computeInterfaceMap = computeInterfaceMap;
var helpers_1 = require("./utils/helpers");

@@ -90,2 +90,1 @@ var graphql_1 = require("graphql");

}
exports.computeInterfaceMap = computeInterfaceMap;

@@ -30,3 +30,6 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.extractSchemaAndDoc = exports.buildSchemaAndDocResultWithHost = exports.buildSchemaAndDocResult = exports.initTsPlugin = void 0;
exports.initTsPlugin = void 0;
exports.buildSchemaAndDocResult = buildSchemaAndDocResult;
exports.buildSchemaAndDocResultWithHost = buildSchemaAndDocResultWithHost;
exports.extractSchemaAndDoc = extractSchemaAndDoc;
var graphql_1 = require("graphql");

@@ -42,3 +45,2 @@ var DiagnosticError_1 = require("./utils/DiagnosticError");

var validateMergedInterfaces_1 = require("./validations/validateMergedInterfaces");
var validateContextReferences_1 = require("./validations/validateContextReferences");
var metadataDirectives_1 = require("./metadataDirectives");

@@ -51,4 +53,6 @@ var addInterfaceFields_1 = require("./transforms/addInterfaceFields");

var sortSchemaAst_1 = require("./transforms/sortSchemaAst");
var validateDuplicateContextOrInfo_1 = require("./validations/validateDuplicateContextOrInfo");
var validateSemanticNullability_1 = require("./validations/validateSemanticNullability");
var resolveTypes_1 = require("./transforms/resolveTypes");
var resolveResolverParams_1 = require("./transforms/resolveResolverParams");
// Export the TypeScript plugin implementation used by

@@ -67,3 +71,2 @@ // grats-ts-plugin

}
exports.buildSchemaAndDocResult = buildSchemaAndDocResult;
function buildSchemaAndDocResultWithHost(options, compilerHost) {

@@ -75,3 +78,2 @@ var program = ts.createProgram(options.fileNames, options.options, compilerHost);

}
exports.buildSchemaAndDocResultWithHost = buildSchemaAndDocResultWithHost;
/**

@@ -89,3 +91,3 @@ * The core transformation pipeline of Grats.

// Collect validation errors
var validationResult = (0, Result_1.concatResults)((0, validateMergedInterfaces_1.validateMergedInterfaces)(checker, snapshot.interfaceDeclarations), (0, validateContextReferences_1.validateContextReferences)(ctx, snapshot.contextReferences));
var validationResult = (0, Result_1.concatResults)((0, validateMergedInterfaces_1.validateMergedInterfaces)(checker, snapshot.interfaceDeclarations), (0, validateDuplicateContextOrInfo_1.validateDuplicateContextOrInfo)(ctx));
var docResult = new Result_1.ResultPipe(validationResult)

@@ -97,2 +99,3 @@ // Add the metadata directive definitions to definitions

.map(function (definitions) { return (0, filterNonGqlInterfaces_1.filterNonGqlInterfaces)(ctx, definitions); })
.andThen(function (definitions) { return (0, resolveResolverParams_1.resolveResolverParams)(ctx, definitions); })
.andThen(function (definitions) { return (0, resolveTypes_1.resolveTypes)(ctx, definitions); })

@@ -131,3 +134,2 @@ // If you define a field on an interface using the functional style, we need to add

}
exports.extractSchemaAndDoc = extractSchemaAndDoc;
// Given a SDL AST, build and validate a GraphQLSchema.

@@ -154,3 +156,3 @@ function buildSchemaFromDoc(doc) {

function combineSnapshots(snapshots) {
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e, e_6, _f, e_7, _g;
var e_1, _a, e_2, _b, e_3, _c, e_4, _d, e_5, _e, e_6, _f;
var result = {

@@ -160,3 +162,2 @@ definitions: [],

unresolvedNames: new Map(),
contextReferences: [],
typesWithTypename: new Set(),

@@ -169,4 +170,4 @@ interfaceDeclarations: [],

try {
for (var _h = (e_2 = void 0, __values(snapshot.definitions)), _j = _h.next(); !_j.done; _j = _h.next()) {
var definition = _j.value;
for (var _g = (e_2 = void 0, __values(snapshot.definitions)), _h = _g.next(); !_h.done; _h = _g.next()) {
var definition = _h.value;
result.definitions.push(definition);

@@ -178,3 +179,3 @@ }

try {
if (_j && !_j.done && (_b = _h.return)) _b.call(_h);
if (_h && !_h.done && (_b = _g.return)) _b.call(_g);
}

@@ -184,4 +185,4 @@ finally { if (e_2) throw e_2.error; }

try {
for (var _k = (e_3 = void 0, __values(snapshot.nameDefinitions)), _l = _k.next(); !_l.done; _l = _k.next()) {
var _m = __read(_l.value, 2), node = _m[0], definition = _m[1];
for (var _j = (e_3 = void 0, __values(snapshot.nameDefinitions)), _k = _j.next(); !_k.done; _k = _j.next()) {
var _l = __read(_k.value, 2), node = _l[0], definition = _l[1];
result.nameDefinitions.set(node, definition);

@@ -193,3 +194,3 @@ }

try {
if (_l && !_l.done && (_c = _k.return)) _c.call(_k);
if (_k && !_k.done && (_c = _j.return)) _c.call(_j);
}

@@ -199,4 +200,4 @@ finally { if (e_3) throw e_3.error; }

try {
for (var _o = (e_4 = void 0, __values(snapshot.unresolvedNames)), _p = _o.next(); !_p.done; _p = _o.next()) {
var _q = __read(_p.value, 2), node = _q[0], typeName = _q[1];
for (var _m = (e_4 = void 0, __values(snapshot.unresolvedNames)), _o = _m.next(); !_o.done; _o = _m.next()) {
var _p = __read(_o.value, 2), node = _p[0], typeName = _p[1];
result.unresolvedNames.set(node, typeName);

@@ -208,3 +209,3 @@ }

try {
if (_p && !_p.done && (_d = _o.return)) _d.call(_o);
if (_o && !_o.done && (_d = _m.return)) _d.call(_m);
}

@@ -214,5 +215,5 @@ finally { if (e_4) throw e_4.error; }

try {
for (var _r = (e_5 = void 0, __values(snapshot.contextReferences)), _s = _r.next(); !_s.done; _s = _r.next()) {
var contextReference = _s.value;
result.contextReferences.push(contextReference);
for (var _q = (e_5 = void 0, __values(snapshot.typesWithTypename)), _r = _q.next(); !_r.done; _r = _q.next()) {
var typeName = _r.value;
result.typesWithTypename.add(typeName);
}

@@ -223,3 +224,3 @@ }

try {
if (_s && !_s.done && (_e = _r.return)) _e.call(_r);
if (_r && !_r.done && (_e = _q.return)) _e.call(_q);
}

@@ -229,5 +230,5 @@ finally { if (e_5) throw e_5.error; }

try {
for (var _t = (e_6 = void 0, __values(snapshot.typesWithTypename)), _u = _t.next(); !_u.done; _u = _t.next()) {
var typeName = _u.value;
result.typesWithTypename.add(typeName);
for (var _s = (e_6 = void 0, __values(snapshot.interfaceDeclarations)), _t = _s.next(); !_t.done; _t = _s.next()) {
var interfaceDeclaration = _t.value;
result.interfaceDeclarations.push(interfaceDeclaration);
}

@@ -238,19 +239,6 @@ }

try {
if (_u && !_u.done && (_f = _t.return)) _f.call(_t);
if (_t && !_t.done && (_f = _s.return)) _f.call(_s);
}
finally { if (e_6) throw e_6.error; }
}
try {
for (var _v = (e_7 = void 0, __values(snapshot.interfaceDeclarations)), _w = _v.next(); !_w.done; _w = _v.next()) {
var interfaceDeclaration = _w.value;
result.interfaceDeclarations.push(interfaceDeclaration);
}
}
catch (e_7_1) { e_7 = { error: e_7_1 }; }
finally {
try {
if (_w && !_w.done && (_g = _v.return)) _g.call(_v);
}
finally { if (e_7) throw e_7.error; }
}
}

@@ -257,0 +245,0 @@ }

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.locate = void 0;
exports.locate = locate;
var graphql_1 = require("graphql");

@@ -41,3 +41,2 @@ var Result_1 = require("./utils/Result");

}
exports.locate = locate;
var ENTITY_NAME_REGEX = /^([A-Za-z0-9_]+)(?:\.([A-Za-z0-9_]+))?$/;

@@ -44,0 +43,0 @@ function parseEntityName(entityName) {

@@ -1,2 +0,4 @@

import { ConstDirectiveNode, DefinitionNode, DocumentNode, Location } from "graphql";
import * as ts from "typescript";
import { ConstDirectiveNode, ConstValueNode, DefinitionNode, DocumentNode, InputValueDefinitionNode, Kind, Location, NameNode, StringValueNode, TypeNode } from "graphql";
import { DiagnosticResult } from "./utils/DiagnosticError.js";
/**

@@ -34,2 +36,7 @@ * In most cases we can use directives to annotate constructs

wasSynthesized?: boolean;
hasTypeNameField: boolean;
exported?: {
tsModulePath: string;
exportName: string | null;
};
}

@@ -57,3 +64,40 @@ interface UnionTypeDefinitionNode {

}
interface FieldDefinitionNode {
/**
* Grats metadata: Indicates the params expected by the field resolver and their order
*/
resolverParams?: UnresolvedResolverParam[];
}
}
/**
* At extraction time we don't know if a resolver arg is context, info, or a
* positional GraphQL argument. If it's a positional argument, we need to ensure
* it has a valid name. If it's just info or context, it's fine if it doesn't
* have a name e.g. (destructured).
*/
export interface InputValueDefinitionNodeOrResolverArg {
readonly kind: Kind.INPUT_VALUE_DEFINITION;
readonly loc: Location;
readonly description?: StringValueNode;
readonly name: DiagnosticResult<NameNode>;
readonly type: TypeNode;
readonly defaultValue?: ConstValueNode;
readonly directives?: ReadonlyArray<ConstDirectiveNode>;
}
export type UnresolvedResolverParam = NamedFieldParam | PositionalFieldParam | Unresolved;
export type ResolvedResolverParam = NamedFieldParam | PositionalFieldParam;
export type NamedFieldParam = {
kind: "named";
sourceNode?: ts.Node;
name: FieldParam;
};
export type PositionalFieldParam = {
kind: "positionalArg";
inputDefinition: InputValueDefinitionNode;
};
export type Unresolved = {
kind: "unresolved";
inputDefinition: InputValueDefinitionNodeOrResolverArg;
};
export type FieldParam = "source" | "args" | "context" | "info";
export declare const FIELD_METADATA_DIRECTIVE = "metadata";

@@ -63,3 +107,2 @@ export declare const EXPORT_NAME_ARG = "exportName";

export declare const TS_MODULE_PATH_ARG = "tsModulePath";
export declare const ARG_COUNT = "argCount";
export declare const ASYNC_ITERABLE_ARG = "asyncIterable";

@@ -74,5 +117,4 @@ export declare const KILLS_PARENT_ON_EXCEPTION_DIRECTIVE = "killsParentOnException";

exportName: string | null;
argCount: number | null;
};
export declare function makeKillsParentOnExceptionDirective(loc: Location): ConstDirectiveNode;
export declare function parseFieldMetadataDirective(directive: ConstDirectiveNode): FieldMetadata;

@@ -28,3 +28,6 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.parseFieldMetadataDirective = exports.makeKillsParentOnExceptionDirective = exports.addMetadataDirectives = exports.DIRECTIVES_AST = exports.METADATA_DIRECTIVE_NAMES = exports.KILLS_PARENT_ON_EXCEPTION_DIRECTIVE = exports.ASYNC_ITERABLE_ARG = exports.ARG_COUNT = exports.TS_MODULE_PATH_ARG = exports.FIELD_NAME_ARG = exports.EXPORT_NAME_ARG = exports.FIELD_METADATA_DIRECTIVE = void 0;
exports.DIRECTIVES_AST = exports.METADATA_DIRECTIVE_NAMES = exports.KILLS_PARENT_ON_EXCEPTION_DIRECTIVE = exports.ASYNC_ITERABLE_ARG = exports.TS_MODULE_PATH_ARG = exports.FIELD_NAME_ARG = exports.EXPORT_NAME_ARG = exports.FIELD_METADATA_DIRECTIVE = void 0;
exports.addMetadataDirectives = addMetadataDirectives;
exports.makeKillsParentOnExceptionDirective = makeKillsParentOnExceptionDirective;
exports.parseFieldMetadataDirective = parseFieldMetadataDirective;
var graphql_1 = require("graphql");

@@ -36,3 +39,2 @@ var helpers_1 = require("./utils/helpers");

exports.TS_MODULE_PATH_ARG = "tsModulePath";
exports.ARG_COUNT = "argCount";
exports.ASYNC_ITERABLE_ARG = "asyncIterable";

@@ -44,7 +46,6 @@ exports.KILLS_PARENT_ON_EXCEPTION_DIRECTIVE = "killsParentOnException";

]);
exports.DIRECTIVES_AST = (0, graphql_1.parse)("\n directive @".concat(exports.FIELD_METADATA_DIRECTIVE, "(\n \"\"\"\n Name of property/method/function. Defaults to field name.\n \"\"\"\n ").concat(exports.FIELD_NAME_ARG, ": String\n \"\"\"\n Path of the TypeScript module to import if the field is a function.\n \"\"\"\n ").concat(exports.TS_MODULE_PATH_ARG, ": String\n \"\"\"\n Export name of the field. For function fields this is the exported function name,\n for static method fields, this is the exported class name.\n \"\"\"\n ").concat(exports.EXPORT_NAME_ARG, ": String\n \"\"\"\n Number of arguments. No value means property access\n \"\"\"\n ").concat(exports.ARG_COUNT, ": Int\n ) on FIELD_DEFINITION\n directive @").concat(exports.KILLS_PARENT_ON_EXCEPTION_DIRECTIVE, " on FIELD_DEFINITION\n"));
exports.DIRECTIVES_AST = (0, graphql_1.parse)("\n directive @".concat(exports.FIELD_METADATA_DIRECTIVE, "(\n \"\"\"\n Name of property/method/function. Defaults to field name.\n \"\"\"\n ").concat(exports.FIELD_NAME_ARG, ": String\n \"\"\"\n Path of the TypeScript module to import if the field is a function.\n \"\"\"\n ").concat(exports.TS_MODULE_PATH_ARG, ": String\n \"\"\"\n Export name of the field. For function fields this is the exported function name,\n for static method fields, this is the exported class name.\n \"\"\"\n ").concat(exports.EXPORT_NAME_ARG, ": String\n ) on FIELD_DEFINITION\n directive @").concat(exports.KILLS_PARENT_ON_EXCEPTION_DIRECTIVE, " on FIELD_DEFINITION\n"));
function addMetadataDirectives(definitions) {
return __spreadArray(__spreadArray([], __read(exports.DIRECTIVES_AST.definitions), false), __read(definitions), false);
}
exports.addMetadataDirectives = addMetadataDirectives;
function makeKillsParentOnExceptionDirective(loc) {

@@ -63,3 +64,2 @@ return {

}
exports.makeKillsParentOnExceptionDirective = makeKillsParentOnExceptionDirective;
function parseFieldMetadataDirective(directive) {

@@ -73,6 +73,4 @@ if (directive.name.value !== exports.FIELD_METADATA_DIRECTIVE) {

exportName: getStringArg(directive, exports.EXPORT_NAME_ARG),
argCount: getIntArg(directive, exports.ARG_COUNT),
};
}
exports.parseFieldMetadataDirective = parseFieldMetadataDirective;
function getStringArg(directive, argName) {

@@ -89,12 +87,1 @@ var _a;

}
function getIntArg(directive, argName) {
var _a;
var arg = (_a = directive.arguments) === null || _a === void 0 ? void 0 : _a.find(function (arg) { return arg.name.value === argName; });
if (!arg) {
return null;
}
if (arg.value.kind !== graphql_1.Kind.INT) {
throw new Error("Expected argument ".concat(argName, " to be an int"));
}
return parseInt(arg.value.value, 10);
}
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.printSDLWithoutMetadata = exports.applySDLHeader = exports.printGratsSDL = exports.applyTypeScriptHeader = exports.printExecutableSchema = void 0;
exports.printExecutableSchema = printExecutableSchema;
exports.applyTypeScriptHeader = applyTypeScriptHeader;
exports.printGratsSDL = printGratsSDL;
exports.applySDLHeader = applySDLHeader;
exports.printSDLWithoutMetadata = printSDLWithoutMetadata;
var graphql_1 = require("graphql");

@@ -15,7 +19,5 @@ var codegen_1 = require("./codegen");

}
exports.printExecutableSchema = printExecutableSchema;
function applyTypeScriptHeader(config, code) {
return formatHeader(config.tsSchemaHeader, code);
}
exports.applyTypeScriptHeader = applyTypeScriptHeader;
/**

@@ -29,7 +31,5 @@ * Prints SDL, potentially omitting directives depending upon the config.

}
exports.printGratsSDL = printGratsSDL;
function applySDLHeader(config, sdl) {
return formatHeader(config.schemaHeader, sdl);
}
exports.applySDLHeader = applySDLHeader;
function printSDLWithoutMetadata(doc) {

@@ -51,3 +51,2 @@ var trimmed = (0, graphql_1.visit)(doc, {

}
exports.printSDLWithoutMetadata = printSDLWithoutMetadata;
function formatHeader(header, code) {

@@ -54,0 +53,0 @@ if (header !== null) {

@@ -28,3 +28,5 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.makeSemanticNonNullDirective = exports.addSemanticNonNullDirective = exports.DIRECTIVES_AST = exports.SEMANTIC_NON_NULL_DIRECTIVE = void 0;
exports.DIRECTIVES_AST = exports.SEMANTIC_NON_NULL_DIRECTIVE = void 0;
exports.addSemanticNonNullDirective = addSemanticNonNullDirective;
exports.makeSemanticNonNullDirective = makeSemanticNonNullDirective;
var graphql_1 = require("graphql");

@@ -43,3 +45,2 @@ var helpers_1 = require("./utils/helpers");

}
exports.addSemanticNonNullDirective = addSemanticNonNullDirective;
function makeSemanticNonNullDirective(loc) {

@@ -57,2 +58,1 @@ return {

}
exports.makeSemanticNonNullDirective = makeSemanticNonNullDirective;

@@ -25,3 +25,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.addInterfaceFields = void 0;
exports.addInterfaceFields = addInterfaceFields;
var E = require("../Errors");

@@ -77,3 +77,2 @@ var graphql_1 = require("graphql");

}
exports.addInterfaceFields = addInterfaceFields;
// A field definition may be on a concrete type, or on an interface. If it's on an interface,

@@ -120,3 +119,3 @@ // we need to add it to each concrete type that implements the interface.

value: implementor.name,
loc: doc.loc,
loc: doc.loc, // Bit of a lie, but I don't see a better option.
tsIdentifier: (0, helpers_1.uniqueId)(),

@@ -123,0 +122,0 @@ };

@@ -39,3 +39,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.applyDefaultNullability = void 0;
exports.applyDefaultNullability = applyDefaultNullability;
var graphql_1 = require("graphql");

@@ -96,2 +96,1 @@ var DiagnosticError_1 = require("../utils/DiagnosticError");

}
exports.applyDefaultNullability = applyDefaultNullability;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.filterNonGqlInterfaces = void 0;
exports.filterNonGqlInterfaces = filterNonGqlInterfaces;
var graphql_1 = require("graphql");

@@ -34,3 +34,2 @@ /**

}
exports.filterNonGqlInterfaces = filterNonGqlInterfaces;
function filterInterfaces(ctx, t) {

@@ -37,0 +36,0 @@ if (t.interfaces == null || t.interfaces.length === 0) {

@@ -39,3 +39,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.mergeExtensions = void 0;
exports.mergeExtensions = mergeExtensions;
var graphql_1 = require("graphql");

@@ -94,3 +94,2 @@ var helpers_1 = require("../utils/helpers");

}
exports.mergeExtensions = mergeExtensions;
// Map a key to an array of values.

@@ -97,0 +96,0 @@ var MultiMap = /** @class */ (function () {

@@ -41,3 +41,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.resolveTypes = void 0;
exports.resolveTypes = resolveTypes;
var graphql_1 = require("graphql");

@@ -60,3 +60,2 @@ var GraphQLConstructor_1 = require("../GraphQLConstructor");

}
exports.resolveTypes = resolveTypes;
/**

@@ -63,0 +62,0 @@ * Template extraction happens in two phases and resolves named type references

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.extractSnapshotsFromProgram = void 0;
exports.extractSnapshotsFromProgram = extractSnapshotsFromProgram;
var ts = require("typescript");

@@ -49,2 +49,1 @@ var Extractor_1 = require("../Extractor");

}
exports.extractSnapshotsFromProgram = extractSnapshotsFromProgram;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.sortSchemaAst = void 0;
exports.sortSchemaAst = sortSchemaAst;
var graphql_1 = require("graphql");

@@ -65,3 +65,2 @@ var naturalCompare_1 = require("../utils/naturalCompare");

}
exports.sortSchemaAst = sortSchemaAst;
// Given an optional array of AST nodes, sort them by name or kind.

@@ -68,0 +67,0 @@ function sortNamed(arr) {

@@ -39,3 +39,4 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.initTsPlugin = void 0;
exports.initTsPlugin = initTsPlugin;
var typescript_1 = require("typescript");
var Extractor_1 = require("../Extractor");

@@ -80,2 +81,18 @@ var DiagnosticError_1 = require("../utils/DiagnosticError");

}
if (ts.version !== typescript_1.version) {
proxy.getCompilerOptionsDiagnostics = function () {
var prev = info.languageService.getCompilerOptionsDiagnostics();
return __spreadArray(__spreadArray([], __read(prev), false), [
{
category: ts.DiagnosticCategory.Error,
code: 0,
messageText: typeScriptVersionMismatch(ts.version),
file: undefined,
start: undefined,
length: undefined,
},
], false);
};
return proxy;
}
proxy.getSyntacticDiagnostics = function (filename) {

@@ -126,2 +143,4 @@ var _a;

}
exports.initTsPlugin = initTsPlugin;
function typeScriptVersionMismatch(extensionVersion) {
return "grats-plugin-ts error: The version of TypeScript picked up by Grats does not match the version used by VSCode.\nGrats is using ".concat(typescript_1.version, " but VSCode is using ").concat(extensionVersion, ".\nThis may be caused by a yarn.lock or package-lock.json which is pinning a different version of TypeScript for Grats than the version used by the rest of your project.\nSee https://github.com/captbaritone/grats/issues/142> for more information.");
}

@@ -8,3 +8,3 @@ import { InputObjectTypeDefinitionNode, InterfaceTypeDefinitionNode, NameNode, ObjectTypeDefinitionNode, UnionTypeDefinitionNode } from "graphql";

name: NameNode;
kind: "TYPE" | "INTERFACE" | "UNION" | "SCALAR" | "INPUT_OBJECT" | "ENUM";
kind: "TYPE" | "INTERFACE" | "UNION" | "SCALAR" | "INPUT_OBJECT" | "ENUM" | "CONTEXT" | "INFO";
};

@@ -33,2 +33,3 @@ type TsIdentifier = number;

private _markUnresolvedType;
allNameDefinitions(): Iterable<NameDefinition>;
findSymbolDeclaration(startSymbol: ts.Symbol): ts.Declaration | null;

@@ -35,0 +36,0 @@ private resolveSymbol;

@@ -108,2 +108,5 @@ "use strict";

};
TypeContext.prototype.allNameDefinitions = function () {
return this._declarationToName.values();
};
TypeContext.prototype.findSymbolDeclaration = function (startSymbol) {

@@ -148,2 +151,5 @@ var _a;

}
if (nameDefinition.kind === "CONTEXT" || nameDefinition.kind === "INFO") {
return (0, Result_1.err)((0, DiagnosticError_1.gqlErr)((0, helpers_1.loc)(unresolved), E.contextOrInfoUsedInGraphQLPosition(nameDefinition.kind), [(0, DiagnosticError_1.gqlRelated)((0, helpers_1.loc)(nameDefinition.name), "Defined here")]));
}
return (0, Result_1.ok)(__assign(__assign({}, unresolved), { value: nameDefinition.name.value }));

@@ -171,3 +177,3 @@ };

if (definition == null) {
throw new Error("Expected to find name definition.");
return (0, Result_1.err)((0, DiagnosticError_1.gqlErr)((0, helpers_1.loc)(nameNode), E.unresolvedTypeReference()));
}

@@ -191,2 +197,7 @@ return (0, Result_1.ok)(definition);

}
if (nameDefinition.kind === "CONTEXT" || nameDefinition.kind === "INFO") {
return (0, Result_1.err)((0, DiagnosticError_1.tsErr)(node, E.contextOrInfoUsedInGraphQLPosition(nameDefinition.kind), [
(0, DiagnosticError_1.gqlRelated)((0, helpers_1.loc)(nameDefinition.name), "Defined here"),
]));
}
return (0, Result_1.ok)(nameDefinition.name.value);

@@ -193,0 +204,0 @@ };

@@ -0,1 +1,2 @@

import type { GraphQLResolveInfo } from "graphql";
/** @gqlScalar */

@@ -7,1 +8,3 @@ export type Float = number;

export type ID = string;
/** @gqlInfo */
export type GqlInfo = GraphQLResolveInfo;

@@ -30,3 +30,10 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.graphqlSourceToSourceFile = exports.tsRelated = exports.tsErr = exports.rangeErr = exports.gqlRelated = exports.gqlErr = exports.graphQlErrorToDiagnostic = exports.FAKE_ERROR_CODE = exports.ReportableDiagnostics = void 0;
exports.FAKE_ERROR_CODE = exports.ReportableDiagnostics = void 0;
exports.graphQlErrorToDiagnostic = graphQlErrorToDiagnostic;
exports.gqlErr = gqlErr;
exports.gqlRelated = gqlRelated;
exports.rangeErr = rangeErr;
exports.tsErr = tsErr;
exports.tsRelated = tsRelated;
exports.graphqlSourceToSourceFile = graphqlSourceToSourceFile;
var ts = require("typescript");

@@ -124,3 +131,2 @@ var ReportableDiagnostics = /** @class */ (function () {

}
exports.graphQlErrorToDiagnostic = graphQlErrorToDiagnostic;
function gqlErr(loc, message, relatedInformation) {

@@ -138,3 +144,2 @@ return {

}
exports.gqlErr = gqlErr;
function gqlRelated(loc, message) {

@@ -150,3 +155,2 @@ return {

}
exports.gqlRelated = gqlRelated;
function rangeErr(file, commentRange, message, relatedInformation, fix) {

@@ -167,3 +171,2 @@ var start = commentRange.pos;

}
exports.rangeErr = rangeErr;
function tsErr(node, message, relatedInformation, fix) {

@@ -185,3 +188,2 @@ var start = node.getStart();

}
exports.tsErr = tsErr;
function tsRelated(node, message) {

@@ -197,6 +199,4 @@ return {

}
exports.tsRelated = tsRelated;
function graphqlSourceToSourceFile(source) {
return ts.createSourceFile(source.name, source.body, ts.ScriptTarget.Latest);
}
exports.graphqlSourceToSourceFile = graphqlSourceToSourceFile;

@@ -16,2 +16,3 @@ import { Location } from "graphql";

export declare function uniqueId(): number;
export declare function invariant(condition: unknown, message: string): asserts condition;
export declare function nullThrows<T>(value: T | null | undefined): T;

@@ -14,3 +14,9 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.nullThrows = exports.uniqueId = exports.astNode = exports.loc = exports.extend = exports.DefaultMap = void 0;
exports.DefaultMap = void 0;
exports.extend = extend;
exports.loc = loc;
exports.astNode = astNode;
exports.uniqueId = uniqueId;
exports.invariant = invariant;
exports.nullThrows = nullThrows;
var DefaultMap = /** @class */ (function () {

@@ -48,3 +54,2 @@ function DefaultMap(getDefault) {

}
exports.extend = extend;
function loc(item) {

@@ -56,3 +61,2 @@ if (item.loc == null) {

}
exports.loc = loc;
function astNode(item) {

@@ -64,3 +68,2 @@ if (item.astNode == null) {

}
exports.astNode = astNode;
var i = 0;

@@ -70,3 +73,7 @@ function uniqueId() {

}
exports.uniqueId = uniqueId;
function invariant(condition, message) {
if (!condition) {
throw new Error("Grats Error. Invariant failed: ".concat(message, ". This error represents an error in Grats. Please report it."));
}
}
function nullThrows(value) {

@@ -78,2 +85,1 @@ if (value == null) {

}
exports.nullThrows = nullThrows;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.traverseJSDocTags = void 0;
exports.traverseJSDocTags = traverseJSDocTags;
var ts = require("typescript");

@@ -51,2 +51,1 @@ // Recursively search for all JSDoc tags calling `cb` on each one with its

}
exports.traverseJSDocTags = traverseJSDocTags;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.naturalCompare = void 0;
exports.naturalCompare = naturalCompare;
/**

@@ -52,3 +52,2 @@ * Returns a number indicating whether a reference string comes before, or after,

}
exports.naturalCompare = naturalCompare;
var DIGIT_0 = 48;

@@ -55,0 +54,0 @@ var DIGIT_9 = 57;

@@ -39,3 +39,7 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.concatResults = exports.collectResults = exports.ResultPipe = exports.err = exports.ok = void 0;
exports.ResultPipe = void 0;
exports.ok = ok;
exports.err = err;
exports.collectResults = collectResults;
exports.concatResults = concatResults;
// Create a new `Result` in an OK state.

@@ -45,3 +49,2 @@ function ok(value) {

}
exports.ok = ok;
// Create a new `Result` in an ERROR state.

@@ -51,3 +54,2 @@ function err(err) {

}
exports.err = err;
/**

@@ -117,3 +119,2 @@ * Helper class for chaining together a series of `Result` operations.

}
exports.collectResults = collectResults;
function concatResults(result1, result2) {

@@ -131,2 +132,1 @@ if (result1.kind === "ERROR" && result2.kind === "ERROR") {

}
exports.concatResults = concatResults;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.validateAsyncIterable = void 0;
exports.validateAsyncIterable = validateAsyncIterable;
var graphql_1 = require("graphql");

@@ -65,3 +65,2 @@ var DiagnosticError_1 = require("../utils/DiagnosticError");

}
exports.validateAsyncIterable = validateAsyncIterable;
function innerType(type) {

@@ -68,0 +67,0 @@ if (type.kind === graphql_1.Kind.NON_NULL_TYPE) {

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.validateMergedInterfaces = void 0;
exports.validateMergedInterfaces = validateMergedInterfaces;
var ts = require("typescript");

@@ -70,2 +70,1 @@ var E = require("../Errors");

}
exports.validateMergedInterfaces = validateMergedInterfaces;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.validateSemanticNullability = void 0;
exports.validateSemanticNullability = validateSemanticNullability;
var graphql_1 = require("graphql");

@@ -97,3 +97,2 @@ var DiagnosticError_1 = require("../utils/DiagnosticError");

}
exports.validateSemanticNullability = validateSemanticNullability;
function findSemanticNonNull(field) {

@@ -100,0 +99,0 @@ var _a, _b;

@@ -14,3 +14,3 @@ "use strict";

Object.defineProperty(exports, "__esModule", { value: true });
exports.validateTypenames = void 0;
exports.validateTypenames = validateTypenames;
var graphql_1 = require("graphql");

@@ -32,3 +32,2 @@ var DiagnosticError_1 = require("../utils/DiagnosticError");

var type = abstractTypes_1_1.value;
// TODO: If we already implement resolveType, we don't need to check implementors
var typeImplementors = schema.getPossibleTypes(type).filter(graphql_1.isType);

@@ -47,4 +46,9 @@ try {

}
else if (!hasTypename.has(implementor.name)) {
var err_1 = (0, DiagnosticError_1.gqlErr)((0, helpers_1.loc)(ast.name), E.concreteTypeMissingTypename(implementor.name));
else if (!hasTypename.has(implementor.name) && ast.exported == null) {
var message = type instanceof graphql_1.GraphQLInterfaceType
? E.concreteTypenameImplementingInterfaceCannotBeResolved(implementor.name, type.name)
: E.concreteTypenameInUnionCannotBeResolved(implementor.name, type.name);
var err_1 = (0, DiagnosticError_1.gqlErr)((0, helpers_1.loc)(ast.name), message, [
(0, DiagnosticError_1.gqlRelated)((0, helpers_1.loc)((0, helpers_1.nullThrows)(type.astNode).name), "".concat(type.name, " is defined here:")),
]);
errors.push(err_1);

@@ -75,2 +79,1 @@ }

}
exports.validateTypenames = validateTypenames;
{
"name": "grats",
"version": "0.0.0-main-98bd6a07",
"version": "0.0.0-main-992bf789",
"main": "dist/src/index.js",

@@ -14,4 +14,4 @@ "bin": "dist/src/cli.js",

"commander": "^10.0.0",
"graphql": "^16.6.0",
"typescript": "^5.0.2"
"graphql": "^16.9.0",
"typescript": "5.5.4"
},

@@ -36,6 +36,5 @@ "devDependencies": {

},
"packageManager": "pnpm@8.12.0",
"engines": {
"node": ">=16 <=21",
"pnpm": "^8"
"pnpm": ">=8 <=9"
},

@@ -42,0 +41,0 @@ "bugs": {

Sorry, the diff of this file is too big to display

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc