MCPcopy Create free account
hub / github.com/decaporg/decap-cms / fetchFiles

Function fetchFiles

packages/decap-cms-lib-util/src/implementation.ts:306–337  ·  view source on GitHub ↗
(
  files: ImplementationFile[],
  readFile: ReadFile,
  readFileMetadata: ReadFileMetadata,
  apiName: string,
)

Source from the content-addressed store, hash-verified

304type CustomFetchFunc = (files: ImplementationFile[]) => Promise<ImplementationEntry[]>;
305
306async function fetchFiles(
307 files: ImplementationFile[],
308 readFile: ReadFile,
309 readFileMetadata: ReadFileMetadata,
310 apiName: string,
311) {
312 const sem = semaphore(MAX_CONCURRENT_DOWNLOADS);
313 const promises = [] as Promise<ImplementationEntry | { error: boolean }>[];
314 files.forEach(file => {
315 promises.push(
316 new Promise(resolve =>
317 sem.take(async () => {
318 try {
319 const [data, fileMetadata] = await Promise.all([
320 readFile(file.path, file.id, { parseText: true }),
321 readFileMetadata(file.path, file.id),
322 ]);
323 resolve({ file: { ...file, ...fileMetadata }, data: data as string });
324 sem.leave();
325 } catch (error) {
326 sem.leave();
327 console.error(`failed to load file from ${apiName}: ${file.path}`);
328 resolve({ error: true });
329 }
330 }),
331 ),
332 );
333 });
334 return Promise.all(promises).then(loadedEntries =>
335 loadedEntries.filter(loadedEntry => !(loadedEntry as { error: boolean }).error),
336 ) as Promise<ImplementationEntry[]>;
337}
338
339export async function entriesByFolder(
340 listFiles: () => Promise<ImplementationFile[]>,

Callers 3

entriesByFolderFunction · 0.85
entriesByFilesFunction · 0.85
allEntriesByFolderFunction · 0.85

Calls 3

readFileFunction · 0.85
readFileMetadataFunction · 0.85
filterMethod · 0.80

Tested by

no test coverage detected