diff --git a/packages/gatsby-source-filesystem/src/__tests__/file-finder.js b/packages/gatsby-source-filesystem/src/__tests__/find-files.js similarity index 77% rename from packages/gatsby-source-filesystem/src/__tests__/file-finder.js rename to packages/gatsby-source-filesystem/src/__tests__/find-files.js index d9891a993e427..0fb29521c5fd1 100644 --- a/packages/gatsby-source-filesystem/src/__tests__/file-finder.js +++ b/packages/gatsby-source-filesystem/src/__tests__/find-files.js @@ -1,10 +1,18 @@ -const fileFinder = require(`../file-finder`) +const findFiles = require(`../find-files`) const path = require(`path`) -describe(`file-finder`, () => { +describe(`findOnce`, () => { it(`resolves an array of file paths`, async done => { expect.assertions(3) - const queue = await fileFinder(`${__dirname}/fixtures/test-fs`) + const queue = await findFiles(`${__dirname}/fixtures/test-fs`, { + watch: false, + ignored: [ + `.toBeIgnored.md`, + `**/.DS_Store`, + `**/.placeholder.md`, + `**/notInTheFixture.bar`, + ], + }) const expectedQueue = [ path.join(__dirname, `fixtures`, `test-fs`, `index.md`), path.join(__dirname, `fixtures`, `test-fs`, `dirA`, `index.md`), diff --git a/packages/gatsby-source-filesystem/src/file-finder.js b/packages/gatsby-source-filesystem/src/file-finder.js deleted file mode 100644 index 6750c4882d81c..0000000000000 --- a/packages/gatsby-source-filesystem/src/file-finder.js +++ /dev/null @@ -1,34 +0,0 @@ -const readdirp = require(`readdirp`) - -const ignoredRE = /^\./ -const ignored = [`yarn.lock`, `package-lock.json`, `node_modules`, `dist`] - -function fileFinder(dir) { - return new Promise(resolve => { - let fileList = [] - const stream = readdirp({ root: dir }) - - stream.on(`data`, data => { - const { name, fullPath, stat } = data - - if ( - stat.isDirectory() || - ignoredRE.test(name) || - ignored.includes(name) - ) { - return - } - if (fullPath.includes(`node_modules`) || fullPath.includes(`build`)) { - return - } - fileList.push(fullPath) - return - }) - - stream.on(`end`, () => { - resolve(fileList) - }) - }) -} - -module.exports = fileFinder diff --git a/packages/gatsby-source-filesystem/src/file-watcher.js b/packages/gatsby-source-filesystem/src/file-watcher.js index f83e69b1277da..a6b9fed4b7fe4 100644 --- a/packages/gatsby-source-filesystem/src/file-watcher.js +++ b/packages/gatsby-source-filesystem/src/file-watcher.js @@ -1,6 +1,6 @@ const path = require(`path`) -const chokidar = require(`chokidar`) const { Machine } = require(`xstate`) +const findFiles = require(`./find-files`) const { createFileNode } = require(`./create-file-node`) /** @@ -60,7 +60,8 @@ function fileWatcher( ) }) - const watcher = chokidar.watch(pluginOptions.path, { + const watcher = findFiles(pluginOptions.path, { + watch: process.env.GATSBY_EXECUTING_COMMAND === `develop`, ignored: [ `**/*.un~`, `**/.DS_Store`, diff --git a/packages/gatsby-source-filesystem/src/find-files.js b/packages/gatsby-source-filesystem/src/find-files.js new file mode 100644 index 0000000000000..c9034741e4fd3 --- /dev/null +++ b/packages/gatsby-source-filesystem/src/find-files.js @@ -0,0 +1,31 @@ +const chokidar = require(`chokidar`) +const readdirp = require(`readdirp`) +const anymatch = require(`anymatch`) + +const findOnce = (path, options) => { + const { ignored } = options + return new Promise(resolve => { + let fileList = [] + const stream = readdirp({ root: path }) + + stream.on(`data`, data => { + if (anymatch(ignored, data.path)) return + fileList.push(data.fullPath) + return + }) + + stream.on(`end`, () => { + resolve(fileList) + }) + }) +} + +module.exports = (path, options) => { + const { watch, ignored } = options + + if (watch === true) { + return chokidar.watch(path, { ignored }) + } else { + return findOnce(path, { ignored }) + } +}