| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- const Path = require('path')
- const fs = require('fs')
- const { callbackifyMultiResult } = require('@overleaf/promise-utils')
- async function walkFolder(compileDir, d, files, allEntries) {
- const dirents = await fs.promises.readdir(Path.join(compileDir, d), {
- withFileTypes: true,
- })
- for (const dirent of dirents) {
- const p = Path.join(d, dirent.name)
- if (dirent.isDirectory()) {
- await walkFolder(compileDir, p, files, allEntries)
- allEntries.push(p + '/')
- } else if (dirent.isFile()) {
- files.push(p)
- allEntries.push(p)
- } else {
- allEntries.push(p)
- }
- }
- }
- async function findOutputFiles(resources, directory) {
- const files = []
- const allEntries = []
- await walkFolder(directory, '', files, allEntries)
- const incomingResources = new Set(resources.map(resource => resource.path))
- const outputFiles = []
- for (const path of files) {
- if (incomingResources.has(path)) continue
- if (path === '.project-sync-state') continue
- outputFiles.push({
- path,
- type: Path.extname(path).replace(/^\./, '') || undefined,
- })
- }
- return {
- outputFiles,
- allEntries,
- }
- }
- module.exports = {
- findOutputFiles: callbackifyMultiResult(findOutputFiles, [
- 'outputFiles',
- 'allEntries',
- ]),
- promises: {
- findOutputFiles,
- },
- }
|