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);
});
}