@polymer/gen-typescript-declarations
Version:
Generate TypeScript type declarations for Polymer components.
63 lines (57 loc) • 1.91 kB
text/typescript
/**
* @license
* Copyright (c) 2018 The Polymer Project Authors. All rights reserved. This
* code may only be used under the BSD style license found at
* http://polymer.github.io/LICENSE.txt The complete set of authors may be
* found at http://polymer.github.io/AUTHORS.txt The complete set of
* contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code
* distributed by Google as part of the polymer project is also subject to an
* additional IP rights grant found at http://polymer.github.io/PATENTS.txt
*/
import * as ts from 'typescript';
/**
* The result of calling verifyTypings.
*/
export interface VerifyTypingsResult {
success: boolean;
errorLog: string;
}
const compilerOptions = {
target: ts.ScriptTarget.ES2015,
module: ts.ModuleKind.ES2015,
moduleResolution: ts.ModuleResolutionKind.NodeJs,
strict: true,
noUnusedLocals: true,
noUnusedParameters: true,
declaration: true,
lib: [
'lib.dom.d.ts',
'lib.esnext.d.ts',
],
};
const diagnosticsHost = {
getNewLine: () => '\n',
getCurrentDirectory: () => process.cwd(),
getCanonicalFileName: (fileName: string) => fileName,
};
/**
* Compile the given declaration file paths with TypeScript and return whether
* compilation succeeded or failed, and a "pretty" formatted error log string.
*
* Uses a TypeScript compiler configuration suitable for web development, and
* strict type checking.
*/
export function verifyTypings(filePaths: string[]): VerifyTypingsResult {
const program = ts.createProgram(filePaths, compilerOptions);
const emitResult = program.emit();
const diagnostics =
ts.getPreEmitDiagnostics(program).concat(emitResult.diagnostics);
if (diagnostics.length > 0) {
return {
success: false,
errorLog:
ts.formatDiagnosticsWithColorAndContext(diagnostics, diagnosticsHost)
};
}
return {success: true, errorLog: ''};
}