async function fetchSchemasFromDir()

in src/schema/firefox-schemas-import.js [730:772]


async function fetchSchemasFromDir({ inputPath, outputPath }) {
  const toolkitSchemasBaseDir = path.join(
    inputPath,
    'toolkit',
    'components',
    'extensions',
    'schemas'
  );
  const browserSchemasBaseDir = path.join(
    inputPath,
    'browser',
    'components',
    'extensions',
    'schemas'
  );

  const promiseLoadSchemaFrom = (baseDir) =>
    fs.promises
      .readdir(baseDir, { encoding: 'utf-8' })
      .then((files) =>
        files
          .filter((fp) => fp.endsWith('.json'))
          .map((fp) => path.join(baseDir, fp))
      );

  return Promise.all([
    promiseLoadSchemaFrom(toolkitSchemasBaseDir),
    promiseLoadSchemaFrom(browserSchemasBaseDir),
  ]).then((results) => {
    const allFiles = results.flat();
    const writeStreamsPromises = allFiles.map((filePath) => {
      const outFilePath = path.join(outputPath, path.basename(filePath));
      const destFileStream = fs.createWriteStream(outFilePath);
      const readStream = fs.createReadStream(filePath);
      readStream.pipe(destFileStream);
      // Ensure we're closing all the created write streams before resolving.
      return new Promise((resolve) => {
        destFileStream.on('close', resolve);
      });
    });
    return Promise.all(writeStreamsPromises);
  });
}