prisma-binding
Version:
[](https://circleci.com/gh/graphcool/graphcool-binding) [](https://badge.fury.io/js/graphcool-binding)
152 lines • 7.46 kB
JavaScript
;
var __extends = (this && this.__extends) || (function () {
var extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [0, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_binding_1 = require("graphql-binding");
var jsonwebtoken_1 = require("jsonwebtoken");
var link_1 = require("./link");
var graphql_1 = require("graphql");
var info_1 = require("./info");
var graphql_import_1 = require("graphql-import");
var SharedLink_1 = require("./SharedLink");
var graphql_tools_1 = require("graphql-tools");
var Handler_1 = require("./Handler");
var typeDefsCache = {};
var sharedLink = new SharedLink_1.SharedLink();
var remoteSchema;
var Prisma = /** @class */ (function (_super) {
__extends(Prisma, _super);
function Prisma(_a) {
var typeDefs = _a.typeDefs, endpoint = _a.endpoint, secret = _a.secret, fragmentReplacements = _a.fragmentReplacements, debug = _a.debug;
var _this = this;
if (!typeDefs) {
throw new Error('No `typeDefs` provided when calling `new Prisma()`');
}
if (typeDefs.endsWith('.graphql')) {
typeDefs = getCachedTypeDefs(typeDefs);
}
if (endpoint === undefined) {
throw new Error("No Prisma endpoint found. Please provide the `endpoint` constructor option.");
}
if (!endpoint.startsWith('http')) {
throw new Error("Invalid Prisma endpoint provided: " + endpoint);
}
if (secret === undefined) {
throw new Error("No Prisma secret found. Please provide the `secret` constructor option.");
}
fragmentReplacements = fragmentReplacements || {};
debug = debug || false;
var token = jsonwebtoken_1.sign({}, secret);
var link = link_1.makePrismaLink({ endpoint: endpoint, token: token, debug: debug });
if (!remoteSchema) {
remoteSchema = graphql_tools_1.makeRemoteExecutableSchema({
link: sharedLink,
schema: typeDefs,
});
}
var before = function () {
sharedLink.setInnerLink(link);
};
_this = _super.call(this, { schema: remoteSchema, fragmentReplacements: fragmentReplacements, before: before, handler: Handler_1.Handler, subscriptionHandler: Handler_1.SubscriptionHandler }) || this;
_this.exists = new Proxy({}, new ExistsHandler(remoteSchema, _this.existsDelegate.bind(_this)));
return _this;
}
Prisma.prototype.existsDelegate = function (operation, fieldName, args, context, info) {
this.before();
return this
.delegate(operation, fieldName, args, context, info)
.then(function (res) { return res.length > 0; });
};
return Prisma;
}(graphql_binding_1.Binding));
exports.Prisma = Prisma;
var ExistsHandler = /** @class */ (function () {
function ExistsHandler(schema, delegate) {
this.schema = schema;
this.delegate = delegate;
}
ExistsHandler.prototype.get = function (target, typeName) {
var _this = this;
return function (where) { return __awaiter(_this, void 0, void 0, function () {
var rootFieldName, args, info;
return __generator(this, function (_a) {
rootFieldName = this.findRootFieldName(typeName, this.schema);
args = { where: where };
info = info_1.buildExistsInfo(rootFieldName, this.schema);
return [2 /*return*/, this.delegate('query', rootFieldName, args, {}, info)];
});
}); };
};
ExistsHandler.prototype.findRootFieldName = function (typeName, schema) {
var fields = schema.getQueryType().getFields();
// Loop over all query root fields
for (var field in fields) {
var fieldDef = fields[field];
var type = fieldDef.type;
var foundList = false;
// Traverse the wrapping types (if any)
while (graphql_1.isWrappingType(type)) {
type = type.ofType;
// One of those wrappings need to be a GraphQLList for this field to qualify
foundList = foundList || graphql_1.isListType(type);
}
if (foundList && type.name == typeName) {
return fieldDef.name;
}
}
throw new Error("No query root field found for type '" + typeName + "'");
};
return ExistsHandler;
}());
function getCachedTypeDefs(schemaPath) {
if (typeDefsCache[schemaPath]) {
return typeDefsCache[schemaPath];
}
var schema = graphql_import_1.importSchema(schemaPath);
typeDefsCache[schemaPath] = schema;
return schema;
}
//# sourceMappingURL=Prisma.js.map