1/* 2 * Copyright (c) 2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16const path = require('path'); 17const fs = require('fs'); 18 19 20function listApiDeclarationFiles(dir) { 21 const allFiles = []; 22 const apiSubDirs = ['api', 'component']; 23 apiSubDirs.forEach((subdir) => { 24 internalListFiles(path.resolve(dir, subdir), 25 (filePath) => path.basename(filePath).endsWith('.d.ts'), allFiles); 26 }); 27 return allFiles; 28} 29 30function internalListFiles(dir, filter, output) { 31 if (!fs.existsSync(dir)) { 32 return; 33 } 34 const files = fs.readdirSync(dir); 35 files.forEach((element) => { 36 const filePath = path.join(dir, element); 37 const status = fs.statSync(filePath); 38 if (status.isDirectory()) { 39 internalListFiles(filePath, filter, output); 40 } else if (filter(filePath)) { 41 output.push(filePath); 42 } 43 }); 44} 45 46function isInDirectory(parentDir, subPath) { 47 const relative = path.relative(parentDir, subPath); 48 return relative === '' || !relative.startsWith('..'); 49} 50 51exports.listApiDeclarationFiles = listApiDeclarationFiles; 52exports.isInDirectory = isInDirectory; 53