From 4ee20d4e7ee678dfea52f2b6e7d89e53603e3e6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 22 Jul 2019 00:37:49 +0200 Subject: [PATCH] Coerce undefinedToNull in embed resolver --- backend/src/schema/helpers.js | 9 +++++++++ backend/src/schema/resolvers/embeds.js | 20 +++++++++++++++++++ .../src/schema/resolvers/embeds/scraper.js | 17 +--------------- backend/src/schema/resolvers/users.js | 11 +--------- 4 files changed, 31 insertions(+), 26 deletions(-) create mode 100644 backend/src/schema/helpers.js diff --git a/backend/src/schema/helpers.js b/backend/src/schema/helpers.js new file mode 100644 index 000000000..fe61ccf57 --- /dev/null +++ b/backend/src/schema/helpers.js @@ -0,0 +1,9 @@ +export const undefinedToNull = list => { + const resolvers = {} + list.forEach(key => { + resolvers[key] = async (parent, params, context, resolveInfo) => { + return typeof parent[key] === 'undefined' ? null : parent[key] + } + }) + return resolvers +} diff --git a/backend/src/schema/resolvers/embeds.js b/backend/src/schema/resolvers/embeds.js index a60057f14..ba27f77b2 100644 --- a/backend/src/schema/resolvers/embeds.js +++ b/backend/src/schema/resolvers/embeds.js @@ -1,4 +1,5 @@ import scrape from './embeds/scraper.js' +import { undefinedToNull } from '../helpers' export default { Query: { @@ -6,4 +7,23 @@ export default { return scrape(url) }, }, + Embed: { + ...undefinedToNull([ + 'type', + 'title', + 'author', + 'publisher', + 'date', + 'description', + 'url', + 'image', + 'audio', + 'video', + 'lang', + 'html', + ]), + sources: async (parent, params, context, resolveInfo) => { + return typeof parent.sources === 'undefined' ? [] : parent.sources + }, + }, } diff --git a/backend/src/schema/resolvers/embeds/scraper.js b/backend/src/schema/resolvers/embeds/scraper.js index 7ec92bd05..607f7aeb9 100644 --- a/backend/src/schema/resolvers/embeds/scraper.js +++ b/backend/src/schema/resolvers/embeds/scraper.js @@ -95,23 +95,8 @@ export default async function scrape(url) { throw new ApolloError('Not found', 'NOT_FOUND') } - const defaults = { - type: 'link', - title: null, - author: null, - publisher: null, - date: null, - description: null, - url: null, - image: null, - audio: null, - video: null, - lang: null, - html: null, - } - return { - ...defaults, + type: 'link', ...output, } } diff --git a/backend/src/schema/resolvers/users.js b/backend/src/schema/resolvers/users.js index 820688a1a..610f84ae1 100644 --- a/backend/src/schema/resolvers/users.js +++ b/backend/src/schema/resolvers/users.js @@ -2,6 +2,7 @@ import { neo4jgraphql } from 'neo4j-graphql-js' import fileUpload from './fileUpload' import { neode } from '../../bootstrap/neo4j' import { UserInputError } from 'apollo-server' +import { undefinedToNull } from '../helpers' const instance = neode() @@ -36,16 +37,6 @@ const count = obj => { return resolvers } -const undefinedToNull = list => { - const resolvers = {} - list.forEach(key => { - resolvers[key] = async (parent, params, context, resolveInfo) => { - return typeof parent[key] === 'undefined' ? null : parent[key] - } - }) - return resolvers -} - export const hasMany = obj => { const resolvers = {} for (const [key, connection] of Object.entries(obj)) {