UNPKG

gatsby-source-wordpress

Version:

Source data from WordPress in an efficient and scalable way.

232 lines (230 loc) • 11.2 kB
"use strict"; exports.__esModule = true; exports.getFieldTransformers = void 0; var _helpers = require("../helpers"); var _transformUnion = require("./transform-union"); var _transformObject = require("./transform-object"); var _fetchNodes = require("../../source-nodes/fetch-nodes/fetch-nodes"); var _store = require("../../../store"); var _isExcluded = require("../../ingest-remote-schema/is-excluded"); var _getGatsbyApi = require("../../../utils/get-gatsby-api"); const getFieldTransformers = () => { const pluginOptions = (0, _getGatsbyApi.getPluginOptions)(); const prefix = pluginOptions.schema.typePrefix; return [{ description: `NON_NULL Scalar`, test: field => field.type.kind === `NON_NULL` && field.type.ofType.kind === `SCALAR`, transform: ({ field }) => { if ((0, _helpers.typeIsABuiltInScalar)(field.type)) { return `${(0, _helpers.findNamedTypeName)(field.type.ofType)}!`; } else { return `JSON!`; } } }, { description: `NON_NULL list type`, test: field => { var _field$type$ofType, _field$type$ofType$of; return field.type.kind === `NON_NULL` && field.type.ofType.kind === `LIST` && (field.type.ofType.name || ((_field$type$ofType = field.type.ofType) === null || _field$type$ofType === void 0 ? void 0 : (_field$type$ofType$of = _field$type$ofType.ofType) === null || _field$type$ofType$of === void 0 ? void 0 : _field$type$ofType$of.name)); }, transform: ({ field }) => { const typeName = (0, _helpers.findNamedTypeName)(field.type); const normalizedTypeName = (0, _helpers.typeIsABuiltInScalar)(field.type) ? typeName : (0, _helpers.buildTypeName)(typeName, prefix); return `[${normalizedTypeName}]!`; } }, { description: `Lists of Gatsby node interfaces`, test: field => { var _getStore$getState$re, _getStore$getState$re2, _field$type$ofType2; const implementsNodeInterface = (_getStore$getState$re = (0, _store.getStore)().getState().remoteSchema.typeMap.get((0, _helpers.findNamedTypeName)(field.type))) === null || _getStore$getState$re === void 0 ? void 0 : (_getStore$getState$re2 = _getStore$getState$re.interfaces) === null || _getStore$getState$re2 === void 0 ? void 0 : _getStore$getState$re2.some(i => i.name === `Node`); const isAListOfGatsbyNodeInterfaces = (field.type.kind === `LIST` || ((_field$type$ofType2 = field.type.ofType) === null || _field$type$ofType2 === void 0 ? void 0 : _field$type$ofType2.kind) === `LIST`) && implementsNodeInterface; return isAListOfGatsbyNodeInterfaces; }, transform: args => (0, _transformObject.transformListOfGatsbyNodes)({ ...args, pluginOptions }) }, { description: `NON_NULL lists of NON_NULL types`, test: field => { var _field$type$ofType3, _field$type$ofType3$o; return field.type.kind === `NON_NULL` && field.type.ofType.kind === `LIST` && ((_field$type$ofType3 = field.type.ofType) === null || _field$type$ofType3 === void 0 ? void 0 : (_field$type$ofType3$o = _field$type$ofType3.ofType) === null || _field$type$ofType3$o === void 0 ? void 0 : _field$type$ofType3$o.kind) === `NON_NULL`; }, transform: ({ field, fieldName }) => { const originalTypeName = (0, _helpers.findNamedTypeName)(field.type); const typeKind = (0, _helpers.findTypeKind)(field.type); const normalizedTypeName = typeKind === `SCALAR` && (0, _helpers.typeIsABuiltInScalar)(field.type) ? originalTypeName : (0, _helpers.buildTypeName)(originalTypeName, prefix); return { type: `[${normalizedTypeName}!]!`, resolve: source => { var _field$type; const resolvedField = source[fieldName]; if (typeof resolvedField !== `undefined`) { return resolvedField !== null && resolvedField !== void 0 ? resolvedField : []; } const autoAliasedFieldPropertyName = `${fieldName}__typename_${field === null || field === void 0 ? void 0 : (_field$type = field.type) === null || _field$type === void 0 ? void 0 : _field$type.name}`; const aliasedField = source[autoAliasedFieldPropertyName]; return aliasedField !== null && aliasedField !== void 0 ? aliasedField : []; } }; } }, { description: `Lists of NON_NULL builtin types`, test: field => { var _field$type$ofType$na, _field$type$ofType4, _field$type$ofType4$o; return field.type.kind === `LIST` && field.type.ofType.kind === `NON_NULL` && ((_field$type$ofType$na = field.type.ofType.name) !== null && _field$type$ofType$na !== void 0 ? _field$type$ofType$na : (_field$type$ofType4 = field.type.ofType) === null || _field$type$ofType4 === void 0 ? void 0 : (_field$type$ofType4$o = _field$type$ofType4.ofType) === null || _field$type$ofType4$o === void 0 ? void 0 : _field$type$ofType4$o.name) && (0, _helpers.typeIsABuiltInScalar)(field.type); }, transform: ({ field }) => `[${(0, _helpers.findNamedTypeName)(field.type)}!]` }, { description: `Lists of NON_NULL types`, test: field => { var _field$type$ofType$na2, _field$type$ofType5, _field$type$ofType5$o; return field.type.kind === `LIST` && field.type.ofType.kind === `NON_NULL` && ((_field$type$ofType$na2 = field.type.ofType.name) !== null && _field$type$ofType$na2 !== void 0 ? _field$type$ofType$na2 : (_field$type$ofType5 = field.type.ofType) === null || _field$type$ofType5 === void 0 ? void 0 : (_field$type$ofType5$o = _field$type$ofType5.ofType) === null || _field$type$ofType5$o === void 0 ? void 0 : _field$type$ofType5$o.name); }, transform: ({ field }) => `[${(0, _helpers.buildTypeName)((0, _helpers.findNamedTypeName)(field.type), prefix)}!]` }, { description: `ENUM type`, test: field => field.type.kind === `ENUM`, transform: ({ field }) => (0, _helpers.buildTypeName)(field.type.name, prefix) }, { description: `Scalar type`, test: field => field.type.kind === `SCALAR`, transform: ({ field }) => { if ((0, _helpers.typeIsABuiltInScalar)(field.type)) { return field.type.name; } else { // custom scalars are typed as JSON // @todo if frequently requested, // make this hookable so a plugin could register a custom scalar return `JSON`; } } }, { description: `Gatsby Node Objects or Gatsby Node Interfaces where all possible types are Gatsby Nodes`, test: field => { var _getStore$getState$re3, _getStore$getState$re4; const gatsbyNodeTypes = (0, _fetchNodes.getGatsbyNodeTypeNames)(); const pluginOptions = (0, _getGatsbyApi.getPluginOptions)(); const isAnInterfaceTypeOfGatsbyNodes = // if this is an interface field.type.kind === `INTERFACE` && ( // and every possible type is a future gatsby node (_getStore$getState$re3 = (0, _store.getStore)().getState() // get the full type for this interface .remoteSchema.typeMap.get((0, _helpers.findNamedTypeName)(field.type)) // filter out any excluded types .possibleTypes) === null || _getStore$getState$re3 === void 0 ? void 0 : (_getStore$getState$re4 = _getStore$getState$re3.filter(possibleType => !(0, _isExcluded.typeIsExcluded)({ pluginOptions, typeName: possibleType.name })) // if every remaining type is a Gatsby node type // then use this field transformer ) === null || _getStore$getState$re4 === void 0 ? void 0 : _getStore$getState$re4.every(possibleType => gatsbyNodeTypes.includes(possibleType.name))); return gatsbyNodeTypes.includes(field.type.name) && field.type.kind === `OBJECT` || isAnInterfaceTypeOfGatsbyNodes; }, transform: args => (0, _transformObject.transformGatsbyNodeObject)({ ...args, pluginOptions }) }, { description: `Lists of Gatsby Node Object types`, test: field => { var _typeMap$get, _typeMap$get$possible; const gatsbyNodeTypes = (0, _fetchNodes.getGatsbyNodeTypeNames)(); const { remoteSchema: { typeMap } } = (0, _store.getStore)().getState(); return ( // this is a list of Gatsby nodes field.type.kind === `LIST` && field.type.ofType.kind === `OBJECT` && gatsbyNodeTypes.includes(field.type.ofType.name) || // or it's a list of an interface type which Gatsby nodes implement field.type.kind === `LIST` && field.type.ofType.kind === `INTERFACE` && ((_typeMap$get = typeMap.get(field.type.ofType.name)) === null || _typeMap$get === void 0 ? void 0 : (_typeMap$get$possible = _typeMap$get.possibleTypes) === null || _typeMap$get$possible === void 0 ? void 0 : _typeMap$get$possible.find(possibleType => gatsbyNodeTypes.includes(possibleType.name))) ); }, transform: args => (0, _transformObject.transformListOfGatsbyNodes)({ ...args, pluginOptions }) }, { description: `Non-Gatsby Node Objects`, test: field => field.type.kind === `OBJECT`, transform: ({ field }) => (0, _helpers.buildTypeName)(field.type.name, prefix) }, { description: `Lists of Non Gatsby Node Objects`, test: field => field.type.kind === `LIST` && (field.type.ofType.kind === `OBJECT` || field.type.ofType.kind === `ENUM`), transform: ({ field }) => `[${(0, _helpers.buildTypeName)(field.type.ofType.name, prefix)}]` }, { description: `Lists of Union types`, test: field => field.type.kind === `LIST` && field.type.ofType.kind === `UNION`, transform: args => (0, _transformUnion.transformListOfUnions)({ ...args, pluginOptions }) }, { description: `Lists of Scalar types`, test: field => field.type.kind === `LIST` && field.type.ofType.kind === `SCALAR`, transform: ({ field }) => { if ((0, _helpers.typeIsABuiltInScalar)(field.type)) { return `[${field.type.ofType.name}]`; } else { return `[JSON]`; } } }, { description: `Lists of Interface types`, test: field => field.type.kind === `LIST` && field.type.ofType.kind === `INTERFACE`, transform: ({ field }) => `[${(0, _helpers.buildTypeName)((0, _helpers.findNamedTypeName)(field.type), prefix)}]` }, { description: `Union type`, test: field => field.type.kind === `UNION`, transform: args => (0, _transformUnion.transformUnion)({ ...args, pluginOptions }) }, { description: `Interface type`, test: field => field.type.kind === `INTERFACE`, transform: ({ field }) => (0, _helpers.buildTypeName)(field.type.name, prefix) }, { description: `Lists of NON_NULL types`, test: field => (0, _helpers.findTypeKind)(field.type) !== `LIST` && field.type.kind === `NON_NULL`, transform: ({ field }) => `${(0, _helpers.buildTypeName)((0, _helpers.findNamedTypeName)(field.type), prefix)}!` } // for finding unhandled types // { // description: `Unhandled type`, // test: () => true, // transform: ({ field }) => dd(field), // }, ]; }; exports.getFieldTransformers = getFieldTransformers; //# sourceMappingURL=field-transformers.js.map