|  | /** | 
|  | * @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. | 
|  | */ | 
|  |  | 
|  | /** | 
|  | * This is a command-line tool to calculate licenses for files in npm packages. | 
|  | * The tool expected the following inputs: | 
|  | * | 
|  | * config.js - information about licenses for packages. The js file must be a module | 
|  | *   and must have array of {@link PackageInfo} as a default export. | 
|  | * | 
|  | * node-modules-files.txt - list of files (one per line) to calculate license. | 
|  | *   Each line must be a path to a file inside node_module directory | 
|  | *   (full path or path relative to current work dir) | 
|  | * | 
|  | * shared-licenses.txt - list of files (one per line) with licenses texts. Each line is a path | 
|  | *   to a file with license text. The files can be referenced by {@link SharedFileLicenseInfo} | 
|  | * | 
|  | * json-output.json - output file name. The {@link LicensesMap} defines the schema of this file. | 
|  | * | 
|  | * Note: It is expected, that config is compiled from .ts file end has default export. | 
|  | * Typescript compiler checks that .ts file matches PackageInfo interface, so no additional | 
|  | * validations are needed. | 
|  | */ | 
|  |  | 
|  | import * as path from "path"; | 
|  | import * as fs from "fs"; | 
|  | import {PackageInfo} from "./package-license-info"; | 
|  | import {fail, readMultilineParamFile} from "./utils"; | 
|  | import {LicenseMapGenerator} from "./licenses-map"; | 
|  | import {SharedLicensesProvider} from "./shared-licenses-provider"; | 
|  |  | 
|  | interface LicenseMapCommandLineArgs { | 
|  | generatorParams: LicenseMapGeneratorParameters; | 
|  | outputJsonPath: string; | 
|  | } | 
|  |  | 
|  | export interface LicenseMapGeneratorParameters { | 
|  | sharedLicensesFiles: string[]; | 
|  | nodeModulesFiles: string[]; | 
|  | packages: PackageInfo[]; | 
|  | } | 
|  |  | 
|  | function parseArguments(argv: string[]): LicenseMapCommandLineArgs { | 
|  | if(argv.length < 6) { | 
|  | fail("Invalid command line parameters\n" + | 
|  | "\tUsage:\n\tnode license-map-generator config.js node-modules-files.txt shared-licenses.txt json-output.json"); | 
|  | } | 
|  | const packages: PackageInfo[] = require(path.join(process.cwd(), argv[2])).default; | 
|  | const nodeModulesFiles = readMultilineParamFile(argv[3]); | 
|  | const sharedLicensesFiles = readMultilineParamFile(argv[4]); | 
|  |  | 
|  | return { | 
|  | generatorParams: { | 
|  | packages, | 
|  | nodeModulesFiles, | 
|  | sharedLicensesFiles, | 
|  | }, | 
|  | outputJsonPath: argv[5] | 
|  | } | 
|  | } | 
|  |  | 
|  | function main() { | 
|  | const args = parseArguments(process.argv); | 
|  | const generator = new LicenseMapGenerator(args.generatorParams.packages, new SharedLicensesProvider(args.generatorParams.sharedLicensesFiles)); | 
|  | const licenseMap = generator.generateMap(args.generatorParams.nodeModulesFiles); | 
|  | // JSON is quite small, so there are no reasons to minify it. | 
|  | // Write it as multiline file with tabs (spaces). | 
|  | fs.writeFileSync(args.outputJsonPath, JSON.stringify(licenseMap, null, 2), "utf-8"); | 
|  | } | 
|  |  | 
|  | main(); |