New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

reactive-graphql

Package Overview
Dependencies
Maintainers
13
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

reactive-graphql - npm Package Compare versions

Comparing version 2.0.0 to 3.0.0

dist/reactive-graphql.d.ts

8

dist/__tests__/fieldNotFoundMessageForType-test.js
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var graphql_1 = require("graphql");
var __1 = require("..");
var reactive_graphql_1 = require("../reactive-graphql");
describe("fieldNotFoundMessageForType", function () {
it("returns a helpful message for null", function () {
expect(__1.fieldNotFoundMessageForType(null)).toBe("The type should not be null.");
expect(reactive_graphql_1.fieldNotFoundMessageForType(null)).toBe("The type should not be null.");
});
it("returns a helpful message for scalar types", function () {
expect(__1.fieldNotFoundMessageForType(new graphql_1.GraphQLScalarType({
expect(reactive_graphql_1.fieldNotFoundMessageForType(new graphql_1.GraphQLScalarType({
name: "Odd",

@@ -18,3 +18,3 @@ serialize: function (value) {

it("returns all field names for object type", function () {
expect(__1.fieldNotFoundMessageForType(new graphql_1.GraphQLObjectType({
expect(reactive_graphql_1.fieldNotFoundMessageForType(new graphql_1.GraphQLObjectType({
name: "Row",

@@ -21,0 +21,0 @@ fields: function () { return ({

@@ -6,2 +6,13 @@ "use strict";

};
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
var __importDefault = (this && this.__importDefault) || function (mod) {

@@ -16,7 +27,7 @@ return (mod && mod.__esModule) ? mod : { "default": mod };

var graphql_tag_1 = __importDefault(require("graphql-tag"));
var __1 = __importDefault(require("../"));
var __1 = require("../");
var typeDefs = "\n type Shuttle {\n name: String!\n firstFlight: Int\n }\n\n type Query {\n launched(name: String): [Shuttle!]!\n }\n\n type Mutation {\n createShuttle(name: String): Shuttle!\n createShuttleList(name: String): [Shuttle!]!\n }\n";
var mockResolvers = {
Query: {
launched: function (_, args, ctx) {
launched: function (parent, args, ctx) {
var name = args.name;

@@ -26,3 +37,8 @@ // act according with the type of filter

// When no filter is passed
return ctx.query;
if (!parent) {
return ctx.query;
}
return ctx.query.pipe(operators_1.map(function (shuttles) {
return shuttles.map(function (shuttle) { return (__assign({}, shuttle, { name: shuttle.name + parent.shuttleSuffix })); });
}));
}

@@ -126,2 +142,5 @@ else if (typeof name === "string") {

};
itMarbles.only = function (title, test) {
return it.only(title, jest_1.marbles(test));
};
describe("graphqlObservable", function () {

@@ -136,5 +155,15 @@ describe("Query", function () {

});
var result = __1.default(query, schema, { query: dataSource });
var result = __1.graphql(schema, query, null, { query: dataSource });
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("solves listing all fields with string query", function (m) {
var query = "\n query {\n launched {\n name\n }\n }\n ";
var expectedData = [{ name: "discovery" }];
var dataSource = rxjs_1.of(expectedData);
var expected = m.cold("(a|)", {
a: { data: { launched: expectedData } }
});
var result = __1.graphql(schema, query, null, { query: dataSource });
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("filters by variable argument", function (m) {

@@ -148,4 +177,5 @@ var query = graphql_tag_1.default(templateObject_2 || (templateObject_2 = __makeTemplateObject(["\n query {\n launched(name: $nameFilter) {\n name\n firstFlight\n }\n }\n "], ["\n query {\n launched(name: $nameFilter) {\n name\n firstFlight\n }\n }\n "])));

var nameFilter = rxjs_1.of("apollo11");
var result = __1.default(query, schema, {
query: dataSource,
var result = __1.graphql(schema, query, null, {
query: dataSource
}, {
nameFilter: nameFilter

@@ -162,3 +192,3 @@ });

});
var result = __1.default(query, schema, {
var result = __1.graphql(schema, query, null, {
query: dataSource

@@ -175,3 +205,3 @@ });

});
var result = __1.default(query, schema, {
var result = __1.graphql(schema, query, null, {
query: dataSource

@@ -188,3 +218,3 @@ });

});
var result = __1.default(query, schema, {
var result = __1.graphql(schema, query, null, {
query: dataSource

@@ -194,22 +224,36 @@ });

});
itMarbles.only("resolves using root value", function (m) {
var query = graphql_tag_1.default(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n query {\n launched {\n name\n }\n }\n "], ["\n query {\n launched {\n name\n }\n }\n "])));
var expectedData = [{ name: "challenger", firstFlight: 1984 }];
var dataSource = rxjs_1.of(expectedData);
var expected = m.cold("(a|)", {
a: { data: { launched: [{ name: "challenger-nasa" }] } }
});
var result = __1.graphql(schema, query, {
shuttleSuffix: "-nasa"
}, {
query: dataSource
});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
describe("Field Resolvers", function () {
describe("Leafs", function () {
itMarbles("defaults to return the property on the object", function (m) {
var query = graphql_tag_1.default(templateObject_6 || (templateObject_6 = __makeTemplateObject(["\n query {\n plain {\n noFieldResolver\n }\n }\n "], ["\n query {\n plain {\n noFieldResolver\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n query {\n plain {\n noFieldResolver\n }\n }\n "], ["\n query {\n plain {\n noFieldResolver\n }\n }\n "])));
var expected = m.cold("(a|)", {
a: { data: { plain: { noFieldResolver: "Yes" } } }
});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("if defined it executes the field resolver", function (m) {
var query = graphql_tag_1.default(templateObject_7 || (templateObject_7 = __makeTemplateObject(["\n query {\n plain {\n fieldResolver\n }\n }\n "], ["\n query {\n plain {\n fieldResolver\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n query {\n plain {\n fieldResolver\n }\n }\n "], ["\n query {\n plain {\n fieldResolver\n }\n }\n "])));
var expected = m.cold("(a|)", {
a: { data: { plain: { fieldResolver: "I am a field resolver" } } }
});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("the field resolvers 1st argument is parent", function (m) {
var query = graphql_tag_1.default(templateObject_8 || (templateObject_8 = __makeTemplateObject(["\n query {\n plain {\n giveMeTheParentFieldResolver\n }\n }\n "], ["\n query {\n plain {\n giveMeTheParentFieldResolver\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n query {\n plain {\n giveMeTheParentFieldResolver\n }\n }\n "], ["\n query {\n plain {\n giveMeTheParentFieldResolver\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -226,7 +270,7 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("the field resolvers 2nd argument is arguments", function (m) {
var query = graphql_tag_1.default(templateObject_9 || (templateObject_9 = __makeTemplateObject(["\n query {\n plain {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\")\n }\n }\n "], ["\n query {\n plain {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\")\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n query {\n plain {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\")\n }\n }\n "], ["\n query {\n plain {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\")\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -243,7 +287,7 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("the field resolvers 3rd argument is context", function (m) {
var query = graphql_tag_1.default(templateObject_10 || (templateObject_10 = __makeTemplateObject(["\n query {\n plain {\n giveMeTheContextFieldResolver\n }\n }\n "], ["\n query {\n plain {\n giveMeTheContextFieldResolver\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n query {\n plain {\n giveMeTheContextFieldResolver\n }\n }\n "], ["\n query {\n plain {\n giveMeTheContextFieldResolver\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -258,3 +302,3 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);

@@ -265,3 +309,3 @@ });

itMarbles("if defined it executes the field resolver", function (m) {
var query = graphql_tag_1.default(templateObject_11 || (templateObject_11 = __makeTemplateObject(["\n query {\n item {\n nodeFieldResolver {\n value\n }\n }\n }\n "], ["\n query {\n item {\n nodeFieldResolver {\n value\n }\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n query {\n item {\n nodeFieldResolver {\n value\n }\n }\n }\n "], ["\n query {\n item {\n nodeFieldResolver {\n value\n }\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -276,7 +320,7 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("the field resolvers 1st argument is parent", function (m) {
var query = graphql_tag_1.default(templateObject_12 || (templateObject_12 = __makeTemplateObject(["\n query {\n item {\n giveMeTheParentFieldResolver {\n value\n }\n }\n }\n "], ["\n query {\n item {\n giveMeTheParentFieldResolver {\n value\n }\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n query {\n item {\n giveMeTheParentFieldResolver {\n value\n }\n }\n }\n "], ["\n query {\n item {\n giveMeTheParentFieldResolver {\n value\n }\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -295,7 +339,7 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("the field resolvers 2nd argument is arguments", function (m) {
var query = graphql_tag_1.default(templateObject_13 || (templateObject_13 = __makeTemplateObject(["\n query {\n item {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\") {\n value\n }\n }\n }\n "], ["\n query {\n item {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\") {\n value\n }\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n query {\n item {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\") {\n value\n }\n }\n }\n "], ["\n query {\n item {\n giveMeTheArgsFieldResolver(arg: \"My passed arg\") {\n value\n }\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -314,7 +358,7 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("the field resolvers 3rd argument is context", function (m) {
var query = graphql_tag_1.default(templateObject_14 || (templateObject_14 = __makeTemplateObject(["\n query {\n item {\n giveMeTheContextFieldResolver {\n value\n }\n }\n }\n "], ["\n query {\n item {\n giveMeTheContextFieldResolver {\n value\n }\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n query {\n item {\n giveMeTheContextFieldResolver {\n value\n }\n }\n }\n "], ["\n query {\n item {\n giveMeTheContextFieldResolver {\n value\n }\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -329,3 +373,3 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);

@@ -335,3 +379,3 @@ });

itMarbles("nested resolvers pass down the context and parent", function (m) {
var query = graphql_tag_1.default(templateObject_15 || (templateObject_15 = __makeTemplateObject(["\n query {\n nested {\n firstFieldResolver {\n noFieldResolverValue\n secondFieldResolver\n }\n }\n }\n "], ["\n query {\n nested {\n firstFieldResolver {\n noFieldResolverValue\n secondFieldResolver\n }\n }\n }\n "])));
var query = graphql_tag_1.default(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n query {\n nested {\n firstFieldResolver {\n noFieldResolverValue\n secondFieldResolver\n }\n }\n }\n "], ["\n query {\n nested {\n firstFieldResolver {\n noFieldResolverValue\n secondFieldResolver\n }\n }\n }\n "])));
var expected = m.cold("(a|)", {

@@ -349,3 +393,3 @@ a: {

});
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);

@@ -355,11 +399,11 @@ });

itMarbles("throwing an error results in an error observable", function (m) {
var query = graphql_tag_1.default(templateObject_16 || (templateObject_16 = __makeTemplateObject(["\n query {\n throwingResolver\n }\n "], ["\n query {\n throwingResolver\n }\n "])));
var query = graphql_tag_1.default(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n query {\n throwingResolver\n }\n "], ["\n query {\n throwingResolver\n }\n "])));
var expected = m.cold("#", {}, new Error("reactive-graphql: resolver 'throwingResolver' throws this error: 'Error: my personal error'"));
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);
});
itMarbles("accessing an unknown query field results in an error observable", function (m) {
var query = graphql_tag_1.default(templateObject_17 || (templateObject_17 = __makeTemplateObject(["\n query {\n youDontKnowMe\n }\n "], ["\n query {\n youDontKnowMe\n }\n "])));
var query = graphql_tag_1.default(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n query {\n youDontKnowMe\n }\n "], ["\n query {\n youDontKnowMe\n }\n "])));
var expected = m.cold("#", {}, new Error("reactive-graphql: field 'youDontKnowMe' was not found on type 'Query'. The only fields found in this Object are: plain,item,nested,throwingResolver."));
var result = __1.default(query, fieldResolverSchema, {});
var result = __1.graphql(fieldResolverSchema, query, null, {});
m.expect(result.pipe(operators_1.take(1))).toBeObservable(expected);

@@ -370,6 +414,6 @@ });

itMarbles("createShuttle adds a shuttle and return its name", function (m) {
var mutation = graphql_tag_1.default(templateObject_18 || (templateObject_18 = __makeTemplateObject(["\n mutation {\n createShuttle(name: \"RocketShip\") {\n name\n }\n }\n "], ["\n mutation {\n createShuttle(name: \"RocketShip\") {\n name\n }\n }\n "])));
var mutation = graphql_tag_1.default(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n mutation {\n createShuttle(name: \"RocketShip\") {\n name\n }\n }\n "], ["\n mutation {\n createShuttle(name: \"RocketShip\") {\n name\n }\n }\n "])));
var fakeRequest = { name: "RocketShip" };
var commandContext = rxjs_1.of(fakeRequest);
var result = __1.default(mutation, schema, {
var result = __1.graphql(schema, mutation, null, {
mutation: commandContext

@@ -383,5 +427,5 @@ });

itMarbles("createShuttleList adds a shuttle and return all shuttles", function (m) {
var mutation = graphql_tag_1.default(templateObject_19 || (templateObject_19 = __makeTemplateObject(["\n mutation {\n createShuttleList(name: \"RocketShip\") {\n name\n }\n }\n "], ["\n mutation {\n createShuttleList(name: \"RocketShip\") {\n name\n }\n }\n "])));
var mutation = graphql_tag_1.default(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n mutation {\n createShuttleList(name: \"RocketShip\") {\n name\n }\n }\n "], ["\n mutation {\n createShuttleList(name: \"RocketShip\") {\n name\n }\n }\n "])));
var commandContext = rxjs_1.of("a request");
var result = __1.default(mutation, schema, {
var result = __1.graphql(schema, mutation, null, {
mutation: commandContext

@@ -403,8 +447,10 @@ });

itMarbles("accept alias name", function (m) {
var mutation = graphql_tag_1.default(templateObject_20 || (templateObject_20 = __makeTemplateObject(["\n mutation {\n shut: createShuttle(name: $name) {\n name\n }\n }\n "], ["\n mutation {\n shut: createShuttle(name: $name) {\n name\n }\n }\n "])));
var mutation = graphql_tag_1.default(templateObject_21 || (templateObject_21 = __makeTemplateObject(["\n mutation {\n shut: createShuttle(name: $name) {\n name\n }\n }\n "], ["\n mutation {\n shut: createShuttle(name: $name) {\n name\n }\n }\n "])));
var commandContext = rxjs_1.of("a resquest");
var result = __1.default(mutation, schema, {
mutation: commandContext,
var variables = {
name: "RocketShip"
});
};
var result = __1.graphql(schema, mutation, null, {
mutation: commandContext
}, variables);
var expected = m.cold("(a|)", {

@@ -417,3 +463,3 @@ a: { data: { shut: { name: "RocketShip" } } }

});
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20;
var templateObject_1, templateObject_2, templateObject_3, templateObject_4, templateObject_5, templateObject_6, templateObject_7, templateObject_8, templateObject_9, templateObject_10, templateObject_11, templateObject_12, templateObject_13, templateObject_14, templateObject_15, templateObject_16, templateObject_17, templateObject_18, templateObject_19, templateObject_20, templateObject_21;
//# sourceMappingURL=graphqlObservable-test.js.map

@@ -49,7 +49,7 @@ "use strict";

var starWarsSchema_1 = __importDefault(require("./starWarsSchema"));
var __1 = __importDefault(require("../../"));
var graphql = function (schema, query, _arg1, _arg2, params) {
var __1 = require("../../");
var graphql = function (schema, query, rootValue, contextValue, variableValues) {
return new Promise(function (resolve) {
var taggedQuery = graphql_tag_1.default(templateObject_1 || (templateObject_1 = __makeTemplateObject(["\n ", "\n "], ["\n ", "\n "])), query);
__1.default(taggedQuery, schema, params)
__1.graphql(schema, taggedQuery, rootValue, contextValue, variableValues)
.pipe(operators_1.take(1))

@@ -56,0 +56,0 @@ .subscribe(resolve);

@@ -1,13 +0,1 @@

import { Observable } from "rxjs";
import { DocumentNode, GraphQLSchema, GraphQLType } from "graphql";
interface TypeMap {
[key: string]: GraphQLType;
}
interface Schema extends GraphQLSchema {
_typeMap?: TypeMap;
}
export default function graphqlObservable<T = object>(doc: DocumentNode, schema: Schema, context: object): Observable<{
data: T;
}>;
export declare function fieldNotFoundMessageForType(type: GraphQLType | null): string;
export {};
export { default as graphql } from "./reactive-graphql";
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
var rxjs_1 = require("rxjs");
var operators_1 = require("rxjs/operators");
var graphql_1 = require("graphql");
function isOperationDefinition(node) {
return node.kind === graphql_1.Kind.OPERATION_DEFINITION;
}
function isFieldNode(node) {
return node.kind === graphql_1.Kind.FIELD;
}
// We don't treat OperationDefinitions as Definitions but as entry points for our execution
function isDefinitionNode(node) {
return (node.kind === graphql_1.Kind.FRAGMENT_DEFINITION ||
graphql_1.isTypeSystemDefinitionNode(node) ||
graphql_1.isTypeSystemExtensionNode(node));
}
function isFieldWithResolver(field) {
return field.resolve instanceof Function;
}
function graphqlObservable(doc, schema, context) {
if (doc.definitions.length !== 1) {
return throwObservable("document root must have a single definition");
}
if (!schema._typeMap) {
return throwObservable("schema must have a typeMap");
}
var types = schema._typeMap;
return resolve(doc.definitions[0], context, null, null).pipe(operators_1.map(function (data) { return ({
data: data
}); }));
function resolve(definition, context, parent, type) {
if (isOperationDefinition(definition)) {
var nextType = getResultType(type, definition, parent);
return resolveResult(definition, context, null, nextType);
}
// The definition gives us the field to resolve
if (isFieldNode(definition)) {
var field = getField(type, definition);
// Something unexpcected was passed into getField
if (field === null) {
return throwObservable("field '" + definition.name.value + "' was not found on type '" + type + "'. " + fieldNotFoundMessageForType(type));
}
var resolvedObservable = resolveField(field, definition, context, parent);
// Directly return the leaf nodes
if (definition.selectionSet === undefined) {
return resolvedObservable;
}
return resolvedObservable.pipe(operators_1.concatMap(function (emitted) {
if (!emitted) {
return throwObservable("resolver emitted empty value");
}
if (emitted instanceof Array) {
return resolveArrayResults(definition, context, emitted, type);
}
var nextType = getResultType(type, definition, emitted);
return resolveResult(definition, context, emitted, nextType);
}));
}
// It is no operationDefinitionand no fieldNode, so it seems like an error
return throwObservable("Input does not look like OperationDefinition nor FieldNode");
}
// Goes one level deeper into the query nesting
function resolveResult(definition, context, parent, type) {
if (isDefinitionNode(definition)) {
return throwObservable("Definition types should not be present here");
}
if (definition.kind === graphql_1.Kind.FRAGMENT_SPREAD) {
return throwObservable("Unsupported use of fragments");
}
if (!definition.selectionSet) {
return rxjs_1.of(parent);
}
return definition.selectionSet.selections.reduce(function (acc, sel) {
if (sel.kind === graphql_1.Kind.FRAGMENT_SPREAD ||
sel.kind === graphql_1.Kind.INLINE_FRAGMENT) {
return throwObservable("Unsupported use of fragments in selection set");
}
var result = resolve(sel, context, parent, type);
var fieldName = (sel.alias || sel.name).value;
return acc.pipe(operators_1.combineLatest(result, objectAppendWithKey(fieldName)));
}, rxjs_1.of({}));
}
function resolveArrayResults(definition, context, parents, parentType) {
return parents.reduce(function (acc, result) {
var nextType = getResultType(parentType, definition, result);
var resultObserver = resolveResult(definition, context, result, nextType);
return acc.pipe(operators_1.combineLatest(
// TODO: fix this type overwrite
resultObserver, function (destination, source) {
return destination.concat(source);
}));
}, rxjs_1.of([]));
}
function getField(parentType, definition) {
// Go one level deeper into the query
if (parentType instanceof graphql_1.GraphQLObjectType && isFieldNode(definition)) {
var parentFields = parentType.getFields();
var fieldName = definition.name.value;
if (parentFields[fieldName]) {
return parentFields[definition.name.value];
}
}
// These cases should ideally at some point be not existant,
// but due to our partial implementation this loop-hole is needed
return null;
}
function getResultType(parentType, definition, instance) {
var translateOperation = {
query: "Query",
mutation: "Mutation"
};
// Operation is given (query or mutation), returns a type
if (isOperationDefinition(definition)) {
return types[translateOperation[definition.operation]];
}
// Get one level deeper in the query nesting
var field = getField(parentType, definition);
if (field !== null) {
var fieldType = graphql_1.getNamedType(field.type);
// Make this abstract type concrete if possible
if (fieldType instanceof graphql_1.GraphQLInterfaceType &&
fieldType.resolveType instanceof Function) {
// We currenlty only allow resolveType to return a GraphQLObjectType
// and we pass in the wrong values as we don't need this feature currently
// @ts-ignore
return graphql_1.getNamedType(fieldType.resolveType(instance));
}
else {
return fieldType;
}
}
return null;
}
}
exports.default = graphqlObservable;
function throwObservable(error) {
return rxjs_1.throwError(new Error("reactive-graphql: " + error));
}
function buildResolveArgs(definition, context) {
return (definition.arguments || []).reduce(function (carry, arg) {
var _a, _b;
return (__assign({}, carry, (arg.value.kind === graphql_1.Kind.VARIABLE
? // @ts-ignore
(_a = {}, _a[arg.name.value] = context[arg.value.name.value], _a) : (_b = {},
_b[arg.name.value] = getArgValue(arg),
_b))));
}, {});
}
function getArgValue(arg) {
if (arg.value.kind === "NullValue" || arg.value.kind === "Variable") {
return null;
}
if (arg.value.kind === "ListValue") {
return arg.value.values;
}
if (arg.value.kind === "ObjectValue") {
return arg.value.fields;
}
return arg.value.value;
}
var objectAppendWithKey = function (key) {
return function (destination, source) {
var _a;
return (__assign({}, destination, (_a = {}, _a[key] = source, _a)));
};
};
function resolveField(field, definition, context, parent) {
if (!isFieldWithResolver(field)) {
return rxjs_1.of(parent[field.name]);
}
var args = buildResolveArgs(definition, context);
try {
var resolvedValue = field.resolve(parent, args, context,
// @ts-ignore
null // that would be the info
);
if (resolvedValue instanceof rxjs_1.Observable) {
return resolvedValue;
}
if (resolvedValue instanceof Promise) {
return rxjs_1.from(resolvedValue);
}
// It seems like a plain value
return rxjs_1.of(resolvedValue);
}
catch (err) {
return throwObservable("resolver '" + field.name + "' throws this error: '" + err + "'");
}
}
function fieldNotFoundMessageForType(type) {
if (type === null) {
return "The type should not be null.";
}
if (graphql_1.isScalarType(type)) {
return "The field has a scalar type, which means it supports no nesting.";
}
if (graphql_1.isEnumType(type)) {
return "The field has an enum type, which means it supports no nesting.";
}
if (graphql_1.isObjectType(type)) {
return "The only fields found in this Object are: " + Object.keys(type.getFields()) + ".";
}
return "";
}
exports.fieldNotFoundMessageForType = fieldNotFoundMessageForType;
var reactive_graphql_1 = require("./reactive-graphql");
exports.graphql = reactive_graphql_1.default;
//# sourceMappingURL=index.js.map
{
"name": "reactive-graphql",
"repository": {
"type": "git",
"url": "https://github.com/mesosphere/reactive-graphql"
},
"main": "./dist/index.js",

@@ -8,3 +12,3 @@ "typings": "dist/index",

],
"version": "2.0.0",
"version": "3.0.0",
"license": "Apache-2.0",

@@ -11,0 +15,0 @@ "scripts": {

@@ -12,6 +12,5 @@ # Reactive GraphQL

import graphql from "reactive-graphql";
import { graphql } from "reactive-graphql";
import { makeExecutableSchema } from "graphql-tools";
import gql from "graphql-tag";
import { from, interval, of } from "rxjs";

@@ -70,3 +69,3 @@ import { map, merge, scan, combineLatest } from "rxjs/operators";

const query = gql`
const query = `
query {

@@ -80,3 +79,3 @@ posts {

const postStream = graphql(query, schema);
const postStream = graphql(schema, query);
const PostsList = componentFromStream(propsStream =>

@@ -114,6 +113,7 @@ propsStream.pipe(

- subscriptions (as everything is treated as a subscription)
- only one top-level operation is supported
## API
The first argument you pass into `reactive-graphql` is an executable schema, the second one a parsed GraphQL query. You can pass in the root context as an object as a third parameter.
The 1st argument you pass into `reactive-graphql` is an executable schema, the 2nd one a GraphQL query, either parsed or as string. You can pass in the root value as 3rd and the root context as an object as 4th parameter. The variables can be passed as 5th parameter.

@@ -120,0 +120,0 @@ The implementation will always return an Observable.

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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