gatsby-source-wordpress
Version:
Source data from WordPress in an efficient and scalable way.
232 lines (230 loc) • 11.2 kB
JavaScript
"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