tyranid-graphql
Advanced tools
Comparing version 0.0.4 to 0.0.5
import { Tyr } from 'tyranid'; | ||
import { GraphQLOutputType, GraphQLSchema, GraphQLFieldConfig, GraphQLFieldConfigMapThunk } from 'graphql'; | ||
/** | ||
* TODO: | ||
* | ||
* - ensure that enum collections work | ||
* | ||
* // later -- optimizations / bonus... | ||
* - map query info to mongodb projection | ||
* - pass authentication paramters to each node if _auth / _perm flags | ||
*/ | ||
import { GraphQLOutputType, GraphQLSchema, GraphQLFieldConfig, GraphQLFieldConfigMapThunk, GraphQLFieldConfigArgumentMap } from 'graphql'; | ||
export declare type GraphQLOutputTypeMap = Map<string, GraphQLOutputType>; | ||
@@ -28,4 +19,11 @@ /** | ||
/** | ||
* map properties of collections to argumements | ||
*/ | ||
export declare function createArguments(fields: Tyr.TyranidFieldsObject, map: GraphQLOutputTypeMap): GraphQLFieldConfigArgumentMap; | ||
/** | ||
* Create a function which maps graphql arguments to a mongo query | ||
*/ | ||
export declare function createArgumentParser(fields: Tyr.TyranidFieldsObject): (parent: any, args: any) => any; | ||
/** | ||
* Create lazy value to contain fields for a particular tyranid field definition object | ||
* NOTE: mutually recursive with createGraphQLFieldConfig() | ||
*/ | ||
@@ -37,4 +35,3 @@ export declare function createFieldThunk(fields: { | ||
* given a field object, create an individual GraphQLType instance | ||
* NOTE: mutually recursive with createFieldThunk() | ||
*/ | ||
export declare function createGraphQLFieldConfig(field: Tyr.TyranidFieldDefinition, map: GraphQLOutputTypeMap, fieldName: string, path: string, single: boolean): GraphQLFieldConfig | undefined; |
"use strict"; | ||
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()); | ||
}); | ||
}; | ||
const tyranid_1 = require('tyranid'); | ||
@@ -64,3 +56,2 @@ const mongodb_1 = require('mongodb'); | ||
function collectionFieldConfig(col, map, single = true) { | ||
// get the created graphQl type for this collection | ||
const colGraphQLType = map.get(col.def.name); | ||
@@ -70,46 +61,22 @@ if (!colGraphQLType) { | ||
} | ||
/** | ||
* Collection query arguments, | ||
* currently just id(s) | ||
*/ | ||
const args = single | ||
? { | ||
id: { | ||
type: graphql_1.GraphQLID | ||
} | ||
} | ||
: { | ||
ids: { | ||
type: new graphql_1.GraphQLList(graphql_1.GraphQLID) | ||
} | ||
}; | ||
const fields = col.def.fields; | ||
if (!fields) { | ||
return error(`Collection "${col.def.name}" has no fields property.`); | ||
} | ||
const args = createArguments(fields, map); | ||
const queryFunction = single | ||
? col.findOne.bind(col) | ||
: col.findAll.bind(col); | ||
const type = single | ||
? colGraphQLType | ||
: new graphql_1.GraphQLList(colGraphQLType); | ||
const argParser = createArgumentParser(fields); | ||
return { | ||
args, | ||
type: single ? colGraphQLType : new graphql_1.GraphQLList(colGraphQLType), | ||
/** | ||
* Resolve the query to this collection | ||
*/ | ||
type, | ||
resolve(parent, args, context) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const query = {}; | ||
if (single) { | ||
if (args && args['id']) { | ||
query['_id'] = new mongodb_1.ObjectID(args['id']); | ||
} | ||
return col.findOne({ | ||
query, | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
} | ||
if (args && Array.isArray(args['ids'])) { | ||
query['_id'] = { | ||
$in: args['ids'].map((id) => new mongodb_1.ObjectID(id)) | ||
}; | ||
} | ||
return col.findAll({ | ||
query, | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
return queryFunction({ | ||
query: argParser(parent, args), | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
@@ -121,4 +88,56 @@ } | ||
/** | ||
* map properties of collections to argumements | ||
*/ | ||
function createArguments(fields, map) { | ||
const argMap = {}; | ||
for (const fieldName in fields) { | ||
const field = fields[fieldName].def; | ||
if (field.is && (field.is !== 'object') && (field.is !== 'array')) { | ||
const fieldType = createGraphQLFieldConfig(field, map, fieldName, '', true); | ||
if (fieldType && graphql_1.isLeafType(fieldType.type)) { | ||
argMap[fieldName] = { | ||
type: new graphql_1.GraphQLList(fieldType.type) | ||
}; | ||
} | ||
; | ||
} | ||
if (field.link || (field.is === 'array' && field.of && field.of.link)) { | ||
argMap[fieldName] = { | ||
type: new graphql_1.GraphQLList(graphql_1.GraphQLID) | ||
}; | ||
} | ||
} | ||
return argMap; | ||
} | ||
exports.createArguments = createArguments; | ||
/** | ||
* Create a function which maps graphql arguments to a mongo query | ||
*/ | ||
function createArgumentParser(fields) { | ||
return function (parent, args) { | ||
if (!args) | ||
return {}; | ||
const query = {}; | ||
for (const prop in args) { | ||
// TODO: fix typings on tyranid | ||
const field = fields[prop].def; | ||
if (field.link || | ||
(field.is === 'mongoid') || | ||
(field.is === 'array' && field.of && field.of.link)) { | ||
query[prop] = { | ||
$in: [].concat(args[prop]).map((id) => new mongodb_1.ObjectID(id)) | ||
}; | ||
} | ||
else { | ||
query[prop] = { | ||
$in: args[prop] | ||
}; | ||
} | ||
} | ||
return query; | ||
}; | ||
} | ||
exports.createArgumentParser = createArgumentParser; | ||
/** | ||
* Create lazy value to contain fields for a particular tyranid field definition object | ||
* NOTE: mutually recursive with createGraphQLFieldConfig() | ||
*/ | ||
@@ -147,3 +166,2 @@ function createFieldThunk(fields, map, path = '') { | ||
* given a field object, create an individual GraphQLType instance | ||
* NOTE: mutually recursive with createFieldThunk() | ||
*/ | ||
@@ -167,18 +185,29 @@ function createGraphQLFieldConfig(field, map, fieldName, path, single) { | ||
const linkType = collectionFieldConfig(col, map, single); | ||
const colFields = col.def.fields; | ||
if (!colFields) | ||
return error(`No fields found for collection ${col.def.name}`); | ||
return { | ||
type: linkType.type, | ||
args: createArguments(colFields, map), | ||
resolve(parent, args, context, ast) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const linkField = parent[fieldName]; | ||
if (!linkField) | ||
return single ? null : []; | ||
if (!linkType.resolve) { | ||
return error(`No linkType resolve function found for collection: ${field.link}`); | ||
} | ||
const linkArgs = single | ||
? { id: linkField } | ||
: { ids: linkField }; | ||
const result = yield linkType.resolve(parent, linkArgs, context, ast); | ||
return result; | ||
}); | ||
const linkField = parent[fieldName]; | ||
args = args || {}; | ||
if (!linkField) | ||
return single ? null : []; | ||
if (!linkType.resolve) { | ||
return error(`No linkType resolve function found for collection: ${field.link}`); | ||
} | ||
const linkIds = [].concat(linkField); | ||
const linkArgs = {}; | ||
if (args['_id']) { | ||
const argIds = (Array.isArray(args['_id']) | ||
? args['_id'] | ||
: [args['_id']]); | ||
const argIdSet = new Set(argIds); | ||
linkArgs['_id'] = linkIds.filter((id) => argIdSet.has(id.toString())); | ||
} | ||
else { | ||
linkArgs['_id'] = linkIds; | ||
} | ||
return linkType.resolve(parent, linkArgs, context, ast); | ||
} | ||
@@ -196,3 +225,3 @@ }; | ||
case 'password': | ||
case 'date': // TODO: create date type | ||
case 'date': | ||
case 'uid': | ||
@@ -263,2 +292,2 @@ return { | ||
exports.createGraphQLFieldConfig = createGraphQLFieldConfig; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBQUEsMEJBQW9CLFNBQVMsQ0FBQyxDQUFBO0FBQzlCLDBCQUF5QixTQUFTLENBQUMsQ0FBQTtBQUNuQywwQkFlTyxTQUFTLENBQUMsQ0FBQTtBQXVCakI7OztHQUdHO0FBQ0gsb0JBQTJCLEdBQWU7SUFDeEMsTUFBTSxNQUFNLEdBQUcsbUJBQW1CLENBQUMsR0FBRyxDQUFDLENBQUM7SUFFeEMsR0FBRyxDQUFDLE9BQU8sR0FBZ0MsTUFBTSxDQUFDLE1BQU0sQ0FDdEQsVUFBUyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsSUFBSSxHQUFHLE1BQU0sRUFBa0M7UUFDckUsTUFBTSxDQUFDLGlCQUFPLENBQUMsTUFBTSxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUU7WUFDbEMsSUFBSTtZQUNKLElBQUk7WUFDSixRQUFRLEVBQUUsRUFBRTtTQUNiLENBQUMsQ0FBQztJQUNMLENBQUMsRUFDRCxFQUFFLE1BQU0sRUFBRSxDQUNYLENBQUM7QUFDSixDQUFDO0FBYmUsa0JBQVUsYUFhekIsQ0FBQTtBQUlELGNBQWMsT0FBZTtJQUMzQixPQUFPLENBQUMsSUFBSSxDQUFDLCtCQUErQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFRCxlQUFlLE9BQWU7SUFDNUIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2QkFBNkIsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUMxRCxDQUFDO0FBR0Q7O0dBRUc7QUFDSCw2QkFBb0MsR0FBZTtJQUNqRCxNQUFNLE9BQU8sR0FBeUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUNoRCxNQUFNLFdBQVcsR0FBMEIsRUFBRSxDQUFDO0lBRTlDLEdBQUcsQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLEdBQUc7UUFDekIsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJ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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUFvQixTQUFTLENBQUMsQ0FBQTtBQUM5QiwwQkFBeUIsU0FBUyxDQUFDLENBQUE7QUFDbkMsMEJBZ0JPLFNBQVMsQ0FBQyxDQUFBO0FBS2pCOzs7R0FHRztBQUNILG9CQUEyQixHQUFlO0lBQ3hDLE1BQU0sTUFBTSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRXhDLEdBQUcsQ0FBQyxPQUFPLEdBQStCLE1BQU0sQ0FBQyxNQUFNLENBQ3JELFVBQVUsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLElBQUksR0FBRyxNQUFNLEVBQWtDO1FBQ3RFLE1BQU0sQ0FBQyxpQkFBTyxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFO1lBQ2xDLElBQUk7WUFDSixJQUFJO1lBQ0osUUFBUSxFQUFFLEVBQUU7U0FDYixDQUFDLENBQUM7SUFDTCxDQUFDLEVBQ0QsRUFBRSxNQUFNLEVBQUUsQ0FDWCxDQUFDO0FBQ0osQ0FBQztBQWJlLGtCQUFVLGFBYXpCLENBQUE7QUFHRCxjQUFjLE9BQWU7SUFDM0IsT0FBTyxDQUFDLElBQUksQ0FBQywrQkFBK0IsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN6RCxDQUFDO0FBRUQsZUFBZSxPQUFlO0lBQzVCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDMUQsQ0FBQztBQUdEOztHQUVHO0FBQ0gsNkJBQW9DLEdBQWU7SUFDakQsTUFBTSxPQUFPLEdBQXlCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDaEQsTUFBTSxXQUFXLEdBQTBCLEVBQUUsQ0FBQztJQUU5QyxHQUFHLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxHQUFHO1FBQ3pCLE1BQU0sSUFBSSxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFD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 |
"use strict"; | ||
var __awaiter = undefined && undefined.__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()); | ||
}); | ||
}; | ||
const tyranid_1 = require('tyranid'); | ||
@@ -87,3 +63,2 @@ const mongodb_1 = require('mongodb'); | ||
// get the created graphQl type for this collection | ||
const colGraphQLType = map.get(col.def.name); | ||
@@ -93,44 +68,18 @@ if (!colGraphQLType) { | ||
} | ||
/** | ||
* Collection query arguments, | ||
* currently just id(s) | ||
*/ | ||
const args = single ? { | ||
id: { | ||
type: graphql_1.GraphQLID | ||
} | ||
} : { | ||
ids: { | ||
type: new graphql_1.GraphQLList(graphql_1.GraphQLID) | ||
} | ||
}; | ||
const fields = col.def.fields; | ||
if (!fields) { | ||
return error(`Collection "${ col.def.name }" has no fields property.`); | ||
} | ||
const args = createArguments(fields, map); | ||
const queryFunction = single ? col.findOne.bind(col) : col.findAll.bind(col); | ||
const type = single ? colGraphQLType : new graphql_1.GraphQLList(colGraphQLType); | ||
const argParser = createArgumentParser(fields); | ||
return { | ||
args: args, | ||
type: single ? colGraphQLType : new graphql_1.GraphQLList(colGraphQLType), | ||
/** | ||
* Resolve the query to this collection | ||
*/ | ||
type: type, | ||
resolve: function resolve(parent, args, context) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const query = {}; | ||
if (single) { | ||
if (args && args['id']) { | ||
query['_id'] = new mongodb_1.ObjectID(args['id']); | ||
} | ||
return col.findOne({ | ||
query: query, | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
} | ||
if (args && Array.isArray(args['ids'])) { | ||
query['_id'] = { | ||
$in: args['ids'].map(id => new mongodb_1.ObjectID(id)) | ||
}; | ||
} | ||
return col.findAll({ | ||
query: query, | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
return queryFunction({ | ||
query: argParser(parent, args), | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
@@ -142,4 +91,52 @@ } | ||
/** | ||
* map properties of collections to argumements | ||
*/ | ||
function createArguments(fields, map) { | ||
const argMap = {}; | ||
for (const fieldName in fields) { | ||
const field = fields[fieldName].def; | ||
if (field.is && field.is !== 'object' && field.is !== 'array') { | ||
const fieldType = createGraphQLFieldConfig(field, map, fieldName, '', true); | ||
if (fieldType && graphql_1.isLeafType(fieldType.type)) { | ||
argMap[fieldName] = { | ||
type: new graphql_1.GraphQLList(fieldType.type) | ||
}; | ||
} | ||
; | ||
} | ||
if (field.link || field.is === 'array' && field.of && field.of.link) { | ||
argMap[fieldName] = { | ||
type: new graphql_1.GraphQLList(graphql_1.GraphQLID) | ||
}; | ||
} | ||
} | ||
return argMap; | ||
} | ||
exports.createArguments = createArguments; | ||
/** | ||
* Create a function which maps graphql arguments to a mongo query | ||
*/ | ||
function createArgumentParser(fields) { | ||
return function (parent, args) { | ||
if (!args) return {}; | ||
const query = {}; | ||
for (const prop in args) { | ||
// TODO: fix typings on tyranid | ||
const field = fields[prop].def; | ||
if (field.link || field.is === 'mongoid' || field.is === 'array' && field.of && field.of.link) { | ||
query[prop] = { | ||
$in: [].concat(args[prop]).map(id => new mongodb_1.ObjectID(id)) | ||
}; | ||
} else { | ||
query[prop] = { | ||
$in: args[prop] | ||
}; | ||
} | ||
} | ||
return query; | ||
}; | ||
} | ||
exports.createArgumentParser = createArgumentParser; | ||
/** | ||
* Create lazy value to contain fields for a particular tyranid field definition object | ||
* NOTE: mutually recursive with createGraphQLFieldConfig() | ||
*/ | ||
@@ -168,3 +165,2 @@ function createFieldThunk(fields, map) { | ||
* given a field object, create an individual GraphQLType instance | ||
* NOTE: mutually recursive with createFieldThunk() | ||
*/ | ||
@@ -188,15 +184,24 @@ function createGraphQLFieldConfig(field, map, fieldName, path, single) { | ||
const linkType = collectionFieldConfig(col, map, single); | ||
const colFields = col.def.fields; | ||
if (!colFields) return error(`No fields found for collection ${ col.def.name }`); | ||
return { | ||
type: linkType.type, | ||
args: createArguments(colFields, map), | ||
resolve: function resolve(parent, args, context, ast) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const linkField = parent[fieldName]; | ||
if (!linkField) return single ? null : []; | ||
if (!linkType.resolve) { | ||
return error(`No linkType resolve function found for collection: ${ field.link }`); | ||
} | ||
const linkArgs = single ? { id: linkField } : { ids: linkField }; | ||
const result = yield linkType.resolve(parent, linkArgs, context, ast); | ||
return result; | ||
}); | ||
const linkField = parent[fieldName]; | ||
args = args || {}; | ||
if (!linkField) return single ? null : []; | ||
if (!linkType.resolve) { | ||
return error(`No linkType resolve function found for collection: ${ field.link }`); | ||
} | ||
const linkIds = [].concat(linkField); | ||
const linkArgs = {}; | ||
if (args['_id']) { | ||
const argIds = Array.isArray(args['_id']) ? args['_id'] : [args['_id']]; | ||
const argIdSet = new Set(argIds); | ||
linkArgs['_id'] = linkIds.filter(id => argIdSet.has(id.toString())); | ||
} else { | ||
linkArgs['_id'] = linkIds; | ||
} | ||
return linkType.resolve(parent, linkArgs, context, ast); | ||
} | ||
@@ -214,3 +219,3 @@ }; | ||
case 'password': | ||
case 'date': // TODO: create date type | ||
case 'date': | ||
case 'uid': | ||
@@ -283,2 +288,2 @@ return { | ||
exports.createGraphQLFieldConfig = createGraphQLFieldConfig; | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSwwQkFBb0IsQUFBUyxBQUFDO0FBQzlCLDBCQUF5QixBQUFTLEFBQUM7QUFDbkMsMEJBZU8sQUFBUyxBQUFDO0FBdUJqQixBQUdHOzs7O0FBQ0gsb0JBQTJCLEFBQWU7QUFDeEMsVUFBTSxBQUFNLFNBQUcsQUFBbUIsb0JBQUMsQUFBRyxBQUFDLEFBQUM7QUFFeEMsQUFBRyxRQUFDLEFBQU8saUJBQXVDLEFBQU0sT0FDdEQsQUFBUztZQUFFLEFBQUs7WUFBRSxBQUFJOztZQUFFLEFBQUksaUNBQUcsQUFBTSxBQUFrQzs7QUFDckUsQUFBTSx5QkFBUSxRQUFDLEFBQU0sUUFBRSxBQUFLLE9BQUUsQUFBSTtBQUNoQyxBQUFJO0FBQ0osQUFBSTtBQUNKLEFBQVEsc0JBQUUsQUFBRSxBQUNiLEFBQUMsQUFBQyxBQUNMO0FBTHNDLFNBQTdCO0FBS1IsS0FQd0MsQUFBTSxFQVEvQyxFQUFFLEFBQU0sQUFBRSxBQUNYLEFBQUMsQUFDSjtBQUFDO0FBYmUsUUFBVSxhQWF6QjtBQUlELGNBQWMsQUFBZTtBQUMzQixBQUFPLFlBQUMsQUFBSSxBQUFDLHFDQUErQixBQUFPLE9BQUUsQUFBQyxBQUFDLEFBQ3pEO0FBQUM7QUFFRCxlQUFlLEFBQWU7QUFDNUIsVUFBTSxJQUFJLEFBQUssQUFBQyxvQ0FBNkIsQUFBTyxPQUFFLEFBQUMsQUFBQyxBQUMxRDtBQUFDO0FBR0QsQUFFRzs7O0FBQ0gsNkJBQW9DLEFBQWU7QUFDakQsVUFBTSxBQUFPLFVBQXlCLElBQUksQUFBRyxBQUFFLEFBQUM7QUFDaEQsVUFBTSxBQUFXLGNBQTBCLEFBQUUsQUFBQztBQUU5QyxBQUFHLFFBQUMsQUFBVyxZQUFDLEFBQU8sUUFBQyxBQUFHO0FBQ3pCLGNBQU0sQUFBSSxPQUFHLEFBQUcsSUFBQyxBQUFH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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSwwQkFBb0IsQUFBUyxBQUFDO0FBQzlCLDBCQUF5QixBQUFTLEFBQUM7QUFDbkMsMEJBZ0JPLEFBQVMsQUFBQztBQUtqQixBQUdHOzs7O0FBQ0gsb0JBQTJCLEFBQWU7QUFDeEMsVUFBTSxBQUFNLFNBQUcsQUFBbUIsb0JBQUMsQUFBRyxBQUFDLEFBQUM7QUFFeEMsQUFBRyxRQUFDLEFBQU8saUJBQXNDLEFBQU0sT0FDckQsQUFBVTtZQUFFLEFBQUs7WUFBRSxBQUFJOztZQUFFLEFBQUksaUNBQUcsQUFBTSxBQUFrQzs7QUFDdEUsQUFBTSx5QkFBUSxRQUFDLEFBQU0sUUFBRSxBQUFLLE9BQUUsQUFBSTtBQUNoQyxBQUFJO0FBQ0osQUFBSTtBQUNKLEFBQVEsc0JBQUUsQUFBRSxBQUNiLEFBQUMsQUFBQyxBQUNMO0FBTHNDLFNBQTdCO0FBS1IsS0FQdUMsQUFBTSxFQVE5QyxFQUFFLEFBQU0sQUFBRSxBQUNYLEFBQUMsQUFDSjtBQUFDO0FBYmUsUUFBVSxhQWF6QjtBQUdELGNBQWMsQUFBZTtBQUMzQixBQUFPLFlBQUMsQUFBSSxBQUFDLHFDQUErQixBQUFPLE9BQUUsQUFBQyxBQUFDLEFBQ3pEO0FBQUM7QUFFRCxlQUFlLEFBQWU7QUFDNUIsVUFBTSxJQUFJLEFBQUssQUFBQyxvQ0FBNkIsQUFBTyxPQUFFLEFBQUMsQUFBQyxBQUMxRDtBQUFDO0FBR0QsQUFFRzs7O0FBQ0gsNkJBQW9DLEFBQWU7QUFDakQsVUFBTSxBQUFPLFVBQXlCLElBQUksQUFBRyxBQUFFLEFBQUM7QUFDaEQsVUFBTSxBQUFXLGNBQTBCLEFBQUUsQUFBQztBQUU5QyxBQUFHLFFBQUMsQUFBVyxZQUFDLEFBQU8sUUFBQyxBQUFHO0FBQ3pCLGNBQU0sQUFBSSxPQUFHLEFBQUcsSUFBQyxBQUFHLElBQUMsQUFBSSxBQUFDO0FBQzFCLEFB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 |
{ | ||
"name": "tyranid-graphql", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "GraphQL plugin for tyranid", | ||
@@ -5,0 +5,0 @@ "main": "dist-node4/src/index.js", |
186
src/index.ts
@@ -17,26 +17,9 @@ import { Tyr } from 'tyranid'; | ||
GraphQLList, | ||
GraphQLFieldConfigArgumentMap, | ||
isLeafType | ||
} from 'graphql'; | ||
/** | ||
* TODO: | ||
* | ||
* - ensure that enum collections work | ||
* | ||
* // later -- optimizations / bonus... | ||
* - map query info to mongodb projection | ||
* - pass authentication paramters to each node if _auth / _perm flags | ||
*/ | ||
export type GraphQLOutputTypeMap = Map<string, GraphQLOutputType>; | ||
/** | ||
@@ -49,4 +32,4 @@ * adds a `graphql(query)` method to tyranid which returns | ||
tyr.graphql = <Tyr.TyranidGraphQLFunction> Object.assign( | ||
function({ query, auth, perm = 'view' }: Tyr.TyranidGraphQlQueryOptions) { | ||
tyr.graphql = <Tyr.TyranidGraphQLFunction>Object.assign( | ||
function ({ query, auth, perm = 'view' }: Tyr.TyranidGraphQlQueryOptions) { | ||
return graphql(schema, query, null, { | ||
@@ -63,3 +46,2 @@ auth, | ||
function warn(message: string) { | ||
@@ -105,7 +87,2 @@ console.warn(`tyranid-graphql: WARNING -- ${message}`); | ||
/** | ||
@@ -120,3 +97,2 @@ * Generate a field configuration object for a given tyranid collection, | ||
): GraphQLFieldConfig { | ||
// get the created graphQl type for this collection | ||
const colGraphQLType = map.get(col.def.name); | ||
@@ -128,50 +104,26 @@ | ||
/** | ||
* Collection query arguments, | ||
* currently just id(s) | ||
*/ | ||
const args = single | ||
? { | ||
id: { | ||
type: GraphQLID | ||
} | ||
} | ||
: { | ||
ids: { | ||
type: new GraphQLList(GraphQLID) | ||
} | ||
}; | ||
const fields = col.def.fields; | ||
return { | ||
if (!fields) { | ||
return error(`Collection "${col.def.name}" has no fields property.`); | ||
} | ||
args, | ||
const args = createArguments(fields, map); | ||
type: single ? colGraphQLType : new GraphQLList(colGraphQLType), | ||
const queryFunction: (...args: any[]) => Promise<any> = single | ||
? col.findOne.bind(col) | ||
: col.findAll.bind(col); | ||
/** | ||
* Resolve the query to this collection | ||
*/ | ||
async resolve(parent, args, context) { | ||
const query: { [key: string]: any } = {}; | ||
const type = single | ||
? colGraphQLType | ||
: new GraphQLList(colGraphQLType); | ||
if (single) { | ||
if (args && args['id']) { | ||
query['_id'] = new ObjectID(args['id']); | ||
} | ||
const argParser = createArgumentParser(fields); | ||
return col.findOne({ | ||
query, | ||
auth: context && context.auth, | ||
perm: context && context.perm | ||
}); | ||
} | ||
if (args && Array.isArray(args['ids'])) { | ||
query['_id'] = { | ||
$in: args['ids'].map((id: string) => new ObjectID(id)) | ||
}; | ||
} | ||
return col.findAll({ | ||
query, | ||
return { | ||
args, | ||
type, | ||
resolve(parent, args, context) { | ||
return queryFunction({ | ||
query: argParser(parent, args), | ||
auth: context && context.auth, | ||
@@ -181,3 +133,2 @@ perm: context && context.perm | ||
} | ||
}; | ||
@@ -187,9 +138,67 @@ } | ||
/** | ||
* map properties of collections to argumements | ||
*/ | ||
export function createArguments( | ||
fields: Tyr.TyranidFieldsObject, | ||
map: GraphQLOutputTypeMap | ||
) { | ||
const argMap: GraphQLFieldConfigArgumentMap = {}; | ||
for (const fieldName in fields) { | ||
const field = (fields[fieldName] as any).def; | ||
if (field.is && (field.is !== 'object') && (field.is !== 'array')) { | ||
const fieldType = createGraphQLFieldConfig(field, map, fieldName, '', true); | ||
if (fieldType && isLeafType(fieldType.type)) { | ||
argMap[fieldName] = { | ||
type: new GraphQLList((fieldType.type as any)) | ||
}; | ||
}; | ||
} | ||
if (field.link || (field.is === 'array' && field.of && field.of.link)) { | ||
argMap[fieldName] = { | ||
type: new GraphQLList(GraphQLID) | ||
}; | ||
} | ||
} | ||
return argMap; | ||
} | ||
/** | ||
* Create a function which maps graphql arguments to a mongo query | ||
*/ | ||
export function createArgumentParser( | ||
fields: Tyr.TyranidFieldsObject | ||
): (parent: any, args: any) => any { | ||
return function (parent: any, args: any) { | ||
if (!args) return {}; | ||
const query: any = {}; | ||
for (const prop in args) { | ||
// TODO: fix typings on tyranid | ||
const field = (fields[prop] as any).def; | ||
if ( field.link || | ||
(field.is === 'mongoid') || | ||
(field.is === 'array' && field.of && field.of.link)) { | ||
query[prop] = { | ||
$in: [].concat(args[prop]).map((id: any) => new ObjectID(id)) | ||
}; | ||
} else { | ||
query[prop] = { | ||
$in: args[prop] | ||
}; | ||
} | ||
} | ||
return query; | ||
}; | ||
} | ||
/** | ||
* Create lazy value to contain fields for a particular tyranid field definition object | ||
* NOTE: mutually recursive with createGraphQLFieldConfig() | ||
*/ | ||
@@ -201,3 +210,3 @@ export function createFieldThunk( | ||
): GraphQLFieldConfigMapThunk { | ||
return function() { | ||
return function () { | ||
const fieldsObj: GraphQLFieldConfigMap = {}; | ||
@@ -224,9 +233,4 @@ | ||
/** | ||
* given a field object, create an individual GraphQLType instance | ||
* NOTE: mutually recursive with createFieldThunk() | ||
*/ | ||
@@ -262,7 +266,12 @@ export function createGraphQLFieldConfig( | ||
const linkType = collectionFieldConfig(col, map, single); | ||
const colFields = col.def.fields; | ||
if (!colFields) return error(`No fields found for collection ${col.def.name}`); | ||
return { | ||
type: linkType.type, | ||
async resolve(parent, args, context, ast) { | ||
args: createArguments(colFields, map), | ||
resolve(parent, args, context, ast) { | ||
const linkField = parent[fieldName]; | ||
args = args || {}; | ||
@@ -275,9 +284,18 @@ if (!linkField) return single ? null : []; | ||
const linkArgs = single | ||
? { id: linkField } | ||
: { ids: linkField }; | ||
const linkIds = [].concat(linkField); | ||
const linkArgs: any = {}; | ||
const result = await linkType.resolve(parent, linkArgs, context, ast); | ||
if (args['_id']) { | ||
const argIds = <string[]> (Array.isArray(args['_id']) | ||
? args['_id'] | ||
: [ args['_id'] ]); | ||
return result; | ||
const argIdSet = new Set(argIds); | ||
linkArgs['_id'] = linkIds.filter((id: any) => argIdSet.has(id.toString())); | ||
} else { | ||
linkArgs['_id'] = linkIds; | ||
} | ||
return linkType.resolve(parent, linkArgs, context, ast); | ||
} | ||
@@ -298,3 +316,3 @@ }; | ||
case 'password': | ||
case 'date': // TODO: create date type | ||
case 'date': | ||
case 'uid': | ||
@@ -301,0 +319,0 @@ return { |
@@ -22,2 +22,3 @@ { | ||
"./test/index.ts", | ||
"./test/cases/index.ts", | ||
"./src/index.ts", | ||
@@ -24,0 +25,0 @@ "./test/example/server.ts", |
64436
1006