blob: e3a53c929534d44e14aa02fe052ca1f2baef36a9 [file] [log] [blame]
/********************************************************************************
* Copyright (c) 2020 Contributors to the Eclipse Foundation
*
* See the NOTICE file(s) distributed with this work for additional
* information regarding copyright ownership.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
********************************************************************************/
"use strict";
const klaw = require("klaw");
const fs = require("fs");
const path = require("path");
const SEARCH_PATH = path.join(__dirname, "..");
const SEARCH_DIRECTORIES = [".storybook", "scripts", "src"];
const HEADER_TS = fs.readFileSync(path.join(__dirname, "legal-header-ts.txt")).toString();
const HEADER_HTML = fs.readFileSync(path.join(__dirname, "legal-header-html.txt")).toString();
async function getAllFiles(directory: string, depthLimit?: number): Promise<string[]> {
return new Promise<string[]>((resolve, reject) => {
const result: string[] = [];
klaw(directory, {depthLimit})
.on("data", (item) => item.stats.isDirectory() ? null : result.push(item.path))
.on("error", (err) => reject(err))
.on("end", () => resolve(result));
});
}
async function getAllSearchFiles(searchPath: string, searchDirectories: string[]) {
let result: string[] = [];
for (const dir of searchDirectories) {
result = [
...result,
...await getAllFiles(path.join(searchPath, dir))
];
}
return result;
}
function isFileHeaderCorrect(filePath: string, header: string) {
const file = fs.readFileSync(filePath).toString();
return file.trim().startsWith(header);
}
async function main() {
const allFiles = await getAllSearchFiles(SEARCH_PATH, SEARCH_DIRECTORIES);
const htmlFiles = allFiles
.filter((file) => file.endsWith(".html"))
.filter((file) => !isFileHeaderCorrect(file, HEADER_HTML.trim()));
const tsFiles = allFiles
.filter((file) => file.endsWith(".ts"))
.filter((file) => !isFileHeaderCorrect(file, HEADER_TS.trim()));
const scssFiles = allFiles
.filter((file) => file.endsWith(".scss"))
.filter((file) => !isFileHeaderCorrect(file, HEADER_TS.trim()));
const cssFiles = allFiles
.filter((file) => file.endsWith(".css"))
.filter((file) => !isFileHeaderCorrect(file, HEADER_TS.trim()));
const allIncorrectFiles = [
...tsFiles,
...htmlFiles,
...cssFiles,
...scssFiles
];
if (allIncorrectFiles.length > 0) {
console.error("Legal header is missing at:");
allIncorrectFiles.forEach((file) => console.error(" " + file));
console.log();
throw new Error("Legal header is missing in " + allIncorrectFiles.length + " files");
}
}
main()
.catch((err) => {
console.error(err);
process.exit(2);
});