copySchemaFiles.mjs (1529B)
1 /** 2 * @license 3 * Copyright 2022 Google Inc. 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 import fs from 'fs/promises'; 8 import path from 'path'; 9 import url from 'url'; 10 11 const __dirname = url.fileURLToPath(new URL('.', import.meta.url)); 12 13 /** 14 * 15 * @param {String} directory 16 * @param {String[]} files 17 */ 18 async function findSchemaFiles(directory, files = []) { 19 const items = await fs.readdir(directory); 20 const promises = []; 21 // Match any listing that has no *.* format 22 // Ignore files folder 23 const regEx = /^.*\.[^\s]*$/; 24 25 items.forEach(item => { 26 if (!item.match(regEx)) { 27 promises.push(findSchemaFiles(`${directory}/${item}`, files)); 28 } else if (item.endsWith('.json') || directory.includes('files')) { 29 files.push(`${directory}/${item}`); 30 } 31 }); 32 33 await Promise.all(promises); 34 35 return files; 36 } 37 38 async function copySchemaFiles() { 39 const srcDir = path.join(__dirname, '..', 'src'); 40 const outputDir = path.join(__dirname, '..', 'lib'); 41 const files = await findSchemaFiles(srcDir); 42 43 const moves = files.map(file => { 44 const to = file.replace(srcDir, outputDir); 45 46 return {from: file, to}; 47 }); 48 49 // Because fs.cp is Experimental (recursive support) 50 // We need to create directories first and copy the files 51 await Promise.all( 52 moves.map(({to}) => { 53 const dir = path.dirname(to); 54 return fs.mkdir(dir, {recursive: true}); 55 }), 56 ); 57 await Promise.all( 58 moves.map(({from, to}) => { 59 return fs.copyFile(from, to); 60 }), 61 ); 62 } 63 64 copySchemaFiles();