2021-10-01 09:19:36 +02:00
|
|
|
import { promises as fs, constants } from 'fs';
|
|
|
|
|
import path from 'path';
|
|
|
|
|
import yaml from 'js-yaml'
|
2022-09-13 09:03:13 +02:00
|
|
|
import { PackageItem } from '../components/Package';
|
2021-10-01 09:19:36 +02:00
|
|
|
|
|
|
|
|
const fileExist = (filePath) => fs.access(filePath, constants.F_OK).then(() => true).catch(() => false)
|
|
|
|
|
|
2022-09-13 09:03:13 +02:00
|
|
|
const fetchPackages = async (): Promise<PackageItem[]> => {
|
2021-10-01 09:19:36 +02:00
|
|
|
const docsDir = path.resolve(process.cwd(), '../packages');
|
|
|
|
|
const fileNames = await (await fs.readdir(docsDir)).map(filename => ({filename, directory: docsDir}))
|
|
|
|
|
|
|
|
|
|
const packageJsons = await Promise.all(fileNames.map( async ({filename, directory}) => {
|
|
|
|
|
const filePath = path.resolve(directory, filename)
|
|
|
|
|
const fileStat = await fs.lstat(filePath);
|
|
|
|
|
|
|
|
|
|
if(!fileStat.isDirectory()) return null;
|
|
|
|
|
|
|
|
|
|
const jsonFilePath = path.resolve(filePath, 'package.json')
|
|
|
|
|
if (await fileExist(jsonFilePath)) {
|
|
|
|
|
return JSON.parse(
|
|
|
|
|
await fs.readFile(jsonFilePath, 'utf-8')
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const ymlFilePath = path.resolve(filePath, 'pubspec.yaml')
|
|
|
|
|
if(await fileExist(ymlFilePath)) {
|
|
|
|
|
return yaml.load(
|
|
|
|
|
await fs.readFile(ymlFilePath, 'utf-8')
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return null
|
|
|
|
|
}))
|
|
|
|
|
|
|
|
|
|
return packageJsons
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
export default fetchPackages;
|