/** * @license * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import * as path from "path"; import * as fs from "fs"; export type FilePath = string & {__filePath: undefined}; export type TypedFilePath = FilePath & { __type?: T, __typedFilePath: undefined }; export enum FileType{ HtmlSrc, HtmlTarget, JsSrc, JsTarget } export type HtmlSrcFilePath = TypedFilePath; export type HtmlTargetFilePath = TypedFilePath; export type JsSrcFilePath = TypedFilePath; export type JsTargetFilePath = TypedFilePath; export class FileUtils { public static ensureDirExistsForFile(filePath: string) { const dirName = path.dirname(filePath); if (!fs.existsSync(dirName)) { fs.mkdirSync(dirName, {recursive: true, mode: 0o744}); } } public static writeContent(file: string, content: string) { if(fs.existsSync(file) && fs.lstatSync(file).isSymbolicLink()) { throw new Error(`Output file '${file}' is a symbolic link. Inplace update for links are not supported.`); } FileUtils.ensureDirExistsForFile(file); fs.writeFileSync(file, content); } public static copyFile(src: string, dst: string) { FileUtils.ensureDirExistsForFile(dst); fs.copyFileSync(src, dst); } }