UNPKG

gridsome

Version:

A JAMstack framework for building blazing fast websites with Vue.js

66 lines (53 loc) 1.63 kB
const { omit, isDate } = require('lodash') const { isResolvablePath } = require('../utils') const { NODE_FIELDS } = require('../utils/constants') const { resolvePath } = require('./utils') module.exports = function processNodeFields (node, collection) { const fields = omit(node, NODE_FIELDS) const results = processFields(fields, { origin: node.internal.origin, context: collection._assetsContext, resolveAbsolute: collection._resolveAbsolutePaths }) return { id: node.id, $uid: node.$uid, internal: node.internal, ...results } } function processFields (fields = {}, options = {}) { const { origin = '', context, resolveAbsolute } = options const processField = field => { if (field === undefined) return field if (field === null) return field switch (typeof field) { case 'object': if (isDate(field)) { return field } return processFields(field) case 'string': return isResolvablePath(field) ? resolvePath(origin, field, { context, resolveAbsolute }) : field } return field } const processFields = fields => { const res = {} for (const key in fields) { if (key.startsWith('__')) { // don't touch keys which starts with __ because they are // meant for internal use and will not be part of the schema res[key] = fields[key] continue } res[key] = Array.isArray(fields[key]) ? fields[key].map(value => processField(value)) : processField(fields[key]) } return res } return processFields(fields) }