_(fs.readdirSync(baseDir, {withFileTypes: true})) .filter(dirent => dirent.isDirectory()) .map(dirent => dirent.name) .concat('.') .map(directory => path.resolve(baseDir, directory, '.platform.app.yaml')) .filter(file => fs.existsSync(file)) .map(file => ({data: yamlPlatform.load(fs.readFileSync(file)), file})) .map(data => ({name: data.data.name, file: data.file, dir: path.dirname(data.file)})) .value()
async function nextDir2(dir){ for(let file of await fsPromises.readdir(dir, {withFileTypes: true})){ if(file.isDirectory()){ await nextDir2(path.join(dir, file.name)) }else if(file.isFile()){ zip.addFile(path.join(dir, file.name), path.relative(startDir, path.join(dir, file.name))) } } }
async function metadata(gasket, data) { const modules = fs.readdirSync(packagesDir, { withFileTypes: true }) .filter(dirent => dirent.isDirectory() && !dirent.name.startsWith('gasket-plugin-') && !dirent.name.startsWith('gasket-preset-') ) .map(dirent => path.join(packagesDir, dirent.name)); return { ...data, modules }; }
let nextDir = async (pth) => { const newPath = pth.replace(basePath, nextPath) await fsPromises.mkdir(newPath) for(let file of await fsPromises.readdir(pth, {withFileTypes: true})){ const filePath = path.join(pth, file.name) const newFilePath = path.join(newPath, file.name) if(file.isFile()){ await fsPromises.copyFile(filePath, newFilePath) }else if(file.isDirectory()){ await nextDir(filePath) } } }
/** * get files in a dir recursively * https://stackoverflow.com/questions/5827612/node-js-fs-readdir-recursive-directory-search * @param {string} dir dir path * @return {Promise} files */ const getFilesAndDirs = async (dir) => { const dirents = await readdir(dir, { withFileTypes: true }); return dirents.reduce((memo, dirent) => { if (dirent.isDirectory()) { memo.directories.push(dirent.name); } else { memo.files.push(dirent.name); } return memo; }, { files: [], directories: [] }); }
export function lastAccess(filePath, options: AnalySisOption): [number, string] { let lastAtime = 0; let lastFile = ''; function loopfile(rootPath) { const dirs = fs.readdirSync(rootPath, { withFileTypes: true }); dirs.forEach(item => { const curPath = path.join(rootPath, item.name); const stat = fs.statSync(curPath); // 如果是一些默认缓存文件或者扫描预读文件,则跳过 if (multimatch([item.name], options.ignore).length > 0) { return; } if (item.isDirectory()) { loopfile(curPath); } else { if (+stat.atime > lastAtime) { lastAtime = +stat.atime; lastFile = item.name; } } }) } loopfile(filePath); return [lastAtime, lastFile]; }
/** * Finds all the packages and fixes them up * * @returns {Promise} promise */ async function main() { const packagesDir = path.join(projectRoot, 'packages'); const paths = fs.readdirSync(packagesDir, { withFileTypes: true }) .filter(dirent => dirent.isDirectory() && dirent.name.startsWith('gasket')) .map(dirent => path.join(packagesDir, dirent.name, 'package.json')); paths.push(path.join(projectRoot, 'package.json')); await Promise.all(paths.map(pkgPath => fixupPackage(pkgPath))); console.log('Finished.'); }
fs.readdirSync(MODULES_DIRNAME, {withFileTypes: true}) .forEach(e => { if(!e.isDirectory())return const MODULE_DIRNAME = path.join(MODULES_DIRNAME, e.name) if(!fs.existsSync(path.join(MODULE_DIRNAME, "package.json")))return if(e.name === "discord_spellcheck")return console.log(`Installing modules in ${e.name}.`) spawnNpmInstallProcess(MODULE_DIRNAME) })
/* @method GET @path '/stats' @access Authorized @desc Get stats of the blog. */ router.get('/stats', jwtMiddleware, async (req, res) => { let hexoRootDir = req.app.get('config').hexo_dir; try { // get # of posts and pages let posts = await fs.promises.readdir(path.resolve(hexoRootDir, 'source', '_posts')); posts = posts.filter(post => path.extname(post) === '.md' && !post.startsWith('.')); let pages = await fs.promises.readdir(path.resolve(hexoRootDir, 'source'), { withFileTypes: true }); pages = pages.filter(file => file.isDirectory() && !file.name.startsWith('.') && file.name !== '_posts' && file.name !== '_drafts'); // Get hexo config let configYAML = req.app.get('config').yaml; return res.json({ posts: posts.length, pages: pages.length, post_asset_folder: configYAML.post_asset_folder, deploy: req.app.get('config').deploy.type, theme: configYAML.theme }); } catch (e) { console.error(e); return res.status(500).json({'code': Status.HEXO_FAILED_TO_GET_STATS}); } });
const getAllBuildFiles = function (dirPath, arrayOfFiles) { const files = fs.readdirSync(dirPath, { withFileTypes: true }) .filter(it => !it.name.startsWith('.') && !it.name.startsWith('node_modules')) arrayOfFiles = arrayOfFiles || [] files.forEach((dirent) => { const resolvedFile = resolve(dirPath, dirent.name); if (dirent.isDirectory()) { arrayOfFiles = getAllBuildFiles(resolvedFile, arrayOfFiles) } else { arrayOfFiles.push(resolvedFile) } }) return arrayOfFiles }
packageDirs .filter(dirent => dirent.isDirectory() && dirent.name.startsWith('gasket-plugin-')) .map(dirent => path.join(packagesDir, dirent.name))
packageDirs .filter(dirent => dirent.isDirectory() && dirent.name.startsWith('gasket-preset-')) .map(dirent => path.join(packagesDir, dirent.name))