46 lines
1.2 KiB
JavaScript
Raw Normal View History

2018-03-26 13:01:24 +01:00
const { GraphQLString } = require('graphql');
const fs = require('fs-extra');
const path = require('path');
module.exports = ({ type, getNodeAndSavePathDependency, pathPrefix = '' }) => {
if (type.name !== 'File') {
return {};
}
return {
publicURL: {
type: GraphQLString,
args: {},
description: 'Copy file to static directory and return public url to it',
resolve: (file, fieldArgs, context) => {
const details = getNodeAndSavePathDependency(file.id, context.path);
const fileName = `${file.name}-${file.internal.contentDigest}${
details.ext
}`;
const publicPath = path.join(
process.cwd(),
'public',
'static',
fileName
);
if (!fs.existsSync(publicPath)) {
fs.copy(details.absolutePath, publicPath, err => {
if (err) {
console.error(
`error copying file from ${
details.absolutePath
} to ${publicPath}`,
err
);
}
});
}
return `${pathPrefix}/static/${fileName}`;
}
}
};
};