gatsby-source-filesystem
Version:
Gatsby source plugin for building websites from local data. Markdown, JSON, images, YAML, CSV, and dozens of other data types supported.
48 lines (47 loc) • 1.31 kB
JavaScript
;
const {
GraphQLString
} = require(`gatsby/graphql`);
const fs = require(`fs-extra`);
const path = require(`path`);
const {
prefixId,
CODES
} = require(`./error-utils`);
module.exports = ({
type,
getNodeAndSavePathDependency,
pathPrefix = ``,
reporter
}) => {
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.internal.contentDigest}/${details.base}`;
const publicPath = path.join(process.cwd(), `public`, `static`, fileName);
if (!fs.existsSync(publicPath)) {
fs.copySync(details.absolutePath, publicPath, {
dereference: true
}, err => {
if (err) {
reporter.panic({
id: prefixId(CODES.MissingResource),
context: {
sourceMessage: `error copying file from ${details.absolutePath} to ${publicPath}`
}
}, err);
}
});
}
return `${pathPrefix}/static/${fileName}`;
}
}
};
};